Appointments Reference Public

Settings & Reminders

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: 19 min 1 views
Catalog & Setup

Settings & Reminders

The Appointment Settings page is the control panel for the whole module — one screen a manager configures once to decide whether customers can book online, how far ahead and how last-minute they may book, how long slots are, when reminder and review emails go out, whether deposits are taken, and how loyalty points are earned. Every value here is saved per business, so each company running ERPat keeps its own settings. This page also explains the two background jobs that email your customers automatically: the appointment reminder and the post-visit review request.

Manager Admin Front desk (reference)
ℹ️
Where this lives The settings screen is at Appointments → Settings (route appointments/settings, gear icon). Only users with the Manage Appointment Settings permission see the menu item and the page; admins bypass every permission check. Every value is stored as a per-tenant setting — changing it affects only your business.

Opening settings

Settings sit behind a single permission and only appear when the module is switched on. There is nothing to schedule and no separate “turn on reminders” step — the two cron jobs start working automatically the moment the module is enabled, and every setting takes effect on the next run.

To do thisYou need
See the Settings menu item and open the pageManage Appointment Settings permission (or admin)
Save changes on the pageThe same permission — the module must also be enabled
Have reminders / review emails actually sendThe Appointments module enabled in Settings → Manage Modules
????
Enable the module first If the Appointments module is not enabled in Settings → Manage Modules, the sidebar item and this settings page never appear, and both automation jobs exit immediately and do nothing. Enabling the module is always step one — see Getting Started.

The page is one long form with a single green Save button (check-circle icon) at the bottom. It groups into: public booking, scheduling rules, deposits & invoicing, and loyalty & reviews. The following sections walk each group; the full Settings reference table near the end lists every field with its default and recommended value in one place.


Public booking settings

These two controls decide whether the public, customer-facing online booking portal is live and where it lives.

Enable public booking page

The master on/off switch for self-service online booking. When off (the seeded default), the public URL still exists but customers cannot book or join the waitlist through it. Turn it on before sharing your booking link.

⚠️
Both switches are required The public page only works when the module is enabled and this checkbox is ticked. If either is missing, the public page returns a 404 — which can look like a broken link. See turning on public booking.

Public booking URL

A read-only, clickable link that opens your live booking page in a new tab. It is not editable here — it is built from your company slug as /appointments/book/{slug}. If no slug is set, it falls back to the generic directory URL /appointments/book.

/appointments/book/acme-salon
ℹ️
About the “custom booking slug” There is a seeded (blank) custom booking slug value in the data, but this settings screen does not give you a field to edit it — the public URL always uses your company slug. If the slug looks wrong, fix it where the company / company slug is configured, not here. A custom slug that differs from the company slug can break the confirmation and review links, which are always built from the company slug.
????
Preview what customers see After ticking Enable public booking page and saving, click the Public booking URL link — it opens the exact page your customers use, so you can preview and share it.

Scheduling rules (slot interval, lead time, advance, cancellation window)

These four numbers shape when customers can book: how finely spaced the offered times are, how soon and how far ahead they may book, and how late they may still cancel. They feed the availability engine that generates bookable slots.

Slot interval (minutes)

The granularity of bookable start times offered to customers — e.g. every 15 minutes. Minimum 5, in steps of 5; the seeded default is 15. A smaller interval offers more start times (15 min gives more choices than 30); a larger one keeps the schedule tidier. Blank falls back to 15.

Minimum lead time (minutes)

How soon before start a customer is still allowed to book — it blocks last-minute online bookings your staff can't prepare for. Slots closer than this to “now” are hidden from customers and rejected if someone tries to submit them. The seed sets 60 (no bookings within the next hour); the form shows 0 only when the setting is entirely absent.

Maximum advance booking (days)

The furthest-out date a customer may book — your booking horizon. Dates beyond this window simply return no slots. Seeded default 60 days.

⚠️
“No available times” is not always “fully booked” A date that is too soon (inside the minimum lead time) or too far out (beyond maximum advance) legitimately returns No available times for this date. Before assuming you're full, confirm the date is inside the window and that the chosen provider is actually working that day. See FAQ & Troubleshooting.

