Appointments Reference Public

End-to-End Workflows (SOP)

End-user documentation for the ERPat Appointments module (spa / salon / clinic booking).

Guide version: r1 Module version: 1.0.0 Updated: 2026-07-22 Estimated time: 24 min 1 views
Reference

End-to-End Workflows (SOP)

This is the “how it all fits together” page. Every other page in this guide explains one screen in depth; this one chains those screens into complete, real-world Standard Operating Procedures — from a customer's first online booking all the way through the visit, payment, loyalty, and review. Follow a whole SOP top to bottom, or jump to the single step you need. Each procedure names the actor so you always know who does what.

Front desk Manager Admin Customer
ℹ️
Nothing new lives here These SOPs don't add features — they sequence the ones documented elsewhere. Wherever a step touches a screen, it links to the detailed page (Calendar, Checkout, Packages, Waitlist, Online Booking, Reports, Services, Settings) so you can drill into any single stage.

How to use these SOPs

Read a whole SOP when you're learning a routine end to end; use the quick index below to jump to the one that matches the situation in front of you. Each step is written as do-this-then-that, tagged with who performs it, and cross-links to the screen where it happens.

Pick the SOP that matches your situation

The lifecycle backbone every SOP rides on

Almost every SOP moves an appointment along the same status pipeline. Status decides the calendar color, which buttons appear on the appointment card, and what business logic fires (stock, commission, and loyalty on Completed; entitlement release and waitlist alerts on Cancelled).

Pending
Awaiting confirm
Confirmed
Email sent
Checked In
Arrived
In Progress
Underway
Completed
Settled

Two off-ramps leave the pipeline at any non-terminal stage:

Cancelled CancelledCaptures a reason, releases package sessions the booking used (unless already invoiced), and emails matching waitlist entries. Red #d9534f.
No Show No ShowCustomer didn't arrive. Sends no email; excluded from availability and workforce workload; counts toward the month's no-show metric. Grey #777777.
????
One habit that prevents most rework Record retail sales and back-bar use via Manage Items, and apply any package coverage at Checkout, before you mark the visit Completed / create the invoice. Completion captures stock, commission, and loyalty; the invoice locks coverage. Doing these first means everything lands in one clean pass.

SOP 1: New customer, online booking to review

The full customer journey when someone finds you online, books, comes in, is served, pays, earns loyalty, and is asked to review. This is the flagship end-to-end flow and it touches nearly every screen in the module.

Customer Front desk System

Stage A — Customer books online

  1. Customer opens the booking page — actor: Customer

    They open the business's public booking URL /appointments/book/{company-slug} (from your SMS, social bio, or Google profile), or click your card on the directory at /appointments/book.

  2. Select a service — actor: Customer

    Under Select a service they click a service card (which shows duration and price). Only services that are both Public and Active appear here. Picking one reveals the provider + date step.

  3. Choose provider, date, and a real time slot — actor: Customer

    They leave Provider on Any available provider (or pick one), choose a date, and click a time slot. Slots are computed live from the provider's working hours minus existing bookings and buffers, and respect minimum lead time and maximum advance. If nothing is free, jump to SOP 5 (waitlist).

  4. Enter details and confirm — actor: Customer

    They fill Name, Phone, and a valid Email (all required), optionally a note, then click Confirm Booking.

  5. System books it — actor: System

    The slot is re-checked inside a locked transaction, a customer account is auto-created if the email is new (or reused if it exists), and the appointment is written as Confirmed with source online. The customer gets a confirmation email; the assigned staff (or the company email as fallback) gets a “new appointment” notice. The customer lands on the thank-you page with a Reference code.

ℹ️
It arrives already Confirmed Every successful online booking starts Confirmed — not Pending — so there's no confirm step for staff. It's visible in the default list filter straight away. Full details on Online Booking Portal.

