When HR approves a new hire, they raise an IT Registration Request (ITR). It first goes to the Founding Executives for review and organisation-email provisioning β IT can only act once the card shows EMAIL ASSIGNED (status registration_ready). Requests still showing PENDING are waiting on the Exec, not on IT.
Who can register? Any IT staff member can process a queue request. IT Head and SA can also register users directly without a queue request using + Register User.
Notification chain (every hand-off emails the next actor): HR submits β the Founding Executives are emailed that a request awaits review Β· Exec approves β HR gets an in-app alert Β· Exec provisions the org email β support@ and hr@ are emailed that the record is registration-ready Β· Exec declines/discontinues β HR is alerted + emailed with the reason Β· IT completes the registration β HR is alerted + emailed that the account is live. If a stage seems stalled, check the Mail Engine panel (Mail Queue section) for the dispatch β and a daily watchdog automatically re-reminds the responsible actor (Exec / IT / VMEM) for any registration stuck longer than 48 hours.
- 1Find the pending ITR in the queue. Click Start Registration β this pre-fills the registration form with the applicant's details.
- 2Verify the full name, personal email, and org email (e.g. john.doe@dttasa.org). The org email must follow the correct naming convention.
- 3Set the department, functional role, access level (default L2 for new staff), and joining date.
- 4A 4-digit PIN is auto-generated. You can regenerate it with the refresh button. The PIN is included in the welcome email.
- 5Click REGISTER & SEND WELCOME EMAIL. This creates the Firebase Auth account (via an isolated secondary session β your own login is untouched), writes the user profile + private personal data + hashed security PIN, seeds the leave balance and the 90-day probation record, alerts rota managers, queues the welcome emails, and pushes a Digital ID job to Communications.
- 6Final step β Complete. Open the person's queue card and click Complete. This verifies the account exists AND matches the exec-approved email, ticks the onboarding steps, advances the recruitment pipeline, and notifies HR. Registration alone does NOT close the request.
ITR Lookup: anyone arriving with an ITR reference (e.g. ITR-2026-007) β or just a name or email β can be looked up from the Registration Queue header. The record modal shows full identity & contacts, the complete lifecycle timeline (who actioned each stage and when, WAT), decline reasons, credential-hold state, and linked applicant records β everything IT needs to address a request on the spot.
Prefill & auto-match: Start Registration prefills everything HR entered β name, emails, phone, country, gender, nationality, photo (counts as the profile photo unless you upload a replacement), department/role (locked on pipeline requests), contract, working days and shifts. If HR's value isn't in a dropdown's list it is added automatically, and the timezone snaps to the selected country (you can still override it). The floating HR CANDIDATE DATA panel shows HR's original entries so you can match against the paperwork.
Two welcome emails (staff): the org inbox receives the portal login details (temp password, Employee ID, EOM PIN); the personal email receives only the org-email/webmail credentials. Volunteers receive NOTHING yet β their credentials are held until the VMEM approves the department activation (the VMEM is notified automatically at Complete).
Email confirmation: After registration, verify in the Mail Queue that the welcome email was sent successfully. If it shows ERROR, use Retry. Note: only a System Administrator account can perform the final Register action.
| Action | Who | Where |
|---|
| Mark ITR steps complete (system login, monday.com, equipment) | Any IT staff | Onboarding IT Steps section |
| Verify welcome email delivered | Any IT staff | Mail Queue section |
| Confirm onboarding steps with HR | Any IT staff | Via HR Board or direct communication |
| Status | Meaning | IT Action |
|---|
| PENDING | HR submitted β awaiting Executive review | None (Exec has been emailed) |
| EXEC APPROVED | Exec approved β org email not yet provisioned | None (Exec finishing email setup) |
| EMAIL ASSIGNED | registration_ready β org mailbox provisioned; support@ emailed | Start Registration β Register β Complete |
| CORRECTION REQUIRED | Exec declined for incorrect details β HR alerted + emailed; HR corrects and resubmits from the pipeline drawer (same reference) | Wait for the corrected resubmission |
| AWAITING VMEM | pending_vmem_approval β volunteer registered; credentials HELD until VMEM activates the department (VMEM notified) | None β VMEM acts |
| REGISTERED | Complete step done β account verified, HR notified, pipeline advanced | No further action |
| DISCONTINUED / CANCELLED | Exec discontinued the process, or IT Head/SA cancelled | No action β archive |
Cancelling a request: Only IT Head or SA can cancel an ITR. Use this only if the hire did not proceed. Always add a reason.
When the ITR record came from the HR recruitment pipeline (i.e. sourcePipelineId is set on the record), the Department and Functional Role selects are locked on the registration form β shown as disabled with a gold border and a "π Locked β set by Head of HR on the recruitment request" tooltip.
This is intentional. The Head of HR set those values once, on the originating recruitment request. They flow through every downstream form so an IT staffer cannot accidentally reclassify the new starter into the wrong dept or role.
| Scenario | What IT does |
|---|
| ITR came from HR pipeline (normal path) | Dept + Role visible but locked. Proceed with the rest of the form. |
| Dept or Role is genuinely wrong | Ask the Head of HR to edit the underlying recruitmentRequest. Do not work around the lock by editing the ITR or the user doc post-registration. |
Manual / SA-direct registration (no sourcePipelineId) | Dept + Role show as editable selects β IT picks them. |
When you complete an ITR that came from the recruitment pipeline, the system stamps three new fields onto the new users/{uid} record so the offboarding sweep can later find the staff member's original applicant trail:
| Field | What it holds |
|---|
personalEmail | The email the applicant originally applied with (different from their @dttasa.org work email). |
applicantId / linkedFromApplicantId | The original recruitmentApplicants doc ID. Stable across email changes. |
linkedAt | Server timestamp at conversion β "joined from application X on date Y". |
Symmetrically, the original recruitmentApplicants/{id} doc gets stamped back with linkedUid, convertedToStaffAt, and convertedToStaffByUid. This bidirectional link is what powers the SA "Delete User Completely" applicant-sweep and the recruitment Re-Hire warning later.
You don't need to do anything different here β the stamping happens automatically inside Complete Registration. This entry is documented so you understand why the linkage exists if you ever need to support an SA offboarding or applicant-deletion query.
The portal's role-tier ladder is set at registration via the accessLevel field on users/{uid}:
| Level | Tier | Source field |
|---|
| 5 | SuperAdmin (Founding Executive) | Email allow-list |
| 4 | Head of Department | accessLevel: 4 + dept-specific flag (hrLeadFlag, isHeadOfOperations, isHeadOfIT, isHeadOfCommunications, isDeptHead) |
| 3 | Deputy Lead (NEW β added 2026-05-25) | isDeputyLead: true + deputyOfDept: '<canonical dept name>' |
| 2 | Observer (read-only) | accessLevel: 2 |
| 1 | Staff (default) | accessLevel: 1 |
Default at IT registration: always accessLevel: 1. Do NOT manually set isDeputyLead or any L4 flag during registration β those are managed separately by SA Control (or by the Head of the new staff member's department after registration). The Deputy promotion flow is via the makeDeputy Cloud Function, never a direct Firestore write.
If you ever see an ITR form pre-filling an accessLevel higher than 2, double-check with the Head of HR before completing β accidental over-privileging is the kind of error system_audit_log tracks but cannot prevent at the form layer.
Three Cloud Functions in functions/index.js manage Deputy Lead state β IT does not call these directly, but should understand them for support purposes:
| Function | Caller | Effect |
|---|
makeDeputy({ uid, reason }) | SA (any dept) OR Head of target's dept | Flips isDeputyLead:true, deputyOfDept, bumps accessLevel to 3, writes audit + notifications. |
revokeDeputy({ uid, reason }) | SA OR Head of Deputy's home dept | Flips flags off, demotes to L1, writes audit + notification. |
Where the buttons live:
- HR Head: profile drawer of any HR-dept staff member in HR Ops Monitor β Make Deputy / Revoke Deputy.
- Other Heads: same pattern on their dept dashboards (Ops Dashboard, IT Board, Comms Board, etc.).
- SA:
sa-control.html β Deputy Leads section. Lists every active Deputy across all depts + a search-and-promote form for any user.
For IT support queries: if a user reports "I can't do X that I used to be able to do", check users/{uid}.isDeputyLead and deputyOfDept. A revoked Deputy is back at L1 β check the audit log under action: 'deputy_lead_revoked' for the reason. SA or the Head can re-promote with one click if it was a mistake.