Reported against paid, a gap that closes
Payroll paid fewer hours than workers reported, someone asks why, and the answer is usually a shrug plus three anecdotes. The reconciliation names every hour of the gap, and the unexplained remainder is held at zero by construction.
◆ The reconciliation, May 2026reported to paid, every hour named.
| Bucket | Hours |
|---|---|
| Reported and approved | 58,240 |
| Unapproved at cutoff, held to next period | -148 |
| Retro entries, paid in a later period | -64 |
| Rounding under the configured rules | -8 |
| Paid this period | 58,020 |
The 220-hour gap decomposes exactly: 148 unapproved at the cutoff, 64 entered retroactively and paid next period, 8 to configured rounding, and zero unexplained, which is the whole point. Each bucket is a drillable list of workers and days, not a category of shrug. Sample values are illustrative, never client data.
◆ The pre-deadline controlthe biggest bucket, prevented instead of explained.
The unapproved bucket is the preventable one: hours sitting in submitted state while the payroll cutoff approaches. Because approval state and timestamps ride on every entry row, the control is a filter run daily in the deadline week, listing pending entries by approving manager. The reconciliation shrinks because the control ran, which is the correct direction of causality.
◆ Onward to the booksthe chain this page sits in.
Paid hours flow into the payroll results the payroll module prices and proves to the ledger, so this reconciliation is the first link of the chain that ends at account-level ties. Hours to pay to books: three reconciliations, each closing exactly, each drillable to the rows beneath it.
- cutoff
- The moment payroll takes the period’s approved hours.
- retro entry
- Hours entered after their period, paid in a later one.
- rounding rules
- The configured rules nudging punches to increments.
- unexplained
- The reconciliation’s residual. Its budget is zero.
- submitted state
- Entered by the worker, awaiting the manager.
- control
- A recurring check that prevents instead of explains.
- drillable
- Openable to the worker-and-day rows inside a number.