Finance reconciliation, not the Dashboard summary
Distinct from the Payments page (which is the operational view): this report is the accounting view, designed for monthly reconciliation against the Stripe statement.
- Gross + net — gross revenue, Stripe fees, refunds, net to bank. Reconciles to the Stripe statement to the cent.
- By payment method — card, ACH, cash (counter), comp. Drives the "should we add more payment options?" decision.
- Refunds — full vs partial, refund reason categorization, refund rate. Caddie flags abnormal refund patterns.
- Disputes — open + resolved disputes with outcome (won / lost / refunded). Each row links to the dispute in Stripe.
- Payout schedule — what's pending vs paid out vs in-transit. Match each payout to the underlying charges.
- Tax breakdown — by jurisdiction, for quarterly tax filings.
- Subscription billing — member plan renewals, failed renewals, retry results, dunning email triggers.
- Add-ons — extra hours, lessons-add-ons, party packages attached to existing bookings. Tracks attach rate per booking and revenue lift vs base booking total.
- Export — CSV that matches the QuickBooks import format. PDF for printed records.
Backend wiring pending. GET /operator/reports/payments in the live app. Cross-references the Stripe API for live status; cache-invalidates aggressively on webhook events.