Cancellation window (hours)

How many hours before an appointment a customer may still cancel or change it. Minimum 0; seeded default 24 hours. This defines the customer-facing courtesy window for changes.

ℹ️
Slots also depend on staff schedules and buffers These numbers only narrow availability. The raw working hours come from each provider's HR weekly Schedule, minus existing bookings and each service's before/after buffers. A provider with no schedule generates no slots no matter what you set here.

Deposits & invoicing

These settings connect appointments to money: taking a deposit to secure a booking, choosing which warehouse supplies are drawn from, and whether an invoice is raised automatically at completion.

Require deposit & deposit percent

Require deposit (checkbox, off by default) marks that a deposit is expected to secure a booking, and Deposit percent (%) (0–100) sets how much of the service price that deposit is. Deposit percent only matters when Require deposit is on.

????
Deposits are a reserved capability Deposits/checkout are part of a later phase. Ticking Require deposit on its own does not switch on a full online payment flow — the collection happens through the Checkout pieces. Set these values so they're ready, but don't expect an automatic upfront charge yet.

Default stock warehouse ID

Which warehouse inventory is decremented from when back-bar products are consumed during a service. It is a numeric warehouse ID. This only does something if the Warehouse / inventory module is enabled — otherwise items are recorded for reporting but stock is not decremented, and the UI shows a notice.

Service commission (%)

The default staff commission rate applied to service revenue. It is captured per service line at completion and summed per provider on the Workforce Monitor report. Range 0–100, decimals allowed.

Auto-create invoice on completion

When on, an invoice is raised automatically for the billable items the moment an appointment is marked Completed. Off by default. It needs a customer attached to the appointment and at least one billable line — with none it reports There are no billable items on this appointment.

⚠️
Auto-invoice still needs a customer If auto-invoice is on but no customer is attached, completion blocks with Attach a customer to this appointment before invoicing. Whether you invoice automatically or by hand, attach the customer first — see Checkout & Payments.

Loyalty & reviews

The retention half of settings: reward repeat customers with points, and collect star ratings automatically after each visit.

Loyalty points per 1.00 spent

The accrual rate: how many loyalty points a customer earns per 1.00 of a completed appointment's value. Set to 0 to turn loyalty off entirely. Points are awarded automatically, once, when the appointment is marked Completed — there is no manual “award points” button and no redemption screen in this module; the balance is simply the sum of the customer's points ledger, visible in Customer History.

ℹ️
Points are floored — a low rate can round to zero Points awarded = floor(total × rate). A tiny total or a very low rate can round down to 0 points. A modest rate such as 0.01 (1 point per 100 spent) is a sensible starting point. Re-completing an already-completed appointment does not re-award points — a one-time latch guarantees a single award.

Enable review requests

The master switch for the automated post-visit review-request email. Off by default. When on, the hourly job emails eligible customers a star-rating link. When off, the job still runs but sends nothing.

Review request delay (hours)

How many hours after an appointment is marked Completed the review email goes out. Minimum 0; default 24. A negative value falls back to 24. Twenty-four hours lands the ask the day after the visit — fresh, but not intrusive.

????
Reviews build your ratings over time Enabling review requests and keeping the 24-hour delay is the easiest way to grow per-staff and per-service average ratings — every emailed link that a customer follows feeds those numbers in Reports. Customers can only review a Completed visit, and only once each.

Automated reminders & review requests (cron)

Two background jobs run on the ERPat cron scheduler and email your customers on a schedule. They are both enabled by default and start working automatically once the module is enabled — there is no separate scheduling step. Each sends at most once per appointment, tracked by a one-time latch flag, so nobody is ever emailed twice.

Appointment reminder (SendAppointmentReminderJob)

Runs every 5 minutes. It finds appointments that are Confirmed, not yet reminded, and whose start time falls between now and now + reminder-lead-minutes (in your business timezone), then emails each customer the appointment_reminder template. On a successful send it latches the appointment so it is never reminded again; if the send fails, the latch stays clear and the next 5-minute tick retries.

