feat(booth): badge subscriber out-of-window entries in the live feed
A subscriber entering outside their plan's allowed window gets a deferred transient charge (windowOwedMinor, collected/gated at exit) — but it was SILENT at the booth: the entry showed as a plain subscriber pass with no hint money is owed, so the operator only discovers it at exit. Surface it: add a "out-of-window — owes fee" badge on any entry/exit event carrying windowOwedMinor > 0, so the operator sees immediately that this subscriber owes a fee. Also type the window-charge fields on LedgerPayload (were riding the open-ended index signature). Behaviour is otherwise unchanged and correct — verified the live "Mon Kukaleshi" entry: entered 20:29 local (before the 21:00 Mon–Sat window, grace 5m), owes 100 ALL for 18:29–18:55Z, stamped on the signed entry, still owed, gated at exit. Subscribers get no ticket by design. Build+lint 12/12. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
@@ -287,6 +287,15 @@ export interface LedgerPayload {
|
||||
/** cash_in / cash_out voucher: a human-facing voucher number printed on the slip
|
||||
* (Mandat Nr.). Sequential per type; signed for reproducibility. */
|
||||
readonly voucherNo?: string;
|
||||
/** subscription tariff-bridge: an early-entry / late-exit transient charge OWED for
|
||||
* parking outside the plan's allowed window, stamped on the vehicle_entry and collected
|
||||
* (gated) at exit. The priced gap + tariff version travel alongside for reproducibility.
|
||||
* See wiki/entities/subscription.md ("tariff bridge"). */
|
||||
readonly windowOwedMinor?: number;
|
||||
readonly windowCurrency?: string;
|
||||
readonly windowTariffVersionId?: string;
|
||||
readonly windowGapStart?: string;
|
||||
readonly windowGapEnd?: string;
|
||||
/** Free-form for forward-compat without a schema change. */
|
||||
readonly [k: string]: unknown;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user