feat(tills): per-till activity log, wash bucket on the booth Z-report, wash-desk printer role
Closes the three known follow-ups of the Tills decision (venue-modules.md): - Activity log per till: `tillOfEvent(type, payload)` in @parking/shared (money events by payload till, other events by their owning module's till, everything else booth), applied by `/api/events?till=` in SQL and passed by the hub log, the Drawer "today" panel and the booth feed (history + live pushes). The events route admits a role that holds a module feed permission without event:read and returns only that module's event types — the live-socket rule. - Booth Z-report: `chargesByModuleMinor` sums the chargeLines on the till's payments by module; the ticket bucket excludes them (Bileta = parking only); printed "Lavazh (në biletë)" only when any was taken. The wash till's slip prints "Lavazh:". - Printer role `wash-desk`: the wash till's Z-report and vouchers print there, falling back to the booth printer; nothing falls back to the desk. `printerRoleOf()` is the one reading of the role field (the entry/booth loaders treated any non-booth role as an entry dispenser). Footer label "at wash desk". Also: `GET /api/carwash/settings` opens to carwash:read OR site:read (new requireAnyPermission) — the Wash operator job could not load the desk's category and service pickers. Tests for all four; wiki (shift, printer-roles-failover, venue-modules, log) updated. Claude-Session: https://claude.ai/code/session_01FWncR69HgGPuei1dLrW3cU
This commit is contained in:
@@ -522,11 +522,12 @@ control against the unrecorded-wash vector, and it must sit with the person hold
|
||||
→ Roles); a permission-scoped live feed for module desks (the WS is `report:read` only —
|
||||
the wash desk polls, 5 s / 15 s).
|
||||
|
||||
**Known follow-ups.** A shift's *activity log* (right pane of the hub, Drawer "today") is
|
||||
still a time window over the whole chain, so a booth shift's log shows wash events in that
|
||||
window (money figures are per till; the log is not). A separate wash bucket on the booth's
|
||||
Z-report (booth-paid washes ride `chargeLines`) is still open. Bay slips print on the booth
|
||||
printer until a wash-desk printer role exists.
|
||||
**Follow-ups, closed 2026-09-06** (details on [[shift]] §Tills and [[printer-roles-failover]]):
|
||||
the activity log is per till (`tillOfEvent`, `/api/events?till=`; a feed-permission role
|
||||
reads its module's events without `event:read`); the booth Z-report carries
|
||||
`chargesByModuleMinor` (a booth-paid wash is out of the ticket bucket, printed
|
||||
`Lavazh (në biletë)`); the wash till's slips print on a `wash-desk` printer, falling back
|
||||
to the booth's.
|
||||
|
||||
## Review log — issues and ideas from the first hands-on pass (2026-09-05)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user