AspectDetail
How often it runsEvery 5 minutes
Which appointmentsStatus Confirmed only — never Pending, Checked In, or In Progress
When it sendsStart time is within now → now + Reminder lead time (e.g. 1440 min ≈ 24 h before)
Controlled byReminder lead time (minutes); the module being enabled
On failureLatch stays clear — retried on the next tick
What it sendsThe appointment_reminder email (service, provider, date, time, location, Manage Booking link)

Reminder lead time (minutes)

How long before the appointment the reminder is sent — the setting that drives the reminder job. The field hint says 1440 = 24 hours. Because the send window is now → now + lead, a lead of 1440 sends roughly 24 hours before the start; a very short lead sends close to the appointment.

????
0 or blank does NOT mean “no reminder” If Reminder lead time is 0 or blank, the job silently substitutes 1440 minutes (24 h) — it never uses 0. To effectively suppress a reminder you would have to keep the appointment out of Confirmed status, not set the lead to 0.

Review request (SendReviewRequestJob)

Runs hourly (at :15). Only if Enable review requests is on, it finds Completed appointments whose end time is older than now − review-delay-hours and that have not yet been asked, and emails each customer the appointment_review_request star-rating link. It then latches the appointment as requested — even if the email failed — so a review email is never retried.

AspectDetail
How often it runsHourly, at :15 past the hour
Which appointmentsStatus Completed with an end time older than the delay cutoff — never No Show or Cancelled
Requires (both)Module enabled and Enable review requests on
Controlled byReview request delay (hours) (default 24)
On failureLatched anyway — not retried (unlike reminders)
What it sendsThe appointment_review_request email with a Leave a Review link

Reminder vs review at a glance

Confirmed Reminder eligibilityOnly Confirmed appointments get a reminder. Every successful online booking starts Confirmed; a Pending one never does. Retries on send failure.
Completed Review eligibilityOnly Completed visits get a review request (after the delay). Latched even on failure — never retried.
Latch (one-time flag)reminder_sent / review_requested guarantee a single send per appointment so customers are never spammed. Reminder latches on success; review latches regardless.
⚠️
Timezone drives the windows Both jobs compute their windows using your business timezone setting. An unset or invalid timezone falls back to server time, which can shift when reminders and reviews actually go out. Set your company timezone correctly.

Email templates the module seeds

On install, the module seeds six branded email templates. They already carry your logo ({LOGO_URL}) and signature ({SIGNATURE}) in the ERPat brand teal #1d97a6. To change wording or branding, edit the matching template's message in the core Email Templates editor — the seeded HTML is the fallback default. Changes are picked up on the next job run.

TemplateSent whenSent by
appointment_confirmationAn online booking succeedsBooking flow (portal)
appointment_reminderWithin the reminder lead window before startSendAppointmentReminderJob
appointment_cancelledAn appointment is cancelledCancellation action (calendar)
appointment_new_for_staffA new online booking arrivesBooking flow (to assigned staff / company email)
appointment_review_requestAfter the review delay past completionSendReviewRequestJob
appointment_waitlist_slot_openA matching slot frees upWaitlist notify
ℹ️
Only use the tokens a template provides Templates use {VAR} placeholders — e.g. {CUSTOMER_NAME}, {COMPANY_NAME}, {SERVICE_NAME}, {STAFF_NAME}, {APPOINTMENT_DATE}, {APPOINTMENT_TIME}, {DURATION}, {LOCATION}, {MANAGE_URL}, {VIEW_URL}, {REVIEW_URL}, {BOOK_URL}, {CANCELLATION_REASON}, {LOGO_URL}, {SIGNATURE}. A token the parser can't resolve is left as literal {TOKEN} text in the email, so only use tokens that template actually supplies.
????
Emails need non-empty templates All automated emails are best-effort — a booking still succeeds even if its email can't send (the failure is logged, not shown). But an email requires its template to exist and be non-empty; if you blank out a template's message, that email won't send.

Settings reference table

Every setting on the Appointment Settings page in one place — what it does, its seeded default, and a recommended starting value. All values are per-business.

