# Air Maniax Ahmedabad — Staff Management CRM · Screen Inventory (Phase 1)

> **Source of truth:** `docs/PROJECT_PLAN.md` (Planning LOCKED, 2026-06-18) — §3 roles/hierarchy, §4 modules, §4a Photo Evidence, §4b Approval Cascade, §4c Multi-Branch/Game Zones, §6 Phase 1 detail. **Amended by `docs/CHANGE_LIST_v1.1.md` (applied 2026-06-19) — CL-1…CL-5.**
>
> **This document covers Phase 1 ONLY:** Users + **9-role Hierarchy** + RBAC · Roster (+ mid-shift reassign slice, CL-4) · Checklist (**Upload Check List** template CRUD CL-1, auto-assign, G/A responses, photo evidence, multi-level approval cascade, positive/negative reports) · **Action / Maintenance Work-Order** (CL-2). Phases P2–P5 are listed (not detailed) in the appendix.
>
> **Change List v1.1 applied (2026-06-19):** roles **7 → 9** (added **Maintenance Team Leader** + **Technician**, CL-2); checklist **template management** is now full CRUD ("Upload Check List", CL-1); A-items branch into an **Action / Work-Order** flow with a **single-track hold** (the inspection checklist is not Done until every A-item is resolved, CL-2); **Trainee TL = assist-only** (no approve, CL-3); **rotation-aware mid-shift reassignment** pulled into Phase 1 (CL-4); **Cleaning Supervisor assigns + fills** cleaning work (CL-5).
>
> **Terminology (per PROJECT_PLAN §4c):** **Game Zone** = a park/branch/site (exactly one Store Manager each). **zone / ride / activity zone** = an activity area *inside* a Game Zone (Trampoline, Toddler Zone, ZipZag, Warrior Assault, Ball Pool, Café, Reception, Party Rooms). Operation Head sees **all** Game Zones; Store Manager and below are scoped to **their one** Game Zone.

---

## Keys

**Surface key**
- `W` — Web (Next.js admin/manager panel, ~1440px)
- `M` — Mobile (Flutter floor-staff app, ~375px). *Phase 1 ships the web panel first; mobile-tagged screens are the floor surface delivered in P2 but specified here so the data/flows are locked now.*
- `Both` — shared flow, platform-specific chrome on each surface

**Surface decision rationale (PROJECT_PLAN §6 + brief):**
- **Operation Head (OH)** & **Store Manager (SM)** → **web-primary** (dashboards, roster build, approvals, deep reports) + a mobile companion for on-floor approvals.
- **Team Leader (TL) / Trainee TL** → **Both** (builds team roster + verifies checklists on web; works the floor + first-level approval on mobile).
- **Senior Court Monitor (SCM), Staff Court Monitor (MON), Cleaning Supervisor (CS)** → **mobile-primary** (fill checklist, upload photos, view own roster); a thin web read-only fallback only.

**Role codes** — `OH` Operation Head · `SM` Store Manager · `TL` Team Leader / Trainee TL · `MTL` Maintenance Team Leader *(CL-2, new)* · `SCM` Senior Court Monitor · `MON` Staff Court Monitor · `CS` Cleaning Supervisor · `TECH` Technician *(CL-2, new)*.

> **Hierarchy (9 roles, CL-2):** Operation Head → Store Manager → { **Team Leader / Trainee TL** → (Senior Court Monitor, Staff Court Monitor, Cleaning Supervisor) } **and** { **Maintenance Team Leader** → Technician }. Both the operations Team Leader and the Maintenance TL report to the Store Manager. A-items found on inspection checklists route operations-TL → Maintenance TL → Technician (see CL-2 in `CHANGE_LIST_v1.1.md`).

**Game Zone scope tag** — `[GZ: all]` OH only · `[GZ: own]` scoped to the user's Game Zone · `[GZ: own · team]` further scoped to the user's team within the Game Zone · `[GZ: n/a]` not Game-Zone-bound (auth/profile).

