Calculate, review and approve
Where: a pay run → Workflow actions. Who: see each action below.
Workflow actions shows only the actions allowed for this run's status and your permissions. Select an action, enter a Reason, then select Confirm …. Every action is recorded in the workflow history with your name and reason.
| Action | From status | To status | Permission |
|---|---|---|---|
| calculate | DRAFT (at least one employee) | CALCULATED | payroll.run.calculate |
| review | CALCULATED | REVIEWED | payroll.run.review |
| approve | REVIEWED | APPROVED | payroll.run.approve |
| reopen | CALCULATED or REVIEWED | DRAFT | payroll.run.manage |
| cancel | DRAFT, CALCULATED or REVIEWED | CANCELLED | payroll.run.manage |
Calculate
- Check every employee has been captured and has their lines.
- Select calculate, enter a reason (for example "October inputs complete") and select Confirm calculate.
Payroll works out, for each employee:
| Amount | Calculation |
|---|---|
| Base amount | rate × quantity ÷ divisor, rounded |
| Gross | base + earnings |
| Deductions | sum of deductions |
| Net | gross − deductions |
| Employer contributions | sum of employer contributions |
| Employer cost | gross + employer contributions |
…and adds them up for the run. Only the stored inputs are used; HR records are not read again.
Refused:
| Message | Meaning |
|---|---|
| Cannot calculate an empty payroll run | No employees captured |
| Deductions exceed gross pay; negative net pay is unsupported | One employee's deductions are larger than their gross. Correct the lines. |
| Payroll amount exceeds storage precision | An amount is unrealistically large; check quantities and rates |
The three-person rule
The reviewer and the approver must not be anyone who:
- created the run;
- calculated it;
- added or removed an employee or a line, or reopened it, at any point, including before an earlier reopen.
The approver must also not be the reviewer. This holds even for someone with every permission.
Refused: "Reviewer/approver must differ from payroll preparers"; "Approver must differ from reviewer".
The screen hides review and approve from the run's creator and calculator, and approve from the reviewer. It can't see who added or removed lines, so the system may still refuse with "Reviewer/ approver must differ from payroll preparers".
Review
Who: payroll.run.review, and independent of the run.
- Open each employee entry and check the statement: snapshot, quantity and explanation, lines and amounts.
- Select review, enter a reason (for example "Checked against timesheets and pension schedule"), and Confirm review.
Approve
Who: payroll.run.approve, independent of the run and not the reviewer.
- Check the run totals.
- Select approve, enter a reason (for example "Approved for payment on 2 November"), and Confirm approve.
The run is now APPROVED and frozen: no action can change it. Paying the employees, posting to Accounting and statutory filings happen outside Payroll.
Reopen to correct
Who: payroll.run.manage. From CALCULATED or REVIEWED.
"Reopening clears calculated amounts and review attribution, preserving snapshots."
After reopening:
- all amounts show Uncalculated again;
- the calculator and reviewer are cleared;
- employee snapshots, quantities and lines stay.
Example: Ben finds Amira's overtime should be 8 hours, not 10.5. Farah reopens the run ("Overtime
hours wrong: 8 approved"), removes the overtime line, adds a new one (quantity 8, source reference
OT-2026-10-001-R1), and calculates again. Amira's gross becomes 3,000.00 + 173.08 = 3,173.08. Ben
can still review, because he didn't change anything. The person who reopens joins the preparers and
can no longer review or approve this run.
Cancel
Who: payroll.run.manage. Not possible once APPROVED.
"Cancellation is final and preserves captured data and history. Recreating the period needs a new run number."
After cancelling, the period and the employees' service dates are free for a new run. The run number can't be used again.
Next: Statements and history.