Period Close: The Monthly Ritual
The close is the highest-stress recurring event in any ERP. If you’re on support, your on-call rota is built around it. Understanding the close makes you immediately more useful than a developer who doesn’t.
What “the close” is
Turning a month of transactions into a set of financial statements that management and auditors can rely on. It has a hard deadline, a fixed sequence, and hundreds of dependencies.
Typical timeline (a well-run mid-size company)
| Day | Activity |
|---|---|
| −3 to −1 | Cut-off communications; freeze non-urgent master data changes; pre-close checks |
| Day 1 | Close sub-ledger entry for the prior period: last invoices, last goods movements, last timesheets |
| Day 1 | Close inventory/material period. This is the first hard lock. |
| Day 1–2 | Bank statements imported and reconciled; cash confirmed |
| Day 2 | AP: goods-receipt accruals, invoice accruals for known-unbilled |
| Day 2 | AR: revenue cut-off testing, unbilled revenue, deferred revenue movement |
| Day 2–3 | Payroll posting and reconciliation |
| Day 3 | Depreciation run; asset reconciliation |
| Day 3 | FX revaluation of open foreign-currency items |
| Day 3 | Provisions and accruals: bonus, warranty, bad debt, rebates, legal |
| Day 3–4 | Production order settlement, WIP calculation, variance settlement |
| Day 4 | Cost centre allocations, assessments, distributions |
| Day 4 | Intercompany reconciliation and elimination prep |
| Day 4–5 | Tax calculation and posting; VAT/GST return preparation |
| Day 5 | Close AP and AR sub-ledgers |
| Day 5 | Trial balance review, account reconciliations, flux analysis |
| Day 5–6 | Management reporting pack; commentary |
| Day 6 | Close GL for the period |
| Day 7–10 | Group consolidation and group reporting |
“Fast close” companies do this in 3–4 days. Struggling ones take 15+. The difference is almost entirely automation and data quality, not headcount.
The dependency graph
Sub-ledger cut-off
│
├──▶ Inventory period close ──▶ Production settlement ──▶ Variance to COGS
│ │
├──▶ Bank reconciliation └──▶ WIP valuation
│
├──▶ Depreciation run ──────────────┐
├──▶ Payroll posting ───────────────┤
├──▶ Accruals & provisions ─────────┼──▶ Cost allocations ──▶ Profitability
├──▶ FX revaluation ────────────────┤
└──▶ Tax calculation ───────────────┘
│
▼
Trial balance
│
▼
Account reconciliation & review
│
▼
Period close
│
▼
Consolidation
Anything that runs out of order produces wrong numbers. Allocations before payroll means the allocation misses payroll cost. Settlement before all confirmations means WIP is overstated. This is why close is orchestrated, not ad hoc.
The close activities in detail
Cut-off
Ensuring transactions land in the right period. The classic errors:
- Goods shipped 31 March, invoiced 2 April, revenue recorded in April → understated March revenue
- Goods received 30 March, invoice arrives 5 April, no accrual → understated March cost and liability
Cut-off testing is a core audit procedure. Auditors take the last 10 shipments before and first 10 after period end and check the period each landed in.
Accruals and provisions
| Type | Purpose |
|---|---|
| Accrued expense | Cost incurred, invoice not received (utilities, professional fees) |
| Goods receipt accrual | Goods received, invoice not received — usually the GR/IR balance |
| Accrued revenue | Earned, not invoiced |
| Prepayment | Paid in advance, expense belongs to later periods (insurance, rent) |
| Deferred revenue | Invoiced in advance, revenue belongs to later periods |
| Bonus provision | Accrue monthly for an annual payout |
| Warranty provision | Expected future warranty cost on goods already sold |
| Bad debt provision | Expected credit loss on receivables |
| Rebate accrual | Volume discounts customers will earn |
| Restructuring / legal | Where an obligation exists and can be estimated |
Most accruals are reversing: posted on the last day of the period, automatically reversed on the first day of the next, so the real invoice can post normally without double-counting. Your accrual mechanism must support auto-reversal with a defined reversal date.
Reconciliations
Every balance sheet account must be explained:
| Account | Reconciled against |
|---|---|
| Bank | Bank statement |
| AR control | AR subledger, aged |
| AP control | AP subledger, aged |
| Inventory | Stock valuation report / physical count |
| Fixed assets | Asset register |
| GR/IR | Open PO analysis |
| Payroll liabilities | Payroll system |
| Tax accounts | Tax returns |
| Intercompany | Counterparty’s balance |
| Clearing accounts | Should be near zero |
A reconciliation has: a balance, a supporting schedule, an explanation of every difference, and a signature. Tools like Blackline and FloQast exist entirely to manage this workflow.
Flux analysis
Explain every material movement versus prior period and versus budget. “Repairs up 340% because of the compressor failure at DHK1” — a real explanation, not “increase in costs”. Auditors and the CFO both ask for this.
Where developers get involved
The jobs you’ll build or fix
| Job | Requirements |
|---|---|
| Depreciation run | Idempotent, restartable, test mode, catch-up |
| Revenue recognition run | Same |
| FX revaluation | Reversing, per rate type, per account class |
| Allocation cycles | Correct sequence, iterative solve, restartable |
| Order settlement | High volume, parallelisable, restartable |
| Accrual posting + auto-reversal | Reversal date is data, not code |
| Recurring entries | Schedule, validity range, skip rules |
| Balance carryforward (year end) | Re-runnable after late postings |
| Tax calculation and return extract | Reconciles to GL |
| Reconciliation reports | Fast enough to run repeatedly |
The universal requirements for every close job
- Idempotent — re-running for the same period/scope changes nothing
- Restartable — resume from failure, don’t reprocess what’s done
- Test/simulation mode — produce the numbers without posting
- Parallelisable — split by company/plant/asset range; the close window is short
- Progress visible — a stuck job at 2am needs a progress indicator, not silence
- Clear error output — “1,247 of 90,000 assets failed, here’s the list with reasons”, not one exception and a rollback
- Auditable — who ran it, when, with what parameters, what it produced
That last point matters: a close job’s log is audit evidence.
Performance
The close is when your system runs its heaviest workload against its largest tables while everyone is watching. Common failures:
- Settlement job that takes 14 hours and blows the window
- Trial balance report that times out
- Allocation cycle that deadlocks against posting
- A report joining 12 tables with no index on
posting_date - Nightly batch overlapping with close jobs
Profile close jobs against production-volume data, in a pre-prod environment, before the first close. “It was fast in DEV with 500 rows” is the classic go-live disaster.
Close automation and control
Modern practice manages the close as a task list with dependencies:
task(id, name, period, owner, due_offset_days, depends_on[],
status, -- NOT_STARTED | IN_PROGRESS | COMPLETE | BLOCKED
evidence_url, completed_by, completed_at, sign_off_by)
Benefits: everyone sees the critical path, dependencies are enforced, sign-offs are captured as audit evidence, and next month you can see which task was the bottleneck.
SAP Financial Closing Cockpit, Oracle Close Manager, Blackline Task Management, FloQast — all implement this pattern. If your customer doesn’t have one, a well-built task list in their existing tooling is a genuinely high-value deliverable.
Hard close vs soft close
- Hard close — full process, all reconciliations, audit-ready. Quarter and year end.
- Soft close — abbreviated, estimates instead of full analysis, management reporting only. Interim months for some companies.
Year-end additions
On top of the normal month-end:
- Physical inventory count and valuation adjustment
- Fixed asset physical verification
- Full impairment review
- Provision reassessment
- Balance carryforward
- New year number ranges, budget versions, calendars, tax rates
- External audit fieldwork
- Statutory accounts and tax return preparation
The pre-close checklist you should automate
- Exchange rates loaded for the period end date
- All interfaces have run successfully; no records in error queues
- No documents in “parked”/”held” status awaiting posting
- No unposted goods movements or unconfirmed production orders
- Number ranges have capacity
- Batch job schedule for the close is armed and in the right order
- Period status matches the close plan
- Sub-ledger to GL reconciliations are clean before you start
- Clearing accounts reviewed
- Intercompany balances confirmed with counterparties
Every one of these can be a query with an alert. Building that dashboard is one of the most appreciated things a developer can do for a finance team.