---

## Module 0 — Shared / Auth (all roles)

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `AUTH-LOGIN` | Login | Email/phone + password sign-in | Both | n/a | error (bad creds), locked (rate-limited), loading |
| `AUTH-FORGOT` | Forgot Password | Request reset link/OTP | Both | n/a | sent, not-found, throttled |
| `AUTH-OTP` | OTP / Token Verify | Verify reset code | Both | n/a | invalid, expired, resend |
| `AUTH-RESET` | Reset Password | Set new password | Both | n/a | weak-password, success |
| `AUTH-LOGOUT` | Logout Confirm | Confirm sign-out | Both | n/a | confirm modal |
| `SH-DASH-RESOLVE` | Role-Resolved Dashboard Router | Post-login redirect to the correct role dashboard (`OH-DASH`, `SM-DASH`, …) by role + Game Zone | Both | resolves | — |
| `SH-PROFILE` | My Profile | View own profile, role, reports-to, certified zones | Both | own | — |
| `SH-PROFILE-EDIT` | Edit Profile / Change Password | Edit own details + password | Both | own | save, password-change modal |
| `SH-NOTIF` | Notification Center | Checklist-due/overdue, send-back, roster-published alerts (in-app) | Both | own | empty, mark-read |

---

## Operation Head (OH) — web-primary + mobile companion · `[GZ: all]`

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `OH-DASH` | Operation Head Dashboard | Org-wide health: per-Game-Zone checklist compliance, **Pending** counts (daily/weekly/monthly/quarterly/yearly), overdue, roster gaps | W (+ M companion) | all | loading, per-GZ drilldown |
| `OH-GZ-LIST` | Game Zones List | All branches; one Store Manager each; status per GZ | W | all | — |
| `OH-GZ-NEW` | Add Game Zone | Create a branch (name, location, capacity, assign SM) | W | all | validation, assign-SM modal |
| `OH-GZ-EDIT` | Edit Game Zone | Edit branch + reassign Store Manager | W | all | reassign-SM confirm |
| `OH-GZ-DETAIL` | Game Zone Detail | One branch end-to-end: staff, rides, rosters, checklist status | W | all | tabbed |
| `OH-RIDE-MASTER` | Rides / Activity Zones Master | Maintain ride list per Game Zone (Trampoline, Toddler, ZipZag, Warrior Assault, Ball Pool, Café, Reception, Party Rooms) | W | all | add/edit ride, deactivate |
| `OH-USERS` | All Users (cross-GZ) | Every user across all Game Zones with role + reports-to | W | all | filter by GZ/role, search |
| `OH-USER-NEW` | Onboard User | Create user → role → reports-to → Game Zone → certified rides | W | all | validation, reports-to picker, cert-rides multiselect |
| `OH-USER-EDIT` | Edit User | Change role / reports-to / Game Zone / certs / deactivate | W | all | reassign-manager confirm, deactivate modal |
| `OH-USER-DETAIL` | User Detail | Profile + position in hierarchy + assigned checklists history | W | all | — |
| `OH-ROLES` | Roles & Access Matrix (read) | View the locked 7-role access matrix (RBAC reference) | W | all | — |
| `OH-HIER-TREE` | Hierarchy Tree (org-wide) | Visual 7-level tree across all Game Zones | W (+ M companion) | all | expand/collapse, per-GZ filter |
| `OH-ROSTER-ALL` | All-Zones Roster Overview | Cross-branch day/week/month roster + gap alerts | W | all | day/week/month toggle, gap-alert badge |
| `OH-CHK-OVERVIEW` | Checklist Status Overview | Every checklist across all GZ with live cascade status + **Pending** until OH-approved | W (+ M companion) | all | filter (GZ/ride/shift/period/status), overdue tab |
| `OH-CHK-APPROVE` | OH Approval / Verify | Final approval step: Approve (→ Done) or Send-back with reason; view photos | W (+ M companion) | all | photo viewer, send-back-reason modal, approve confirm |
| `OH-CHK-UPLOAD` | Upload Check List (template list + create) *(CL-1)* | Manage checklist templates across all GZ: list, **create/upload** new template (builder: name, frequency, ride, fill-role, sections→items, GZ scope) | W | all | builder wizard, duplicate, deactivate |
| `OH-CHK-TPL-ASSIGN` | Assign Check List (template → role/ride/shift) *(CL-1)* | Map a template to role / ride / shift / Game-Zone scope (feeds auto-assign) | W | all | assign modal, scope picker |
| `OH-CHK-TPL-EDIT` | Edit Check List (template) *(CL-1)* | Edit a template's items / mapping | W | all | builder wizard, change-items confirm |
| `OH-REP-POSITIVE` | Positive Report (org) | All-G/compliant checklists per GZ/ride/shift/day | W | all | export PDF/Excel, date range |
| `OH-REP-NEGATIVE` | Negative Report (org) | All A-items + their photos needing action, across all GZ | W | all | photo gallery, export, filter by GZ |
| `OH-REP-OVERDUE` | Overdue / Escalation Report | Missed/overdue checklists escalated to OH | W | all | export, drilldown to GZ |
| `OH-WO-OVERVIEW` | Action / Work-Order Overview (org) *(CL-2)* | All Action work-orders across GZ with state (Open → Routed → Assigned → In-progress / Held → Done / Outsourced) | W | all | filter (GZ/ride/state), drilldown |

