Every bag event (collected, delivered, counted) is a new row. The database refuses UPDATE and DELETE on the ledger outright — try it on the audit page. Corrections are new, linked entries.
Each ledger row carries a SHA-256 over its content plus the previous row's hash. Anyone — you, your auditor, a bank — can recompute the chain via /api/ledger/verify. That makes application-level edits detectable; in production the chain head is also anchored daily to an external store so a database administrator can't quietly re-hash.
A cashier's count that differs from the declared amount opens a discrepancy. Only a supervisor can decide it, and never the person who made the entry — checked against the acting user ID, not a hidden button.
A trip cannot be dispatched without a driver, a guard and a companion — three distinct, security-cleared people — per SAMA circular 53506/198.
A vehicle is dispatchable only if registration, insurance and inspection are valid and it is inside SAMA's five-year service life. Expiry alerts fire at 30 days, on 53 vehicles.
Today's trips, delayed stops, open discrepancies, dispatchable vehicles. Everything on the screen is also on a read API with OpenAPI docs — the same surface an Odoo sync would read. Webhooks and SLA monitoring are Phase 1 scope, not in this spike.
Today: 12 trips · 3 in progress · 3 completed · 1 open discrepancy · 39/53 vehicles available. Demo data regenerates on request.
| SAMA circular 53506/198 (2018) | Where it is encoded | Status here |
|---|---|---|
| Crew of exactly three: driver, guard, companion — armed guard and companion, security-screened | Assignment validation; clearance-expiry alerts per crew member | live |
| Armoured to VPAM 6; maximum five-year service life; periodic preventive maintenance | Vehicle record with in-service date; service-life alert; eligibility check on dispatch | live |
| Licence renewal submitted three months before expiry | T-90 alert on operator licence (Odoo document tracking) | phase 1 |
| Dual supervision on ATM cassette work; reconciliation against machine meter readings | Two-actor custody events; counted-vs-declared with discrepancy workflow | live / ATM meters phase 2 |
| Encrypted communication devices; security containers with tracking and ink-staining | Device and container registry linked to trips; GPS feed integration | phase 2 |
| Security authorities informed of daily replenishment routes | Daily route manifest export from the ops board | phase 1 |
This spike is item 4 of our delivery roadmap: prove the ledger before committing dates. What follows is a two-week scoping workshop (GPS vendor, ZATCA issuer of record, hosting shape, custody chain, SLA numbers), then a four-month MVP that pilots on three to five of your vehicles before any full-fleet cutover. The proposal with three priced options has been shared with your team privately.
Built by BigBossBuilds. Demo users and data are fictional; amounts are illustrative.