04 — Information Architecture (Staff Module)
- 1. Position in the global IA
- 2. Staff module map
- 3. Entry points
- 4. Information hierarchy of a staff record
- 5. Navigation model (per shared shell)
- 6. Screen inventory (short form)
- 7. Information hygiene rules
Where Staff screens live in the global shell (00-shared/05) and how they nest. Navigation/routing decisions not fixed by backend are
(proposed); the permission gate is the client mirror ofpermissions.constants.ts:19-24(server RBAC on these endpoints is not wired —staff.controller.ts:21, OQ-1).
1. Position in the global IA
Global destination table: Staff → /staff → roles: admin, HR
(00-shared/05 §2). Phone: bottom NavigationBar (≤ 5 destinations) with Staff
under the drawer when not a primary tab; tablet/desktop: NavigationRail
(00-shared/05 §3).
2. Staff module map
/staff (permission: staff.read)
├── list (staff list: filters, pagination)
├── new (create form — staff.create)
└── :id (detail — staff.read)
├── (tabs: Overview | Employment | Metadata — proposed)
└── edit (staff.update)
/departments (permission: department.manage)
├── list
├── new (department.create → POST /departments)
└── :id
└── edit
/designations (permission: designation.manage)
├── list
├── new
└── :id
└── edit
Route constants mirror the API nouns exactly (staff.controller.ts:20,
department.controller.ts:22, designation.controller.ts:22).
3. Entry points
| From | To | Why |
|---|---|---|
| Dashboard | /staff | Org chart / roster overview (proposed) |
| Navigation (admin/HR) | /staff | Primary management surface (00-shared/05 §2) |
| Users detail | /staff (filtered) | Link userId → staff profile (proposed) — users and staff are separate collections (RELATIONSHIPS.md:28) |
| Teachers detail | /departments/:id | Teacher references the same catalogs (teacher.schema.ts:22-26) |
| Global search (when backend supports staff) | /staff/:id | Search indexer currently skips staff (OQ-6) |
4. Information hierarchy of a staff record
- Identity anchor:
employeeNumber— unique per tenant (staff.schema.ts:57) and the label users type/quote. - Org placement:
departmentId→designationId(both optional refs,staff.schema.ts:29-33). - Employment terms:
employmentType(enum, defaultfull_time),joiningDate,salaryGrade(staff.schema.ts:35-47). - Lifecycle:
statusenum (staff.schema.ts:7-12,48-49). - System meta:
version,createdAt,updatedAt(base.schema.ts:29-34) — displayed in an "Audit" tab(proposed);metadatapassthrough (staff.schema.ts:51-52).
5. Navigation model (per shared shell)
- Phone: list → push detail (stack); tabs inside detail; FAB per screen
(
00-shared/05 §6-7). - Tablet ≥ 840 dp: master-detail — list left, detail right
(
00-shared/04 §6,00-shared/05 §3). - Desktop: same master-detail + breadcrumbs (
Staff / Administration / HR) at depth > 2 (00-shared/05 §3). - Deep links
(proposed):studylyon://staff/:id,studylyon://departments/:id,studylyon://designations/:id.
6. Screen inventory (short form)
| # | Screen | Route | Perm | Backend source |
|---|---|---|---|---|
| S1 | Staff list | /staff | staff.read | staff.controller.ts:27-28 |
| S2 | Staff detail | /staff/:id | staff.read | staff.controller.ts:30-31 |
| S3 | Create staff | /staff/new | staff.create | staff.controller.ts:24-25 |
| S4 | Edit staff | /staff/:id/edit | staff.update | staff.controller.ts:33-34 |
| S5 | Deactivate flow | modal on S1/S2 | staff.delete | staff.controller.ts:36-37 |
| S6 | Department list | /departments | department.manage | department.controller.ts:29-30 |
| S7 | Department detail | /departments/:id | department.manage | department.controller.ts:32-33 |
| S8 | Department form (create/edit) | /departments/new, /departments/:id/edit | department.manage | department.controller.ts:26-27,35-40 |
| S9 | Designation list | /designations | designation.manage | designation.controller.ts:29-30 |
| S10 | Designation detail | /designations/:id | designation.manage | designation.controller.ts:32-33 |
| S11 | Designation form (create/edit) | /designations/new, /designations/:id/edit | designation.manage | designation.controller.ts:26-27,35-40 |
Full detail in 05_Screen_Inventory.md, 06_Screen_Specifications.md.
7. Information hygiene rules
- Employee number and names display in
mono/ tabular figures (00-shared/02 §2). - Status is never color-only: badge + icon + label (
00-shared/09 §9). - Missing optional refs (no department/designation) render "—" with an "assign" affordance, never a broken ref.
- Deleted heads (
headIdrefs a soft-deleted staff) render as unassigned(proposed)— server stores the bare ObjectId (department.schema.ts:15-16).