{
  "schema": "https://ai-atoms.com/schemas/skill-v1.json",
  "type": "skill",
  "id": "skill/month-end-prep",
  "version": "1.0.1",
  "name": "month-end-prep",
  "description": "Walks an SMB owner through month-end close: reconciles QuickBooks against PayPal (and Square/Stripe) settlements, flags uncategorized transactions, suspicious duplicates, and missing receipts, then writes a plain-English P&L narrative and exports a close packet (xlsx + one-page PDF). Use when the user says \"close the month,\" \"month-end,\" \"reconcile,\" \"what's missing,\" \"P&L,\" or asks why revenue or margin changed this month.",
  "system_prompt_fragment": "# Month End Prep\n\n## Quick start\n\nConnect QuickBooks and at least one payment processor (PayPal, Square, or Stripe),\nthen say \"let's close the month.\" Claude walks you through each step of the checklist,\npausing for your input at each gate before moving forward.\n\nIf a connector is missing, Claude falls back to asking for a CSV export — it won't\nsilently skip a step.\n\n## Workflow\n\nWork through these steps in order. Each step has a completion state; don't advance\nuntil the current step is settled.\n\n### Step 1 — Agree on the target month\n\nAsk the user which month to close. Default to the prior calendar month if they don't\nspecify. Confirm before pulling any data.\n\n### Step 2 — Pull QuickBooks P&L and transaction register\n\nFetch:\n- Profit & Loss report for the target month (revenue, COGS, gross margin, operating\n  expenses, net income)\n- Transaction register: every income and expense line item\n\nFlag immediately:\n- **Uncategorized transactions** — any line with category \"Uncategorized\" or blank\n- **Ask Questions / Needs Review** — QB's own flag\n\nPresent the count (\"14 transactions need a category\") and list them for the user to\nclassify before proceeding. Don't advance with open uncategorized items unless the\nuser explicitly says \"skip for now.\"\n\nSee [reference/quickbooks-reconcile.md](reference/quickbooks-reconcile.md) for field\nmappings and API notes.\n\n### Step 3 — Pull payment processor settlements\n\nFetch settlement reports from PayPal, Square, or Stripe — whichever are connected —\nfor the same calendar month.\n\nMatch each settlement deposit against the QuickBooks bank deposit line:\n- **Match** — amount and date agree within 2 days → mark as reconciled\n- **Difference < $0.50** — rounding/fee; note but don't flag\n- **Difference ≥ $0.50** — flag with the delta amount\n- **Settlement exists, no QB deposit** — flag as \"missing in QuickBooks\"\n- **QB deposit exists, no settlement** — flag as \"deposit not in processor data\"\n\nSee [reference/paypal-settlements.md](reference/paypal-settlements.md) for settlement\nreport field mappings (PayPal, Square, Stripe).\n\n### Step 4 — Detect suspicious duplicates\n\nScan the transaction register for likely duplicate charges or deposits. Flag a\ntransaction as a suspicious duplicate when **all three** match:\n- Same amount (within $0.01)\n- Same vendor or customer name\n- Posted within 5 calendar days of each other\n\nPresent flagged pairs to the user. They decide whether each is legitimate (e.g., a\nrecurring weekly subscription) or a real duplicate to void.\n\nSee [reference/gotchas.md](reference/gotchas.md) for common false-positive patterns\nand how to distinguish them.\n\n### Step 5 — Receipts check (Desktop connector)\n\nIf the Desktop connector is available, scan the receipts folder (ask the user for the\npath; default `~/Documents/Receipts`) for the target month.\n\nFor each expense transaction in QuickBooks above $25 with no attached document:\n- Check for a matching receipt file (match by amount ± $0.50 and date within 3 days)\n- **Matched** → note as \"receipt on file\"\n- **Not matched** → flag as \"missing receipt\"\n\nList missing receipts. The user can supply the file or mark as \"receipt not required\"\n(e.g., a recurring auto-pay with no receipt).\n\nIf Desktop connector is not available, ask the user to confirm which expenses they have\nreceipts for — don't silently skip this step.\n\n### Step 6 — Owner sign-off gate\n\nPresent a summary before going further:\n\n```\nUncategorized transactions:  X of X resolved\nSettlement discrepancies:    X flagged, X resolved\nSuspicious duplicates:       X flagged, X cleared\nMissing receipts:            X outstanding\n```\n\nAsk: \"Ready to write the P&L summary and export the close packet?\"\n\n**Do not proceed to Steps 7–8 without explicit confirmation.**\n\n### Step 7 — Write the P&L narrative\n\nWrite a plain-English summary of the month — the kind an owner would share with their\nspouse or accountant, not a CFO memo. Aim for 150–250 words.\n\nStructure:\n1. **Headline** — one sentence: \"March came in at $X net, up/down Y% from February.\"\n2. **Revenue** — what drove the number; name products, services, or customers if\n   the data shows concentration.\n3. **Gross margin** — whether it held, rose, or compressed, and the main reason why.\n4. **Key expenses** — any line that moved more than 10% MoM or is outside the normal\n   range; one sentence each.\n5. **Bottom line** — net income vs. prior month; ask if they have a target to compare.\n6. **Watch list** — 1–3 things to monitor next month.\n\nAvoid jargon; define anything that isn't plain English (\"MoM\" = month over month).\n\nSee [reference/examples/pl-narrative.md](reference/examples/pl-narrative.md) for a\nworked example.\n\n### Step 8 — Export the close packet\n\nProduce two files:\n\n**`close-packet-[YYYY-MM].xlsx`** — three sheets:\n- `P&L` — the QuickBooks P&L data, formatted\n- `Reconciliation` — matched and flagged transactions side by side\n- `Action Items` — any outstanding flags (uncategorized, missing receipts, etc.)\n\n**`close-packet-[YYYY-MM]-summary.pdf`** — one page:\n- Month and business name at the top\n- Key figures (revenue, gross margin %, net income)\n- The P&L narrative from Step 7\n- Count of open action items, if any\n\nSave both to the Desktop (or a path the user specifies). Confirm the file locations.\n\nSee [reference/close-packet-format.md](reference/close-packet-format.md) for column\nspecs and PDF layout details.\n\n## Approval gates\n\n- **Never run reconciliation on a month that has been filed.** Confirm the books are\n  still open before pulling data.\n- **Never void or modify a QuickBooks transaction directly.** Surface flags; the owner\n  makes changes in QuickBooks.\n- **Always pause at Step 6** before producing outputs. Unresolved flags must be\n  acknowledged or explicitly skipped.\n\n## Graceful degradation\n\n| Missing connector | Fallback |\n|---|---|\n| QuickBooks | Ask for a QB export CSV (P&L + transaction detail) |\n| Payment processor | Ask for a settlement CSV from the processor's website |\n| Desktop (receipts) | Ask the user to confirm receipt status for each flagged expense |\n\n## Reference files\n\n- [reference/quickbooks-reconcile.md](reference/quickbooks-reconcile.md) — QB field\n  mappings, API pagination, common data issues\n- [reference/paypal-settlements.md](reference/paypal-settlements.md) — settlement\n  report structure for PayPal, Square, and Stripe\n- [reference/close-packet-format.md](reference/close-packet-format.md) — xlsx column\n  specs, PDF layout, file naming convention\n- [reference/gotchas.md](reference/gotchas.md) — duplicate false positives, split\n  transactions, partial-month edge cases\n- [reference/examples/pl-narrative.md](reference/examples/pl-narrative.md) — worked\n  P&L narrative example",
  "applicable_domains": [
    "business",
    "operations"
  ],
  "invocation": [
    "/month-end-prep"
  ],
  "tags": [
    "small-business",
    "anthropics",
    "knowledge-work"
  ],
  "authored_by": "anthropics",
  "source_url": "https://github.com/anthropics/knowledge-work-plugins/blob/main/small-business/skills/month-end-prep/SKILL.md",
  "lifecycle": "stable",
  "category": "finance",
  "provenance": {
    "source": "anthropics/knowledge-work-plugins",
    "source_url": "https://github.com/anthropics/knowledge-work-plugins/blob/main/small-business/skills/month-end-prep/SKILL.md",
    "author": "Anthropic",
    "license": "Apache-2.0",
    "notes": "Imported by scripts/import-anthropic-skills.py."
  }
}