Stage B — Arrival, service, and items

  1. Check the customer in on arrival — actor: Front desk

    Open the booking from the calendar or list and click Check In. The chip turns Checked In.

  2. Record products used and sold — actor: Front desk

    Click Manage Items and add any Back-bar use (supplies consumed, priced 0) and/or Retail sale lines (products the customer takes home). Do this before completing so completion decrements stock and the invoice includes the retail lines.

  3. Complete the visit — actor: Front desk

    When the service ends, open the card and click Complete. Moving to Completed fires the one-time completion logic: captures commission, decrements back-bar stock (if the Warehouse module is on and a default warehouse is set), and awards loyalty points. These are latched so retries never double-count.

⚠️
Stock didn't move? If back-bar stock didn't decrement (e.g. the warehouse was briefly unavailable), a Commit Items to Stock button appears on the card as a safe retry. It only shows when a completed appointment still has uncommitted consumption lines and Warehouse is available — it's the retry path, not a normal step.

Stage C — Pay, earn loyalty, get a review request

  1. Take payment at Checkout — actor: Front desk (needs Appointment Checkout permission)

    Open the card and click Checkout. Review the Billable Items, click Create Invoice, then pick a Payment method and click Record Payment (the Amount defaults to the full balance due). The green “This invoice is fully paid.” alert confirms a zero balance. See Checkout for the full procedure.

  2. Loyalty accrues automatically — actor: System

    If the tenant set a loyalty rate above zero, points were already awarded once when you clicked Complete: points = floor(total × rate). There's no manual “award points” button. Check the running balance in Customer History.

  3. Review request goes out — actor: System

    If Enable review requests is on, an hourly job emails the customer a review link once the configured delay (default 24 h) has passed — once per appointment, latched even if the email fails.

  4. Customer leaves a review — actor: Customer

    They open the link (/appointments/review/{company-slug}/{uuid}), pick 1–5 stars, optionally comment, and submit. Only Completed visits are reviewable, and only once each. The published review feeds per-staff and per-service averages on Reports.

????
Two blockers to watch on this path Invoicing needs a customer — online bookings always have one, so this is fine here, but note it for walk-ins. And the review page only unlocks after Complete: a customer who clicks the link before staff mark the visit Completed sees a “not available” message.

SOP 2: Front-desk / phone booking

Booking a caller or a walk-in directly from the admin calendar — the fastest path when the customer is on the phone or standing at the desk. This is the internal mirror of SOP 1's Stage A.

Front desk
  1. Open the booking form — actor: Front desk (needs Create permission)

    On the Appointments page, click the desired day/time on the calendar to pre-fill the date and time, or click Add Appointment for a blank form.

  2. Pick the service — actor: Front desk

    Choose the Service (Select2, required). This sets the duration and price and triggers the live slot lookup. Only active services appear.

  3. Pick a provider — or leave it blank — actor: Front desk

    Choose a Provider, or leave it blank for any available provider — handy on the phone when the caller doesn't mind who. Each slot option then shows which provider it belongs to, and picking the time assigns them.

  4. Confirm the date and pick a real slot — actor: Front desk

    Set the Date, wait for the Time dropdown to load available slots, and pick one. The Time field is not free text — it only lists what the availability engine returns.

  5. Attach the customer — actor: Front desk

    Pick an existing Customer from the dropdown, OR type a Name plus a valid Email to auto-create an account, OR just type Name/Phone for a no-account walk-in. Optionally pick a Resource (room/chair/equipment).

  6. Set status, add notes, and save — actor: Front desk

    Leave Status as Confirmed (the default) so the customer gets a confirmation email, add customer-facing Notes and/or staff-only Internal Notes, then click Save. The row and calendar refresh. A brand-new booking also emails the assigned provider.

⚠️
Walk-in with no email = no history, no emails A new customer account is created only when a valid email is entered and no account already matches. A walk-in booked with just a name/phone stays account-less — so there's no Customer History button, and no confirmation/reminder emails can reach them. Capture an email whenever you can.
????
Two people booked the same slot? If two staff try the same provider slot at once, the loser sees “That time slot is no longer available. Please choose another.” — just reselect a time. The submit re-checks availability inside a locked transaction, so double-booking is impossible.

From here the visit runs exactly like SOP 1 Stage B & C: check in, manage items, complete, checkout. Full field-by-field detail lives on Calendar & Appointments.