---

## Store Manager (SM) — web-primary + mobile companion · `[GZ: own]`

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `SM-DASH` | Store Manager Dashboard | Own Game Zone health: checklist compliance, Pending awaiting SM approval, roster gaps, overdue | W (+ M companion) | own | loading, drilldown |
| `SM-USERS` | Team / Users (own GZ) | All staff in own Game Zone with role + reports-to | W | own | filter by role/ride, search |
| `SM-USER-NEW` | Onboard Staff (own GZ) | Create user (Limited: roles ≤ SM) → reports-to → certified rides; auto-tagged to SM's Game Zone | W | own | validation, reports-to picker, cert-rides multiselect |
| `SM-USER-EDIT` | Edit Staff (own GZ) | Edit role/reports-to/certs/deactivate within own GZ | W | own | reassign-manager confirm, deactivate |
| `SM-USER-DETAIL` | Staff Detail | Profile + sub-tree + checklist history | W | own | — |
| `SM-HIER-TREE` | Hierarchy Tree (own GZ) | TL → Monitors/Supervisor tree for own Game Zone | W | own | expand/collapse |
| `SM-ROSTER` | Roster Builder (own GZ) | Manual drag/shift builder, day/week/month, by ride+shift | W | own | conflict warn, leave overlay, publish modal |
| `SM-ROSTER-UPLOAD` | Roster Bulk Upload | Excel/CSV import with validation + error preview | W | own | validation-errors table, dry-run, commit |
| `SM-ROSTER-TEMPLATES` | Shift Templates | Manage Morning 10:00–16:00 / Evening 16:00–22:00 etc. | W | own | add/edit template |
| `SM-ROSTER-LEAVE` | Leave & Absence | Mark/approve leave; triggers gap alerts | W | own | approve/deny, gap-alert |
| `SM-ROSTER-PUBLISH` | Publish Roster | Publish a roster period → triggers checklist auto-assign | W | own | confirm (fires auto-assign), re-publish warn |
| `SM-CHK-OVERVIEW` | Checklist Status (own GZ) | All checklists in own GZ with live cascade status; Pending until SM+ approved | W (+ M companion) | own | filter (ride/shift/period/status), overdue tab |
| `SM-CHK-ASSIGN` | Checklist Assignment / Override | View auto-assigned checklists; manually assign/reassign to role/ride/employee/shift | W | own | assign modal, override confirm |
| `SM-CHK-APPROVE` | Store Manager Approval | Second-level approval: Approve (→ passes to OH) or Send-back; view all photos | W (+ M companion) | own | photo viewer, send-back-reason, approve confirm |
| `SM-CHK-UPLOAD` | Upload Check List (template list + create) *(CL-1, replaces view-only `SM-CHK-TEMPLATES`)* | Manage own-GZ templates: list seeded + custom, **create/upload** (builder: name, frequency incl. opening/closing, ride, fill-role, sections→items, GZ scope) | W | own | builder wizard, duplicate, deactivate |
| `SM-CHK-TPL-ASSIGN` | Assign Check List (template → role/ride/shift) *(CL-1)* | Map a template to role / ride / shift (feeds auto-assign) | W | own | assign modal, scope picker |
| `SM-CHK-TPL-EDIT` | Edit Check List (template) *(CL-1)* | Edit a template's items / mapping | W | own | builder wizard, change-items confirm |
| `SM-REP-POSITIVE` | Positive Report (own GZ) | All-G checklists per ride/shift/day | W | own | export, date range |
| `SM-REP-NEGATIVE` | Negative Report (own GZ) | All A-items + photos needing action in own GZ | W | own | photo gallery, export |
| `SM-REP-OVERDUE` | Overdue Report (own GZ) | Overdue/missed in own GZ | W | own | export, escalate-up indicator |
| `SM-WO-OUTSOURCE` | Outsource / Action-needed Inbox *(CL-2)* | Escalated work-orders the Maintenance TL could not fix internally — review + decide outsource; the only WO state that reaches SM | W (+ M companion) | own | WO detail, photos+reason, outsource confirm |

