| Step | Action | System | Responsibility |
|---|---|---|---|
| 1 | Invitation sent via /onboarding/ |
Django App | Practice Manager |
| 2 | User accepts invitation, sets password | Django App | User |
| 3 | Role assigned (StaffRoleRecord created) |
Django App | System |
| 4 | Django Group membership propagated | Django App | Automated |
| Step | Action | System | Responsibility |
|---|---|---|---|
| 1 | Old role deactivated in StaffRoleRecord |
Django App | Practice Manager |
| 2 | New role assigned via onboarding | Django App | Practice Manager |
| 3 | Django Group membership updated | Django App | Automated |
| Step | Action | System | Responsibility |
|---|---|---|---|
| 1 | User marked is_active=False |
Django App | Practice Manager |
| 2 | Signal auto-deactivates all StaffRoleRecord.is_active |
Django App | Automated |
| 3 | StaffOnboardingAudit records the event |
Django App | Automated |
| 4 | Access review confirms deactivation | Manual | Compliance |