SOP 3: Sell & redeem a package

Selling a prepaid bundle (a membership or a one-off package like “5 Facials”) and then drawing down its sessions across future visits. This spans the Packages catalog, the sale, and the Checkout coverage step — often over several appointments and weeks.

Front desk Manager

Stage A — Sell the package

  1. Confirm the package exists and has services — actor: Manager

    On the Packages page, the catalog package must have at least one included service (e.g. “3 × Facial”). A package with no included services cannot be sold — the sale is refused with “Add at least one included service to this package first.” If needed, edit it and add a Service + Qty row.

  2. Open the Sell modal — actor: Front desk (needs Sell permission)

    Click the shopping-cart (Sell) icon on the package row. Review the name, price, and the included-services list.

  3. Pick the customer and sell — actor: Front desk

    Choose the Customer (required) and click Sell Package. In one transaction the system creates the customer package, one entitlement per included service, and — only if the price is above 0 — an unpaid invoice for the package price. Expiry is stamped from the package's validity at the moment of sale.

  4. Collect payment for the package — actor: Front desk

    Selling a priced package raises an unpaid invoice (status not-paid, note “Package: <name>”) — it does not mark it paid. Take payment through the normal core Invoices flow.

⚠️
Validity is frozen at sale time Validity is stamped from the package's validity (days) the moment you sell. Editing the package's validity later does not extend already-sold packages. A validity of 0 means it never expires (shown as ∞).

Stage B — Redeem sessions across visits

  1. Book the covered service as normal — actor: Front desk / Customer

    Create the appointment for a service the customer has a session for (via SOP 2 or SOP 1). Make sure the customer account is attached.

  2. Open Checkout before invoicing — actor: Front desk

    On the appointment card click Checkout. The Package coverage section appears only while the appointment has a customer and no invoice yet.

  3. Apply a session to cover the service — actor: Front desk

    On the service row, open the Apply package… dropdown and pick the available entitlement (it shows the remaining count). The line switches to a blue Covered by package badge and drops off the bill; one session is claimed atomically.

  4. Invoice whatever remains — actor: Front desk

    Click Create Invoice for the remaining billable lines (retail sales, any uncovered services), then take payment as in Checkout.

????
Coverage is locked once you invoice You can only apply or remove package coverage before Create Invoice. To undo before invoicing, click the red X on the covered line — the session is released back to the customer. After the invoice exists, the covered line was already excluded and can't be reversed here.
ℹ️
Cancellation returns sessions — but only if uninvoiced If you cancel an appointment that used package sessions, those sessions are automatically returned to the customer — unless an invoice already exists, in which case the covered service was already off that invoice and isn't refunded automatically. Track remaining sessions in the Sold Packages panel's Remaining / Total column.

SOP 4: No-show handling

What to do when a customer simply doesn't turn up — and how it differs from a cancellation. Getting the status right keeps your availability, reports, and no-show metric accurate.

Front desk Manager
  1. Wait out your grace period — actor: Front desk

    Give the customer whatever grace window your business allows before marking the visit. There's no timer in the module — this is a judgement call at the desk.

  2. Open the appointment card — actor: Front desk

    Find the booking on the calendar or list and open its detail card. No Show is available from any non-terminal status (Confirmed, Checked In, In Progress).

  3. Click No Show — actor: Front desk

    The chip turns No Show (grey). The visit is now excluded from availability and from workforce workload, and it counts toward No-shows this month on Reports. No email is sent.

  4. Follow up — actor: Front desk / Manager

    Because No Show sends nothing automatically, reach out yourself: call or message the customer to rebook. If they want a future slot, book it via SOP 2. If you'd rather have them wait for a preferred time, add them to the Waitlist (see SOP 5).

  5. Spot repeat offenders in Reports — actor: Manager

    Over time, read the No Show column in the Workforce Monitor against the monthly no-show tile to see whether no-shows cluster around specific providers or times, then adjust policy (deposits, reminders) accordingly.

No Show vs. Cancel — which to use

These are not interchangeable. Pick based on what actually happened and what you want the system to do.

