Monthly attendance close: pipeline, finalization, and reopening safely
How to run a monthly attendance close that locks the record without making corrections impossible — including the right way to reopen a finalized month.
The close is a process, not a button
A monthly attendance close is the moment a period stops being editable and becomes a record. Done well, it is a quiet step at the end of a routine month. Done badly, it is a scramble: rushed approvals, silent edits, surprises in payroll, and an audit history that does not match what was actually paid.
The cleanest closes follow the same shape every month, regardless of company size: a fixed sequence of summary, exception review, finalization, and — when needed — a careful reopen that supersedes rather than overwrites. This post walks through that sequence and the small decisions that keep it dependable.
Build the close on a fixed pipeline
A monthly close is easier to operate when the stages run in a known order, and each one can be re-run safely until the period is locked. A typical pipeline:
- Calculate daily summaries. Roll raw punches into per-day attendance records: scheduled vs actual, breaks, location context, exception flags.
- Calculate exceptions. Identify missed punches, late arrivals, early departures, off-site flags, unapproved overtime — anything that needs human attention.
- Calculate finalized daily summaries. Once daily records and exceptions are resolved or approved, produce the final per-day numbers that payroll will see.
- Calculate finalized monthly summaries. Roll the finalized days into per-employee monthly totals: regular hours, overtime, leave, premiums.
- Close the attendance month. Lock the period, mark it finalized, record who closed it and when.
Each stage is idempotent inside the open period — you can re-run summaries and exceptions as many times as needed while the month is still active. Once the close step runs, the records inside the period are no longer editable in place; any change has to go through a supersession path.
The pipeline order matters. Skipping ahead — for example, closing before exceptions are reviewed — produces a finalized record that has unresolved questions baked into it. The order should never bend to convenience.
Review during the period, not at the end
If the exception queue is empty all month and then floods on the last day, the close turns into a panic. A short, predictable rhythm spreads the work:
- Daily: employees correct obvious missed punches.
- Twice a week: managers triage the exception queue for their team.
- Last week of the month: managers approve outstanding exceptions and confirm timesheets.
- Close day: finance runs the close after everything is approved, not before.
The cadence is not the point. The point is that exceptions get attention while context is fresh, instead of being reconstructed from memory at the end of the month.
Distinguish lifecycle from verdict
Two ideas often get confused in attendance systems and need to stay separate:
- Lifecycle state. Whether a record is
active(still editable),finalized(locked after the close), orsuperseded(kept for audit history when a finalized record was changed). - Evaluation verdict. Whether a punch was on time, late, off-site, missed, etc.
A finalized late punch is a different thing from a superseded on-time punch. Mixing the two confuses both managers and auditors. A clean close keeps lifecycle and verdict on their own axes.
Reopen by supersession, not by deletion
There is a strong temptation, when a finalized month turns out to contain an error, to “just fix it” in place. Do not. The original record is the audit record. The fix should be a new, separate record that supersedes the old one, with author, timestamp, and reason captured on the supersession event.
A safe reopen looks like this:
- The period flips back to a
reopenedstate for the affected employees only. - The finalized records being changed are marked
superseded, withfinalized_atandfinalized_bypreserved. - New records are created with the corrected values and the new approval chain.
- The period is re-finalized when the corrections are approved.
After this, anyone reading the history can see exactly what happened: the original close, the reason it was reopened, the change that was made, the re-close. The pay run and the audit history stay consistent. The alternative — editing finalized rows directly — looks easier in the moment and becomes a real liability later.
Treat the audit history as part of the deliverable
The output of a monthly close is not just the payroll export. It includes the audit history: who approved what, who corrected what, who closed the period, who reopened it, and what changed when it was reopened. This is the record you would hand to an auditor, a labour inspector, or an employee asking why their pay is what it is.
If the close process produces a clean export but a fuzzy history, the close is only half done. The history is the part you will be asked about under pressure.
A short pre-close checklist
Before triggering the close, confirm for the period:
- Every scheduled employee has complete punches or approved corrections.
- Every flagged exception is resolved, approved, or explicitly deferred with a reason.
- Overtime has been reviewed against policy.
- Location and Wi-Fi exceptions have a manager decision.
- Manager approvals are in place and timestamped.
- The export format matches what payroll expects this month.
- Any in-flight reopen from a prior month has been re-finalized.
- The pre-close report shows zero unresolved items.
When this list is clean, the close itself is uneventful. That is the goal.
Boundaries between attendance close and payroll close
Attendance close and payroll close are related but separate steps. Attendance close locks the source-of-truth record. Payroll close consumes that record, runs gross-to-net, and produces pay. Mixing them under one button looks elegant and tends to be brittle: a payroll error forces an attendance reopen, and an attendance reopen risks invalidating the payroll run.
Keep the two close steps clearly separated. Attendance close happens first; payroll consumes the finalized record. If payroll finds a problem, the fix flows back through attendance reopen — supersession, re-close — and then payroll runs again on the corrected record.
Common close-day mistakes
A few patterns produce avoidable pain:
- Forcing closure with open exceptions. They do not disappear; they harden.
- Editing finalized rows in place. Erases history. Auditors notice.
- Mixing reopens with new-period work. Reopen a specific month, finish it, then move on.
- Skipping the recompute after a reopen. The finalized monthly summary must be regenerated from the corrected daily data, not patched.
- No designated close owner. If anyone can run the close, eventually someone will run it at the wrong time.
A short standard operating procedure that names the owner, the day, the pre-checks, and the sequence keeps the close boring on purpose.
Why a boring close is the right close
A clean monthly close is unglamorous. The pipeline runs in order, the exceptions queue is empty, the approvals are in, the close runs, payroll consumes the export. Nothing dramatic happens. The team trusts the record because it knows how it was produced. That is the operating state worth designing for — every other month, the work compounds in your favour.