--- name: cash-flow-snapshot description: > Reads AR/AP, historical cash timing, and known fixed costs from QuickBooks, PayPal, Stripe, or Square — or a CSV upload — and produces a 30/60/90-day cash flow forecast with percentage-variance confidence bands and named risk flags. Delivers a chat summary and a downloadable XLSX. Use when the user asks "forecast my cash flow," "will I make payroll," mentions "runway," or says "cash crunch." Falls back to CSV upload when no connector is live. compatibility: "Requires one or more of: QuickBooks MCP, PayPal MCP, Stripe MCP, Square MCP, file upload (CSV fallback). Output uses xlsx skill." --- # Cash Flow Snapshot Produces a 30/60/90-day cash flow forecast with percentage-variance confidence bands and named risk flags. Delivers a two-part output: a concise chat summary and a downloadable XLSX workbook. **Quick start** > "Will I make payroll next month?" Claude pulls AR/AP and fixed costs from connected sources, calculates expected inflows and outflows across 30, 60, and 90-day windows, applies confidence bands based on each customer's historical payment variance, and flags specific risks by name. --- ## Workflow ### Step 1 — Identify available data sources Check which connectors are live. Try in this order: 1. QuickBooks — primary source for AR aging, AP, and fixed costs 2. PayPal — transaction history and settlement timing 3. Stripe — charge and payout history 4. Square — sales and payout history 5. CSV upload — fallback if no connector is connected If no connector is live and no file is attached, ask the user to either connect a source or upload a CSV (income/expense tabular data, any reasonable format). Note which sources were used in the output — this affects confidence band width. ### Step 2 — Pull the data **From QuickBooks:** - AR aging report: customer name, invoice amount, invoice date, due date, days outstanding - AP: vendor name, amount due, due date - Recurring fixed costs: rent, payroll, subscriptions (look for recurring transactions) **From PayPal / Stripe / Square:** - Settlement history: transaction date, amount, settlement date - Use settlement lag (transaction date → payout date) to compute each source's average and variance payment delay **From CSV upload:** - Parse as income/expense tabular data - Required columns (flexible naming): date, amount, type (income or expense), description - If columns are ambiguous, show the header row and ask the user to confirm mapping ### Step 3 — Compute historical payment timing For each AR customer (or income source from CSV), calculate: - **Mean payment lag** — average days from invoice/transaction date to receipt - **Payment variance** — standard deviation of payment lag across last 6–12 payments - Use variance to set confidence band width (see Step 4) If fewer than 3 payments exist for a customer, use the population mean as the point estimate and apply a ±30% variance band as the default. When running on CSV data with sufficient history (≥3 payments per source), compute the band from the actual payment variance — do not assume ±30%. ### Step 4 — Build the 30/60/90-day forecast Produce three time windows: 0–30 days, 31–60 days, 61–90 days. For each window, compute: | Line | Method | |---|---| | Expected inflows | AR due in window, adjusted for mean payment lag | | Expected outflows | AP due in window + fixed costs falling in window | | Net cash position | Inflows − Outflows | | Confidence band | ± weighted average payment variance as a % of expected inflows | Confidence band formula: ``` band_pct = weighted_avg_stddev_days / avg_payment_lag_days low = net_cash × (1 − band_pct) high = net_cash × (1 + band_pct) ``` Round band_pct to one decimal place. Cap at ±50% — higher variance means the data is too thin to model; flag it instead (see Step 5). ### Step 5 — Flag named risks Scan for conditions that push the low-band estimate negative or create a liquidity crunch. For each risk found, produce a one-line flag: - **Late-payer risk:** "Customer X historically pays 18 days late; that shifts their $8,400 invoice out of the 30-day window into day 48." - **Payroll crunch:** "Payroll ($22,000) hits April 15. Low-band cash on hand April 14: $19,200. Shortfall risk: $2,800." - **Thin data warning:** "Only 2 payments on record for Customer Y — confidence band set to default ±30%." - **No-connector warning:** "Running on CSV data only — no real-time AP or recurring cost data. Confidence bands are wider than normal." Limit to the top 5 risks by severity (largest dollar impact first). ### Step 6 — Deliver outputs **Chat summary** (always): ``` Cash Flow Snapshot — [date range] Source(s): [connectors used] Expected Low High 30-day net: $X,XXX $X,XXX $X,XXX 60-day net: $X,XXX $X,XXX $X,XXX 90-day net: $X,XXX $X,XXX $X,XXX ⚠ Risks flagged: [count] • [risk 1] • [risk 2] ... ``` **XLSX workbook** (always): Read `xlsx/SKILL.md` before generating. Produce a workbook with three sheets: 1. **Summary** — the 30/60/90 forecast table with confidence bands. Beneath each window row, expand inline sub-rows showing the individual transactions that make up its inflows (green) and outflows (red). This makes the estimates auditable without leaving the Summary sheet. 2. **Detail** — all transactions grouped by window, sorted by date within each group. Include a running net column (cumulative inflows minus outflows within the window) and a subtotal row at the bottom of each window showing total inflows, total outflows, and net. Grey out past transactions in a separate section at the bottom for reference. Ensure all three windows have rows even if one is empty — show a "No transactions in this window" placeholder row. 3. **Risks** — the flagged risks with dollar impact and affected window. Save as `cash-flow-snapshot-[YYYY-MM-DD].xlsx`. --- ## Approval gates No destructive actions — this skill is read-only. No approval gate required before generating the forecast. Remind the user after delivery: > "This forecast is based on [sources listed]. It is not a substitute for > accounting advice — verify with your bookkeeper before making financing decisions." --- ## Reference files | File | Load when | |---|---| | `reference/gotchas.md` | When a connector returns unexpected data or variance is extreme | | `reference/examples/worked-example.md` | When modeling the output format for a new data shape |