SettingWhat it doesDefaultRecommended
Enable public booking page Master on/off for the online booking portal. Off = customers can't self-book. Off On (if you want online bookings)
Public booking URL read-only Your shareable booking address, built from the company slug. Not editable here. Derived from slug Share the direct /appointments/book/{slug} link
Slot interval (minutes) Spacing of offered start times. Min 5, steps of 5. 15 15 (more choices) — 30 for tighter schedules
Minimum lead time (minutes) How soon before start a booking is still allowed; blocks last-minute bookings. 60 60 (no bookings within the next hour)
Maximum advance booking (days) Furthest-out date customers may book (booking horizon). 60 30–60 days
Cancellation window (hours) Hours before start a customer may still cancel/change. 24 24
Reminder lead time (minutes) How long before start the reminder sends. 0/blank → 1440. 1440 1440 (24-hour day-before reminder)
Default stock warehouse ID Warehouse decremented for back-bar consumption. Needs the Warehouse module. Blank Your main warehouse ID (only if inventory is used)
Require deposit Marks that a deposit is expected (reserved capability). Off Off until checkout deposits are in place
Deposit percent (%) Percentage of the service price taken as deposit. 0–100. 0 Set only with Require deposit on
Service commission (%) Default staff commission captured on service lines for the Workforce Monitor. 0–100. 0 Your standard rate, e.g. 10
Loyalty points per 1.00 spent Points earned per 1.00 of completed value. 0 = off. Awarded once on completion. 0 0.01 (1 point per 100 spent)
Enable review requests Master switch for automated post-visit review emails. Off On
Review request delay (hours) Hours after completion before the review email sends. Negative → 24. 24 24 (the day after the visit)
Auto-create invoice on completion Raises an invoice automatically at completion. Needs a customer + billable items. Off On if you always invoice at completion

Configure settings (SOP)

Two step-by-step procedures: a full first-time configuration of the module, and a focused setup of the two automated emails.

SOP: Configure appointment settings

Actor: Manager or Admin. Goal: configure the whole module from scratch.

  1. Enable the module

    Go to Settings → Manage Modules and enable Appointments. Nothing below works until this is done.

  2. Open Appointment Settings

    Navigate to Appointments → Settings (gear icon). You need the Manage Appointment Settings permission.

  3. Turn on public booking (optional)

    Tick Enable public booking page if customers should self-book, then copy the Public booking URL shown to share later.

  4. Shape the booking window

    Set Slot interval (e.g. 15), Minimum lead time (e.g. 60 min), and Maximum advance booking (e.g. 60 days).

  5. Set the cancellation window

    Enter Cancellation window (hours), e.g. 24.

  6. Set the reminder timing

    Enter Reminder lead time — e.g. 1440 for a 24-hour day-before reminder. (Leaving it 0 makes the job default to 24 h anyway.)

  7. Configure products & commission (optional)

    If you consume or sell products, set the Default stock warehouse ID (needs the Warehouse module). Set Service commission (%) for reporting.

  8. Configure money rules (optional)

    Optionally turn on Require deposit + Deposit percent, set Loyalty points per 1.00, and tick Auto-create invoice on completion.

  9. Turn on reviews (optional)

    Tick Enable review requests and set the Review request delay (default 24 h).

  10. Save

    Click Save. You should see Settings updated successfully. Values take effect on the next cron tick and the next booking.

????
No scheduling step needed The reminder and review jobs are enabled by default and start working automatically once the module is on. You never have to “start” them — just fill in the settings and save.

SOP: Set up reminders (and review requests)

Actor: Manager or Admin. Goal: get both automated emails sending correctly.

  1. Confirm the module is enabled

    In Settings → Manage Modules, verify Appointments is on — both jobs exit immediately if it isn't.

  2. Check your company timezone

    Make sure the business timezone is set correctly, since both jobs compute their windows from it. An unset timezone falls back to server time.

  3. Set the reminder lead time

    On Appointments → Settings, set Reminder lead time to 1440 for a 24-hour reminder. Remember 0/blank silently becomes 1440.

  4. Enable review requests

    Tick Enable review requests and set the Review request delay (e.g. 24 h). Both the module and this switch must be on for review emails to send.

  5. Save

    Click Save and confirm Settings updated successfully.

  6. Verify reminders will fire

    Ensure appointments reach Confirmed status — reminders never fire for Pending or other statuses. The reminder job runs every 5 minutes.

  7. Verify reviews will fire

    Mark visits Completed promptly — completion starts the review-request clock. The review job runs hourly at :15.

  8. Customize the emails (optional)

    Edit the appointment_reminder and appointment_review_request templates in the core Email Templates editor to match your brand voice.

