Validation rules
The eight blocking validation rules evaluated against a payroll submission before it can move to READY_FOR_EXPORT. Generated from packages/domain/src/payroll/rules/validation-rules.ts at build time.
A rule that fails creates a blocking issue on the submission. A blocking issue prevents the cycle from moving forward until it's resolved or overridden via POL approval (Payroll Lead / Platform Admin only).
| Key | Severity | Description |
|---|---|---|
ATTENDANCE_REQUIRED | BLOCKING | Attendance data must be provided |
DOCUMENT_REQUIREMENTS_MET | BLOCKING | Each change type must have the specific supporting documents configured for the client (SOP §6 Step 2.0) |
FOREIGN_LEAVER_IR21 | BLOCKING | Foreign employee leavers require IR21 task |
NS_DOCUMENTATION | BLOCKING | NS claims require supporting documentation |
DUPLICATE_RECEIPTS | BLOCKING | Duplicate receipts must be resolved before submission |
SALARY_DELTA_THRESHOLD | BLOCKING | Salary changes exceeding threshold require POL approval |
PAYROLL_VARIANCE_THRESHOLD | BLOCKING | Aggregate payroll variance exceeding threshold requires POL approval |
OCR_LOW_CONFIDENCE | WARNING | Low-confidence OCR extractions require manual review |
CPF_AW_CEILING | BLOCKING | CPF Additional Wage ceiling breach risk detection |
What "BLOCKING" means in practice
A blocking issue:
- Is shown on the cycle's Issues tab with a red severity badge.
- Stops the Generate export button from being enabled.
- Can be resolved by the client uploading the missing data (e.g. attendance, supporting documents).
- Can be overridden by a Payroll Lead via POL approval, recorded in the audit log.
- A Payroll Executive on their own cannot override.
How the month's checks are judged (as built, 28 Oct 2026)
These describe the shipped behaviour of the checks before Confirm review (the validation sign-off, which the Payroll Executive signs). Where it differs from the SOP's wording, the SOP (Step 3 rule B, Step 4) is the reference.
- Documents for each change (
DOCUMENT_REQUIREMENTS_MET). Each change is judged on its own. With no company document rules, a change passes when it has a document of its own, when a person approved it (a confirmed manual entry), or when the client typed it on the payroll link. A change with none of these raises its own blocking issue on that change, naming it. Rejected changes, and changes held, deferred or moved to another month, are left out. With company rules, a change is matched against its own documents only; another change's upload no longer counts for it. - Duplicate receipts (
DUPLICATE_RECEIPTS). One issue per repeated claim line (or identical file). This month's claims in play are compared with each other and with earlier claims that were actually paid: approved, on a month that was not cancelled. A claim carried to the next month (or deferred, or moved to the month it is dated for) is not compared with the original it left behind. - Low reading score (
OCR_LOW_CONFIDENCE). One issue per document. It counts only fields on a document a change in play rests on, and only until that change is approved: a rejected document, one no change uses, and a value a person approved on its card are out. Approve the card, then Re-check, and the warning goes. - What a Lead's override covers. An override is remembered for the one finding it was on (the claim line, the document, the change). A new duplicate, a new low-score document or another change without its document raises a fresh issue. A month-wide check (attendance) has one finding, so its override covers it for the rest of the month. Overrides recorded before this change were not linked to anything; the next re-check raises those findings again once, for the Lead to look at.
- Warnings named at Confirm review. The signer (Executive or Lead) must name every open warning. Each is closed as ACKNOWLEDGED (reason
ACCEPTED_AT_SIGN_OFF), not overridden, and the checklist says "Accepted at the validation sign-off by <name>". A later re-check keeps it closed while the same finding stands. The IR21 pay-withheld warning is never closed this way: it stays open until IRAS's clearance letter is recorded. - The checklist is kept with the sign-off. "Confirm review" on a month staff or the schedule opened stores every rule, its result and its reasons on the
cycle.review_confirmedaudit record (checks); the agent run's sign-off stores its findings oncycle.validation_approved. - CPF Additional Wage ceiling (
CPF_AW_CEILING). It needs each employee's year-to-date Ordinary and Additional Wages, which nothing on the platform records yet. When they are missing the rule shows as not checked (never as passed), with a warningSG.PAY.CPF_AW_CEILING_NOT_CHECKEDnaming whose figures are missing. In a bonus or AWS month, check the ceiling in Infotech.
Where to learn more
- The whole validation step in context: Validation (P-04).
- Asking the client about a check: Ask the client (P-05). POL approval / overrides: Internal review (P-06).
- The SOP origin of these rules: Payroll SOP §6.