Feature Package PK-02 + PK-06 — Housekeeping & Staff Workforce
Status: Package Specification
Domain: Housekeeping / Rooms Division / Staff
Maps to: Process 2 (Task Lists, Checklists & Gates), Process 3 (Schedules & Resource Booking), Playbooks H-2 & H-7
External integration: Synapse (staff chat), Keycloak/APF (permissions)
1. What These Packages Do
PK-02 (Housekeeping) gives the rooms division one auditable system for room turnover, inspections, and clean sign-off. PK-06 (Staff & Workforce) gives department heads shift rostering, attendance, and role-based permissions. Together they replace whiteboards, WhatsApp rosters, and paper checklists.
2. Features & Functionality — Housekeeping (PK-02)
| Feature | What it does | Who uses it | What stands behind it |
|---|---|---|---|
| Room turnover task | On guest departure, a housekeeping task claim is created and bound to the room | Housekeeping supervisor, room attendant | cns://workflow/task claim; truth_edge task→room |
| Checklist execution | Attendant works a declarative checklist (linens, amenities, sanitization); records photo evidence | Room attendant | lookup.claims.checklist.v1; photo hash in claim.evidence; MinIO |
| Inspector sign-off | A different staff member inspects and signs off; room moves to READY | Inspector, supervisor | SoD: inspector ≠ cleaner (lookup.claims.sod.v1); fn::poce::record_step |
| Room status streaming | Room status (DIRTY → CLEAN → READY → OCCUPIED) streams to front desk in real time | Front desk agent | NATS WebSocket workflow.{property}.housekeeping.* |
| Public-area rounds | Scheduled rounds for lobbies, corridors, public restrooms; missed rounds re-schedule | Housekeeping supervisor | Kestra tick → public-space.round.fired |
3. Features & Functionality — Staff Workforce (PK-06)
| Feature | What it does | Who uses it | What stands behind it |
|---|---|---|---|
| Shift roster | Department head publishes shifts by role (attendant, technician, front desk) | Department head, shift scheduler | Staff→shift→role truth_edge; Keycloak/APF permissions |
| Role-based access | Each staff member sees only the functions their role permits in their property scope | All staff | APF fn::app_perms::resolve_effective(user, app, scope) |
| Attendance & time | Clock-in/out linked to shift; exceptions flagged for payroll | HR, payroll | Session context + login audit (s146) |
| Staff chat | E2E-encrypted discussion rooms bound to operational threads | All staff | Synapse Matrix room; integration_entity mirror; cns://collaboration/discussion_comment claims |
4. Workflow (Housekeeping)
- Guest departs → occupancy lease ends → housekeeping task created for room
- Task assigned to attendant (shift roster binds staff)
- Attendant completes checklist; photos to MinIO
- Inspector signs off (different person) → room → READY
- Front desk sees room ready; new occupancy lease can bind
- PoCE receipt records attendant, inspector, timestamps, photo hashes
5. Guard Rails
- No auto-mark-clean without inspector sign-off
- No room released to a new guest while a task is OPEN
- Cleaner cannot inspect their own room (SoD)
- No invented checklist items; bind from governed lookup
- No hardcoded staff counts or productivity metrics on dashboards