docs(wiki): activity-log explainability, dates/i18n, KP-300H barcode fix
Record this session's work across the affected pages + three log entries. - ticket-encoding: id 13→11 digits (guess-resistance rationale, legacy-safe validation) + a barcode-geometry rule (symbol dots must fit the narrowest deployed printer's line — the KP-300H 72mm overflow). - rongta-printer: KP-300H raster-garbage root cause (line overflow, not corruption), sendRaw graceful-close fix, Albanian human dates (formatStampSq). - i18n: localized ledger reason codes, relative/human dates + the "browser ICU lacks Albanian" gotcha, toggle stale-router-context fix. - shift: Albanian Z-report, shift-history UI + permission scoping. - booth-console: explainable activity log (inline reasons/badges, event-detail modal with snapshots + audit disclosure, subscriber names, failed-snapshot tiles). - index/log updated; all added wikilinks resolve. Claude-Session: https://claude.ai/code/session_01Xcm6ikLgGoCxxHrxtjkk5V
This commit is contained in:
+16
-1
@@ -2,7 +2,7 @@
|
||||
type: concept
|
||||
tags: [parking, domain, business, shifts, anti-fraud]
|
||||
sources: []
|
||||
updated: 2026-06-18
|
||||
updated: 2026-06-19
|
||||
status: open
|
||||
---
|
||||
|
||||
@@ -77,6 +77,21 @@ login ————————————————————————
|
||||
That's the whole human-side requirement: **print the cash and the POS (if any).** No blind count,
|
||||
no variance gate, no manager override.
|
||||
|
||||
> **Z-report is now Albanian (2026-06-19).** The printed Z-report labels were hardcoded English
|
||||
> (`Operator:`/`From:`/`Cash:`) with raw ISO timestamps; now fully Albanian (`Operatori`/`Nga`/`Deri`/
|
||||
> `Para në dorë`/`-- Arka --`/`Arka e pritur`…) with the human date format `19 Qershor 2026 10:48:25`,
|
||||
> shared via `formatStampSq` from [[rongta-printer]]. Consistent with the "[[i18n|printed paper is
|
||||
> always Albanian]]" rule — independent of the operator's UI language.
|
||||
|
||||
### Shift history UI + permission scoping (2026-06-19)
|
||||
A read-only **shift-history screen** (`GET /api/shifts`) lists completed shifts — each a signed
|
||||
`shift_z_report` folded for its figures (no re-summing), newest-first, expandable to the drawer
|
||||
reconciliation. **Scoped server-side by permission** (dynamic [[local-jwt-auth|RBAC]]): an operator
|
||||
with `shift:read` sees **only their own** shifts (operator/date filters ignored); an admin-grade role
|
||||
(`shift:cash`) sees **all** operators with an operator + date-window filter. The server hard-scopes
|
||||
non-admins to `req.user.username` regardless of any `?operator=` param (verified: an operator passing
|
||||
another's name returns `scope:self`, 0 rows). One screen, behaviour driven by the returned `scope`.
|
||||
|
||||
### As-built (2026-06-16)
|
||||
|
||||
- A shift is **two signed ledger events**, no mutable table (decision): `shift_open` (new event
|
||||
|
||||
Reference in New Issue
Block a user