Part 5 of 7 · Booking deposit collector series ~8 min read

How a no-show gets handled

The deposit only earns its keep on the day. This post is about settlement: how a customer who turns up has their deposit applied to the bill, how a no-show forfeits it per the policy they agreed to, and why that decision is a plain rule in code — never a judgement call a model makes.

Key takeaways

  • The deposit earns its keep on the day: a customer who turns up has it applied to their bill; a no-show forfeits it, per the policy they agreed to.
  • Attendance is a fact the business records — a tap from front-of-house — not something a model or the system guesses.
  • A settlement sweep after the appointment closes each confirmed booking exactly once: APPLIED for an arrival, FORFEITED for a no-show.
  • The apply-or-forfeit decision is a plain rule from the settings doc — deterministic policy, never a judgement call by Bedrock.
  • Every outcome is recorded with the amount and the reason, and anything contested is handed to a person with the full history.

The deposit only matters on the day

Everything so far — the hold, the link, the confirmation, the release — exists to get a real, committed booking onto the calendar. But the deposit itself only does its final job on the day of the appointment, and it does one of two things. If the customer turns up, the deposit is theirs: it comes off the final bill, exactly as the message promised, so it never feels like a charge, just money paid early. If the customer doesn’t turn up, the deposit is forfeit — that’s the whole point of taking it, and it’s what makes the no-show cost the customer something instead of costing the business the slot. Settlement is the step that carries out whichever of those two the day actually delivers.

The important design choice here is that attendance is a recorded fact, not an inference. The system does not try to work out whether someone came — it has no way to, and guessing about money is exactly the wrong instinct. Instead, front-of-house tells it: a tap on the booking (“seated”, “arrived”, “started”) posted back through the intake surface marks the booking attended. A booking that reaches the end of its appointment window with no such mark is, by definition, a no-show. Making attendance an explicit signal keeps the settlement honest and auditable: there is always a clear reason on the record for why a deposit was applied or forfeited.

A rule, not a judgement

How a deposit settles is set once, in the policy, and applied the same way every time. The settings doc holds the business’s no-show terms — the ones the customer agreed to when they paid: apply the deposit to the bill on attendance, forfeit it in full on a no-show, or a softer variant like a grace window or a partial forfeit for a late cancellation. Whatever the rule, it’s deterministic Python. The settlement step reads the booking’s outcome (attended or not, cancelled or not, and when), looks up the matching policy branch, and does exactly what it says. This is the sharpest example of the whole system’s division of labour: Bedrock phrases the messages around all of this, but it is nowhere near the decision to keep or return someone’s money. A model must never decide a forfeit, because a forfeit is a financial action a business has to be able to defend, and “the AI decided” is not a defence.

A settlement sweep — the same EventBridge Scheduler pattern as Part 4 — runs after appointment windows close and settles each confirmed booking once. For an arrival, it marks the booking APPLIED: the deposit is credited against the bill (or simply noted as already taken, depending on how the till works) and a short thank-you can go out. For a no-show, it marks the booking FORFEITED, records the amount and the reason, and — because a forfeited deposit is the one message most likely to prompt a reply — sends the customer the plain, policy-worded note they agreed to, and drops a line into the handover inbox so the business has a record and a chance to soften it for a good regular. The state field makes this exactly-once, just like every other transition: a booking settles a single time and can’t be both applied and forfeited.

Settlement on the day: a confirmed booking is applied to the bill on arrival or forfeited on a no-show, by policy, with disputes going to a person On the left, a box “Front-of-house” posts an attendance mark — seated or arrived — by an arrow into a box “Intake surface” inside a dotted AWS account container, which writes the attended flag onto the booking in the DynamoDB bookings table. Below, a box “Settlement sweep (EventBridge Scheduler)” runs after the appointment window and reads the same bookings table for CONFIRMED bookings whose time has passed. From the sweep, a decision diamond labelled “Attended? (policy)” splits two ways. The “yes” branch goes to a box “Apply to bill — mark APPLIED”. The “no” branch goes to a box “Forfeit per policy — mark FORFEITED”, which also sends the agreed policy note and drops a line to the handover inbox. A third arrow from both outcome boxes points to a box “Dispute? → a person”. A note reads: attendance is recorded, not guessed; the apply-or-forfeit rule is deterministic policy, and a person owns any dispute. Front-of-house taps “arrived” AWS account Intake surface write attended flag DynamoDB bookings CONFIRMED, attended? Settlement sweep EventBridge, after the window read Attended? policy Apply to bill — mark APPLIED deposit comes off the total yes Forfeit per policy — mark FORFEITED agreed note out · line to handover inbox no Attendance is recorded, not guessed; the apply-or-forfeit rule is deterministic policy, and a person owns any dispute.
Fig 5. Settlement on the day. Front-of-house records the arrival through the intake surface; a settlement sweep reads confirmed bookings past their window and, by the policy rule alone, either applies the deposit to the bill (APPLIED) or forfeits it (FORFEITED) — each booking settled exactly once, with any dispute handed to a person.

The human side of a forfeit

A forfeited deposit is the one outcome most likely to end in a conversation, so the system is built to hand that conversation to a person rather than have the last word itself. When a deposit is forfeited, the customer gets the plain note they agreed to — no arguing, no automated back-and-forth — and the business gets a line in the handover inbox with the whole history: when they booked, that the deposit was paid and confirmed, that the slot went unused, and the exact policy applied. If the customer replies “I was in hospital” or “I cancelled hours ago, check your messages”, that reply goes straight to a human, who can waive or refund the forfeit with a click. The system enforces the policy consistently; a person retains the discretion to be kind. That balance — firm by default, human by exception — is what lets a small business take deposits without feeling like it’s treating its regulars as suspects.

The same discretion covers the genuinely awkward cases. A double-booking that somehow slipped through (it shouldn’t, given Part 2, but belt and braces), a customer who paid but whose slot was cancelled by the business itself, a partial-refund request — none of these are settled by rule, because none of them should be. They’re recorded and escalated, with the full booking and payment history attached, for someone to resolve and, where needed, issue a refund through the payment provider by hand. The system’s job ends at making the routine outcomes automatic, correct, and defensible; the exceptions are exactly where a human belongs.

Design rules that shaped settlement

  • Attendance is recorded, not inferred. Front-of-house marks the arrival; a booking with no mark past its window is a no-show by definition.
  • Policy decides, code executes. Apply-or-forfeit is a deterministic rule from the settings doc — never a judgement a model makes.
  • Settle exactly once. The state field means a booking is either APPLIED or FORFEITED, once, and never both.
  • The deposit is the customer’s until it isn’t. On arrival it comes off the bill exactly as promised; forfeit is only the agreed no-show case.
  • Firm by default, human by exception. The policy note is plain and consistent; a person can waive, refund, or soften any forfeit.
  • Every outcome is defensible. Amount, reason, and policy are recorded, so a business can always explain why a deposit was kept or applied.
All posts