Finalize and close a cycle
Who does this: Payroll Executive · Payroll Lead When: The client has approved the cycle and you've cross-checked the BreezyCorp approval report against the Infotech output Result: The cycle moves
APPROVED → FINALIZED → CLOSED. It becomes immutable except by deliberate Payroll Lead reopen. The retention clock starts ticking.
This is the last thing you do on a cycle. Finalize is the formal sign-off that the prepared payroll has been disbursed and the books match. Close moves the cycle into the read-only archive set; from there the only thing that can happen is the monthly retention job eventually transitioning it to ARCHIVED per the retention policy.
You'll usually finalize and close the same day the client approves and you've finished CPF / bank submission outside the platform. Don't finalize until the disbursement is genuinely done — once finalized, no further changes are accepted on this cycle.
Before you start
- [ ] Cycle is in APPROVED status. (If it's in
CLIENT_REVIEWorREVISION_REQUESTED, the client hasn't signed off yet.) - [ ] You've reviewed the BreezyCorp approval report alongside the actual Infotech output and confirmed the figures match.
- [ ] Bank disbursement, CPF submission, and (if applicable) IR21 acknowledgements have been completed externally.
- [ ] You've gathered any post-payroll evidence files you want preserved with the cycle (bank confirmation, CPF receipt, IR21 acknowledgement). These attach to the cycle but don't block the transition.
TIP
The Singapore disbursement window is tight — finalize on the same business day you push to the bank, not earlier. A cycle in APPROVED is paused; one in FINALIZED is committed.
Steps
1. Capture post-payroll evidence (recommended)
While the cycle is still in APPROVED, attach evidence files. They're optional but heavily recommended for audit trail.
- Open the cycle in the staff dashboard.
- Click Capture Evidence on the cycle header.
- Upload each artifact:
- Bank disbursement confirmation — screenshot or PDF from your banking portal.
- CPF submission acknowledgement — the receipt from CPF Board.
- IR21 acknowledgement — only if there were foreign leavers this cycle.
- The files appear in the cycle's Files tab tagged as evidence.
2. Finalize
- On the cycle header, click Finalize.
- The cycle's status badge flips from
APPROVEDto FINALIZED. - The cycle becomes read-only for submissions, exports, and approvals — no further intake actions are accepted.
3. Close
- On the cycle header (now showing the cycle in
FINALIZED), click Close. - The status badge flips to CLOSED.
- The cycle disappears from active dashboards and surfaces under the closed-cycles filter on the client's Cycles list.
NOTE
When the month closes on approval of the payment instruction, the client is told, once per month: "Your {Month YYYY} payroll is done. Salaries go out on {date}. Your employees will get their payslips from Infotech." (the date only when a payment date is recorded). It goes by email to each payroll sender and to the approver. There is no "your payslips are ready" message.
How to know it worked
- The cycle's status badge reads CLOSED.
- The Activity log for the cycle records
cycle.finalizedand thencycle.closed, both attributed to you, with timestamps. - The cycle's header shows the Close button has been replaced by an Archive option in the overflow menu (not used routinely — the monthly retention job archives automatically).
- The client's Cycles list shows the cycle under closed cycles. Filter by status to find it later.
- When the month closed on the payment instruction,
GET /ops/cycles/:cycleId/client-noticeslists the "payroll is done" message with the words each person was sent.
Current behaviour after the export (28 Oct 2026)
The steps above describe the older flow. What runs now, from the Infotech report on:
- Telling the client Infotech's final figures. Once the month is finalized (the tie-out passed, or a Payroll Lead released it), the tie-out step under Infotech hand-off offers Tell the client Infotech's final figures. It opens the usual read-edit-send dialog with Infotech's headcount, gross, net and CPF totals from the tied-out report, worded for the client's records ("nothing more is needed from you"); any leaver whose final pay is withheld for IR21 is named as not included. It goes to each payroll sender and the approver only when a person presses Send, and is then listed under What the client was told. The client is told, not asked to approve again. Infotech's full report is not attached (the client-message sender cannot carry a file yet).
- The payment gate is the same on both kinds of month. A month an agent run drives is paid by approving the Approve payment card; a month staff or the schedule opened is paid with Approve payment and close. On both, only a Payroll Lead (or Admin / Platform Admin) who did not prepare the month may approve; a Payroll Executive cannot. Both show a confirm step that says the approval cannot be undone and names any leaver whose final pay is withheld; the server refuses while final pay is withheld unless that exclusion is acknowledged, and records the exclusion against the approver (
payroll.payment.final_pay_withheld). - Undoing a CPF sign-off, removing a CPF receipt or removing a bank confirmation needs a reason (at least 10 characters), kept on the audit row like every other undo. On the page, Undo sign-off and each Remove link under Infotech hand-off open a small reason box under the step; the action runs only from that box, and a refusal shows the server's own words.
- Archive is a Payroll Lead's action, once the evidence is on file. A closed month keeps its action bar: Attach the bank's confirmation until it is on file, then Archive. Where a foreign leaver was on the month (a final-pay hold exists), IRAS's IR21 acknowledgement is attached under Infotech hand-off first; archiving without it opens a reason box under the month's title (the server's refusal, then Why will no IR21 acknowledgement be attached?), and the reason is kept on the record (
cycle.archivedwithir21Acknowledgement: WAIVED). Archive without it (no bank confirmation will come) asks for the IR21 reason too, in a second box, when the acknowledgement is owed and not on file — each reason is kept separately. Archive has no not-the-preparer rule: a Payroll Lead, an Admin or a Platform Admin may archive, and anyone else sees the button greyed out with that said. The automatic archive 365 days after closing is unchanged. - Evidence pack. On a closed or archived month, Infotech hand-off offers Download evidence pack: the bank confirmation, CPF receipt, IR21 acknowledgement, our payslip copy, Infotech's report, the export workbook and the approval record as one zip, with an
index.jsonthat names anything not on file.
What if you closed in error
Close is reversible only by a Payroll Lead, within 7 days, via the cycle's overflow menu (Reopen). Beyond that window the only recourse is to raise a correction cycle for the next month and document the adjustment manually. Keep this in mind before clicking Close — once the retention purge runs (the 1st of the month at 03:00 UTC; see Timing reference) the original raw artifacts may have been moved out of online storage.
Common situations
| If you see… | It means… | What to do |
|---|---|---|
| Finalize button isn't visible | Cycle isn't in APPROVED — likely still in CLIENT_REVIEW or REVISION_REQUESTED | Confirm the client has actually approved on their portal; check the Approvals tab for a decision |
| Close button isn't visible | You haven't clicked Finalize yet, or the cycle is already past FINALIZED | Click Finalize first; or check status badge — if it's already CLOSED you're done |
| Finalize fails with a state-transition error | Cycle has moved underneath you (e.g. revision was requested before you clicked) | Reload the page; the badge will show the actual current status. Re-route per the new status |
Cycle stuck in OUTPUT_IMPORTED and won't move forward | An older cycle pattern that pre-dates the auto-approval flow | See Cycle stuck in OUTPUT_IMPORTED — Payroll Lead intervention may be needed |
| You need to fix something after closing | Cycle is immutable; reopen is Payroll-Lead-only and within 7 days | Hand off to a Payroll Lead immediately — every day past closure makes recovery harder |
| Closed cycle vanishes from the cycle list | Default filter hides closed/archived cycles | Apply the Closed status filter on the cycle list, or open the client and filter their Cycles tab |
What happens automatically after close
- Retention purge runs on the 1st of the month at 03:00 UTC. Cycles past the configured retention window transition
CLOSED → ARCHIVEDand raw uploads are removed per the retention policy. - Audit log events for the cycle remain queryable indefinitely — closing doesn't truncate the activity log.
- Approval report and export workbook stay downloadable from the cycle until the retention window expires.
Related runbooks
- Generate the Infotech export — the prior step
- Verify an email was sent — confirm the approval email actually went out before you got here
- Timing reference — when the retention job runs and what it moves
- Payroll cycle status machine — full lifecycle visualization
- Retention policy — what happens to the cycle's data after
CLOSED - Recover from a wrong action using the audit log — when something needs to be undone