# F-187 — Implementer evidence ## Delivered - Added reversible migration `055_pos_cashier_lifecycle.js` with active/deactivated/deleted account lifecycle, consistency constraint and cashier status index. - Extended backoffice domain roles to include POS manager/cashier and lifecycle fields. - Blocked inactive/deleted accounts in both credential lookup and live session authentication. - Made cash-session opening transactional and serialized against lifecycle mutation using the same `backoffice_users ... FOR UPDATE` row lock. - Extended admin-only POS user list with lifecycle status. - Added admin-only cashier activate/deactivate and soft-delete endpoints. - Lifecycle mutations reject open cash sessions, revoke every live session, preserve the cashier row/UUID and write an atomic security audit event. - Added TPV admin cashier UI for create, status display, confirmed deactivate/reactivate and irreversible deletion. - Added real PostgreSQL integration coverage in `pos-cashier-lifecycle.itest.ts`. ## Validation - Backend typecheck: PASS. - Admin typecheck: PASS. - Backend production build: PASS. - Admin production build: PASS (only pre-existing Turbopack upload tracing warnings). - Targeted ESLint for every changed TypeScript/TSX file: PASS. - Prettier for every changed source/migration/test file: PASS. - POS unit tests: 12/12 PASS. - Full unit suite without DB: 268/268 PASS. - F-187 PostgreSQL integration: 4/4 PASS. - Full real-PostgreSQL sequential suite: 354/354 PASS across 79 files. - Migration fresh up / second no-op / full down / re-up: 4/4 PASS. - `git diff --check`: PASS. - `./scripts/verify.sh`: PASS. ## Repository baseline notes - Full backend lint remains red on 9 pre-existing errors in thumbnail script, log broadcaster, an old POS test, and reporting files; all F-187 changed files pass targeted ESLint and Prettier. - Boundary check retains the single pre-existing security-module import violation; F-187 adds no module-boundary violation. - Full admin lint has zero errors and 23 pre-existing warnings. - Existing untracked upload JPGs were not touched.