---

## Team Leader / Trainee TL (TL) — Both · `[GZ: own · team]`

> **Trainee TL = assist-only (CL-3, amends PROJECT_PLAN §9 #4):** a Trainee TL sees the same screens but **cannot Approve / Send-back / Route** — those actions are **disabled** (read/assist subset). Only a full Team Leader approves. Same nav, RBAC-gated buttons. (This is a permission split on the rows below, not a separate screen set.)

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `TL-DASH` | Team Leader Dashboard | Team status: checklists awaiting TL approval, team roster, overdue, **A-items awaiting routing** | Both | own · team | loading, drilldown |
| `TL-TEAM` | My Team | Monitors + Cleaning Supervisor reporting to this TL | Both | own · team | filter, search |
| `TL-USER-DETAIL` | Team Member Detail | Profile + certs + checklist history | Both | own · team | — |
| `TL-ROSTER` | Team Roster Builder | Create/edit roster for own team only (Team-level, per access matrix) | W (+ M view) | own · team | conflict warn, leave overlay, publish |
| `TL-ROSTER-REASSIGN` | Mid-Shift Reassign *(CL-4)* | Reassign a monitor to a different ride mid-shift (~every 2 hrs); on save the new ride's checklists auto-assign to the new monitor and the old ride's re-target to whoever now holds it (mobile updates live) | Both | own · team | reassign modal, re-target confirm, conflict warn |
| `TL-ROSTER-VIEW` | Team Roster View | Day/week/month team roster + gaps + **current-ride (live) column** | Both | own · team | day/week/month toggle |
| `TL-CHK-OVERVIEW` | Team Checklist Status | All team checklists with live cascade status (incl. **Action-in-progress / Held**) | Both | own · team | filter (ride/shift/period/status), overdue |
| `TL-CHK-VERIFY` | TL Verify / Approve | First-level approval: Approve (→ passes to SM) or Send-back with reason; view photos; **Route A-item → Maintenance TL** *(CL-2)* — checklist holds until all A-items resolved | Both | own · team | photo viewer, send-back-reason, approve confirm, **route-to-maintenance modal** |
| `TL-CHK-ASSIGN` | Team Checklist Assign (override) | Assign/reassign checklists within own team (Team-level) | W (+ M view) | own · team | assign modal |
| `TL-CHK-UPLOAD` | Upload Check List (team templates) *(CL-1)* | Create / assign / edit checklist templates for own team (team-scoped subset of the builder) | W (+ M view) | own · team | builder wizard, assign modal |
| `TL-CHK-FILL` | Fill Checklist (TL can also fill) | TL may tick/submit a checklist (per access matrix) | M (+ W) | own · team | G/A toggle, photo upload, submit |
| `TL-REP-NEGATIVE` | Team Negative Report | A-items + photos for own team | Both | own · team | photo gallery, export |

---

## Maintenance Team Leader (MTL) — web-primary + mobile companion · `[GZ: own]` *(CL-2, new role)*

> Reports to the Store Manager; heads the maintenance team. Receives A-item work-orders **routed by the operations Team Leader**, assigns them to a **Technician**, reviews the result, and **escalates only outsource cases** to the Store Manager (internal fixes close here).

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `MTL-DASH` | Maintenance Dashboard | Work-order health: new/routed, assigned, in-progress, held, returned, closed; overdue WOs | W (+ M companion) | own | loading, drilldown |
| `MTL-WO-QUEUE` | Work-Order Queue | All routed A-item work-orders for own GZ with state + source checklist | W (+ M companion) | own | filter (ride/state/priority), WO detail |
| `MTL-WO-DETAIL` | Work-Order Detail | One WO: source checklist + A-item + photos + reason history; actions (assign / reassign / escalate) | W (+ M companion) | own | photo viewer, action bar |
| `MTL-WO-ASSIGN` | Assign to Technician | Assign / reassign a WO to a Technician on the maintenance team | W (+ M companion) | own | technician picker, assign confirm |
| `MTL-WO-REVIEW` | Review Returned WO | Review a Technician's DONE (fixed) or RETURN-with-reason; close internally or escalate | W (+ M companion) | own | photos, close-confirm, escalate-to-SM modal |
| `MTL-WO-ESCALATE` | Escalate / Outsource Report | Compose the "action needed / outsource" report to the Store Manager (only outsource cases reach SM) | W (+ M companion) | own | reason + photos, send-to-SM confirm |
| `MTL-TEAM` | Maintenance Team | Technicians reporting to this MTL + their open WO load | W | own | filter, search |

---

## Senior Court Monitor (SCM) — mobile-primary · `[GZ: own · team]`

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `SCM-DASH` | Senior Monitor Home | Today's auto-assigned checklists + own shift | M (+ W read-only) | own · team | due-soon, overdue badges |
| `SCM-ROSTER-OWN` | My Roster | Own shifts (day/week/month); cannot edit | M (+ W read-only) | own | day/week toggle |
| `SCM-CHK-TODAY` | Today's Checklists | Auto-assigned checklists for this monitor's shift+ride; **updates live when the TL mid-shift-reassigns the monitor to a new ride** *(CL-4)* | M (+ W read-only) | own | not-started/in-progress/submitted chips, overdue, **ride-changed banner** |
| `SCM-CHK-FILL` | Fill Checklist | G/A per item + note + time + initials; **mandatory completion photo**; **per-A-item photo** | M (+ W read-only) | own | G/A toggle, note, camera/upload, A-item-photo-required block, save-draft |
| `SCM-CHK-SUBMIT` | Submit Checklist | Final review + submit (blocked until photos present) | M (+ W read-only) | own | missing-photo block, submit confirm |
| `SCM-CHK-STATUS` | My Checklist Status | Live cascade status of own submitted checklists (Pending until OH-approved) | M (+ W read-only) | own | sent-back banner (re-fill) |

---

## Staff Court Monitor (MON) — mobile-primary · `[GZ: own · team]`

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `MON-DASH` | Monitor Home | Today's auto-assigned checklists + own shift | M (+ W read-only) | own · team | due-soon, overdue |
| `MON-ROSTER-OWN` | My Roster | Own shifts only; read-only | M (+ W read-only) | own | day/week toggle |
| `MON-CHK-TODAY` | Today's Checklists | Auto-assigned by role/ride/shift (e.g. Trampoline Daily + Opening items); **updates live on TL mid-shift reassignment to a new ride** *(CL-4)* | M (+ W read-only) | own | status chips, overdue, **ride-changed banner** |
| `MON-CHK-FILL` | Fill Checklist | G/A per item + note + time + initials; mandatory completion photo; per-A-item photo | M (+ W read-only) | own | G/A toggle, camera, A-item-photo-required block, save-draft |
| `MON-CHK-SUBMIT` | Submit Checklist | Review + submit (photo-gated) | M (+ W read-only) | own | missing-photo block, submit confirm |
| `MON-CHK-STATUS` | My Checklist Status | Live cascade status; Pending until OH-approved; sent-back re-fill | M (+ W read-only) | own | sent-back banner |

---

## Cleaning Supervisor (CS) — mobile-primary · `[GZ: own · team]`

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `CS-DASH` | Cleaning Supervisor Home | Today's auto-assigned cleaning/hygiene checklists + shift + **cleaning-staff allocation summary** | M (+ W read-only) | own · team | due-soon, overdue |
| `CS-ROSTER-OWN` | My Roster | Own shifts only; read-only | M (+ W read-only) | own | day/week toggle |
| `CS-ASSIGN` | Assign Cleaning Work *(CL-5)* | Allocate cleaning staff to areas/zones (light task-allocation); the cleaning checklist is assigned to the CS who decides who works where | M (+ W read-only) | own · team | staff→area picker, allocate confirm |
| `CS-CHK-TODAY` | Today's Checklists | Auto-assigned cleaning/hygiene + zone checklists (CS **fills these himself**, CL-5) | M (+ W read-only) | own | status chips, overdue |
| `CS-CHK-FILL` | Fill Checklist | G/A per item + note + time + initials; mandatory completion photo; per-A-item photo | M (+ W read-only) | own | G/A toggle, camera, A-item-photo-required block, save-draft |
| `CS-CHK-SUBMIT` | Submit Checklist | Review + submit (photo-gated) | M (+ W read-only) | own | missing-photo block, submit confirm |
| `CS-CHK-STATUS` | My Checklist Status | Live cascade status; Pending until OH-approved | M (+ W read-only) | own | sent-back banner |

> **Note on the three filler roles (SCM / MON / CS):** their screen sets are intentionally parallel — same fill→submit→status flow — because per the access matrix none of them can approve; they only **tick + photo + submit**. The difference is *which* templates auto-assign (ride-safety vs cleaning/hygiene) and the certified-rides gate.

---

## Technician (TECH) — mobile-primary · `[GZ: own · team]` *(CL-2, new role)*

> Reports to the Maintenance TL. Does the physical fix on routed A-item work-orders. Marks DONE (with photo) → action closes; or, if it can't be fixed internally, RETURNS the WO with a reason → back to the Maintenance TL.

| Screen ID | Screen | Purpose | Surface | GZ scope | Key states / modals |
|---|---|---|---|---|---|
| `TECH-DASH` | Technician Home | My assigned work-orders + counts (assigned / in-progress / returned / done) | M (+ W read-only) | own · team | due-soon, overdue badges |
| `TECH-WO-TODAY` | My Work-Orders | WOs assigned to me by the Maintenance TL | M (+ W read-only) | own · team | state chips, overdue |
| `TECH-WO-DETAIL` | Work-Order Detail | Source checklist + A-item + issue photos + instructions; start work | M (+ W read-only) | own · team | photo viewer, start-work CTA |
| `TECH-WO-DONE` | Mark Done (fixed) | Mark the WO fixed; **mandatory fix photo** → action CLOSED | M (+ W read-only) | own · team | camera, photo-required block, done confirm |
| `TECH-WO-RETURN` | Return with Reason | Can't fix internally → add **reason** (+ optional photo) → returns to Maintenance TL | M (+ W read-only) | own · team | reason required, return confirm |

---

## Phase 1 — Summary counts

### Screens per role (incl. shared) — *updated for Change List v1.1*

| Role group | Screens | Notes |
|---|---:|---|
| Shared / Auth (Module 0) | 9 | used by all roles |
| Operation Head | 22 | web-primary, all Game Zones (+4: Upload Check List CRUD ×3, Work-Order overview) |
| Store Manager | 21 | web-primary, own Game Zone (−1 view templates, +3 Upload CRUD, +1 Outsource inbox) |
| Team Leader / Trainee TL | 12 | Both surfaces (+ mid-shift reassign, team Upload Check List) |
| **Maintenance Team Leader** *(CL-2, new)* | 7 | web-primary, own GZ — work-order queue/assign/review/escalate |
| Senior Court Monitor | 6 | mobile-primary |
| Staff Court Monitor | 6 | mobile-primary |
| Cleaning Supervisor | 7 | mobile-primary (+ assign-cleaning-work, CL-5) |
| **Technician** *(CL-2, new)* | 5 | mobile-primary — my work-orders, mark-done, return-with-reason |
| **Total Phase 1** | **95** | was 73; +22 from CL-1…CL-5 |

### Screens per surface (primary surface counted once)

| Surface (primary) | Count |
|---|---:|
| Web-primary (W, OH + SM + MTL, with M companion) | 50 |
| Both (Auth 9 + TL 12) | 21 |
| Mobile-primary (M, SCM + MON + CS + TECH, with W read-only) | 24 |
| **Total** | **95** |

> "Companion" / "read-only" secondary surfaces are not double-counted. Phase 1 web panel delivers the W-primary + Both set first (PROJECT_PLAN §8), with the M-primary fill flow following in P2. The new **Technician** surface is mobile-primary (companion to the floor app); the new **Maintenance TL** is web-primary with a mobile companion.

---

## Appendix — Future phases (NOT in this screen list)

Per PROJECT_PLAN §5, the following modules are out of Phase 1 scope and are **not** inventoried here. They will get their own screen lists at their phase kickoff:

| Phase | Modules (not detailed here) |
|---|---|
| **P2** | Flutter staff app hardening — full mobile build of the M-tagged checklist + roster screens above; push notifications |
| **P3** | **Staff Rotation** engine (full auto 2–3 hr rotation board, log, exposure tracking, override) — *note: a slice (manual TL mid-shift reassign + checklist re-targeting) is pulled into Phase 1 per CL-4* + **Capacity (400)** dashboard (live headcount, occupancy meter, breach block) |
| **P4** | **Training / LMS** (course library, auto-induction with gated floor access, role training, certificates, refreshers) |
| **P5** | **Event Planning** (birthday/corporate/private/camps, auto staff allocation, event checklist) + **School Visits** (booking, safety checklist, repeat history) + **deep Reporting & Analytics** (roll-up dashboards, scheduled exports) |

Cross-cutting **Notifications** (FCM push + optional WhatsApp/SMS) is partially present in Phase 1 as `SH-NOTIF` (in-app) and expands in P2.

---

*Generated for Air Maniax Staff Management CRM — Phase P / Step 1 (Planning → Design handoff). Consistent with `docs/PROJECT_PLAN.md` (LOCKED 2026-06-18). **Amended 2026-06-19 per `docs/CHANGE_LIST_v1.1.md` (CL-1…CL-5): 7→9 roles, 73→95 screens.** Save location: `docs/design/SCREEN_LIST.md`.*
