About this template
The bank is off by $340. Do not plug it.
It's the fifth of the month. The bank doesn't tie to the ledger, the Stripe payout got booked net so the fees vanished into revenue, and two bills dated last month were entered this month.
The temptation is one plug entry to make the $340 go away. That's how a real problem stays invisible for a year.
The rule this template exists for
Unexplained variance is a finding, not a rounding error. The rules file forbids proposing a plug entry, ever. If the numbers don't tie, you get the exact amount and a list of candidate causes — not a way to make it disappear.
The six steps, in order
Order matters, because each step's output feeds the next:
- Bank reconciliation — statement vs ledger, uncleared items aged, anything over 60 days flagged.
- Processor settlement — gross vs net vs what actually landed. Fees are an expense, not a revenue reduction; a ledger booking net is a finding.
- AR aging — 30/60/90+, past-90 flagged for a reserve conversation.
- AP / accrued — unrecorded bills for the period. In-period bill entered next month is a cut-off error.
- Cut-off test — the last five and first five transactions either side of the close date.
- P&L narrative — variance vs prior month, with a cause per line over your materiality threshold.
Tie-outs are printed
Every reconciliation shows both sides and the difference. "Reconciled" with no arithmetic is an assertion, not a reconciliation.
The packet leads with Exceptions — the section your bookkeeper actually reads — then each step, then a For your CPA list of questions you shouldn't answer yourself, then MISSING: exports you never sent. A close packet built without the AR aging isn't one, and it says so up front instead of quietly proceeding.
What you supply
Your own Claude Code login — and exports. Bank CSV, processor payout report,
trial balance / P&L / AR aging, dropped into ~/close/exports/.
No QuickBooks API key. Exports are the input, which is exactly why nothing can post to your books.
The guard is a file, not a promise
~/close/policy/CLOSE-RULES.md carries NEVER_POST_ENTRIES, the no-plug rule,
the six-step sequence and your materiality threshold. The skill reads it before
every run. Leave the threshold blank and every variance gets reported — safe,
and noisy.
Where this stops
It reconciles and drafts. It does not connect to QuickBooks, post journal entries, or adjust the books.
It won't opine on tax treatment or deductibility — those route to your CPA on purpose — and it will never tell you the books are closed. It prepared a packet; a human closes.
Verified on build: the skill, the working tree, the NEVER_POST_ENTRIES guard,
the no-plug rule and the six-step sequence are present on a fresh fork. Running
it on your own exports is yours to do.