POST /v1/checkout/finalize).
Server-side re-pricing
The backend re-prices the cart on finalize. It does not trust the amounts the till sends — it recomputes them against its own price authority and rejects a mis-priced or forged cart (a422 business-rule failure). This is the line that keeps a
tampered basket from being rung up.
Tenders and settlement
A sale settles over one or more tenders. The tender engine models the methods and tracks what remains due until the sale is fully settled.- Cash rounding — cash settlement applies the legal rounding rule, injected from the backend configuration, so the tolerance is consistent.
- Foreign currency — a foreign-currency tender discloses the foreign amount and the rate used, shown on the sold recap.
Card / PSP capture is deferred for the pilot: tender methods are modelled and settle
in the engine, but there is no live payment-terminal integration yet — the terminal
port is a mock.
Discounts and manager override
Declared discounts are threaded onto the finalize request, and the backend re-derives them. A discount that needs authority is gated by a manager elevation token, consumed server-side on finalize.After the sale
When the sale is finalized, the till shows a recap of the real finalized ticket (the sold panel). From there you can move to the receipt to print or reprint. The sale also books cash into the open register drawer and lands in the day-book and the sales read model.Related
- Sell — build the basket first.
- Daily cash session — the drawer the sale credits.
- Returns & exchanges — reverse a charge.

