02 — User Personas (Students Module)
- 1. Organization Admin — "Ravi, ERP owner"
- 2. Admission Staff / Receptionist — "Priya, front office"
- 3. Teacher / Class Teacher — "Ananya, Grade 5-A teacher"
- 4. Parent / Guardian — "Farid, father of two"
- 5. Student Self — "Meera, Grade 6"
- Persona → capability matrix (derived from permissions constants only)
Five personas exercise the Students module. Role → permission vocabulary derives from
permissions.constants.ts:25-28(student.read/.create/.update/.delete); note enforcement is(planned)(see 01 §12 OQ-4). Persona facts marked(forward-looking)reflect module docs (attendance/fees/results tabs) that read other modules' APIs.
1. Organization Admin — "Ravi, ERP owner"
| Profile | 40s, principal/owner of a 1200-student school. Runs the ERP end to end; reviews numbers every evening. |
| Goals | Roster integrity (no dupes, correct classes), clean academic-year rollover, sees statuses at a glance, imports the new batch in September without IT help. |
| Pain points | Duplicate admission numbers (409s), stale archived students polluting the list, transfer mistakes (enrolling into wrong year). |
| Behaviours | Uses desktop/web; bulk import wizard; reviews per-row CSV error report; audits academic history before approving transfers. |
| Permissions | student.read, student.create, student.update, student.delete + user.*, academics read (permissions.constants.ts:25-28,6-11). |
| Key screens | Students list, bulk import wizard, student detail → academic-history tab, transfer form. |
2. Admission Staff / Receptionist — "Priya, front office"
| Profile | 25s, first point of contact; admits 10–30 students/week during admission season. |
| Goals | Create a student profile in under 2 minutes with the parent present; upload the birth certificate immediately; link the parent so fee/results messages reach home. |
| Pain points | Forgetting that the user record must exist before POST /students; typing admission numbers; re-finding a student's documents. |
| Behaviours | Phone-first; uses create wizard with camera capture for documents (capture → POST /students/:id/documents); checks duplicate admission number inline before submit. |
| Permissions | student.create, student.read (+ user.create for the identity step). |
| Key screens | Create wizard (steps: identity → academics → extras → confirm), document upload, parent link sheet. |
3. Teacher / Class Teacher — "Ananya, Grade 5-A teacher"
| Profile | 32s, class teacher of 5-A; also marks attendance and homework. |
| Goals | Find any child by name/admission number quickly; see profile photo + parent pickup flags; view academic history before a parent meeting. |
| Pain points | Unfilterable rosters (GET /students returns everything — client-side filtering today, OQ-2), statuses not obvious in the list. |
| Behaviours | Uses search + filter chips; opens student detail; rarely mutates (no create/transfer). |
| Permissions | student.read (+ attendance.mark etc. per other modules). |
| Key screens | Students list (search), student detail → profile + documents tabs. |
4. Parent / Guardian — "Farid, father of two"
| Profile | 40s, two children at the school; busy; uses the app on mobile. |
| Goals | See both children in one place, their class, documents (fee receipts live in Fees module), and be marked as primary guardian so the school calls him first. |
| Pain points | None today server-side — parent has no self-service read of the student profile (OQ-1); current access is only GET /parents/:id/students which returns link rows, not student details (parent.service.ts:69-72). |
| Behaviours | Reads only; receives in-app notifications (ParentCreated → in-app, event-queue-map.ts:37); contacts office for any change. |
| Permissions | None defined for parents (OQ-10); UI shows read-only surfaces. |
| Key screens | (forward-looking) Children list → child overview. |
5. Student Self — "Meera, Grade 6"
| Profile | 11s; uses the app for homework/results (other modules). |
| Goals | See her own class, academic history (promotions), and documents; keep her avatar current. |
| Behaviours | Read-only; avatar upload via POST /users/:id/avatar (users.controller.ts:95-102) (forward-looking). |
| Permissions | None in code for self-service students (OQ-1). |
| Key screens | (forward-looking) My Profile → academic history, documents. |
Persona → capability matrix (derived from permissions constants only)
| Capability | Admin | Admission | Teacher | Parent | Student |
|---|---|---|---|---|---|
List/search students (student.read) | ✓ | ✓ | ✓ | — | — |
Create student (student.create) | ✓ | ✓ | — | — | — |
Update profile (student.update) | ✓ | — | — | — | — |
Delete (soft) (student.delete) | ✓ | — | — | — | — |
| Transfer / graduate / archive | via student.update semantics | — | — | — | — |
| Upload documents | via file.upload + student.update (permissions.constants.ts:87) | ✓ | — | — | — |
| Bulk import | (planned) — no student.import constant exists (blueprint lists it, code doesn't; permissions.constants.ts has only the four student.*) | — | — | — | — |
| Link parents | via parent routes (no parent.* perms — OQ-10) | ✓ | — | — | — |
| Self view | — | — | — | (planned) OQ-1 | (planned) OQ-1 |
Notes:
student.promote/student.importare in the blueprint (04-Modules/Students.md:70-76) but absent frompermissions.constants.ts— flag if import UI needs a dedicated gate.- The bulk controller (
bulk.controller.ts:28-31) is JWT-only today — import is technically open to any authenticated user untilRbacGuardlands (OQ-4).