Skill Tracer
Skills › Knowledge Work Plugins › month-end-prep

month-end-prep

skill · 331 lines · Apache-2.0 · small-business/skills/month-end-prep/SKILL.md

The facts

Its description

Reconciles the accounting ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho Books) against PayPal, Shopify, Square, and Stripe settlements, flags transactions that need attention, suspicious duplicates, and missing receipts, then writes a plain-English P&L narrative and exports a close packet (xlsx + one-page PDF). This is the first link of the /close-month command; a request to close the month or the books routes there, and the command runs this skill before refreshing the forecast and distributing the packet. Use this skill directly only when the owner wants the reconciliation alone, with no forecast refresh and no distribution: "just reconcile, no packet," "what's missing from the books," "flag the duplicates and missing receipts," or "write the P&L narrative for this month."

The description the agent reads to decide when to use it.

From its settingsline 3

When it starts

It gets picked when the owner wants the books reconciled for one month without the full close — reconciliation only, what's missing or uncategorized, duplicate and missing-receipt flags, or the plain-English P&L narrative. A plain request to close the month or the books is routed to the /close-month command instead, which runs this skill as its first link.

Things a person might say (the model's guesses)

  • “Just reconcile March for me, no packet.”
  • “What's missing from the books for last month?”
  • “Flag the duplicates and missing receipts and write the P&L narrative for this month.”

A model's summary of when it is used.

A model's reading

Tools it may use, or may not

allowed-tools: Read, WebFetch

Tools it may use while it runs without asking you first.

From its settingsline 16

Files it mentions

reference/quickbooks-reconcile.md, reference/xero-reconcile.md, reference/zoho-books-reconcile.md, reference/v2_sources.md (first 5 of 24 lines)

Files the text names, such as ones to read or write. Found by matching words, so treat them as pointers.

Found by matching wordsline 28 line 29 line 30 line 31 line 73

Stops for a person

5 lines stop to ask a person

Lines that stop and wait for a person before going on. Found by matching words, so treat them as pointers.

Found by matching wordsline 49 line 141 line 152 line 195 line 294

What it leads to

Other skills this one hands off to, calls, requires or offers instead, as a model read them.

A model's reading

What leads to it

Other skills that hand off to this one, call it, require it or offer it instead, as a model read them.

A model's reading

Licence

Apache-2.0, from LICENSE

The terms its author shares it under, which let it be shown here.

From the repositorylicence text
Other files in this skill (7) Close

The text

Open on GitHub

Most marks come from matching words in the file, so treat them as pointers.

1---
2name: month-end-prep
3description: >
4 Reconciles the accounting ledger (MYOB, NetSuite, QuickBooks, Xero, or Zoho
5 Books) against PayPal, Shopify, Square, and Stripe settlements, flags
6 transactions that need attention, suspicious duplicates, and missing
7 receipts, then writes a plain-English P&L narrative and exports a close
8 packet (xlsx + one-page PDF). This is the first link of the /close-month
10 command runs this skill before refreshing the forecast and distributing
11 the packet. Use this skill directly only when the owner wants the
12 reconciliation alone, with no forecast refresh and no distribution: "just
13 reconcile, no packet," "what's missing from the books," "flag the
14 duplicates and missing receipts," or "write the P&L narrative for this
15 month."
16allowed-tools: Read, WebFetch
17---
19# Month End Prep

Month End Prep

Raw lines 1 to 20
Names a skill close-month :9
21## Quick start
23Connect your bookkeeping ledger and at least one payment processor, then say "let's
24close the month." Claude walks you through each step of the checklist, pausing for
25your input at each gate before moving forward.
27Any connected ledger runs the close. Each has a reference file for its reads and
28its "needs attention" signal: [reference/quickbooks-reconcile.md](reference/quickbooks-reconcile.md),
29[reference/xero-reconcile.md](reference/xero-reconcile.md),
30[reference/zoho-books-reconcile.md](reference/zoho-books-reconcile.md); NetSuite and MYOB
31are in [reference/v2_sources.md](reference/v2_sources.md). Ledgers are peers
32(`../../shared/connector-neutrality.md`): if two are connected, ask which holds the
33books being closed, read the other only for what it uniquely holds, and never sum a
34figure across both.
36Every amount is in the business's currency (`../../shared/currency-and-locale.md`).
37The thresholds below (0.50, 0.01, 25) are in that currency.
39If a connector is missing, Claude falls back to asking for a CSV export — it won't
40silently skip a step.

Quick start

Connect your bookkeeping ledger and at least one payment processor, then say "let's close the month." Claude walks you through each step of the checklist, pausing for your input at each gate before moving forward.

Any connected ledger runs the close. Each has a reference file for its reads and its "needs attention" signal: reference/quickbooks-reconcile.md, reference/xero-reconcile.md, reference/zoho-books-reconcile.md; NetSuite and MYOB are in reference/v2_sources.md. Ledgers are peers (../../shared/connector-neutrality.md): if two are connected, ask which holds the books being closed, read the other only for what it uniquely holds, and never sum a figure across both.

Every amount is in the business's currency (../../shared/currency-and-locale.md). The thresholds below (0.50, 0.01, 25) are in that currency.

If a connector is missing, Claude falls back to asking for a CSV export — it won't silently skip a step.

Raw lines 21 to 41
42## Workflow
44Work through these steps in order. Each step has a completion state; don't advance
45until the current step is settled.

Workflow

Work through these steps in order. Each step has a completion state; don't advance until the current step is settled.

Raw lines 42 to 46
47### Step 1 — Agree on the target month
49Ask the user which month to close. Default to the prior calendar month if they don't
50specify. Confirm before pulling any data.

Step 1 — Agree on the target month

Ask the user which month to close. Default to the prior calendar month if they don't specify. Confirm before pulling any data.

Raw lines 47 to 51
Involves a person Ask the user :49
52### Step 2 — Pull the ledger's P&L and register
54Fetch:
55- Profit & Loss report for the target month (revenue, COGS, gross margin, operating
56 expenses, net income)
57- The register, as the ledger's reference file defines it. QuickBooks: the
58 transaction list, every income and expense line. Xero: bills, invoices, and the
59 bank-transaction queue, with that scope stated in the packet. Zoho Books: invoices,
60 expenses, and purchase orders, with the P&L itself coming from an export because the
61 connector has no report endpoint.
63Flag immediately, using the ledger's own "needs attention" signal:
64- **QuickBooks** — uncategorized lines ("Uncategorized," blank, "Ask My Accountant")
65 and its Needs Review flag
66- **Xero** — bank lines still unreconciled at month end
67- **Zoho Books** — the `uncategorized_transactions` count on each bank account
69Present the count ("14 transactions need attention") and list them for the user to
70resolve in the ledger before proceeding. Don't advance with open items unless the
71user explicitly says "skip for now."
73See [reference/quickbooks-reconcile.md](reference/quickbooks-reconcile.md),
74[reference/xero-reconcile.md](reference/xero-reconcile.md), and
75[reference/zoho-books-reconcile.md](reference/zoho-books-reconcile.md) for field
76mappings and API notes.

Step 2 — Pull the ledger's P&L and register

Fetch:

  • Profit & Loss report for the target month (revenue, COGS, gross margin, operating expenses, net income)
  • The register, as the ledger's reference file defines it. QuickBooks: the transaction list, every income and expense line. Xero: bills, invoices, and the bank-transaction queue, with that scope stated in the packet. Zoho Books: invoices, expenses, and purchase orders, with the P&L itself coming from an export because the connector has no report endpoint.

Flag immediately, using the ledger's own "needs attention" signal:

  • QuickBooks — uncategorized lines ("Uncategorized," blank, "Ask My Accountant") and its Needs Review flag
  • Xero — bank lines still unreconciled at month end
  • Zoho Books — the uncategorized_transactions count on each bank account

Present the count ("14 transactions need attention") and list them for the user to resolve in the ledger before proceeding. Don't advance with open items unless the user explicitly says "skip for now."

See reference/quickbooks-reconcile.md, reference/xero-reconcile.md, and reference/zoho-books-reconcile.md for field mappings and API notes.

Raw lines 52 to 77
78### Step 3 — Pull payment processor settlements
80Fetch settlement reports from PayPal, Square, Stripe, or Shopify — whichever are
81connected — for the same calendar month.
83**Check the bank feed first.** When a processor pays out through a bank feed, the
84payout is already a ledger line and the question is whether it has been matched.
85Find unreconciled bank lines naming a processor and list them per processor as the
86action items before doing any CSV match. This applies to any ledger that carries a
87bank feed with a reconciled state — the usual case in Xero, and QuickBooks bank-feed
88lines when the connector exposes them. MYOB holds no bank side, and Zoho Books exposes
89balances but no bank-transaction list, so a MYOB or Zoho Books close goes straight to
90the CSV match below.
92**Compare net to net, or every line looks broken.** The ledger records the net bank
93deposit; the processor's report shows the gross sale. Match those directly and every
94row shows a discrepancy the exact size of the fee. Use the processor's **net payout**
95(gross minus fees) — see [reference/gotchas.md](reference/gotchas.md).
97Match each settlement deposit against the ledger's bank deposit line:
98- **Match** — amount and date agree within 2 days → mark as reconciled
99- **Difference < 0.50** — rounding/fee; note but don't flag
100- **Difference ≥ 0.50** — flag with the delta amount
101- **Settlement exists, no ledger deposit** — flag as "missing in the ledger"
102- **Ledger deposit exists, no settlement** — flag as "deposit not in processor data"
104See [reference/paypal-settlements.md](reference/paypal-settlements.md) for settlement
105report field mappings (PayPal, Square, Stripe) and
106[reference/v2_sources.md](reference/v2_sources.md) for Shopify.

Step 3 — Pull payment processor settlements

Fetch settlement reports from PayPal, Square, Stripe, or Shopify — whichever are connected — for the same calendar month.

Check the bank feed first. When a processor pays out through a bank feed, the payout is already a ledger line and the question is whether it has been matched. Find unreconciled bank lines naming a processor and list them per processor as the action items before doing any CSV match. This applies to any ledger that carries a bank feed with a reconciled state — the usual case in Xero, and QuickBooks bank-feed lines when the connector exposes them. MYOB holds no bank side, and Zoho Books exposes balances but no bank-transaction list, so a MYOB or Zoho Books close goes straight to the CSV match below.

Compare net to net, or every line looks broken. The ledger records the net bank deposit; the processor's report shows the gross sale. Match those directly and every row shows a discrepancy the exact size of the fee. Use the processor's net payout (gross minus fees) — see reference/gotchas.md.

Match each settlement deposit against the ledger's bank deposit line:

  • Match — amount and date agree within 2 days → mark as reconciled
  • Difference < 0.50 — rounding/fee; note but don't flag
  • Difference ≥ 0.50 — flag with the delta amount
  • Settlement exists, no ledger deposit — flag as "missing in the ledger"
  • Ledger deposit exists, no settlement — flag as "deposit not in processor data"

See reference/paypal-settlements.md for settlement report field mappings (PayPal, Square, Stripe) and reference/v2_sources.md for Shopify.

Raw lines 78 to 107
Reads a file reference/gotchas.md :95
Reads a file reference/v2_sources.md :106
108### Step 4 — Detect suspicious duplicates
110Scan the register for likely duplicate charges or deposits. Flag a transaction as a
111suspicious duplicate when **all three** match:
112- Same amount (within 0.01)
113- Same vendor or customer name
114- Posted within 5 calendar days of each other
116Scan what the ledger actually holds. In QuickBooks that is the transaction list,
117with split rows grouped by transaction id first. In Xero a bill keyed twice makes two
118unpaid documents and no bank line, so scan bills and invoices (same contact, same
119total, within 5 days, both unpaid or one paid inside the window) rather than bank
120lines — the mapping is in [reference/xero-reconcile.md](reference/xero-reconcile.md).
121Zoho Books is the same shape: scan invoices and expenses as documents
122([reference/zoho-books-reconcile.md](reference/zoho-books-reconcile.md)).
124Present flagged pairs to the user. They decide whether each is legitimate (e.g., a
125recurring weekly subscription) or a real duplicate to void.
127**The 5-day window is a filter, not a guarantee.** It catches the same charge keyed
128twice without drowning the owner in recurring weekly bills, but a real double payment
129three weeks apart slips through. Say what was scanned ("repeats within 5 days"), and
130widen the window for a vendor they're suspicious about rather than calling it clean.
132See [reference/gotchas.md](reference/gotchas.md) for common false-positive patterns
133and how to distinguish them.

Step 4 — Detect suspicious duplicates

Scan the register for likely duplicate charges or deposits. Flag a transaction as a suspicious duplicate when all three match:

  • Same amount (within 0.01)
  • Same vendor or customer name
  • Posted within 5 calendar days of each other

Scan what the ledger actually holds. In QuickBooks that is the transaction list, with split rows grouped by transaction id first. In Xero a bill keyed twice makes two unpaid documents and no bank line, so scan bills and invoices (same contact, same total, within 5 days, both unpaid or one paid inside the window) rather than bank lines — the mapping is in reference/xero-reconcile.md. Zoho Books is the same shape: scan invoices and expenses as documents (reference/zoho-books-reconcile.md).

Present flagged pairs to the user. They decide whether each is legitimate (e.g., a recurring weekly subscription) or a real duplicate to void.

The 5-day window is a filter, not a guarantee. It catches the same charge keyed twice without drowning the owner in recurring weekly bills, but a real double payment three weeks apart slips through. Say what was scanned ("repeats within 5 days"), and widen the window for a vendor they're suspicious about rather than calling it clean.

See reference/gotchas.md for common false-positive patterns and how to distinguish them.

Raw lines 108 to 134
Reads a file reference/xero-reconcile.md :120
Reads a file reference/gotchas.md :132
135### Step 5 — Receipts check
137Check the ledger first: an attachment on the transaction counts as a receipt on file
138(`AttachmentCount` in QuickBooks; `has_attachments` in Xero, returned only with
139`include_line_items=true`; `has_attachment` on Zoho Books invoices and expenses). Then,
140if the Desktop connector is available, scan the
141receipts folder (ask the user for the path; default `~/Documents/Receipts`) for the
142target month.
144For each expense transaction above 25 with no attached document:
145- Check for a matching receipt file (match by amount ± 0.50 and date within 3 days)
146- **Matched** → note as "receipt on file"
147- **Not matched** → flag as "missing receipt"
149List missing receipts. The user can supply the file or mark as "receipt not required"
150(e.g., a recurring auto-pay with no receipt).
152If Desktop connector is not available, ask the user to confirm which expenses they have
153receipts for — don't silently skip this step.

Step 5 — Receipts check

Check the ledger first: an attachment on the transaction counts as a receipt on file (AttachmentCount in QuickBooks; has_attachments in Xero, returned only with include_line_items=true; has_attachment on Zoho Books invoices and expenses). Then, if the Desktop connector is available, scan the receipts folder (ask the user for the path; default ~/Documents/Receipts) for the target month.

For each expense transaction above 25 with no attached document:

  • Check for a matching receipt file (match by amount ± 0.50 and date within 3 days)
  • Matched → note as "receipt on file"
  • Not matched → flag as "missing receipt"

List missing receipts. The user can supply the file or mark as "receipt not required" (e.g., a recurring auto-pay with no receipt).

If Desktop connector is not available, ask the user to confirm which expenses they have receipts for — don't silently skip this step.

Raw lines 135 to 154
Involves a person ask the user :141
155### Step 5a — Payroll cross-check
157Runs only when a payroll connector is connected (Gusto or QuickBooks Payroll — peers,
158whichever is connected). Otherwise skip it and say the packet carries no payroll column.
160Pull what was actually paid in the month, totals only:
162- **Gusto** — `list_payrolls` with `include=totals`, keeping the payrolls whose
163 `check_date` falls in the target month. From each `totals`: `gross_pay`,
164 `employer_taxes`, `employee_taxes`, `net_pay`. Then `list_contractor_payments` for
165 the same date range with `group_by_date=true`, taking `total.wages` and
166 `total.reimbursements`. Contractor totals cover US contractors only — say so in the
167 packet footnote.
168- **QuickBooks Payroll** — `qbo_payroll_get_company_last_payroll_run` for the most
169 recent run; earlier runs in the month come from the payroll summary export.
170 (Confirm before the first close.)
172Cross-check against the ledger: net pay plus employer taxes plus contractor wages should
173appear as the month's payroll expense lines. A difference above 0.50 is a reconciliation
174item — usually a run posted to the wrong month, or a payroll journal not yet posted.
176**Totals only, never people.** The packet carries the month's totals and the count of
177runs. No employee name, rate, or per-person amount leaves the connector — that is
178payroll data, and `payroll-prep` is where it belongs. See
179[reference/v2_sources.md](reference/v2_sources.md) for the field mapping.

Step 5a — Payroll cross-check

Runs only when a payroll connector is connected (Gusto or QuickBooks Payroll — peers, whichever is connected). Otherwise skip it and say the packet carries no payroll column.

Pull what was actually paid in the month, totals only:

  • Gusto — list_payrolls with include=totals, keeping the payrolls whose check_date falls in the target month. From each totals: gross_pay, employer_taxes, employee_taxes, net_pay. Then list_contractor_payments for the same date range with group_by_date=true, taking total.wages and total.reimbursements. Contractor totals cover US contractors only — say so in the packet footnote.
  • QuickBooks Payroll — qbo_payroll_get_company_last_payroll_run for the most recent run; earlier runs in the month come from the payroll summary export. (Confirm before the first close.)

Cross-check against the ledger: net pay plus employer taxes plus contractor wages should appear as the month's payroll expense lines. A difference above 0.50 is a reconciliation item — usually a run posted to the wrong month, or a payroll journal not yet posted.

Totals only, never people. The packet carries the month's totals and the count of runs. No employee name, rate, or per-person amount leaves the connector — that is payroll data, and payroll-prep is where it belongs. See reference/v2_sources.md for the field mapping.

Raw lines 155 to 180
Names a skill payroll-prep :178
Reads a file reference/v2_sources.md :179
181### Step 6 — Owner sign-off gate
183Present a summary before going further:
185```
186Needs attention (uncategorized or unreconciled): X of X resolved
187Settlement discrepancies: X flagged, X resolved
188Suspicious duplicates: X flagged, X cleared
189Missing receipts: X outstanding
190Payroll cross-check: matched / X difference / no payroll connector
191```
193Ask: "Ready to write the P&L summary and export the close packet?"
195**Do not proceed to Steps 7–8 without explicit confirmation.**

Step 6 — Owner sign-off gate

Present a summary before going further:

Needs attention (uncategorized or unreconciled):  X of X resolved
Settlement discrepancies:                        X flagged, X resolved
Suspicious duplicates:                           X flagged, X cleared
Missing receipts:                                X outstanding
Payroll cross-check:                             matched / X difference / no payroll connector

Ask: "Ready to write the P&L summary and export the close packet?"

Do not proceed to Steps 7–8 without explicit confirmation.

Raw lines 181 to 196
Involves a person without explicit confirmation :195
197### Step 7 — Write the P&L narrative
199Write a plain-English summary of the month — the kind an owner would share with their
200spouse or accountant, not a CFO memo. Aim for 150–250 words.
202Structure:
2031. **Headline** — one sentence: "March came in at AUD 12,400 net, up 6% from February." Currency code, never a bare symbol.
2042. **Revenue** — what drove the number; name products, services, or customers if
205 the data shows concentration.
2063. **Gross margin** — whether it held, rose, or compressed, and the main reason why.
2074. **Key expenses** — any line that moved more than 10% MoM or is outside the normal
208 range; one sentence each.
2095. **Bottom line** — net income vs. prior month; ask if they have a target to compare.
2106. **Watch list** — 1–3 things to monitor next month.
212Avoid jargon; define anything that isn't plain English ("MoM" = month over month).
214See [reference/examples/pl-narrative.md](reference/examples/pl-narrative.md) for a
215worked example.

Step 7 — Write the P&L narrative

Write a plain-English summary of the month — the kind an owner would share with their spouse or accountant, not a CFO memo. Aim for 150–250 words.

Structure:

  1. Headline — one sentence: "March came in at AUD 12,400 net, up 6% from February." Currency code, never a bare symbol.
  2. Revenue — what drove the number; name products, services, or customers if the data shows concentration.
  3. Gross margin — whether it held, rose, or compressed, and the main reason why.
  4. Key expenses — any line that moved more than 10% MoM or is outside the normal range; one sentence each.
  5. Bottom line — net income vs. prior month; ask if they have a target to compare.
  6. Watch list — 1–3 things to monitor next month.

Avoid jargon; define anything that isn't plain English ("MoM" = month over month).

See reference/examples/pl-narrative.md for a worked example.

Raw lines 197 to 216
217### Step 8 — Export the close packet
219Produce two files:
221**`close-packet-[YYYY-MM].xlsx`** — three sheets, four when a payroll connector is connected:
222- `P&L` — the ledger's P&L data, formatted
223- `Reconciliation` — matched and flagged transactions side by side
224- `Action Items` — any outstanding flags (uncategorized, missing receipts, etc.)
225- `Payroll` — the Step 5a totals beside the ledger's payroll expense, with the delta
227**`close-packet-[YYYY-MM]-summary.pdf`** — one page:
228- Month and business name at the top
229- Key figures (revenue, gross margin %, net income)
230- The P&L narrative from Step 7
231- Count of open action items, if any
233Save both to the Desktop (or a path the user specifies). Confirm the file locations.
235See [reference/close-packet-format.md](reference/close-packet-format.md) for column
236specs and PDF layout details.
238Also deliver the close as a page, per the owner's stored output preference —
239never default to a markdown file. Check the `## Business context` block's
240`Output preference` (shared style guide rule, `../../shared/artifact-style.md`):
242- **Visual artifact (the default):** render the close as an HTML page in the
243 house style — additive to the chat summary and the files, never a
244 replacement. Revenue, gross margin percent, and net income are stat tiles
245 with their month-over-month change as context lines; the reconciliation
246 results are a table with tabular-nums amounts; each flag carries a status
247 pill — good for reconciled, warn for missing receipts and uncategorized
248 items, critical for unresolved settlement gaps and duplicates; the P&L
249 narrative and the open-items checklist each get a panel.
250- **docx / md / notion / canva preference:** deliver the same content in that
251 form — a DOCX or markdown file, a Notion page created via the connector
252 (named destination, never overwriting), or a Canva Doc created via the Canva
253 connector (a new design each run, named with the date; tables become
254 lists); fall back to the visual artifact if Notion or Canva is not
255 connected — and say that is why. The packet xlsx and PDF keep their
256 formats.
257- **Best for skill:** use the visual artifact — the close is reviewed on
258 screen before the packet goes to the accountant.

Step 8 — Export the close packet

Produce two files:

**close-packet-[YYYY-MM].xlsx** — three sheets, four when a payroll connector is connected:

  • P&L — the ledger's P&L data, formatted
  • Reconciliation — matched and flagged transactions side by side
  • Action Items — any outstanding flags (uncategorized, missing receipts, etc.)
  • Payroll — the Step 5a totals beside the ledger's payroll expense, with the delta

**close-packet-[YYYY-MM]-summary.pdf** — one page:

  • Month and business name at the top
  • Key figures (revenue, gross margin %, net income)
  • The P&L narrative from Step 7
  • Count of open action items, if any

Save both to the Desktop (or a path the user specifies). Confirm the file locations.

See reference/close-packet-format.md for column specs and PDF layout details.

Also deliver the close as a page, per the owner's stored output preference — never default to a markdown file. Check the ## Business context block's Output preference (shared style guide rule, ../../shared/artifact-style.md):

  • Visual artifact (the default): render the close as an HTML page in the house style — additive to the chat summary and the files, never a replacement. Revenue, gross margin percent, and net income are stat tiles with their month-over-month change as context lines; the reconciliation results are a table with tabular-nums amounts; each flag carries a status pill — good for reconciled, warn for missing receipts and uncategorized items, critical for unresolved settlement gaps and duplicates; the P&L narrative and the open-items checklist each get a panel.
  • docx / md / notion / canva preference: deliver the same content in that form — a DOCX or markdown file, a Notion page created via the connector (named destination, never overwriting), or a Canva Doc created via the Canva connector (a new design each run, named with the date; tables become lists); fall back to the visual artifact if Notion or Canva is not connected — and say that is why. The packet xlsx and PDF keep their formats.
  • Best for skill: use the visual artifact — the close is reviewed on screen before the packet goes to the accountant.
Raw lines 217 to 259
260### Step 9 — After the close
262Say in one line what closed and what is still open. Then offer the single most
263relevant next step, plus at most two others nearby:
265- "Cash forecast" runs `cash-flow-snapshot` off the freshly closed numbers.
266- "Build me a report" runs `report-builder` to publish and distribute the packet.
267- "Taxes" runs `/tax-prep` when quarter or year end is near — offered only when the
268 business context says Country is US, since that chain's tax math is US federal.
270Max three offers. Never repeat an offer the owner declined this session.

Step 9 — After the close

Say in one line what closed and what is still open. Then offer the single most relevant next step, plus at most two others nearby:

  • "Cash forecast" runs cash-flow-snapshot off the freshly closed numbers.
  • "Build me a report" runs report-builder to publish and distribute the packet.
  • "Taxes" runs /tax-prep when quarter or year end is near — offered only when the business context says Country is US, since that chain's tax math is US federal.

Max three offers. Never repeat an offer the owner declined this session.

Raw lines 260 to 271
Names a skill cash-flow-snapshot :265
Names a skill report-builder :266
Names a skill tax-prep :267
272## Approval gates
274- **Never run reconciliation on a month that has been filed.** Confirm the books are
275 still open before pulling data.
276- **Never void or modify a ledger transaction directly.** Surface flags; the owner
277 makes changes in the ledger.
278- **Always pause at Step 6** before producing outputs. Unresolved flags must be
279 acknowledged or explicitly skipped.
280- **Never reproduce per-person pay, SSNs, or bank numbers** in the close package
281 beyond the journal totals (`../../shared/personal-data.md`).

Approval gates

  • Never run reconciliation on a month that has been filed. Confirm the books are still open before pulling data.
  • Never void or modify a ledger transaction directly. Surface flags; the owner makes changes in the ledger.
  • Always pause at Step 6 before producing outputs. Unresolved flags must be acknowledged or explicitly skipped.
  • Never reproduce per-person pay, SSNs, or bank numbers in the close package beyond the journal totals (../../shared/personal-data.md).
Raw lines 272 to 282
283## Graceful degradation
285| Missing connector | Fallback |
286|---|---|
287| QuickBooks | Ask for **two separate exports** — the Profit & Loss report, and the Transaction Detail by Account report. One file will not carry both; asking for "a QB export" gets you one of them and a second round trip |
288| Xero | Ask for **two exports** — the Profit and Loss report, and the Account Transactions report with all accounts selected — plus the unreconciled line count from the bank reconciliation screen, which no export carries |
289| NetSuite or MYOB | Ask for the P&L and the transaction detail for the month as two exports; MYOB holds no bank balances, so the bank side comes from a statement |
290| Zoho Books | Even when connected, ask for the **Profit and Loss** export (no report endpoint) and a **bank statement** (no bank-transaction feed); the register and the uncategorised count come from the connector. Not connected: add the Account Transactions export |
291| Payment processor | Ask for a settlement CSV from the processor's website. It must include the fee column, not just the gross amount, or the net-to-net match in Step 3 can't be done |
292| Payment processor connected but returns zero payouts for the period | Treat as a data gap, not a clean zero. Say the connector returned nothing for the month, ask for the same settlement CSV (fee column included), and name the gap in the report rather than reconciling against an empty set |
293| Payroll connector (Gusto, QuickBooks Payroll) | Skip Step 5a. The packet has no Payroll sheet and the summary says "no payroll connector"; the ledger's payroll expense lines still appear in the P&L unchecked |
294| Desktop (receipts) | Ask the user to confirm receipt status for each flagged expense |

Graceful degradation

Missing connectorFallback
QuickBooksAsk for two separate exports — the Profit & Loss report, and the Transaction Detail by Account report. One file will not carry both; asking for "a QB export" gets you one of them and a second round trip
XeroAsk for two exports — the Profit and Loss report, and the Account Transactions report with all accounts selected — plus the unreconciled line count from the bank reconciliation screen, which no export carries
NetSuite or MYOBAsk for the P&L and the transaction detail for the month as two exports; MYOB holds no bank balances, so the bank side comes from a statement
Zoho BooksEven when connected, ask for the Profit and Loss export (no report endpoint) and a bank statement (no bank-transaction feed); the register and the uncategorised count come from the connector. Not connected: add the Account Transactions export
Payment processorAsk for a settlement CSV from the processor's website. It must include the fee column, not just the gross amount, or the net-to-net match in Step 3 can't be done
Payment processor connected but returns zero payouts for the periodTreat as a data gap, not a clean zero. Say the connector returned nothing for the month, ask for the same settlement CSV (fee column included), and name the gap in the report rather than reconciling against an empty set
Payroll connector (Gusto, QuickBooks Payroll)Skip Step 5a. The packet has no Payroll sheet and the summary says "no payroll connector"; the ledger's payroll expense lines still appear in the P&L unchecked
Desktop (receipts)Ask the user to confirm receipt status for each flagged expense
Raw lines 283 to 295
Involves a person Ask the user :294
296## More sources
298Read `reference/v2_sources.md` for the mapping:
300- **Shopify** — settlement reconciliation as a first-class leg. Orders, payouts, and fees each land differently, and it's a common source of unexplained gaps
301- **NetSuite** — a ledger of record, common at the larger end of the segment; reports and SuiteQL supply the P&L and register
302- **Xero** — a ledger of record with its own register shape (bills, invoices, bank queue) and its own attention signal (unreconciled bank lines); mapped in `reference/xero-reconcile.md`
303- **MYOB** — P&L and AR/AP balances; no bank balances, so the bank side of the close comes from a statement
304- **Zoho Books** — a ledger of record with a document register (invoices, expenses, purchase orders), bank balances with an uncategorised count as the attention signal, and no report or bank-feed endpoints, so the P&L and the payout match come from exports; mapped in `reference/zoho-books-reconcile.md`
305- **Ramp, Expensify** — card and expense detail, which closes the gap between what was spent and what was coded
306- **Gusto, QuickBooks Payroll** — payroll actually run: gross pay, employer taxes, net pay, and contractor payments as month totals, so Step 5a reconciles the ledger's payroll expense against what was paid rather than what was planned. Totals only; no per-person data enters the packet
308Same close sequence, same packet. More sources reconciled.
310**QuickBooks summary fields lie.** Read `../../shared/quickbooks-report-traps.md` before quoting any total from a QuickBooks summary object: the AP aging summary nets vendor credits into its buckets and can show a negative overdue figure, and the P&L summary can report expenses as zero against real rows. Total the rows, or use the detail call.

More sources

Read reference/v2_sources.md for the mapping:

  • Shopify — settlement reconciliation as a first-class leg. Orders, payouts, and fees each land differently, and it's a common source of unexplained gaps
  • NetSuite — a ledger of record, common at the larger end of the segment; reports and SuiteQL supply the P&L and register
  • Xero — a ledger of record with its own register shape (bills, invoices, bank queue) and its own attention signal (unreconciled bank lines); mapped in reference/xero-reconcile.md
  • MYOB — P&L and AR/AP balances; no bank balances, so the bank side of the close comes from a statement
  • Zoho Books — a ledger of record with a document register (invoices, expenses, purchase orders), bank balances with an uncategorised count as the attention signal, and no report or bank-feed endpoints, so the P&L and the payout match come from exports; mapped in reference/zoho-books-reconcile.md
  • Ramp, Expensify — card and expense detail, which closes the gap between what was spent and what was coded
  • Gusto, QuickBooks Payroll — payroll actually run: gross pay, employer taxes, net pay, and contractor payments as month totals, so Step 5a reconciles the ledger's payroll expense against what was paid rather than what was planned. Totals only; no per-person data enters the packet

Same close sequence, same packet. More sources reconciled.

QuickBooks summary fields lie. Read ../../shared/quickbooks-report-traps.md before quoting any total from a QuickBooks summary object: the AP aging summary nets vendor credits into its buckets and can show a negative overdue figure, and the P&L summary can report expenses as zero against real rows. Total the rows, or use the detail call.

Raw lines 296 to 311
312## Reference files
314- [reference/quickbooks-reconcile.md](reference/quickbooks-reconcile.md) — QB field
315 mappings, API pagination, common data issues
316- [reference/xero-reconcile.md](reference/xero-reconcile.md) — Xero register
317 definition, unreconciled-line signal, document-level duplicate scan, attachments
318- [reference/zoho-books-reconcile.md](reference/zoho-books-reconcile.md) — Zoho Books
319 register definition, uncategorised-count signal, what needs an export
320- [reference/paypal-settlements.md](reference/paypal-settlements.md) — settlement
321 report structure for PayPal, Square, and Stripe
322- [reference/close-packet-format.md](reference/close-packet-format.md) — xlsx column
323 specs, PDF layout, file naming convention
324- [reference/gotchas.md](reference/gotchas.md) — duplicate false positives, split
325 transactions, partial-month edge cases
326- [reference/examples/pl-narrative.md](reference/examples/pl-narrative.md) — worked
327 P&L narrative example

Reference files

  • reference/quickbooks-reconcile.md — QB field mappings, API pagination, common data issues
  • reference/xero-reconcile.md — Xero register definition, unreconciled-line signal, document-level duplicate scan, attachments
  • reference/zoho-books-reconcile.md — Zoho Books register definition, uncategorised-count signal, what needs an export
  • reference/paypal-settlements.md — settlement report structure for PayPal, Square, and Stripe
  • reference/close-packet-format.md — xlsx column specs, PDF layout, file naming convention
  • reference/gotchas.md — duplicate false positives, split transactions, partial-month edge cases
  • reference/examples/pl-narrative.md — worked P&L narrative example
Raw lines 312 to 328
Boilerplate, lines 329 to 331. The same text appears in 38 other files here. Close
329## Using a tool that isn't listed
331The connectors named in this skill are the tested paths, not a wall. If the owner wants this flow to use a tool that isn't connected or listed, offer `build-connector` — it checks the connector directory first and connects through Zapier otherwise, never hand-building against a raw API. Once the connection exists, the tool joins this skill like any other optional connector, under the same approval gates.

From anthropics/knowledge-work-plugins at 2574e29, 2026-10-27. Skills read by DeepSeek V4.1 Flash on 2026-11-04. Summary and techniques by Claude Opus 5.5 on 2026-11-06.