ℹ️
If reminders aren't arriving, check three things in order (1) Is the module enabled? (2) Is the appointment actually Confirmed? (3) Does the start time fall within now → now + Reminder lead time? Reminders retry automatically on transient mail errors; review requests do not.

Statuses that drive the automation

The two jobs care only about specific statuses. This legend shows which status triggers what.

Pending
No reminder
Confirmed
Reminder eligible
Checked In
No reminder
In Progress
No reminder
Completed
Review + loyalty
Confirmed ConfirmedThe only status eligible for a reminder email. Teal #1d97a6.
Completed CompletedTriggers loyalty award, optional auto-invoice, stock commit, and — after the delay — the review request. Green #5cb85c.
No Show No ShowNever gets a reminder or a review request; sends no email. Grey #777777.
Cancelled CancelledNo reminder or review. Cancelling a Confirmed slot can trigger waitlist slot-open emails instead.

Gotchas & edge cases

The traps that most often confuse managers configuring this page. Expand any that apply.

I set Reminder lead time to 0 to disable reminders — why do customers still get them?

0 or blank does not mean “off.” The reminder job silently substitutes 1440 minutes (24 h) whenever the lead is 0 or blank. To stop reminders you'd have to keep appointments out of Confirmed status — there is no “0 = never” behaviour.

Review requests aren't sending even though the job runs hourly.

Review requests need two switches on: the module enabled and Enable review requests ticked. With the switch off, the hourly job runs but sends nothing. Also confirm the appointment is Completed and its end time is older than the delay cutoff.

A review email failed to send — will it try again next hour?

No. The review-request latch is set to 1 even when the email fails, so a failed review email is never retried. This is different from reminders, whose latch is only set on a successful send, so reminders do retry on transient failures.

The Public booking URL looks wrong — how do I edit it here?

You can't — it's read-only and derived from your company slug. Fix the slug where the company / company slug is configured. There is a seeded (blank) custom-booking-slug value in the data, but this settings screen exposes no field for it, and the confirmation/review links are always built from the company slug.

I set a loyalty rate but customers earned 0 points.

Points = floor(total × rate). A small total or a very low rate can round down to 0. Points are also only awarded when the status becomes Completed and a customer is attached. There is no manual award or redemption screen — the balance is read in Customer History.

I turned on Require deposit but no deposit is being collected.

Deposits/checkout are a reserved, later-phase capability. Ticking Require deposit alone does not switch on an upfront online charge — the collection depends on the Checkout pieces being in place. Set the values so they're ready, but don't expect an automatic charge yet.

Back-bar stock isn't decrementing after completion.

Default stock warehouse ID and back-bar consumption only decrement inventory if the Warehouse / inventory module is enabled. Without it, items are still recorded for reporting, but stock is not decremented and the UI shows a notice. Set both the warehouse ID and enable the module.

Reminders and reviews go out at odd times.

Both jobs use your business timezone setting to compute their windows. An unset or invalid timezone falls back to server time, which shifts when emails send. Set the company timezone correctly.

My edited email template doesn't reflect the change / shows literal {TOKENS}.

Changes are picked up on the job's next run. Templates only fill the {VAR} tokens they actually provide — an unresolved token is left as literal {TOKEN} text, so only use the placeholders listed for that template. A blanked-out template means that email won't send at all.

Auto-invoice on completion isn't creating an invoice.

Auto-invoice needs a customer attached to the appointment and at least one billable line. With no customer it blocks with Attach a customer to this appointment before invoicing.; with no billable items it reports There are no billable items on this appointment. See Checkout & Payments.


Related pages

Was this guide helpful?

Report a content problem