The monthly close and AR package I would run in the first 90 days
The monthly close and AR report package I would build first: a cash-cycle waterfall, receivables aging, match exceptions, and tie-outs.
The report package is four pieces: a cash conversion cycle waterfall, receivables aging by entity, a three-way-match exception queue, and a close checklist with reconciliation tie-outs. Company-wide, the numbers look fine: 44 days sales outstanding, 25.0% gross margin. Filter to the branch this company acquired mid-year and DSO opened at 60 days with 56.6% of its receivables past due. The consolidated total never said that out loud. The entity filter did.
See the working version at the finance operations dashboard, where the same filter is a button, not a paragraph. This is the report package behind it, walked through the way I would hand it to a controller.
The package, at a glance
- Cash conversion cycle report. DSO, DPO, and DIO rolled into one waterfall, so whichever lever moved is visible at a glance instead of buried in three separate ratios.
- Receivables aging by entity. Five aging buckets, by month, filterable to any branch, so a rising 90+ balance shows up as a trend line before it becomes a write-off.
- Three-way-match exception queue. Every AP invoice line auto-clears or routes to a worklist with a reason code, so people work the risky remainder instead of the whole invoice pile.
- Close checklist and reconciliation tie-out pack. Task status by workstream plus the four subledger-to-GL reconciliations, so "are we done and can we trust it" has an actual answer on the day it is asked.
Synthetic data. Seeded generator, no real company.
The cash conversion cycle, decomposed
- 55 days sit in inventory (DIO), plus 44 days waiting on customers (DSO), less 32 days the company gets from its own vendors (DPO), nets to a 67-day cash conversion cycle.
- All three components use average balances over the period, not the balance on the last day of the month, so one large invoice at month end cannot swing the ratio. That is the difference between a number a controller signs off on and a number that argues with the general ledger.
- The waterfall is company-wide. On its own it hides exactly what the next chart shows.
Receivables aging: what the roll-up hides
- The acquired branch's own book, isolated from the other three: past due share falls from 56.6% at onboarding to 26.9% six months later.
- The drop is a mix shift, not a shrinking balance. Dollars move out of the 31-60, 61-90, and 90+ bands and into Current as the branch adopts the same dunning cadence and credit holds the rest of the company already runs on.
- Company-wide DSO barely registers the acquisition (it peaks at 46 days) while the acquired branch's own DSO peaks at 60. Three healthy branches dilute the one that needed attention, which is exactly why an aggregate-only report is not enough.
What the numbers say
- Company-wide, latest month: 44 days DSO, 32 days DPO, 67 days CCC, 25.0% gross margin, 21.7% of AR past due, and the three-way match auto-clears 89.8% of invoice lines.
- The acquired branch converged on every measure that started the worst: DSO from 60 to 45 days, auto-clear from 77.6% to 88.3%, close time from 9.2 to 6.6 days, over the same six months.
- One legacy branch, not the acquired one, carries the worst year-end past-due rate of the four (33.6%). "Acquired" and "worst" are not automatically the same branch, and a report that only watches the new entity would miss it.
- 2,466 invoice lines ran through the three-way match last month; roughly 250 routed to a reason-coded exception queue instead of a person's inbox.
- 47 of 52 close checklist tasks are complete. Three of the four subledger-to-GL reconciliations tie out exactly or within a few hundred dollars. The fourth, intercompany, carries a $12,840 difference that is still open.
Why this package matters to the business
- The consolidated KPI band is what a CFO glances at once a month. The entity filter is what catches a struggling branch before its aging turns into a bad-debt write-off, and it is one click away from the same screen, not a separate ask.
- Auto-clearing 89.8% of AP lines means the AP team spends its attention on the remaining tenth that is actually risky: price creep, quantity mismatches, invoices with no PO, and duplicate payments.
- The tie-out pack is the artifact an auditor asks for anyway. A dollar difference with a preparer and a reviewer attached is evidence; a green checkmark with nothing behind it is not.
- Watching DSO and the aging mix together, by entity, catches a slipping branch months before revenue or margin would show it.
How I would run this in the first 90 days
The close calendar is the part that turns this from a dashboard into a repeatable job. This is the shape I would run it in, anchored to period end:
- Day -3: freeze the subledgers. Final PO cutoff, last day for late invoices to hit the current period, and every branch notified of the cutoff so nothing lands in the wrong month by accident.
- Day 0: period end. Snapshot the open AR and AP items and the GL trial balance. Everything downstream reads from this snapshot, not a moving target.
- Day +1: run the three-way-match exception queue. Auto-clear the clean matches and route the rest by reason code: price variances go to the buyer who owns the PO, quantity variances and missing receipts go to the branch dock that received the goods, invoices with no PO go to the AP supervisor, and duplicate invoices go to the AP supervisor with payment held. Nobody works an undifferentiated pile.
- Day +2: refresh receivables aging. Rebuild the five buckets off the fresh open-item snapshot, not a running total, so the aging is correct as of period end even if it is reviewed a week later. Flag anything that crossed into 61-90 or 90+ for collections follow-up.
- Day +3: run the subledger-to-GL tie-outs. Bank to GL cash, AP subledger to GL control, AR subledger to GL control, and intercompany. Each one produces a pass or fail and, on a fail, the actual dollar difference and the reconciling items behind it, not just a red flag.
- Day +4: build the tie-out pack. Every reconciliation break over threshold gets a named owner and a due date before the pack goes anywhere. This is the day the close stops being a checklist and becomes a controls artifact.
- Day +5: sign-off. The person who prepared a reconciliation is never the person who signs off on it. Sign-off records an approver identity and a timestamp, appended, never edited in place.
- Ongoing: leave one break visible. A close dashboard that shows every reconciliation passing every month is not credible; it means the tolerances are too loose or nobody is actually checking. Wherever an unexplained difference exists, like the intercompany break above, it stays on the dashboard with its dollar amount attached until it is actually resolved, not rounded away to make the screen look clean.
Tools I would use
- A scheduled extract off the ERP and subledgers, not a live query against production, so the close snapshot is stable while it is being worked.
- Aging, DSO, DPO, DIO, and match results computed upstream in SQL or Python from the line-level open items, never inside the BI tool, so every number traces back to a specific invoice or PO line.
- A BI report for the KPI band, the waterfall, the aging chart, and the entity filter, refreshed on the close schedule.
- A tolerance table for the three-way match that finance can tune without a code deploy, and a structured sign-off table instead of an email thread.
Key takeaways
- A consolidated KPI band can look healthy while one entity does not. The fix is an entity filter on the same report, not a second report nobody opens.
- The cash conversion cycle is three ratios, not one: DIO plus DSO minus DPO, each computed off average balances so a single large invoice cannot distort it.
- Auto-clearing the clean three-way matches and routing the rest by reason code turns an exception pile into a work queue with owners.
- A close calendar with named days, from freezing the subledgers through sign-off, is what makes month-end close reviewable instead of reconstructed after the fact.
- A reconciliation dashboard with nothing ever outstanding is a red flag, not a good sign. One visible, dollar-quantified break is more trustworthy than an all-green screen.
See it live
- The finance operations dashboard has the same four reports, live and filterable by branch.