SituationUseWhat the system does
Customer didn't arrive and gave no notice No Show No email. Excluded from availability and workload. Counts toward the monthly no-show metric.
Customer (or you) cancelled the booking Cancelled Captures a reason, emails the customer, releases package sessions (if uninvoiced), and auto-emails matching waitlist entries.
You want package sessions returned and the waitlist alerted Cancelled Only Cancel triggers entitlement release and waitlist notification — No Show does neither.
⚠️
Don't delete to “undo” a visit Deleting an appointment soft-deletes it and its lines but performs no stock, loyalty, or entitlement handling. If you need those effects managed, use Cancel (not Delete). Also note: loyalty and committed back-bar stock from a prior Completed are intentionally not clawed back on a later cancellation — a completed-then-cancelled visit is treated as settled.

SOP 5: Full slot to waitlist to booking

The “we're fully booked” recovery path: capture the customer on a waitlist, notify them when a cancellation frees a slot, and convert them into a real booking. Instead of losing the customer, you hold their demand and re-engage automatically.

Customer Front desk System

Stage A — Get onto the waitlist

  1. Hit a full date — actor: Customer

    On the public booking page, the customer picks a service and a date that returns “No available times for this date.” A waitlist prompt appears.

  2. Join the waitlist — actor: Customer

    They click Join the waitlist and enter Name (required) and Email (required); Phone is optional here. The service and preferred date carry over automatically. They see “You're on the waitlist — we'll email you if a spot opens.” The entry is created as Waiting with source online.

  1. Open the Waitlist screen — actor: Front desk

    Go to Appointments → Waitlist and click Add to Waitlist.

  2. Capture the request — actor: Front desk

    Pick an existing Customer (or type the name), enter Email (strongly recommended — it's what makes notifications reach them) and Phone, choose the Service (required), optionally a preferred Provider (or leave Any available), and optionally a Preferred date (blank = Flexible). Save. New entries always start Waiting with source staff.

Stage B — A slot frees up and they're notified

  1. An appointment is cancelled — actor: Front desk (or Customer)

    When an appointment is cancelled, the system reads its service, date, and provider and finds Waiting entries that match: same service, (no preferred date OR same date), and (no/unassigned preferred provider OR same provider).

  2. System auto-emails matching entries — actor: System

    It emails up to 20 matching entries the slot-open template (with a booking-page link) and flips each to Notified. This fires whenever an appointment is cancelled — not when a slot merely opens for other reasons (e.g. a reschedule).

  3. Notify the rest by hand if needed — actor: Front desk

    On a busy list, the 20-email cap may leave some matching customers un-emailed. Work down the remaining Waiting rows and click the bell Notify (slot open) icon on each — it only appears on Waiting rows, sends the same email, and flips them to Notified.

⚠️
No email = notified silently, but nobody's told Notifying an entry with a missing or invalid email still flips it to Notified but sends no email. If a customer says they weren't emailed, check the Email field is filled and valid via Edit. Leave Provider as Any and Preferred date blank to maximise the chance of an auto-match.

Stage C — Convert to a real booking

  1. Customer re-books — actor: Customer / Front desk

    The waitlist does not create the appointment. The notified customer still books normally — online from the link, or you book it for them via SOP 2.

  2. Record the outcome — actor: Front desk

    Open the waitlist entry with the pencil (Edit) and set Status to Booked (they converted) or Cancelled (they dropped off). Booked and Cancelled are hidden from the default view, keeping your live Waiting/Notified list clean.

????
Use the filters to measure demand The list shows Waiting and Notified by default. Tick the Booked filter to see conversions and Cancelled for drop-offs — a quick read on how much real demand the waitlist is capturing. Full details on Waitlist.

SOP 6: End-of-day & end-of-month review

The manager's regular pulse-check using the read-only Reports dashboard. Nothing here is editable — you look at the numbers and act on them elsewhere. Remember the scope rule baked into the page: only the Workforce Monitor honours the date filter; the four top tiles and the Reviews panel are fixed windows.

Manager Front desk

End of day

  1. Reconcile the day's appointments — actor: Front desk

    Before you close, make sure every visit is in a terminal state: Completed for served customers, No Show for absentees, Cancelled where relevant. Un-completed visits count as zero revenue in Reports, so leaving a served visit un-completed understates the day.

  2. Confirm every completed visit was paid — actor: Front desk

    For each completed appointment, verify Checkout shows the green “This invoice is fully paid.” banner, or a known open balance (e.g. a pay-link sent). Partial payments leave the balance open.

  3. Read the pulse tiles — actor: Manager

    Open Reports and read the four tiles: Today's Appointments, Upcoming this week (rolling 7 days), Completed this month, and No-shows this month. No input needed — these are fixed windows in the company timezone.

⚠️
In-store payments don't post to the Accounts ledger Payments recorded at Checkout hit the invoice only — they do not post to the Finance Accounts ledger (account_transactions). If you use the core Accounts module, reconcile those manually at end of day.

End of month

  1. Set the reporting window — actor: Manager

    On Reports, in the Workforce Monitor filter set Start date to the 1st and End date to the last day of the month you're reviewing (it defaults to the current month), then click Filter.

  2. Read per-provider performance — actor: Manager

    Each row shows Appointments, Completed, No Show, Booked hrs, Revenue, and Commission. Rows are auto-sorted by Revenue (highest first), so top earners lead. Remember: Revenue and Commission count only Completed appointments, while Booked hrs counts every non-cancelled, non-no-show appointment — so hours and revenue won't move together.

  3. Read the feedback — actor: Manager

    Scroll to the Reviews panel for the all-time average star rating and the 10 most recent published reviews. These are not affected by the date filter — they're always latest-published, all-time.

  4. Act on what you see — actor: Manager

    Low provider revenue? Check those appointments were actually marked Completed. High no-shows for one provider or time? Adjust reminders or deposits. Low ratings? Read the recent-review comments for the reasons.

ℹ️
Providers with no assignee are invisible in the monitor Appointments with no assigned provider are excluded from the Workforce Monitor entirely. And a provider's blank name shows as “-” in the Provider column. Bookmark the URL with ?start_date=…&end_date=… to jump straight to a favourite window. Full detail on Reports & Analytics.

SOP 7: New business onboarding

Standing up a brand-new business from zero to taking bookings. Do these stages in order — later stages depend on earlier ones (you can't assign a category that doesn't exist yet, and a service with no provider produces no slots).

Admin Manager

Stage A — Enable the module

  1. Turn on the Appointments module — actor: Admin

    Enable Appointments for the company in Settings → Manage Modules. Until it's enabled, none of the screens below (or the public page) work. See Getting Started.

  2. Grant permissions — actor: Admin

    Give the right roles the Appointments permissions they need: base access, create/update/delete, Appointment Checkout, Manage Appointment Settings, and the services/packages/waitlist/reports gates. Admins bypass all permission checks.

Stage B — Build the catalog

  1. Create categories first — actor: Manager

    On the Services page, in the right Service Categories panel, add your groupings (e.g. Hair, Nails, Facials) with a colour and sort order. Do this first — only active categories appear in the service form's Category dropdown.

  2. Create services — actor: Manager

    In the left panel, click Add Service and set Name, Category, Duration (drives slot sizing; minimum 5 min, defaults to 30), buffers before/after for setup/cleanup, Price, colour, and Status = Active. Leave Public checked to offer it online (it's checked by default). See Services & Staff.

  3. Assign providers to each service — actor: Manager

    On each service row, click the Assign Staff (users) icon and select the staff who can perform it. Only assigned providers are offered when booking that service — a service with 0 providers is unbookable, and the Providers count is your quick health check.

  4. Give every provider a working schedule — actor: Admin / Manager

    The availability engine reads working hours from each provider's HR weekly Schedule (in/out times) — not from Appointments. No schedule means no slots will ever appear for that provider, no matter how they're assigned.

????
Three conditions must all be true for a slot to appear online A service produces bookable online slots only when it is (1) Active, (2) Public, and (3) has at least one assigned provider who has an HR weekly schedule with in/out times that day. Miss any one and customers see “No available times” — which is easy to mistake for “fully booked.”

Stage C — Configure booking rules & automation

  1. Turn on public booking — actor: Manager (needs Manage Appointment Settings)

    In Appointment Settings, tick Enable public booking page. The read-only public URL /appointments/book/{company-slug} is built from the company slug.

  2. Tune the slot engine — actor: Manager

    Set the slot interval (e.g. 15 min gives more slots than 30), minimum lead time (blocks last-minute bookings), and maximum advance days (the booking horizon), plus the cancellation window.

  3. Set reminders, deposits, and warehouse — actor: Manager

    Configure the reminder lead time (1440 = 24 h; never 0), deposits, auto-invoice, and — if you use the Warehouse module — the default warehouse so back-bar stock decrements on completion.

  4. Set loyalty & review automation — actor: Manager

    Set Loyalty points per 1.00 spent (0 = off; a modest rate like 0.01 = 1 point per 100), tick Enable review requests, and set the review delay (around 24 h feels natural).

Stage D — Optional extras & launch

  1. Build packages / memberships (optional) — actor: Manager

    If you sell prepaid bundles, create them on Packages with included services and quantities before you start selling — see SOP 3.

  2. Smoke-test the public flow — actor: Manager

    Open /appointments/book/{company-slug} yourself, book a test slot end to end, and confirm the confirmation email arrives. If the page 404s, re-check that the module is enabled and public booking is on. If no times show, re-check the three-condition rule above.

  3. Share the booking link — actor: Manager

    Publish the direct /appointments/book/{company-slug} link on your SMS, social bio, and Google profile so customers skip the directory and land straight in the flow. You're now live — new bookings arrive as Confirmed and flow through SOP 1.

????
Onboarding order in one line Enable module → grant permissions → categories → services → assign providers → provider HR schedules → turn on public booking & tune rules → (optional packages) → smoke-test → share link. Follow it top to bottom and nothing blocks you later.

Cross-cutting edge cases & FAQs

The gotchas that span more than one SOP, gathered here so you can scan them fast. Expand any that apply.

A completed visit isn't showing revenue in Reports — why?

Revenue and Commission count only appointments marked Completed. If a served visit is still Checked In or In Progress, it contributes zero. Complete it, and check you filtered the Workforce Monitor to the right date range (only that table honours the filter).

The customer can't pay via the online pay link.

The pay link generates fine, but the customer can only actually pay if the tenant has online payments configured and guest invoice payment (client_can_pay_invoice_without_login) enabled. Otherwise the link is a dead end. See Checkout.

How do I set an appointment to In Progress?

There's no dedicated In Progress button on the detail card — the card jumps from Confirmed/Checked In straight to Complete. Set In Progress via the Status dropdown on the edit form instead.

A past appointment seems to have vanished from the list.

The list filter hides Completed, Cancelled, and No Show by default. Tick those status checkboxes to bring them back.

Why did no time slots appear online for a provider?

No slots appear for a provider with no HR weekly schedule (in/out times) that day, or when the service is missing its Public/Active flags or an assigned provider. Slots also respect minimum lead time and maximum advance, so a too-soon or too-far date legitimately returns nothing. See the three-condition rule in SOP 7 Stage B.

The review link says “not available.”

The public review page only works for appointments already marked Completed, and only once each. A customer who follows the link before staff complete the visit sees a not-available message; a second submit shows “You've already reviewed this visit.”

Cancelling didn't return the customer's package sessions.

Cancellation returns sessions only if no invoice was created for that appointment. Once invoiced, the covered service was already excluded from that invoice, so sessions aren't refunded automatically — adjust manually if needed. See SOP 3 Stage B.

Some waitlisted customers weren't auto-emailed after a cancellation.

Auto-notify is capped at 20 emails per cancellation and only fires when a Confirmed appointment is cancelled. On a busy list, notify the rest by hand with the bell icon on each remaining Waiting row (SOP 5 Stage B).


Where to go next

Each SOP above is a chain of screens. Drill into any one for the full field-by-field detail.

Was this guide helpful?

Report a content problem