P-07b · Staff: the Final approval Work page (stage-first layout)
SOP:
Payroll_Processing.md§6 (final approval and export). This page describes how staff work Gate 3 on the console; the SOP is unchanged. Actors: Payroll Lead (gives it), Payroll Executive (waits). Pre-state: a payroll month inAPPROVED(the client approved, or a Payroll Lead approved without them). Post-state: the final approval is recorded and the Infotech workbook is built in the same request (READY_FOR_EXPORT→EXPORTED); today's page takes over with the Infotech hand-off.
Since 31 Oct 2026 (branch feat/work-page-stage-first) a month at Final approval opens on the stage-first frame, the same page component as Validation (P-04b) and Client approval (P-09b). A failed export (READY_FOR_EXPORT) and every later stage keep today's page, which already retries the export. ?layout=classic shows today's page for any month. No server change.
What the page shows, top to bottom
- Header with the "Final approval" pill and when the month got here. This stage's job: "the last look before October's figures go to Infotech"; How this stage ends: a Payroll Lead who did not prepare the month approves; that builds the Infotech file; a later change to the figures voids it and asks the client again.
- The client's approval, one line: "Approved by Hafiz Rahman on 24 Oct, on their payroll link", or "Approved by Sarah Chen (Payroll Lead) on 10 Nov, without the client's approval: ‹reason›" (amber). Read from the month's Who did what.
- Bank accounts changed this month, when there are any: each person, the account ending, and whether a Lead checked it. Bank changes are where a payroll mistake or fraud most often hides, so they come first, with a tile.
- Open now tiles: bank changes, changes moving to next month (waiting on a document), final pay held, month-wide items.
- Employee list on Pay result: "What the client approved, and what goes to Infotech": the whole list, last month → this month, why, the total and what it leaves out. The Work view keeps every change of the month on its person.
- Needs attention (month-wide warnings, e.g. "G3 final approval pending"), Documents folded, Background (ask the client for something, settled attendance, closed warnings, cancel).
- Bottom bar: for an eligible Lead, "Look over the figures, then approve. This builds the Infotech file." and Approve & export…, which opens a confirm listing the total and people, who is left out, the bank changes, the client's approval, and that this builds the Infotech file. For a Lead who prepared the month, or while the export would refuse (unverified CPF rates, an open blocking issue…), the server's own reason. For an Executive: "Waiting for a Payroll Lead's final approval. Nothing to do here."
Added on 1 Nov 2026 (gap review)
- Let through at validation: each pay movement a Lead accepted and each warning a Lead overrode, with who and why, on the page and in the confirm dialog ("Nothing was accepted or overridden at validation" when none).
- The dialog's last line states the whole rule after the click: a document that arrives goes into next month unless a Payroll Lead brings it in; a change made to the figures voids the approval and asks the client again.
- The Executive's bar names only the Leads who can give it (not one who prepared the month, unless all did).
- The Executive is told when the Infotech file is made: a bell right after the export (final approval or regenerate), "The Infotech file is ready: download it and key it into Infotech, then upload Infotech's report." Before, the first word was the 02:00 sweep.
Manual test (seeded stage companies, built app)
| Company | Who | What you should see |
|---|---|---|
| Dev Stage 08 Final Approval Due | Lead | Approve & export… → confirm → the file is generated and today's page takes over. |
| Dev Stage 08 Final Approval Due | Executive | Waiting for a Payroll Lead; the button disabled. |
| Dev Exception 29 Lead Prepared The Month | Lead | Refused: "You prepared this cycle…", naming who can. |
| Dev Exception 23 Link Approval | Lead | Ben Koh's leaving moves to next month (a tile and his row), not a stopper. |