| name | close-month |
| description | Closes the month — reconciles Exact Online vs payment processors, flags gaps, writes P&L narrative, exports close packet. Accepts optional month and save-to arguments. |
| allowed-tools | Read, WebFetch, Bash |
Run the month-end close workflow. Reconcile, flag gaps, narrate the P&L, and export the close packet for the owner's records (and their accountant).
Parse arguments:
--month (default: previous calendar month) — YYYY-MM format
--save-to (default files) — files (Google Drive / OneDrive), desktop (local), or both
Step 1 — Reconcile
Trigger the month-end-prep skill workflow:
- Pull all Exact Online transactions for the target month (EUR).
- Pull settlements from each connected payment processor (Mollie, PayPal, SumUp) for the same month.
- Match Exact Online entries to processor settlements by amount + date (±2 days).
- Surface three gap categories:
- Unmatched processor settlements — money came in via Mollie/PayPal/SumUp but never landed in Exact Online
- Unmatched Exact Online deposits — Exact shows income with no processor record (SEPA transfer? direct payment? misclassified?)
- Variance lines — matched but amount differs (fees, refunds split)
Step 2 — Flag suspicious entries
Surface in the same report:
- Uncategorized transactions — Exact Online entries with no ledger category
- Suspicious duplicates — same amount, same vendor, within 3 days
- Missing receipts — Exact Online entries above €75 with no attachment
- VAT anomalies — transactions with unexpected or missing VAT codes
For each, recommend an action. Wait for owner to triage flagged items before generating the narrative. Do not auto-categorize or auto-delete.
Step 3 — P&L narrative
After triage, generate a plain-English P&L narrative:
{Month YYYY} closed at €{revenue} revenue ({+/-}{X}% vs prior month).
Top driver: {category/customer}. Biggest swing: {category} {direction} €{amount}
because {reason inferred from transactions}.
Margin: {X}% ({+/-}Y pts vs prior). {Cost-side commentary}.
VAT position: €{net VAT payable/reclaimable} for the month.
Three notable items:
1. ...
2. ...
3. ...
Numbers come from Exact Online; the why comes from cross-referencing top transactions, vendor names, and prior-month deltas.
Step 4 — Export the close packet
Generate two files:
close-packet-{YYYY-MM}.xlsx — multi-tab workbook:
Reconciliation — Exact Online ↔ processor match table with gap rows highlighted
Flagged — uncategorized / duplicates / missing receipts / VAT anomalies
P&L — formatted income statement in EUR with prior-month delta column
VAT — VAT summary: output tax, input tax, net position
close-packet-{YYYY-MM}.pdf — one-page summary: P&L narrative + top-line numbers + gap count
Save both to the chosen --save-to location. Filename format: close-packet-2026-04.xlsx etc.
Connector failures
If Exact Online is unreachable, stop — reconciliation requires Exact Online as the source of truth. If a payment processor (Mollie, PayPal, SumUp) is unreachable, run reconciliation against the available processors and note which is missing. If all processors are missing, run Exact Online-only analysis and flag it.
Approval gates
- Never auto-fix flagged items. Always show the gap, recommend an action, wait for the owner.
- Never delete duplicates without explicit confirmation. Show both records side-by-side.
- Saving the packet is auto — it goes to the owner's own drive.
Output
End the run with a one-paragraph recap: revenue in EUR, margin, gap count remaining (if any), file paths to the saved packet.