{
 "version": "1.8.0",
 "slug": "b2b-invoice-collections-ar-recovery-desk",
 "title": "LedgerClear — B2B Invoice Collections & AR Recovery Desk",
 "vertical": "B2B commercial collections / accounts-receivable recovery",
 "seed": {
  "s": "b2b-invoice-collections-ar-recovery-desk",
  "t": "LedgerClear — B2B Invoice Collections & AR Recovery Desk",
  "v": "B2B commercial collections / AR recovery",
  "r": "Medium-high",
  "m": "M"
 },
 "product": {
  "slug": "firm-overdue-invoice-invoice-recovery-desk",
  "project_name": "LedgerClear",
  "project_type": "outcome-priced back-office invoice recovery and recovery service",
  "vertical": "B2B services distribution / independent firm back-office finance",
  "audience": "independent P&C-led B2B service firm principals and ops/accounting managers, $500K-$5M annual invoice revenue, 15-80 debtor engagements",
  "geography": "United States (state-regulated B2B services distribution), no single-state beachhead required — outreach concentrated in dense independent-firm states (TX, FL, GA, OH, PA, IL)",
  "scale_expectation": "10-firm pilot cohort in the first 90 days; 50+ Recovery Desk clients by year 1, recurring monthly recovery cycles per client, no hard external deadline (unlike a single filing-window business)",
  "core_workflows": [
   "Debtor aged-receivables list intake & completeness check",
   "Aged-receivables list normalization & AMS-invoice matching",
   "Discrepancy classification, reviewer approval & debtor-inquiry chase",
   "Monthly Recovery Pack release & recovery tracking"
  ],
  "discovery": {
   "one_line_purpose": "On LedgerClear, independent firms stop guessing whether debtors paid them correctly and start getting a signed Invoice Ledger every month. Debtor aged-receivables lists are extracted and normalized at intake, matched against the firm's own AMS client portfolio, every discrepancy is classified and reviewer-approved, and every Monthly Recovery Pack ships with an B2B services-accounting reviewer's signature and a full audit trail.",
   "primary_users": [
    "independent P&C or benefits firm principal/owner (firms under ~$2M in invoice revenue)",
    "firm operations/accounting manager (larger firms)",
    "B2B services-accounting reviewer (the named human who approves every discrepancy and signs the ledger)"
   ],
   "jobs_to_be_done": [
    "Get a monthly, aged-receivables list-backed Invoice Ledger without hiring a dedicated invoice specialist",
    "Prove a documented, line-item recovery so a account owner payout dispute, tax-season close, or M&A diligence request doesn't stall on unverifiable books",
    "Recover missing or short-paid debtor invoices without the firm chasing 40+ aged-receivables lists by hand every month"
   ],
   "value_prop": "LedgerClear turns an firm's scattered, inconsistent debtor aged-receivables lists into a recoverd, specialist-signed Invoice Ledger and a chased Discrepancy Docket — reconstructable on demand, defensible to a account owner or an acquirer, with the firm always the party of record on every debtor inquiry.",
   "competitors": [
    "Enterprise revenue-automation SaaS (Comulate, Applied Recon inside Applied Epic) built for large clients with in-house accounting teams",
    "BPO invoice-processing services (ReSource Pro's Overdue invoice Complete) scoped and priced for thousands of aged-receivables lists a month",
    "Specialist B2B services-firm bookkeeping firms (IAAB, Angela Adams Consulting) doing materially similar work by hand, capacity-capped, without AI leverage",
    "The status quo: a generalist bookkeeper or CSR booking aged-receivables list totals as lump revenue and never verifying line items"
   ],
   "differentiation": "Done-for-you recovery and recovery, not a tool to operate: a per-debtor parser library, deterministic penny-perfect tie-out checks (never left to an LLM), an B2B services-accounting reviewer's signature on every Invoice Ledger, debtor inquiries sent under the firm's own name, and flat pricing sized for the $500K-$5M firm the enterprise vendors do not serve.",
   "positioning_statement": "For independent firm principals who suspect but have never proven that debtors are underpaying them, LedgerClear is the done-for-you invoice recovery and recovery desk that turns 40+ inconsistent debtor aged-receivables lists a month into one verified Invoice Ledger and a chased Discrepancy Docket — unlike enterprise revenue-automation software the firm must operate itself, or a BPO engagement priced for thousands of aged-receivables lists a month."
  },
  "assumptions": [
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-a1",
    "statement": "Firm principals will pay for a done-for-you recovery outcome over continuing to book aged-receivables list totals unverified, once shown a concrete Invoice Leakage Scan finding.",
    "confidence": "medium",
    "impact_if_wrong": "severe",
    "revisit_trigger": "First 10 pilot Invoice Leakage Scan sales conversations — reject the wedge if willingness-to-pay signal is absent."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-a2",
    "statement": "A recovery cycle can hit the 5-business-day (10 at pilot) delivery SLA from firm-supplied AMS export and debtor aged-receivables lists alone, without firm-side software integration.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "First 3-6 pilot Invoice Leakage Scans."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-a3",
    "statement": "Firms tolerate AI-assisted aged-receivables list parsing and discrepancy drafting when an B2B services-accounting reviewer's approval and signature are explicit on every Invoice Ledger.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "First account owner-payout dispute resolved off a LedgerClear ledger."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-a4",
    "statement": "Scan-to-desk conversion reaches at least 25-40% among qualified, warm-led firms.",
    "confidence": "low",
    "impact_if_wrong": "severe",
    "revisit_trigger": "Day-90 pilot-cohort conversion measurement (explicit kill/pivot gate at 25%)."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-a5",
    "statement": "Logical, row-level tenant isolation (not single-tenant infrastructure per client) is acceptable to the pilot cohort.",
    "confidence": "medium",
    "impact_if_wrong": "high",
    "revisit_trigger": "Any prospect (e.g. a multi-firm network) with a hard single-tenant compliance clause."
   }
  ],
  "unknowns": [
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-u1",
    "question": "Which specific B2B services-accounting reviewer signs off on the first cohort's Invoice Ledgers?",
    "blocks": "Any commercial engagement; the reviewer signature invariant.",
    "resolution_path": "Named reviewer + engagement letter on file before the first paid scan."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-u2",
    "question": "What is the true scan-to-desk conversion rate among warm, qualified leads?",
    "blocks": "Pricing hypothesis; scaling decision.",
    "resolution_path": "10-firm pilot cohort with explicit pricing conversation, measured against the Day-90 checkpoint (25% kill gate, 40% target)."
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-u3",
    "question": "How much does per-debtor parser coverage actually reduce review minutes by day 90?",
    "blocks": "Unit-economics model; throughput assumptions.",
    "resolution_path": "Instrument reviewer minutes per cycle from pilot 1; compare to the 3.8h-launch to 1.9h-day-90 target."
   }
  ],
  "expert_panel": [
   {
    "role": "Product Strategy",
    "key_concern": "Is the Invoice Leakage Scan narrow enough to sell in weeks without a custom integration?",
    "recommendation": "Launch scoped to a 3-month aged-receivables list lookback against a single AMS export; expand scope only after the pilot converts.",
    "dissent": "May understate the recurring-revenue story to early prospects expecting an always-on dashboard."
   },
   {
    "role": "Software Architecture",
    "key_concern": "Are we defaulting to a client-facing portal the pilot doesn't need yet?",
    "recommendation": "Single deployable modular monolith; upload-link/email intake only at launch, no client portal.",
    "dissent": "May read as under-built to a referral partner expecting a branded dashboard."
   },
   {
    "role": "Frontend / UX",
    "key_concern": "Is the evidence chain (aged-receivables list line to AMS invoice to reviewer approval) visible in every reviewer-facing view?",
    "recommendation": "Every Discrepancy Docket line renders its aged-receivables list citation, matched invoice, and reviewer decision in one glance.",
    "dissent": "Adds density a non-B2B services reviewer might call cluttered."
   },
   {
    "role": "Backend / Data",
    "key_concern": "Is the audit trail append-only and reconstructable for a account owner dispute or diligence request years later?",
    "recommendation": "Event-sourced audit log for every recovery-cycle state transition; hash-chained artifact snapshots.",
    "dissent": "More write-path complexity than plain CRUD; requires schema discipline as debtor formats evolve."
   },
   {
    "role": "AI / ML",
    "key_concern": "Are discrepancy classifications grounded in the invoice schedule and never a free-form guess?",
    "recommendation": "Retrieval-first classification citing the specific invoice-schedule line; deterministic money math in code, never the model; mandatory reviewer gate before any client- or debtor-facing claim.",
    "dissent": "Slower per-cycle than a fully automated tool; may frustrate a prospect expecting instant results."
   },
   {
    "role": "Security",
    "key_concern": "Is one firm's financial and invoice data isolated from every other firm's?",
    "recommendation": "Row-level auth, per-tenant retrieval indices, log-scrubbing of financial figures.",
    "dissent": "None recorded this run."
   }
  ],
  "strategy": {
   "business_model": "Flat monthly Recovery Desk fee (tiered by aged-receivables list volume) plus a one-time Invoice Leakage Scan wedge and an optional capped recovery-share rider; never hourly, contingency-only pricing rejected as the primary model pending state-by-state counsel review",
   "revenue_streams": [
    "Invoice Leakage Scan (one-time wedge)",
    "Recovery Desk — Core / Plus / Pro (recurring)",
    "Recovery-share rider (optional, capped)",
    "Diligence Tie-Out (event-driven, firm M&A season)"
   ],
   "moat": [
    "Per-debtor parser library and debtor-quirk knowledge, compounding with every client",
    "Persistent, tracked debtor-chase relationships and response-time data",
    "Named B2B services-accounting reviewer's signed accountability on every ledger",
    "AMS-agnostic integration surface (AMS exports, QuickBooks postings, account owner splits)"
   ],
   "gtm": [
    "Founder-led educational content + anonymized Invoice Leakage Scan teardowns",
    "State Big \"I\"/PIA association webinars and firm-network member-benefit pilots",
    "AMS user-community how-to content + CPA/bookkeeper referral partnerships"
   ],
   "pricing_hypothesis": "Scan $495 (free for first 10 pilots); Recovery Desk $600-$2,500/mo by volume tier — priced under enterprise BPO/SaaS ACVs and under a loaded invoice-specialist hire, validated against 10+ pricing conversations before scaling spend.",
   "kill_criteria": [
    "No signed pilot firm in 4 weeks of qualified outreach",
    "Reviewer median cycle time exceeds 115 minutes/client after pilot 5",
    "No paid standard-price conversion by Day 90",
    "A released Invoice Ledger or debtor inquiry causes a documented, LedgerClear-caused reputational or client-relationship incident"
   ]
  },
  "security": {
   "stride": [
    {
     "threat": "Spoofing",
     "scenario": "Attacker impersonates an B2B services-accounting reviewer to approve a fabricated discrepancy or sign a Invoice Ledger.",
     "mitigation": "SSO with MFA; reviewer signatures bound to a cryptographic session claim, not a form field."
    },
    {
     "threat": "Tampering",
     "scenario": "Historical aged-receivables list or ledger entries edited after the fact to hide a bad match.",
     "mitigation": "Append-only audit log; hash-chained artifact snapshots; diff view on every reviewer surface."
    },
    {
     "threat": "Repudiation",
     "scenario": "Reviewer denies approving a discrepancy or signing a ledger that later proves wrong.",
     "mitigation": "Signed attestations with server-side timestamp + reviewer identity; export bundle includes signature manifest."
    },
    {
     "threat": "Information Disclosure",
     "scenario": "Cross-tenant leak of one firm's invoice/invoice data through shared indices, logs, or prompts.",
     "mitigation": "Tenant-scoped row-level auth; PII/financial-data scrubbing in logs; retrieval indices partitioned per firm."
    },
    {
     "threat": "Denial of Service",
     "scenario": "A runaway extraction job or bulk export exhausts shared workers during a month-end delivery crunch.",
     "mitigation": "Per-tenant concurrency + budget caps; circuit breaker on model calls; degrade-gracefully queue."
    },
    {
     "threat": "Elevation of Privilege",
     "scenario": "A standard operator acquires reviewer-approval or debtor-inquiry-send capability via a workflow shortcut.",
     "mitigation": "Roles stored in a separate table; capability checks server-side; no client-only role checks."
    }
   ],
   "privacy_posture": "Data-minimization by default; per-firm isolation; data-processing terms on file; deletion-schedule runbook published.",
   "compliance_targets": [
    "GLBA-adjacent nonpublic-personal-information handling program",
    "SOC 2 Type I (year 2 roadmap)",
    "Account owner-licensing boundary + collection-agency-statute review per state before scaling",
    "Debtor-portal terms-of-service log for any automated aged-receivables list pull"
   ],
   "data_classifications": [
    "Firm invoice/invoice client portfolio (sensitive business data)",
    "Debtor aged-receivables lists (sensitive, third-party-sourced)",
    "Account owner split sheets / payout data (sensitive, HR-adjacent)",
    "Contact/PII (standard)"
   ]
  },
  "devops": {
   "ci_cd": "PR -> typecheck + unit + snapshot tests -> preview deploy -> main auto-deploys to a single production region; migrations gated on review.",
   "environments": [
    "local",
    "preview (per-PR)",
    "staging (shared)",
    "production (single region + multi-AZ)"
   ],
   "observability": [
    "Structured logs with tenant + request IDs",
    "RED metrics per workflow",
    "Error tracking with source maps",
    "Model-call spans with cost + latency",
    "Weekly SLO review, with a month-end delivery-crunch capacity review"
   ],
   "testing_pyramid": [
    "Unit tests on matching-derivation and tie-out validation modules",
    "Component tests on reviewer exception-queue surfaces",
    "Contract tests on debtor-aged-receivables list-schema parsers",
    "End-to-end smoke test on the intake -> match -> reviewer-signoff -> delivery path"
   ],
   "accessibility_tests": [
    "axe-core in CI on reviewer-facing surfaces",
    "Keyboard-only walkthrough per workflow",
    "Prefers-reduced-motion honored"
   ],
   "performance_budget": "p95 workflow latency published per module; aged-receivables list-extraction cold-path under 30s or shown as a background job."
  },
  "accessibility_i18n_ethics": {
   "wcag_target": "AA",
   "locales": [
    "en-US"
   ],
   "rtl_support": false,
   "ethical_risks": [
    "A discrepancy or recovered-dollar claim released without reviewer approval",
    "Debtor-inquiry language read as a demand or collection threat rather than an inquiry",
    "An error in a account owner payout aged-receivables list attributed to AI rather than owned by the reviewer"
   ],
   "ethical_guardrails": [
    "Human B2B services-accounting reviewer approval required before any discrepancy or debtor inquiry ships",
    "Deterministic output filter blocks demand/collection-style language in every drafted debtor inquiry",
    "AI-usage disclosure available in the engagement letter where relevant"
   ]
  },
  "governance": {
   "ownership": [
    {
     "area": "Product + roadmap",
     "owner": "Executive Sponsor"
    },
    {
     "area": "Architecture + platform",
     "owner": "Engineering Lead"
    },
    {
     "area": "Recovery + reviewer workflow",
     "owner": "Named B2B services-accounting reviewer"
    },
    {
     "area": "Compliance + privacy",
     "owner": "Compliance Lead"
    },
    {
     "area": "Design system",
     "owner": "Design Lead"
    },
    {
     "area": "SEO + content",
     "owner": "Content Lead"
    }
   ],
   "docs_required": [
    "ADR log (checked in)",
    "Owner-action ledger",
    "Evidence register",
    "STRIDE threat model",
    "Runbook: incident, restore, breach notification",
    "Reviewer playbook + signature invoice"
   ],
   "naming_conventions": [
    "kebab-case slugs for blueprints and routes",
    "camelCase for TypeScript identifiers",
    "SCREAMING_SNAKE_CASE for environment variables",
    "Verb-first action names (e.g., generate-recovery-pack)"
   ],
   "change_control": "ADR-per-major-decision; migrations require review; production deploys gated on green CI + owner-action ledger check."
  },
  "risk_register": [
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-r1",
    "risk": "A debtor-facing claim proves incorrect",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Every discrepancy claim linked to a cited invoice-schedule version + reviewer signoff",
    "contingency": "Retraction workflow; firm-notification template; audit-log export within 24 hours",
    "owner": "legal"
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-r2",
    "risk": "AI hallucination in a delivered discrepancy line or debtor inquiry",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Retrieval-first pipeline + structured output validation + reviewer gate",
    "contingency": "Reviewer-triggered rollback + regeneration; incident postmortem published to the firm",
    "owner": "engineering"
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-r3",
    "risk": "Cross-tenant firm financial data leak",
    "likelihood": "low",
    "impact": "severe",
    "mitigation": "Row-level auth + per-tenant retrieval indices + log-scrubbing",
    "contingency": "Breach-notification runbook; forced credential rotation; scoped tenant kill switch",
    "owner": "engineering"
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-r4",
    "risk": "Pilot firm churns before converting to a paid desk",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "Weekly working-session cadence during pilot; documented value moments; owner-action ledger",
    "contingency": "Structured exit interview; write learnings into ICP + pricing hypothesis",
    "owner": "owner"
   },
   {
    "id": "firm-overdue-invoice-invoice-recovery-desk-r5",
    "risk": "An AMS vendor ships free, good-enough recovery with a chase workflow",
    "likelihood": "medium-high",
    "impact": "high",
    "mitigation": "AMS-agnostic positioning; recovery/chase as the human moat software won't replicate",
    "contingency": "Reposition as \"we operate whatever AMS tool exists\"; lean harder into the Diligence Tie-Out line",
    "owner": "owner"
   }
  ],
  "roadmap": [
   {
    "phase": "Phase 0 — Discovery + pilot LOI",
    "weeks": "Weeks 1-2",
    "outcomes": [
     "3-5 pilot firm LOIs",
     "Evidence pack from each pilot firm",
     "Written ICP + pricing hypothesis"
    ],
    "exit_criteria": [
     "≥3 LOIs signed",
     "Owner-action ledger populated per firm",
     "Reviewer identity confirmed"
    ],
    "kill_criteria": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ]
   },
   {
    "phase": "Phase 1 — Thin vertical slice",
    "weeks": "Weeks 3-4",
    "outcomes": [
     "Intake -> match -> reviewer signoff -> delivery working end-to-end for one AMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "exit_criteria": [
     "1 real Invoice Leakage Scan delivered + reviewer-signed",
     "p95 workflow latency published"
    ],
    "kill_criteria": [
     "Reviewer signoff cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ]
   },
   {
    "phase": "Phase 2 — Pilot cohort",
    "weeks": "Weeks 3-8",
    "outcomes": [
     "10 pilot firms scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "exit_criteria": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "kill_criteria": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ]
   },
   {
    "phase": "Phase 3 — Recurring-desk scale-up",
    "weeks": "Weeks 9-13 (Day 90 checkpoint)",
    "outcomes": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action ledger closed for launch"
    ],
    "exit_criteria": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "kill_criteria": [
     "Rework rate persistently above 3%",
     "Reviewer minutes per client not falling with volume"
    ]
   }
  ],
  "metrics": {
   "north_star": "Signed Monthly Recovery Packs delivered per week, per client, with zero client-caught material errors",
   "leading": [
    "Pilot firm LOIs signed",
    "Scan-request-to-delivered-scan cycle time",
    "Reviewer signoff cycle time",
    "Evidence coverage per Discrepancy Docket line",
    "Owner-action ledger closure rate"
   ],
   "lagging": [
    "Paid standard-price desk contracts signed",
    "Scan-to-desk conversion (target ≥40%, pilot gate 25%)",
    "Client-caught material error rate (target <0.5%)",
    "Logo retention (target ≥85% annualized)"
   ],
   "guardrails": [
    "Model spend per tenant per week",
    "PII/financial data in logs (target: 0)",
    "Cross-tenant access attempts (target: 0)",
    "p95 workflow latency ceiling"
   ]
  },
  "executive_review": {
   "consensus": "Ship a thin, evidence-linked, reviewer-gated vertical slice for LedgerClear, wedged on the Invoice Leakage Scan. Prefer a boring, single-region modular monolith. Do not launch commercially until owner-action facts close and at least one reviewer-signed Invoice Ledger has shipped.",
   "dissent": "Executive Sponsor and Privacy/Compliance disagree on launch tempo — Privacy recommends waiting for the full state-by-state collection-agency-statute review before enabling the recovery-share rider anywhere.",
   "go_no_go": "conditional-go",
   "top_3_risks": [
    "A debtor-facing claim proves incorrect",
    "AI hallucination in a delivered discrepancy line or debtor inquiry",
    "Cross-tenant firm financial data leak"
   ],
   "first_10_steps": [
    "Confirm the named B2B services-accounting reviewer + engagement letter on file",
    "Populate owner-action ledger with entity, jurisdiction, contact inbox, privacy inbox",
    "Open pilot-cohort intake (cap 10) with explicit pricing conversation",
    "Write ICP + kill/pivot criteria in the plan file",
    "Stand up the evidence-linked intake -> match -> reviewer signoff loop",
    "Wire append-only audit log + hash-chained snapshots",
    "Add row-level auth + tenant-scoped retrieval indices",
    "Instrument scan-request, pack-delivery, and reviewer-signoff events",
    "Publish the microsite with FAQPage schema only and noindex until owner-facts close",
    "Schedule the Day-90 kill/pivot review with executive sponsor"
   ]
  }
 },
 "project_site": {
  "slug": "b2b-invoice-collections-ar-recovery-desk",
  "app_name": "LedgerClear Recovery Desk",
  "archetype": "recovery-recovery desk",
  "archetype_label": "invoice recovery & recovery desk",
  "reader_role": "Owner / ops lead of a small B2B service firm",
  "one_sentence_app": "LedgerClear Recovery Desk turns your aged-receivables list into a human-approved, contingency-priced recovery run — scored per Account, sent under your brand, paid only on what lands.",
  "homepage_sequence": [
   "scene",
   "workflow",
   "instrument",
   "offer",
   "proof",
   "qualification",
   "objections"
  ],
  "hero": {
   "frame_label": "B2B services firm back-office · invoice recovery & recovery desk",
   "eyebrow": "Owner / overdue B2B invoice past 15 days",
   "interface_title": "LedgerClear recovery desk",
   "primary_panel_title": "Account INV-1042 · $9,200 · 62 days past due · AR Concierge",
   "primary_panel_body": "Score recovery probability, draft the firm-but-professional step-2 reminder under the Client’s brand, log the Promise-to-Pay, and route to the Recovery Specialist for approval before anything sends.",
   "side_panel_title": "Before anything sends",
   "side_panel_items": [
    "Every aged-receivables list line matched or exception-coded",
    "Discrepancy Docket reviewer-approved",
    "Invoice Ledger ties to aged-receivables list totals to the penny"
   ],
   "status_metric": "REVIEW",
   "status_label": "Recovery Specialist approval required"
  },
  "language": {
   "problem_heading": "The firm principal's moment",
   "mechanism_heading": "Inside the LedgerClear recovery desk",
   "proof_heading": "Why this survives a account owner dispute or a diligence read",
   "offer_heading": "What leaves the room",
   "objection_heading": "The hard questions",
   "qualification_heading": "Who should not use this",
   "cta_close": "Start a free Invoice Leakage Scan — reviewed and signed by a real B2B services-accounting reviewer, chased under your own firm's name."
  },
  "modules": [
   {
    "name": "Debtor aged-receivables list intake",
    "job": "Turns a forwarded or uploaded debtor aged-receivables list into a named recovery-cycle record with a completeness check against the debtor engagement list.",
    "artifact": "intake record"
   },
   {
    "name": "Invoice Ledger",
    "job": "Holds every aged-receivables list line matched to an AMS invoice, tied to the penny against debtor-stated totals, signed by the reviewer.",
    "artifact": "recovery ledger"
   },
   {
    "name": "Discrepancy Docket",
    "job": "Packages every missing, short-paid, late, or chargeback line with its estimated dollar value and evidence into the record a account owner or acquirer can walk without a meeting.",
    "artifact": "release package"
   }
  ],
  "checkpoints": [
   {
    "label": "aged-receivables list line match",
    "pass": "matched with source citation",
    "fail": "routed to reviewer exception queue"
   },
   {
    "label": "penny-perfect tie-out",
    "pass": "deterministic code, ledger balances to aged-receivables list total",
    "fail": "blocked before release"
   },
   {
    "label": "Invoice Ledger",
    "pass": "reviewer releases (second reviewer on high-value dockets)",
    "fail": "stays draft"
   }
  ],
  "signature_scene": "It’s the third unanswered reminder on a $9,200 invoice from a client you still want to keep. Instead of writing a fourth awkward email yourself, you forward the aged-receivables list to LedgerClear and a Recovery Specialist takes the chase from here."
 },
 "ddd": {
  "slug": "b2b-invoice-collections-ar-recovery-desk",
  "project_name": "LedgerClear",
  "business_understanding": {
   "summary": "LedgerClear — a done-for-you, contingency-priced B2B invoice collections and AR recovery desk for small US B2B service firms.",
   "customer_profile": "Owners/ops leads of small B2B service firms (5–75 employees) invoicing clients on Net 30/60/90 terms.",
   "customer_pain": "Overdue invoices, no AR function, dread of chasing clients personally, recovery odds decaying with age.",
   "paid_outcome": "Recovered Dollars on overdue Accounts, human-reviewed, on strict contingency — no collect, no fee.",
   "value_creation": "AI compresses aged-receivables list extraction, invoice matching, and discrepancy-draft generation; deterministic code owns every tie-out, materiality threshold, and aging date; humans own reviewer approval, debtor-chase judgment, and anything client- or debtor-facing; the platform binds them with an append-only audit trail and per-firm isolation.",
   "why_ai_native": "AI makes the personalized, correctly-timed reminder cadence and per-Account recovery scoring economical; a human Recovery Specialist owns every Debtor-facing negotiation.",
   "operational_risks": [
    "Reviewer bottleneck during a month-end delivery crunch across many clients at once",
    "Prompt injection via uploaded debtor-aged-receivables list document content",
    "Cross-firm retrieval leak",
    "Complete records unobtainable at scale (cycles stuck in evidence-gap status)",
    "A debtor-facing inquiry read as a demand rather than a routine inquiry, damaging the client relationship"
   ],
   "assumptions": [
    "Firm principals will pay for evidence-linked, human-reviewed recovery over continuing to book aged-receivables list totals unverified.",
    "The workflow can be reconstructed from an firm-supplied AMS export and debtor aged-receivables lists within the 5-business-day (10 at pilot) cycle-time target.",
    "The vertical tolerates AI-assisted drafts when reviewer approval is explicit and every debtor-facing send is firm-authorized.",
    "Single-tenant infrastructure per customer is not required for the first cohort — logical isolation with row-level auth is acceptable.",
    "Demand persists as a recurring monthly need, not a one-time event — unlike a single-deadline filing business."
   ],
   "validation_questions": [
    "Which specific B2B services-accounting reviewer will sign off on the first cohort's ledgers?",
    "Which AMS platforms and debtor mixes are in scope for launch?",
    "What is the actual scan-to-desk conversion rate at pilot pricing vs. standard pricing?",
    "Which existing systems (AMS exports, QuickBooks) must this integrate with day one?",
    "Is there a data-residency or on-prem constraint for any pilot firm's financial data?"
   ]
  },
  "domain_discovery": {
   "actors": [
    {
     "actor": "Firm Principal",
     "role": "Owns the firm's invoice-recovery engagement; supplies records and authorizes debtor-inquiry sends",
     "goals": [
      "Recover missing/short-paid invoices",
      "Avoid losing staff hours to aged-receivables list matching",
      "Have a defensible ledger for account owners, CPA, and acquirers"
     ],
     "decisions": [
      "Whether to engage LedgerClear",
      "Which records to supply",
      "Whether to authorize debtor inquiries and the recovery-share rider"
     ],
     "pain_points": [
      "No time for line-item aged-receivables list verification",
      "Doesn't know which of 40+ debtor formats are shortchanging the firm"
     ]
    },
    {
     "actor": "B2B services-Accounting Reviewer",
     "role": "Reviews AI-matched aged-receivables lists and drafted discrepancies; signs off before delivery or debtor send",
     "goals": [
      "Release only evidence-backed, penny-perfect ledgers",
      "Protect firm and debtor relationships"
     ],
     "decisions": [
      "Approve, escalate, or reject a discrepancy",
      "Sign or withhold the Invoice Ledger"
     ],
     "pain_points": [
      "Volume spikes during month-end delivery windows",
      "Ambiguous fuzzy matches requiring judgment"
     ]
    },
    {
     "actor": "Account owner",
     "role": "Receives payout aged-receivables lists computed from verified data; may dispute a payout",
     "goals": [
      "Get paid correctly and on time"
     ],
     "decisions": [
      "Whether to escalate a payout dispute"
     ],
     "pain_points": [
      "No aged-receivables list-backed answer when a payout looks wrong"
     ]
    },
    {
     "actor": "Debtor Invoice Department (external)",
     "role": "Receives inquiries about missing/short-paid invoices",
     "goals": [
      "Resolve inquiries without escalation"
     ],
     "decisions": [
      "Confirm, correct, or dispute an inquiry"
     ],
     "pain_points": [
      "High inquiry volume across many firms and formats"
     ]
    }
   ],
   "glossary": [
    {
     "term": "Invoice Leakage Scan",
     "definition": "The one-time, $495 recovery of the last 3 months of debtor aged-receivables lists against the AMS book.",
     "used_by": "Firm Principal",
     "context": "Recovery & Matching",
     "example": "Scan for Firm #AG-2291 across 34 debtor engagements",
     "notes": "Never called 'audit', 'check', or 'review'."
    },
    {
     "term": "Recovery cycle",
     "definition": "One calendar month's worth of aged-receivables list collection, matching, and pack delivery for one client.",
     "used_by": "B2B services-Accounting Reviewer",
     "context": "Recovery & Matching",
     "example": "The July recovery cycle for Firm #AG-2291",
     "notes": "The unit of recurring work."
    },
    {
     "term": "Invoice Ledger",
     "definition": "The signed tie-out artifact: every aged-receivables list line matched to a invoice, balanced to the penny.",
     "used_by": "B2B services-Accounting Reviewer, Firm Principal",
     "context": "Recovery & Matching",
     "example": "July Invoice Ledger, 34 debtors, ties to $128,410 in stated invoices",
     "notes": "Never called 'report' or 'aged-receivables list'."
    },
    {
     "term": "Discrepancy Docket",
     "definition": "The list of missing, short-paid, late, or chargeback lines with dollar value and evidence.",
     "used_by": "B2B services-Accounting Reviewer, Firm Principal",
     "context": "Recovery & Matching",
     "example": "3 short-paid lines, 1 missing renewal, est. $2,140",
     "notes": "Never called 'exceptions report'."
    }
   ],
   "decisions": [
    {
     "decision": "Is this aged-receivables list line a real discrepancy or a normal debtor quirk (e.g. as-earned lag)?",
     "who": "AI drafts, Reviewer confirms",
     "inputs": [
      "[PLACEHOLDER] owner to complete"
     ],
     "rule": "Classification thresholds per transaction type; debtor-quirk map consulted before flagging",
     "output": "Discrepancy classification with evidence citation",
     "risk": "False discrepancy sent to a debtor"
    },
    {
     "decision": "Is the Invoice Ledger ready to sign?",
     "who": "Deterministic code gates, Reviewer signs",
     "inputs": "All aged-receivables list lines matched or exception-coded, ledger tie-out to aged-receivables list totals",
     "rule": "Penny-perfect rule: ledger must tie to aged-receivables list totals before release",
     "output": "Signed Invoice Ledger",
     "risk": "Signed ledger with an unresolved tie-out gap"
    }
   ],
   "events": [
    {
     "event": "Aged-receivables listNormalized",
     "meaning": "A debtor aged-receivables list is extracted and tied out, ready for matching",
     "trigger": "Extraction Agent completes parsing + tie-out check",
     "downstream": [
      "[PLACEHOLDER] owner to complete"
     ]
    },
    {
     "event": "DiscrepancyApproved",
     "meaning": "A flagged discrepancy is reviewer-confirmed and evidenced",
     "trigger": "B2B services-Accounting Reviewer approves the classification",
     "downstream": "Debtor inquiry drafted; docket line finalized"
    }
   ]
  },
  "subdomains": [
   {
    "name": "Recovery & Matching",
    "type": "core",
    "description": "Aged-receivables list normalization, AMS-invoice matching, expected-invoice computation, and discrepancy classification.",
    "reason": "This is the paid outcome — the recoverd ledger and docket are what the firm is buying.",
    "business_value": "Direct revenue driver; every tier maps to a delivered Monthly Recovery Pack.",
    "recommendation": "Build in-house, deterministic-rules-first.",
    "ai_involvement": "Extraction, matching, discrepancy classification, drafting",
    "human_involvement": "Reviewer approval, ledger signature",
    "risks": [
     "Missed cycle-delivery SLA",
     "Incomplete evidence causing a client-caught error"
    ],
    "validation_questions": [
     "What is the real reviewer review time per cycle at volume?"
    ]
   },
   {
    "name": "Recovery & Delivery",
    "type": "core",
    "description": "Debtor-inquiry drafting/sending, aging/tracking, Monthly Recovery Pack assembly, recovery ledger.",
    "reason": "Differentiates LedgerClear from a generic bookkeeping service — this is the chase-and-collect layer.",
    "business_value": "Drives conversion (free scan -> paid desk) and the recovery-share rider.",
    "recommendation": "Build in-house; maintain a per-debtor contact/quirk map from day one.",
    "ai_involvement": "Drafts inquiries and recovery reports",
    "human_involvement": "Reviewer approves every outbound inquiry; escalation judgment",
    "risks": [
     "Stalled recoveries with no tracked follow-up"
    ],
    "validation_questions": [
     "How often do debtors respond within the 60-day aging window?"
    ]
   },
   {
    "name": "Evidence & Compliance",
    "type": "supporting",
    "description": "Audit trail, engagement-letter authorization, licensing-boundary enforcement.",
    "reason": "Necessary complement to recovery but not itself the differentiated value proposition.",
    "business_value": "Protects the licensing boundary and supports diligence/tie-out sales.",
    "recommendation": "Build thin; keep tightly scoped to documentation, never advice.",
    "ai_involvement": "Assembles audit exports",
    "human_involvement": "Compliance lead maintains state-by-state tracker",
    "risks": [
     "Scope creep into unlicensed account owner or collection activity"
    ],
    "validation_questions": [
     "Which states need counsel review before the recovery-share rider is offered?"
    ]
   },
   {
    "name": "Referral & Outreach",
    "type": "generic",
    "description": "CRM, outbound sequencing, and content publishing.",
    "reason": "Not differentiating; off-the-shelf tools suffice at this stage.",
    "business_value": "Supports pipeline but not the core value proposition.",
    "recommendation": "Buy (lightweight CRM), do not build.",
    "ai_involvement": "Content drafting assistance",
    "human_involvement": "Founder-led outreach and content",
    "risks": [
     "Low differentiation risk if under-invested"
    ],
    "validation_questions": [
     "Which channel actually converts at the assumed rate?"
    ]
   }
  ],
  "core_domain_analysis": {
   "primary_core": "Recovery & Matching",
   "secondary_cores": [
    "Recovery & Delivery"
   ],
   "supporting_may_become_core": [
    "Evidence & Compliance"
   ],
   "generic_do_not_distract": [
    "Referral & Outreach",
    "CRM/pipeline tracking"
   ],
   "rationale": "The paid outcome is a signed Invoice Ledger, so Recovery & Matching is the primary core. Recovery & Delivery is a secondary core because debtor chase and tracked recovery is the human-plus-AI moat that differentiates LedgerClear from software the firm has to operate itself. Evidence & Compliance could become core if the Diligence Tie-Out line grows into a larger revenue stream, but starts as supporting. Referral & Outreach uses off-the-shelf tooling deliberately to keep engineering focus on the recovery and recovery engine."
  },
  "bounded_contexts": [
   {
    "name": "Account Intake",
    "purpose": "Client onboarding, aged-receivables ingestion, invoice/terms/contact normalization, and the 100%-commercial-debt classification gate.",
    "subdomain": "Recovery & Matching (core)",
    "type": "core",
    "owned_language": [
     "debtor aged-receivables list",
     "recovery cycle",
     "completeness check"
    ],
    "owns": [
     "Aged-receivables list intake lifecycle",
     "Normalization state",
     "Debtor engagement completeness"
    ],
    "does_not_own": [
     "Matching decisions",
     "Reviewer signature"
    ],
    "primary_actors": [
     "Firm Principal",
     "Extraction Agent"
    ],
    "entities": [
     "DebtorAged-receivables list",
     "RecoveryCycle"
    ],
    "value_objects": [
     "ConfidenceScore",
     "Aged-receivables listTotal"
    ],
    "aggregates": [
     "DebtorAged-receivables listAggregate"
    ],
    "domain_services": [
     "Aged-receivables list normalizer",
     "Completeness checker"
    ],
    "application_services": [
     "ReceiveAged-receivables list",
     "NormalizeAged-receivables list",
     "CheckCompleteness"
    ],
    "commands": [
     "ReceiveAged-receivables list",
     "NormalizeAged-receivables list"
    ],
    "domain_events": [
     "aged-receivables list.received",
     "aged-receivables list.normalized",
     "aged-receivables list.completeness_check_failed"
    ],
    "policies": [
     "Auto-flag missing debtor aged-receivables list against the engagement list"
    ],
    "specifications": [
     "Aged-receivables listTieOutSpec"
    ],
    "invariants": [
     "A DebtorAged-receivables list cannot be matched against until its line-item sum ties to its stated total"
    ],
    "ai_agents": [
     "Extraction Agent"
    ],
    "human_roles": [
     "Firm Principal"
    ],
    "data_owned": [
     "DebtorAged-receivables list",
     "RecoveryCycle"
    ],
    "inputs": [
     "Uploaded/forwarded debtor aged-receivables lists",
     "Debtor engagement list"
    ],
    "outputs": [
     "Normalized canonical aged-receivables list records"
    ],
    "external_integrations": [
     "Debtor aged-receivables list portals (authorized pull only)",
     "Monitored intake mailbox"
    ],
    "risks": [
     "A malformed aged-receivables list silently mis-tied",
     "Missing debtor aged-receivables list for the period goes unnoticed"
    ],
    "interfaces": [
     "-> Recovery & Matching (Aged-receivables listNormalized)"
    ]
   },
   {
    "name": "Sequence Drafting",
    "purpose": "The gold-standard sequence library, AI-drafted reminder content, and per-Client brand-voice/tone rules.",
    "subdomain": "Recovery & Matching (core)",
    "type": "core",
    "owned_language": [
     "Invoice Ledger",
     "Discrepancy Docket",
     "match",
     "discrepancy"
    ],
    "owns": [
     "Matching engine",
     "Discrepancy classification",
     "Ledger tie-out"
    ],
    "does_not_own": [
     "Reviewer identity",
     "Billing"
    ],
    "primary_actors": [
     "B2B services-Accounting Reviewer",
     "Matching Agent"
    ],
    "entities": [
     "RecoveryCycle",
     "DiscrepancyDocket",
     "InvoiceLedger"
    ],
    "value_objects": [
     "ConfidenceScore",
     "DiscrepancyClassification"
    ],
    "aggregates": [
     "RecoveryCycleAggregate",
     "DiscrepancyDocketAggregate",
     "InvoiceLedgerAggregate"
    ],
    "domain_services": [
     "Matching engine",
     "Expected-invoice calculator"
    ],
    "application_services": [
     "RunMatching",
     "ClassifyDiscrepancy",
     "ApproveDiscrepancy",
     "SignLedger"
    ],
    "commands": [
     "RunMatching",
     "FlagDiscrepancy",
     "ApproveDiscrepancy",
     "SignLedger"
    ],
    "domain_events": [
     "recovery_cycle.matching_completed",
     "discrepancy.flagged",
     "discrepancy.reviewer_approved",
     "invoice_ledger.signed"
    ],
    "policies": [
     "Auto-route low-confidence matches to reviewer exception queue"
    ],
    "specifications": [
     "PennyPerfectTieOutSpec",
     "EvidenceCitationSpec"
    ],
    "invariants": [
     "A InvoiceLedger cannot be signed until it ties to aged-receivables list totals to the penny",
     "No discrepancy reaches a client or debtor without reviewer approval"
    ],
    "ai_agents": [
     "Matching Agent",
     "Discrepancy Drafter Agent"
    ],
    "human_roles": [
     "B2B services-Accounting Reviewer"
    ],
    "data_owned": [
     "RecoveryCycle",
     "DiscrepancyDocket",
     "InvoiceLedger"
    ],
    "inputs": [
     "Normalized aged-receivables lists",
     "AMS client portfolio export",
     "Invoice schedules"
    ],
    "outputs": [
     "Signed Invoice Ledger",
     "Approved Discrepancy Docket"
    ],
    "external_integrations": [
     "Firm management system export (file-based, no live API)"
    ],
    "risks": [
     "Wrong match causes a wrong ledger",
     "False discrepancy claim reaches a debtor"
    ],
    "interfaces": [
     "-> Recovery & Delivery (DiscrepancyApproved)"
    ]
   },
   {
    "name": "Escalation Decisioning",
    "purpose": "Recovery-probability scoring, Escalation Tier recommendations, Promise-to-Pay tracking, and the human approval workflow.",
    "subdomain": "Recovery & Delivery (core)",
    "type": "core",
    "owned_language": [
     "debtor inquiry",
     "recovered dollars",
     "Monthly Recovery Pack"
    ],
    "owns": [
     "Inquiry drafting/sending",
     "Aging tracker",
     "Pack assembly"
    ],
    "does_not_own": [
     "Discrepancy classification (upstream)"
    ],
    "primary_actors": [
     "B2B services-Accounting Reviewer",
     "Inquiry Drafter Agent"
    ],
    "entities": [
     "DebtorInquiry",
     "Account ownerPayoutAged-receivables list",
     "MonthlyRecoveryPack"
    ],
    "value_objects": [
     "AgingWindow",
     "RecoveredAmount"
    ],
    "aggregates": [
     "DebtorInquiryAggregate"
    ],
    "domain_services": [
     "Inquiry drafter",
     "Aging tracker",
     "Pack assembler"
    ],
    "application_services": [
     "DraftDebtorInquiry",
     "SendDebtorInquiry",
     "ComputePayout",
     "AssemblePack",
     "DeliverPack"
    ],
    "commands": [
     "DraftDebtorInquiry",
     "SendDebtorInquiry",
     "DeliverPack"
    ],
    "domain_events": [
     "debtor_inquiry.sent",
     "debtor_inquiry.resolved",
     "recovery.logged",
     "pack.delivered",
     "aging.escalated_60d",
     "aging.escalated_90d"
    ],
    "policies": [
     "Auto-escalate any inquiry unresolved past 60 days"
    ],
    "specifications": [
     "InquiryAuthorizationSpec"
    ],
    "invariants": [
     "A DebtorInquiry cannot be sent without reviewer approval and firm authorization on file",
     "A Account ownerPayoutAged-receivables list is computed only from the firm-approved split sheet"
    ],
    "ai_agents": [
     "Inquiry Drafter Agent"
    ],
    "human_roles": [
     "B2B services-Accounting Reviewer"
    ],
    "data_owned": [
     "DebtorInquiry",
     "Account ownerPayoutAged-receivables list",
     "MonthlyRecoveryPack"
    ],
    "inputs": [
     "Approved Discrepancy Docket",
     "Account owner split sheet"
    ],
    "outputs": [
     "Sent debtor inquiries",
     "Delivered Monthly Recovery Pack"
    ],
    "external_integrations": [
     "Debtor invoice-department mailboxes (firm-authorized sends only)"
    ],
    "risks": [
     "Debtor inquiry read as a demand rather than an inquiry",
     "Stalled recovery with no escalation"
    ],
    "interfaces": [
     "-> Quality Assurance (PackReadyForSignoff)"
    ]
   },
   {
    "name": "Placement Handoff",
    "purpose": "Documentation-package assembly, licensed collection-agency partner routing, and the partner attorney network handoff for Legal Referral.",
    "subdomain": "Recovery & Matching (core, QA slice)",
    "type": "core",
    "owned_language": [
     "reviewer signoff",
     "retraction"
    ],
    "owns": [
     "Signoff records",
     "Retraction workflow"
    ],
    "does_not_own": [
     "Ledger drafting"
    ],
    "primary_actors": [
     "B2B services-Accounting Reviewer"
    ],
    "entities": [
     "Signoff",
     "Retraction"
    ],
    "value_objects": [
     "SignatureManifest",
     "RetractionReason"
    ],
    "aggregates": [
     "SignoffAggregate",
     "RetractionAggregate"
    ],
    "domain_services": [
     "Signature binder"
    ],
    "application_services": [
     "ApproveArtifact",
     "RetractArtifact"
    ],
    "commands": [
     "ApproveArtifact",
     "RetractArtifact"
    ],
    "domain_events": [
     "invoice_ledger.signed",
     "pack.retracted"
    ],
    "policies": [
     "A retraction requires senior-reviewer co-signature"
    ],
    "specifications": [
     "SignoffValiditySpec"
    ],
    "invariants": [
     "Signature bound to a live authenticated session, not a form field",
     "Signed artifacts are immutable"
    ],
    "ai_agents": [],
    "human_roles": [
     "B2B services-Accounting Reviewer",
     "Senior Reviewer"
    ],
    "data_owned": [
     "Signoff",
     "Retraction"
    ],
    "inputs": [
     "Draft ledger/pack ready for signoff"
    ],
    "outputs": [
     "Signed artifact"
    ],
    "external_integrations": [],
    "risks": [
     "Reviewer identity spoofing"
    ],
    "interfaces": [
     "<- Recovery & Matching (SignLedger)",
     "<- Recovery & Delivery (PackReadyForSignoff)"
    ]
   }
  ],
  "context_map": [
   {
    "upstream": "Intake & Normalization",
    "downstream": "Recovery & Matching",
    "relationship": "Customer-Supplier",
    "integration_pattern": "Domain event (Aged-receivables listNormalized) consumed by matching engine",
    "translation_notes": "Canonical aged-receivables list schema is the shared contract; no direct database coupling.",
    "pattern": "Customer-Supplier",
    "contract_type": "domain event",
    "data_exchanged": [
     "[PLACEHOLDER] owner to complete"
    ],
    "events_exchanged": [
     "Domain event (Aged-receivables listNormalized) consumed by matching engine"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   {
    "upstream": "Recovery & Matching",
    "downstream": "Recovery & Delivery",
    "relationship": "Customer-Supplier",
    "integration_pattern": "Domain event (DiscrepancyApproved) triggers inquiry drafting",
    "translation_notes": "Only reviewer-approved discrepancies cross the boundary.",
    "pattern": "Customer-Supplier",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "Domain event (DiscrepancyApproved) triggers inquiry drafting"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   },
   {
    "upstream": "Recovery & Matching",
    "downstream": "Quality Assurance",
    "relationship": "Conformist",
    "integration_pattern": "SignLedger command with synchronous validation",
    "translation_notes": "QA enforces the penny-perfect invariant; Recovery & Matching conforms to QA's signature contract.",
    "pattern": "Conformist",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "SignLedger command with synchronous validation"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   },
   {
    "upstream": "Recovery & Delivery",
    "downstream": "Quality Assurance",
    "relationship": "Conformist",
    "integration_pattern": "PackReadyForSignoff event",
    "translation_notes": "Pack cannot deliver without QA signoff.",
    "pattern": "Conformist",
    "contract_type": "domain event",
    "data_exchanged": "Canonical schema payload only",
    "events_exchanged": [
     "PackReadyForSignoff event"
    ],
    "ownership_boundary": "Downstream never writes to upstream's tables",
    "acl_notes": "Anti-corruption translation not needed — shared canonical schema",
    "business_reason": "Keeps each context's invariants enforceable independently",
    "failure_risks": "Downstream stalls if upstream event delivery fails"
   }
  ],
  "external_integrations": [
   {
    "system": "Firm management system (AMS) export",
    "direction": "inbound",
    "pattern": "File-based export, no live API at launch",
    "risk": "Schema drift per AMS version",
    "owner_context": "Recovery & Delivery",
    "data_in": [
     "[PLACEHOLDER] owner to complete"
    ],
    "data_out": [
     "[PLACEHOLDER] owner to complete"
    ],
    "trigger": "Recovery cycle start",
    "internal_model": "Canonical aged-receivables list/ledger schema",
    "acl_strategy": "Per-debtor parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "Debtor aged-receivables list portals",
    "direction": "inbound",
    "pattern": "Firm-authorized credentialed pull or client-forwarded file",
    "risk": "Portal ToS friction; credential expiry",
    "owner_context": "Intake & Normalization",
    "data_in": "Debtor aged-receivables list content",
    "data_out": "N/A",
    "trigger": "Recovery cycle start",
    "internal_model": "Canonical aged-receivables list/ledger schema",
    "acl_strategy": "Per-debtor parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "QuickBooks / AMS posting-file import",
    "direction": "outbound",
    "pattern": "Generated posting file, firm-side import",
    "risk": "Format mismatch per bookkeeping software version",
    "owner_context": "Recovery & Delivery",
    "data_in": "N/A",
    "data_out": "Posting file or inquiry email",
    "trigger": "Reviewer approval",
    "internal_model": "Canonical aged-receivables list/ledger schema",
    "acl_strategy": "Per-debtor parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   },
   {
    "system": "Debtor invoice-department mailbox",
    "direction": "outbound",
    "pattern": "Firm-authorized email send",
    "risk": "Inquiry misread as a demand",
    "owner_context": "Recovery & Delivery",
    "data_in": "N/A",
    "data_out": "Posting file or inquiry email",
    "trigger": "Reviewer approval",
    "internal_model": "Canonical aged-receivables list/ledger schema",
    "acl_strategy": "Per-debtor parser translates external format to canonical schema",
    "failure_strategy": "Retry then manual fallback",
    "audit_need": "Every external call logged with timestamp and payload hash"
   }
  ],
  "event_storm": [
   {
    "seq": 1,
    "command": "ReceiveAged-receivables list",
    "event": "aged-receivables list.received",
    "actor": "Firm Principal",
    "context": "Intake & Normalization",
    "aggregate": "DebtorAged-receivables listAggregate",
    "policy": "None",
    "downstream": "Completeness check against debtor engagement list",
    "risk": "Duplicate aged-receivables list ingestion"
   },
   {
    "seq": 2,
    "command": "NormalizeAged-receivables list",
    "event": "aged-receivables list.normalized",
    "actor": "Extraction Agent",
    "context": "Intake & Normalization",
    "aggregate": "DebtorAged-receivables listAggregate",
    "policy": "Auto tie-out check",
    "downstream": "Matching engine invoked",
    "risk": "Misread field on a scanned/paper aged-receivables list"
   },
   {
    "seq": 3,
    "command": "RunMatching",
    "event": "recovery_cycle.matching_completed",
    "actor": "Matching Agent",
    "context": "Recovery & Matching",
    "aggregate": "RecoveryCycleAggregate",
    "policy": "Auto-route low-confidence matches to reviewer",
    "downstream": "Exception queue populated",
    "risk": "Wrong fuzzy match auto-accepted"
   },
   {
    "seq": 4,
    "command": "ApproveDiscrepancy",
    "event": "discrepancy.reviewer_approved",
    "actor": "B2B services-Accounting Reviewer",
    "context": "Recovery & Matching",
    "aggregate": "DiscrepancyDocketAggregate",
    "policy": "None",
    "downstream": "Debtor inquiry drafted",
    "risk": "Reviewer approves under time pressure without full evidence check"
   },
   {
    "seq": 5,
    "command": "SignLedger",
    "event": "invoice_ledger.signed",
    "actor": "B2B services-Accounting Reviewer",
    "context": "Quality Assurance",
    "aggregate": "SignoffAggregate",
    "policy": "Penny-perfect tie-out gate",
    "downstream": "Monthly Recovery Pack assembled",
    "risk": "Signed ledger with a stale tie-out"
   },
   {
    "seq": 6,
    "command": "SendDebtorInquiry",
    "event": "debtor_inquiry.sent",
    "actor": "B2B services-Accounting Reviewer / Firm Principal",
    "context": "Recovery & Delivery",
    "aggregate": "DebtorInquiryAggregate",
    "policy": "Firm-authorization check",
    "downstream": "Aging clock starts",
    "risk": "Sent without valid authorization on file"
   }
  ],
  "critical_path": [
   "aged-receivables list.received -> aged-receivables list.normalized -> recovery_cycle.matching_completed -> discrepancy.reviewer_approved -> invoice_ledger.signed -> pack.delivered"
  ],
  "exception_flows": [
   "A aged-receivables list line below the matching-confidence threshold -> routed to reviewer exception queue, blocks recovery_cycle.matching_completed until resolved",
   "A discrepancy classification needs-reviewer-judgment -> held for reviewer, never auto-approved"
  ],
  "escalation_flows": [
   "A discrepancy over $2,500 -> second reviewer pass before docket approval",
   "A debtor disputes an inquiry beyond a routine response -> referred to the firm's own counsel"
  ],
  "retry_flows": [
   "Debtor inquiry unacknowledged after 60 days -> automated reminder, then reviewer-judged escalation at 90 days"
  ],
  "manual_override_flows": [
   "Founder/senior reviewer can force-hold any Invoice Ledger pre-release regardless of automated tie-out pass, if a data-integrity issue is suspected"
  ],
  "commands": [
   {
    "name": "ReceiveAged-receivables list",
    "issued_by": "Firm Principal / monitored mailbox",
    "preconditions": [
     "Client onboarded",
     "Debtor on the engagement list"
    ],
    "aggregate": "DebtorAged-receivables listAggregate",
    "success_event": "aged-receivables list.received",
    "failure_event": "Aged-receivables listRejected",
    "authorization": "Engaged client",
    "validation": "File type allowed; debtor recognized or flagged new",
    "audit": "Aged-receivables list hashed and logged"
   },
   {
    "name": "NormalizeAged-receivables list",
    "issued_by": "Extraction Agent",
    "preconditions": [
     "Aged-receivables list received"
    ],
    "aggregate": "DebtorAged-receivables listAggregate",
    "success_event": "aged-receivables list.normalized",
    "failure_event": "NormalizationFailed",
    "authorization": "System",
    "validation": "Line-item sum ties to stated total",
    "audit": "Extraction run logged with confidence scores"
   },
   {
    "name": "RunMatching",
    "issued_by": "Matching Agent",
    "preconditions": [
     "Aged-receivables list normalized",
     "AMS client portfolio on file"
    ],
    "aggregate": "RecoveryCycleAggregate",
    "success_event": "recovery_cycle.matching_completed",
    "failure_event": "MatchingIncomplete",
    "authorization": "System",
    "validation": "Every line matched, exception-coded, or logged as an evidence gap",
    "audit": "Match confidence scores logged per line"
   },
   {
    "name": "ApproveDiscrepancy",
    "issued_by": "B2B services-Accounting Reviewer",
    "preconditions": [
     "Discrepancy flagged with evidence citation"
    ],
    "aggregate": "DiscrepancyDocketAggregate",
    "success_event": "discrepancy.reviewer_approved",
    "failure_event": "DiscrepancyRejected",
    "authorization": "Named reviewer role",
    "validation": "Evidence citation present; materiality threshold check",
    "audit": "Reviewer identity + timestamp logged"
   },
   {
    "name": "SignLedger",
    "issued_by": "B2B services-Accounting Reviewer",
    "preconditions": [
     "All lines matched/exception-coded",
     "Ledger ties to aged-receivables list totals"
    ],
    "aggregate": "InvoiceLedgerAggregate",
    "success_event": "invoice_ledger.signed",
    "failure_event": "SignoffRejected",
    "authorization": "Named reviewer role",
    "validation": "Penny-perfect tie-out check passes",
    "audit": "Signature bound to authenticated session"
   },
   {
    "name": "SendDebtorInquiry",
    "issued_by": "B2B services-Accounting Reviewer / Firm Principal",
    "preconditions": [
     "Discrepancy reviewer-approved",
     "Debtor-communication authorization on file"
    ],
    "aggregate": "DebtorInquiryAggregate",
    "success_event": "debtor_inquiry.sent",
    "failure_event": "InquiryRejected",
    "authorization": "Firm-authorized administrative agent",
    "validation": "Inquiry language passes demand-language filter",
    "audit": "Send method + timestamp logged"
   }
  ],
  "policies": [
   {
    "name": "Auto-route low-confidence match to reviewer",
    "trigger": "recovery_cycle.matching_completed",
    "condition": "match confidence below auto-match threshold",
    "action": "Enqueue to reviewer exception queue",
    "context": "Recovery & Matching",
    "ai_involvement": "flags only",
    "human_approval": false
   },
   {
    "name": "Block demand-language patterns",
    "trigger": "DraftDebtorInquiry",
    "condition": "Draft contains demand/collection/legal-threat language pattern",
    "action": "Reject draft before it reaches reviewer approval",
    "context": "Recovery & Delivery",
    "ai_involvement": "author (blocked by deterministic filter)",
    "human_approval": false
   },
   {
    "name": "Second-reviewer spot check",
    "trigger": "discrepancy.reviewer_approved",
    "condition": "Docket line over $2,500",
    "action": "Route to a second named reviewer before the docket is finalized",
    "context": "Quality Assurance",
    "ai_involvement": "none",
    "human_approval": true
   },
   {
    "name": "Auto-escalate aging inquiry",
    "trigger": "debtor_inquiry.sent",
    "condition": "No debtor response within 60 days",
    "action": "Flag for reviewer escalation judgment",
    "context": "Recovery & Delivery",
    "ai_involvement": "flags only",
    "human_approval": false
   }
  ],
  "aggregates": [
   {
    "name": "Account",
    "root": "DebtorAged-receivables list",
    "context": "Intake & Normalization",
    "purpose": "Guard aged-receivables list receipt + normalization + tie-out state.",
    "entities": [
     "DebtorAged-receivables list"
    ],
    "value_objects": [
     "ConfidenceScore",
     "Aged-receivables listTotal"
    ],
    "invariants": [
     "A aged-receivables list cannot be matched against until it ties to its own stated total"
    ],
    "commands": [
     "ReceiveAged-receivables list",
     "NormalizeAged-receivables list"
    ],
    "events": [
     "aged-receivables list.received",
     "aged-receivables list.normalized"
    ],
    "repository": "DebtorAged-receivables listRepository",
    "transaction_boundary": "One aged-receivables list per transaction"
   },
   {
    "name": "Invoice",
    "root": "RecoveryCycle",
    "context": "Recovery & Matching",
    "purpose": "Own the monthly cycle's matching lifecycle for one client.",
    "entities": [
     "RecoveryCycle"
    ],
    "value_objects": [
     "MatchConfidence"
    ],
    "invariants": [
     "A cycle cannot close until every line is matched, exception-coded, or logged as a gap"
    ],
    "commands": [
     "RunMatching"
    ],
    "events": [
     "recovery_cycle.matching_completed"
    ],
    "repository": "RecoveryCycleRepository",
    "transaction_boundary": "One cycle per transaction"
   },
   {
    "name": "CorrespondenceLog",
    "root": "DiscrepancyDocket",
    "context": "Recovery & Matching",
    "purpose": "Own discrepancy classification and reviewer approval.",
    "entities": [
     "DiscrepancyDocket"
    ],
    "value_objects": [
     "DiscrepancyClassification"
    ],
    "invariants": [
     "No line enters the docket without a source-aged-receivables list citation and an AMS-invoice reference"
    ],
    "commands": [
     "ApproveDiscrepancy"
    ],
    "events": [
     "discrepancy.flagged",
     "discrepancy.reviewer_approved"
    ],
    "repository": "DiscrepancyDocketRepository",
    "transaction_boundary": "One docket per transaction"
   },
   {
    "name": "PromiseToPay",
    "root": "InvoiceLedger",
    "context": "Recovery & Matching",
    "purpose": "Own the ledger's tie-out and signature lifecycle.",
    "entities": [
     "InvoiceLedger"
    ],
    "value_objects": [
     "TieOutResult"
    ],
    "invariants": [
     "Totals must tie to aged-receivables list totals to the penny before the reviewer's signature is valid"
    ],
    "commands": [
     "SignLedger"
    ],
    "events": [
     "invoice_ledger.signed"
    ],
    "repository": "InvoiceLedgerRepository",
    "transaction_boundary": "One ledger per transaction"
   },
   {
    "name": "EscalationTier",
    "root": "DebtorInquiry",
    "context": "Recovery & Delivery",
    "purpose": "Own inquiry drafting, sending, and aging.",
    "entities": [
     "DebtorInquiry"
    ],
    "value_objects": [
     "AgingWindow"
    ],
    "invariants": [
     "Cannot be sent without reviewer approval and firm authorization on file"
    ],
    "commands": [
     "SendDebtorInquiry"
    ],
    "events": [
     "debtor_inquiry.sent",
     "debtor_inquiry.resolved"
    ],
    "repository": "DebtorInquiryRepository",
    "transaction_boundary": "One inquiry per transaction"
   },
   {
    "name": "DocumentationPackage",
    "root": "Signoff",
    "context": "Quality Assurance",
    "purpose": "Bind reviewer identity + timestamp + artifact hash immutably.",
    "entities": [
     "Signoff"
    ],
    "value_objects": [
     "SignatureManifest"
    ],
    "invariants": [
     "Signature bound to a live authenticated session, not a form field",
     "Signed artifacts are immutable"
    ],
    "commands": [
     "ApproveArtifact"
    ],
    "events": [
     "ArtifactSigned"
    ],
    "repository": "SignoffRepository",
    "transaction_boundary": "One signoff per transaction"
   },
   {
    "name": "Account",
    "root": "Retraction",
    "context": "Quality Assurance",
    "purpose": "Handle formal correction/withdrawal of a delivered pack.",
    "entities": [
     "Retraction"
    ],
    "value_objects": [
     "RetractionReason"
    ],
    "invariants": [
     "A retraction requires senior-reviewer co-signature"
    ],
    "commands": [
     "RetractArtifact"
    ],
    "events": [
     "ArtifactRetracted"
    ],
    "repository": "RetractionRepository",
    "transaction_boundary": "One retraction per transaction"
   }
  ],
  "invariants": [
   {
    "invariant": "A Invoice Ledger cannot be signed without tying to aged-receivables list totals to the penny",
    "context": "Recovery & Matching",
    "aggregate": "InvoiceLedgerAggregate",
    "why": "No ledger is ever released on an unresolved tie-out gap",
    "enforcement": "Deterministic code gate on the SignLedger command"
   },
   {
    "invariant": "A DebtorInquiry cannot be sent without reviewer approval and firm authorization on file",
    "context": "Recovery & Delivery",
    "aggregate": "DebtorInquiryAggregate",
    "why": "Sending without authorization is both a trust breach and outside the licensing boundary",
    "enforcement": "Deterministic code gate on the SendDebtorInquiry command"
   },
   {
    "invariant": "No discrepancy is published without a cited source-aged-receivables list and AMS-invoice reference",
    "context": "Recovery & Matching",
    "aggregate": "DiscrepancyDocketAggregate",
    "why": "Prevents an unevidenced claim from reaching a client or a debtor",
    "enforcement": "Output validator rejects any docket line missing an evidence citation"
   },
   {
    "invariant": "LedgerClear never issues a coverage or claims-adjustment determination",
    "context": "Recovery & Delivery",
    "aggregate": "DebtorInquiryAggregate",
    "why": "Hard licensing boundary — only the firm's own licensed staff makes coverage determinations",
    "enforcement": "Deterministic output filter blocks coverage-determination language patterns"
   }
  ],
  "ai_agents": [
   {
    "name": "Extraction Agent",
    "context": "Intake & Normalization",
    "responsibility": "Extract and normalize structured fields from debtor aged-receivables lists (PDF, portal CSV, scanned paper) into the canonical schema.",
    "inputs": [
     "Uploaded/forwarded debtor aged-receivables lists"
    ],
    "outputs": [
     "Structured line items with per-field confidence score"
    ],
    "tools": [
     "OCR",
     "per-debtor parser library"
    ],
    "forbidden_actions": [
     "Guessing a invoice number fragment not present in the source text"
    ],
    "memory_scope": "Single aged-receivables list extraction run",
    "retrieval_sources": [
     "Per-debtor parser fixture library"
    ],
    "validations": [
     "Confidence score attached to every field"
    ],
    "confidence_scoring": "0-100 per field, threshold 85",
    "escalation_triggers": [
     "Any required field below 85% confidence"
    ],
    "human_approval": "Reviewer confirms during exception review",
    "failure_modes": [
     "Misread scanned/paper aged-receivables list",
     "Wrong debtor-format classification"
    ],
    "audit_logs": [
     "Every extraction run logged with document hash and confidence scores"
    ],
    "metrics": [
     "Extraction accuracy vs. reviewer-corrected value"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Matching Agent",
    "context": "Recovery & Matching",
    "responsibility": "Match normalized aged-receivables list lines to AMS invoices (exact -> fuzzy -> reviewer-adjudicated) and compute expected invoice from the schedule.",
    "inputs": [
     "Normalized aged-receivables list lines",
     "AMS client portfolio",
     "Invoice schedules"
    ],
    "outputs": [
     "Match candidates with confidence score",
     "Expected-invoice computation"
    ],
    "tools": [
     "Fuzzy entity matcher",
     "invoice-schedule lookup"
    ],
    "forbidden_actions": [
     "Auto-accepting a match below the confidence threshold"
    ],
    "memory_scope": "Single recovery cycle",
    "retrieval_sources": [
     "Firm's AMS client portfolio (tenant-scoped)"
    ],
    "validations": [
     "Every match below threshold routed to reviewer with reasoning"
    ],
    "confidence_scoring": "0-100 per match, auto-accept ≥95, reviewer queue below",
    "escalation_triggers": [
     "No candidate match found",
     "Ambiguous multi-candidate match"
    ],
    "human_approval": "Reviewer adjudicates all sub-threshold matches",
    "failure_modes": [
     "LedgerClear failure modes — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
     "Stale invoice schedule applied"
    ],
    "audit_logs": [
     "Every match decision logged with confidence and reasoning"
    ],
    "metrics": [
     "Auto-match rate",
     "Match-reversal rate on reviewer audit"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Discrepancy Drafter Agent",
    "context": "Recovery & Matching",
    "responsibility": "Classify each line's discrepancy type and draft a plain-language explanation citing the source aged-receivables list and invoice.",
    "inputs": [
     "Matched/unmatched aged-receivables list lines",
     "Invoice schedule",
     "Debtor-quirk notes",
     "Prior payment history"
    ],
    "outputs": [
     "Discrepancy classification",
     "Draft explanation with citations"
    ],
    "tools": [
     "Debtor-quirk knowledge base lookup"
    ],
    "forbidden_actions": [
     "Stating a discrepancy is confirmed before reviewer approval",
     "Estimating a dollar gap the schedule doesn't cover"
    ],
    "memory_scope": "Single recovery cycle",
    "retrieval_sources": [
     "Debtor-quirk knowledge base"
    ],
    "validations": [
     "Output must cite a source aged-receivables list line and AMS invoice reference"
    ],
    "confidence_scoring": "Qualitative (missing / short-paid / late / chargeback / rate-mismatch / unearned / needs-reviewer-judgment)",
    "escalation_triggers": [
     "Schedule doesn't cover the case"
    ],
    "human_approval": "Reviewer approves every classification before it appears in the docket",
    "failure_modes": [
     "Misclassifying a legitimate chargeback as a short-pay"
    ],
    "audit_logs": [
     "Every classification logged with citation and confidence"
    ],
    "metrics": [
     "Discrepancy-classification accuracy vs. reviewer-corrected value"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   },
   {
    "name": "Inquiry Drafter Agent",
    "context": "Recovery & Delivery",
    "responsibility": "Draft a professional, inquiry-toned (never demand-toned) email to a debtor's invoice department for an approved discrepancy.",
    "inputs": [
     "Approved discrepancy",
     "Firm identity",
     "Invoice schedule reference"
    ],
    "outputs": [
     "Drafted debtor inquiry email"
    ],
    "tools": [
     "Demand-language deterministic filter"
    ],
    "forbidden_actions": [
     "Using demand, collection, or legal-threat language",
     "Sending without reviewer approval"
    ],
    "memory_scope": "Single discrepancy inquiry",
    "retrieval_sources": [
     "Debtor-quirk knowledge base",
     "Debtor contact map"
    ],
    "validations": [
     "Draft passes the demand-language filter before reaching the reviewer"
    ],
    "confidence_scoring": "N/A (deterministic filter gate, not a confidence score)",
    "escalation_triggers": [
     "Filter rejects a draft twice in a row for the same discrepancy"
    ],
    "human_approval": "Reviewer approves every draft before send",
    "failure_modes": [
     "Draft reads as aggressive despite passing the filter"
    ],
    "audit_logs": [
     "Every draft + approval + send logged"
    ],
    "metrics": [
     "Debtor response rate",
     "Reviewer edit rate on drafts"
    ],
    "versioning": "Prompt versioned independently of the underlying model"
   }
  ],
  "prompt_chain_map": [
   "Intake -> Extraction Agent (extract + score) -> Matching Agent (match + compute expected) -> Discrepancy Drafter Agent (classify + cite) -> OutputValidator -> Reviewer (approve or escalate)",
   "Approved discrepancy -> Inquiry Drafter Agent (draft) -> demand-language filter -> Reviewer (approve or edit) -> send"
  ],
  "rag_map": [
   "Per-firm AMS client portfolio (tenant-scoped) -> retrieval router -> firm-scoped hits -> Matching Agent",
   "Versioned per-debtor parser fixture + quirk knowledge base -> shared retrieval -> Extraction Agent and Discrepancy Drafter Agent (cited)"
  ],
  "ai_evaluation": [
   "Golden dataset of past reviewer-accepted matches and discrepancy classifications, per debtor",
   "Regression requirements on auto-match rate + discrepancy-citation coverage",
   "Every prompt release requires a passing evaluator run against the fixture library"
  ],
  "hallucination_controls": [
   "Retrieval-first (no free-form discrepancy generation without a cited aged-receivables list line and invoice reference)",
   "Structured-output validator enforces citation-per-claim",
   "Confidence-scored escalation on extraction and matching",
   "Reviewer gate on every discrepancy and every outbound debtor inquiry",
   "Deterministic filter blocks any demand/collection-style or coverage-determination language before it reaches the reviewer"
  ],
  "human_in_the_loop_plan": [
   "Reviewer signoff on every Invoice Ledger before delivery",
   "Reviewer approval on every discrepancy before it appears in a docket or goes to a debtor",
   "Senior-reviewer co-sign on retractions",
   "Owner approval on public-release readiness"
  ],
  "ai_audit_plan": [
   "Every AgentRun logged with prompt version, retrieval hit ids, cost, latency, validator verdict",
   "13-month rolling retention on run logs",
   "Financial/PII data scrubbed from log payloads"
  ],
  "prompt_versioning": "Prompt versions immutable once published; rolled out via feature flag; every rollout paired with an evaluator run against the fixture library.",
  "human_roles": [
   {
    "role": "Firm Principal",
    "responsibilities": [
     "Supply AMS export and debtor aged-receivables lists",
     "Sign debtor-communication authorization",
     "Approve account owner split sheet"
    ],
    "contexts": [
     "Intake & Normalization"
    ],
    "decisions_owned": [
     "Whether to engage",
     "Which records to supply",
     "Whether to authorize the recovery-share rider"
    ],
    "ai_support": [
     "[PLACEHOLDER] owner to complete"
    ],
    "approval_authority": "Authorizes the engagement and debtor-communication authorization",
    "escalation_authority": "None (escalates to LedgerClear, not from it)",
    "quality_metrics": [
     "Intake completeness"
    ],
    "workload_risks": [
     "Month-end time scarcity"
    ]
   },
   {
    "role": "B2B services-Accounting Reviewer",
    "responsibilities": [
     "Review AI-drafted matches and discrepancies",
     "Verify evidence sufficiency",
     "Sign off before delivery or debtor send"
    ],
    "contexts": [
     "Recovery & Matching",
     "Quality Assurance"
    ],
    "decisions_owned": [
     "Approve, escalate, or reject a discrepancy or match"
    ],
    "ai_support": "Extraction, matching, discrepancy-classification, and inquiry-drafting agents",
    "approval_authority": "Sole authority to sign a Invoice Ledger or approve a debtor inquiry",
    "escalation_authority": "Escalates coverage/claims questions to the firm's own licensed staff; disputes beyond routine inquiry to the firm's counsel",
    "quality_metrics": [
     "Client-caught material error rate",
     "Review cycle time"
    ],
    "workload_risks": [
     "Volume spike during month-end delivery window"
    ]
   },
   {
    "role": "Senior Reviewer",
    "responsibilities": [
     "Second-pass sampling on auto-matched lines",
     "Co-sign retractions",
     "Second review on high-value dockets"
    ],
    "contexts": [
     "Quality Assurance"
    ],
    "decisions_owned": [
     "Retraction approval"
    ],
    "ai_support": "None (human-only by design)",
    "approval_authority": "Retraction co-signature authority",
    "escalation_authority": "Escalates to founder/owner",
    "quality_metrics": [
     "Retraction rate"
    ],
    "workload_risks": [
     "Contractor-bench availability at scale"
    ]
   }
  ],
  "human_review_checkpoints": [
   "AI draft -> Reviewer approval",
   "Public release -> owner acceptance",
   "Retraction -> senior-reviewer co-sign",
   "Prompt rollout -> ops + evaluator"
  ],
  "escalation_matrix": [
   "AI -> Reviewer -> Senior Reviewer -> Owner -> Firm's own counsel",
   "Coverage/claims dispute -> Reviewer -> Firm's own licensed staff"
  ],
  "manual_override_rules": [
   "Any manual override captured as an explicit override event with actor + reason",
   "No override may bypass the reviewer-signoff or debtor-authorization invariant"
  ],
  "separation_of_duties": [
   "Extraction/Matching/Drafter Agents cannot sign; Reviewer cannot draft on behalf of AI without an override event; Senior Reviewer cannot silently retract"
  ],
  "quality_control_workflow": [
   "Weekly reviewer calibration meeting",
   "Monthly evaluator regression report",
   "Quarterly debtor-quirk library re-verification review with owner + compliance"
  ],
  "data_objects": [
   {
    "name": "DebtorAged-receivables list",
    "meaning": "One debtor's aged-receivables list for one period",
    "owner_context": "Intake & Normalization",
    "writers": [
     "Extraction Agent",
     "Firm Principal"
    ],
    "readers": [
     "B2B services-Accounting Reviewer",
     "Recovery & Matching"
    ],
    "source_of_truth": "Intake & Normalization context",
    "retention": "7 years (mirrors standard financial-record retention practice)",
    "privacy": "Sensitive business/financial data, firm-isolated",
    "audit": "Every field change logged"
   },
   {
    "name": "InvoiceLedger",
    "meaning": "One recovery cycle's signed tie-out record",
    "owner_context": "Recovery & Matching",
    "writers": [
     "Matching Agent",
     "B2B services-Accounting Reviewer"
    ],
    "readers": [
     "Firm Principal",
     "Quality Assurance"
    ],
    "source_of_truth": "Recovery & Matching context",
    "retention": "7 years",
    "privacy": "Sensitive",
    "audit": "Full version history retained"
   },
   {
    "name": "DiscrepancyDocket",
    "meaning": "One cycle's list of classified, evidenced discrepancies",
    "owner_context": "Recovery & Matching",
    "writers": [
     "Discrepancy Drafter Agent",
     "B2B services-Accounting Reviewer"
    ],
    "readers": [
     "Firm Principal",
     "Recovery & Delivery"
    ],
    "source_of_truth": "Recovery & Matching context",
    "retention": "7 years",
    "privacy": "Sensitive",
    "audit": "Reviewer approval logged per line"
   }
  ],
  "read_models": [
   "OperatorDashboard read model (per tenant): open cycles, in-review, delivered this week",
   "ReviewerQueue read model: aged-receivables lists/discrepancies awaiting review with confidence + escalation reason",
   "ComplianceLedger read model: open owner actions + release-decision",
   "AnalyticsRollup read model: metric definitions rolled up daily"
  ],
  "reporting_models": [
   "Outcome report per client: packs delivered, cycle time, client-caught error status, recovered dollars",
   "Ops report: AI cost per cycle, escalation rate, reviewer load"
  ],
  "data_duplication_notes": [
   "Reviewer identity is stored in Onboarding, referenced by Quality Assurance — QA does not own it",
   "OwnerActionLedger duplicates minimal facts into read models for Recovery & Matching consumption"
  ],
  "data_retention": [
   "Invoice Ledgers + Discrepancy Dockets + signoffs: 7 years (standard financial-record retention)",
   "AgentRun logs: 13 months rolling",
   "Users + sessions: life of account + 2 years"
  ],
  "data_quality_risks": [
   "Silent schema drift from a debtor changing its aged-receivables list layout",
   "Stale invoice-schedule version applied after a rate change (mitigated by quarterly re-verification)",
   "Missing retraction cross-links after a legacy client-history import"
  ],
  "use_cases": [
   {
    "name": "Run a Invoice Leakage Scan",
    "actor": "Firm Principal",
    "context": "Intake & Normalization",
    "goal": "Get a matched-percentage and estimated-dollar-value finding within 10 business days",
    "preconditions": [
     "AMS export and 3 months of debtor aged-receivables lists supplied"
    ],
    "main_flow": [
     "Intake checklist completed",
     "Aged-receivables lists normalized and tied out",
     "Matching engine runs",
     "Reviewer approves discrepancies",
     "Scan report delivered"
    ],
    "alternative_flows": [
     "No material finding -> report says so explicitly, no fee retained beyond the flat scan price"
    ],
    "business_rules": [
     "No discrepancy ships without reviewer approval"
    ],
    "ai_role": "Extraction, matching, classification, drafting",
    "human_role": "Reviewer approves and signs",
    "commands": [
     "ReceiveAged-receivables list",
     "NormalizeAged-receivables list",
     "RunMatching",
     "ApproveDiscrepancy"
    ],
    "events": [
     "aged-receivables list.normalized",
     "recovery_cycle.matching_completed",
     "discrepancy.reviewer_approved"
    ],
    "aggregates": [
     "DebtorAged-receivables listAggregate",
     "RecoveryCycleAggregate",
     "DiscrepancyDocketAggregate"
    ],
    "success": "Scan report delivered within SLA with reviewer signature",
    "failure_handling": "Missing inputs trigger an automated nag; cycle does not start until complete",
    "audit": "Full audit trail from aged-receivables list receipt to report delivery"
   },
   {
    "name": "Deliver a monthly Recovery Desk pack",
    "actor": "B2B services-Accounting Reviewer",
    "context": "Recovery & Delivery",
    "goal": "Ship a signed Monthly Recovery Pack by the 5th business day",
    "preconditions": [
     "Client on an active Recovery Desk tier",
     "Prior cycle's debtor inquiries tracked"
    ],
    "main_flow": [
     "Aged-receivables lists collected and normalized",
     "Matching completed",
     "Discrepancies approved",
     "Debtor inquiries drafted and sent",
     "Ledger signed",
     "Pack delivered"
    ],
    "alternative_flows": [
     "High-value docket (>$2,500) routed to second reviewer before finalization"
    ],
    "business_rules": [
     "Penny-perfect tie-out required before signature"
    ],
    "ai_role": "Extraction, matching, classification, inquiry drafting",
    "human_role": "Reviewer signs; second reviewer on high-value dockets",
    "commands": [
     "RunMatching",
     "ApproveDiscrepancy",
     "SendDebtorInquiry",
     "SignLedger"
    ],
    "events": [
     "invoice_ledger.signed",
     "debtor_inquiry.sent",
     "pack.delivered"
    ],
    "aggregates": [
     "InvoiceLedgerAggregate",
     "DebtorInquiryAggregate"
    ],
    "success": "Pack delivered on time with a signed ledger",
    "failure_handling": "Missed SLA triggers the error-SLA acknowledgment process",
    "audit": "Full cycle audit trail retained"
   }
  ],
  "architecture": {
   "style": "Modular monolith with edge functions for bursty aged-receivables list-extraction workloads",
   "why": "One audit boundary, low ops burden for a founder-operated business, easy per-context ownership as the team grows past founder-only.",
   "rejected_alternatives": [
    "Microservices per bounded context (premature at this scale)",
    "No-code workflow tool (can't enforce the penny-perfect deterministic gate reliably)"
   ],
   "backend_modules": [
    "intake-normalization",
    "recovery-matching",
    "recovery-delivery",
    "quality-assurance"
   ],
   "frontend_modules": [
    "reviewer-console (internal only at launch)",
    "marketing microsite (public)"
   ],
   "api_boundaries": [
    "Internal reviewer console API (authenticated)",
    "No public API at launch — intake is upload-link/email only"
   ],
   "database_strategy": "Single Postgres instance, tenant_id row-level security on every table",
   "event_bus": "In-process event dispatch at launch; durable queue (e.g. a managed message queue) once cycle volume requires async fan-out",
   "queue": "Background job queue for aged-receivables list extraction and matching (bursty, month-end-weighted load)",
   "workflow_engine": "None at launch — explicit state machine per aggregate in code",
   "ai_orchestration": "Scripted pipeline calling a single frontier-model provider, prompts + fixtures versioned in the repo",
   "rag_layer": "Per-firm book-of-business retrieval + shared per-debtor parser/quirk knowledge base",
   "file_storage": "Encrypted object storage, per-firm prefix isolation",
   "authn_authz": "SSO with MFA for reviewers; row-level tenant auth for firm-facing surfaces (year-1 client portal)",
   "admin_dashboard": "Internal only at launch (founder + reviewer)",
   "client_portal": "None at launch (email/upload-link delivery); read-only pack-status portal planned year 1",
   "operator_dashboard": "ReviewerQueue read model surfaced in the internal console",
   "observability": "Structured logs + RED metrics + model-call cost/latency spans",
   "audit_logging": "Append-only, hash-chained per recovery cycle",
   "deployment": "Single production region, multi-AZ; preview environment per PR"
  },
  "module_structure": {
   "tree": "src/{intake-normalization,recovery-matching,recovery-delivery,quality-assurance}/{domain,application,infra}",
   "modules": [
    {
     "name": "intake-normalization",
     "purpose": "Aged-receivables list receipt, extraction, and tie-out.",
     "owned_domain": [
      "DebtorAged-receivables list"
     ],
     "application_services": [
      "ReceiveAged-receivables list",
      "NormalizeAged-receivables list"
     ],
     "infra_adapters": [
      "Mailbox listener",
      "Object storage adapter",
      "Extraction-model client"
     ],
     "public_interfaces": [
      "aged-receivables list.normalized event"
     ],
     "forbidden_deps": [
      "Cannot call recovery-matching internals directly — event only"
     ]
    },
    {
     "name": "recovery-matching",
     "purpose": "Matching, discrepancy classification, ledger tie-out.",
     "owned_domain": [
      "RecoveryCycle",
      "DiscrepancyDocket",
      "InvoiceLedger"
     ],
     "application_services": [
      "RunMatching",
      "ApproveDiscrepancy",
      "SignLedger"
     ],
     "infra_adapters": [
      "AMS-export parser",
      "Invoice-schedule store"
     ],
     "public_interfaces": [
      "discrepancy.reviewer_approved event",
      "invoice_ledger.signed event"
     ],
     "forbidden_deps": [
      "Cannot call recovery-delivery internals directly — event only"
     ]
    },
    {
     "name": "recovery-delivery",
     "purpose": "Debtor-inquiry drafting/sending, aging, pack assembly.",
     "owned_domain": [
      "DebtorInquiry",
      "Account ownerPayoutAged-receivables list",
      "MonthlyRecoveryPack"
     ],
     "application_services": [
      "SendDebtorInquiry",
      "AssemblePack",
      "DeliverPack"
     ],
     "infra_adapters": [
      "Email-send adapter",
      "Posting-file generator"
     ],
     "public_interfaces": [
      "pack.delivered event"
     ],
     "forbidden_deps": [
      "Cannot bypass quality-assurance signoff gate"
     ]
    },
    {
     "name": "quality-assurance",
     "purpose": "Signoff and retraction lifecycle.",
     "owned_domain": [
      "Signoff",
      "Retraction"
     ],
     "application_services": [
      "ApproveArtifact",
      "RetractArtifact"
     ],
     "infra_adapters": [
      "Signature-binding session store"
     ],
     "public_interfaces": [
      "ArtifactSigned event"
     ],
     "forbidden_deps": [
      "Cannot draft on behalf of any other module"
     ]
    }
   ],
   "dependency_rules": [
    "Modules communicate only via domain events or explicit application-service calls, never shared database tables",
    "quality-assurance has no outbound dependency on any other module"
   ]
  },
  "security_governance": {
   "controls": [
    {
     "risk": "Cross-tenant data leak",
     "context": "Recovery & Matching",
     "impact": "severe",
     "control": "Row-level security on every tenant-scoped table; retrieval indices partitioned per firm",
     "audit": "Access logged with tenant_id + session_id"
    },
    {
     "risk": "Reviewer identity spoofing",
     "context": "Quality Assurance",
     "impact": "severe",
     "control": "SSO + MFA; signature bound to authenticated session, not a form field",
     "audit": "Signature manifest logged per artifact"
    },
    {
     "risk": "Demand-language debtor inquiry sent",
     "context": "Recovery & Delivery",
     "impact": "high",
     "control": "Deterministic filter blocks demand/collection/legal-threat patterns before reviewer sees the draft",
     "audit": "Every blocked draft logged with the trigger phrase"
    }
   ],
   "ai_governance": [
    "Every prompt version checked into the repo",
    "Every AgentRun logged with prompt version + validator verdict",
    "No fine-tuning on client data"
   ],
   "prompt_injection_defense": [
    "Uploaded aged-receivables list content treated as untrusted input, never as instructions",
    "Extraction output schema-validated before use downstream"
   ],
   "sensitive_data_handling": [
    "Financial/PII scrubbed from logs",
    "Per-firm object-storage prefix isolation",
    "Encryption at rest and in transit"
   ],
   "access_control_matrix": [
    {
     "role": "Firm Principal",
     "context": "Intake & Normalization",
     "capabilities": [
      "Upload aged-receivables lists",
      "View own firm's cycle status"
     ]
    },
    {
     "role": "B2B services-Accounting Reviewer",
     "context": "Recovery & Matching, Quality Assurance",
     "capabilities": [
      "Approve discrepancies",
      "Sign ledgers",
      "Approve debtor inquiries"
     ]
    },
    {
     "role": "Senior Reviewer",
     "context": "Quality Assurance",
     "capabilities": [
      "Co-sign retractions",
      "Second-review high-value dockets"
     ]
    }
   ],
   "audit_log_requirements": [
    "Every command + payload hash logged with actor identity",
    "13-month rolling retention on AgentRun logs; 7-year retention on signed ledgers"
   ]
  },
  "observability": {
   "metrics": [
    {
     "metric": "Auto-match rate",
     "type": "leading",
     "context": "Recovery & Matching",
     "why": "Directly drives reviewer minutes per cycle",
     "target": "≥90%",
     "alert_threshold": "<80%"
    },
    {
     "metric": "Reviewer minutes per client per cycle",
     "type": "leading",
     "context": "Recovery & Matching",
     "why": "Core unit-economics driver",
     "target": "≤115 min by day 90",
     "alert_threshold": ">180 min"
    },
    {
     "metric": "Client-caught material error rate",
     "type": "lagging",
     "context": "Quality Assurance",
     "why": "Trust and retention driver",
     "target": "<0.5%",
     "alert_threshold": ">1%"
    }
   ],
   "dashboards": [
    "Ops dashboard: cycles in flight, reviewer queue depth",
    "Economics dashboard: COGS/client, gross margin trend"
   ],
   "audit_reports": [
    "Monthly signed-ledger audit export per client"
   ],
   "quality_review_reports": [
    "Weekly red-team seeded-error catch rate"
   ],
   "ai_evaluation_reports": [
    "Monthly evaluator regression report per debtor parser"
   ],
   "client_outcome_reports": [
    "Recovered-dollars report per client per quarter"
   ]
  },
  "testing_strategy": {
   "tests": [
    {
     "type": "unit",
     "validates": "Tie-out math and materiality thresholds",
     "context": "Recovery & Matching",
     "example": "Ledger total must equal sum of matched + exception-coded lines"
    },
    {
     "type": "contract",
     "validates": "Per-debtor parser output schema",
     "context": "Intake & Normalization",
     "example": "Gold-standard fixture aged-receivables list per debtor re-run on every prompt change"
    },
    {
     "type": "e2e",
     "validates": "Full intake -> match -> reviewer signoff -> delivery path",
     "context": "cross-context",
     "example": "Smoke test against 5 sample debtor aged-receivables list formats"
    }
   ],
   "critical_domain_rules": [
    "Penny-perfect tie-out before signature",
    "No discrepancy without a cited source and invoice reference",
    "No debtor inquiry without authorization on file"
   ],
   "ai_eval_dataset": [
    "Gold-standard fixture aged-receivables lists per debtor",
    "Reviewer-corrected historical matches and classifications"
   ],
   "regression_plan": "Every parser/prompt/model change re-runs the full fixture suite before touching a live client aged-receivables list.",
   "contract_testing_plan": "Per-debtor aged-receivables list schema contract tests run in CI on every parser change.",
   "manual_qa_checklist": [
    "10% second-pass sample of auto-matched lines",
    "Monthly red-team seeded-error check",
    "Every docket over $2,500 second-reviewed"
   ]
  },
  "mvp_roadmap": [
   {
    "phase": "Thin slice",
    "goal": "One end-to-end Invoice Leakage Scan delivered and reviewer-signed",
    "features": [
     "Aged-receivables list intake",
     "Single-debtor-format extraction",
     "Manual-assisted matching"
    ],
    "contexts": [
     "Intake & Normalization",
     "Recovery & Matching"
    ],
    "ai_needs": [
     "Extraction Agent v1"
    ],
    "human_workflows": [
     "Founder-run reviewer role"
    ],
    "data_needs": [
     "Fixture aged-receivables lists for 5 formats"
    ],
    "integrations": [
     "None — manual AMS export upload"
    ],
    "risks": [
     "Reviewer cycle time far above target at pilot 1"
    ],
    "exit_criteria": [
     "1 scan delivered within 10 business days, reviewer-signed"
    ]
   }
  ],
  "scaling_roadmap": [
   {
    "stage": "Pilot (1-10 clients)",
    "trigger": "First 10 pilot firms onboarded",
    "architecture_change": "None — single monolith suffices",
    "operational_change": "Founder is the sole reviewer",
    "risk": "Reviewer bottleneck at any volume spike"
   },
   {
    "stage": "Early scale (10-50 clients)",
    "trigger": "Day-90 checkpoint targets met",
    "architecture_change": "Background job queue for aged-receivables list extraction",
    "operational_change": "Contract a second B2B services-accounting reviewer",
    "risk": "Parser library coverage gaps on new debtors slow onboarding"
   }
  ],
  "risk_register": [
   {
    "risk": "AMS vendor bundles recovery 'free' with a chase workflow",
    "likelihood": "medium-high",
    "impact": "high",
    "signal": "Applied Recon or a competing AMS module adds chase/recovery features",
    "mitigation": "AMS-agnostic positioning; recovery/chase as the human moat",
    "owner": "owner",
    "context": "Recovery & Delivery"
   },
   {
    "risk": "Scan-to-desk conversion underperforms",
    "likelihood": "medium",
    "impact": "severe",
    "signal": "Pilot cohort conversion below 25%",
    "mitigation": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "owner": "owner",
    "context": "product"
   },
   {
    "risk": "False-positive discrepancy sent to a debtor",
    "likelihood": "medium",
    "impact": "high",
    "signal": "Debtor disputes an inquiry as unfounded",
    "mitigation": "100% reviewer approval; evidence-link requirement; inquiry-not-demand language",
    "owner": "legal",
    "context": "Recovery & Delivery"
   }
  ],
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Adopt a modular monolith, not microservices, at launch",
    "status": "accepted",
    "context": "Founder-operated team; low ops burden required",
    "options": [
     "Modular monolith",
     "Microservices per bounded context",
     "No-code workflow tool"
    ],
    "chosen": "Modular monolith",
    "business_reason": "Fastest path to first paid pilot without a platform team",
    "technical_reason": "One deploy, one audit boundary, easy to reason about at this scale",
    "tradeoffs": [
     "[PLACEHOLDER] owner to complete"
    ],
    "risks": [
     "[PLACEHOLDER] owner to complete"
    ],
    "revisit_trigger": "Sustained CPU/latency pressure isolated to one module",
    "why": "One deploy, one audit boundary, easy to reason about at this scale",
    "consequences": "Will need extraction into services if reviewer-console load grows sharply",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "Sustained CPU/latency pressure isolated to one module"
   },
   {
    "id": "ADR-002",
    "decision": "Deterministic code owns all money math; the model never computes a final dollar figure",
    "status": "accepted",
    "context": "Penny-perfect tie-out is a hard trust requirement",
    "options": [
     "Model computes totals",
     "Deterministic code computes totals, model only extracts/classifies"
    ],
    "chosen": "Deterministic code computes totals",
    "business_reason": "A wrong dollar figure from a model is the single fastest way to lose a client's trust",
    "technical_reason": "Removes an entire class of hallucination risk from the highest-stakes output",
    "tradeoffs": "Slightly more engineering work per new transaction-type edge case",
    "risks": "Edge cases not yet coded fall through to reviewer manual calculation",
    "revisit_trigger": "None — this is a standing invariant, not revisited",
    "why": "Removes an entire class of hallucination risk from the highest-stakes output",
    "consequences": "Slightly more engineering work per new transaction-type edge case",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "None — this is a standing invariant, not revisited"
   }
  ],
  "self_audit": {
   "scores": [
    {
     "category": "domain_modeling",
     "score": 4,
     "weakness": "Debtor-quirk knowledge base is described but not yet instantiated with real debtor data",
     "improvement": "Populate from the first 5 pilot firms' actual debtor mixes"
    },
    {
     "category": "ai_governance",
     "score": 4,
     "weakness": "Evaluator regression suite depends on fixture aged-receivables lists not yet collected at volume",
     "improvement": "Build the fixture library incrementally from each pilot's real (anonymized) aged-receivables lists"
    },
    {
     "category": "compliance_boundary",
     "score": 3,
     "weakness": "State-by-state collection-agency-statute review for the recovery-share rider is not yet complete",
     "improvement": "Complete counsel review in the first 5 operating states before offering the rider broadly"
    }
   ],
   "weakest_parts": [
    "State-by-state licensing review for the recovery-share rider",
    "Debtor-quirk knowledge base population"
   ],
   "biggest_assumptions": [
    "Scan-to-desk conversion reaches 25-40%",
    "Reviewer minutes per client fall as projected by day 90"
   ],
   "highest_risk_decisions": [
    "Offering the recovery-share rider before full state-by-state counsel review",
    "Relying on a single named reviewer at pilot scale"
   ],
   "needs_domain_expert": [
    "[PLACEHOLDER] owner to complete"
   ],
   "needs_legal": [
    "[PLACEHOLDER] owner to complete"
   ],
   "needs_prototype": [
    "[PLACEHOLDER] owner to complete"
   ],
   "validate_before_prod": [
    "[PLACEHOLDER] owner to complete"
   ]
  },
  "final_recommendations": [
   "Ship a modular-monolith, evidence-linked, reviewer-gated vertical slice for LedgerClear. Preserve the invariant that no Invoice Ledger or debtor inquiry leaves the system without a signed human release. Do not launch commercially until owner-action facts close and at least one reviewer-released Monthly Recovery Pack has shipped.",
   "Do NOT default to microservices. Extract a module only when a specific pressure demands it.",
   "Do NOT allow AI outputs to leave the Recovery & Matching or Recovery & Delivery contexts without OutputValidator pass and citation coverage.",
   "Do NOT ship any public claim on the LedgerClear microsite while owner-action facts (entity, reviewer identity, trademark clearance) remain open.",
   "Do NOT reuse a competitor/customer pairing or a dollar figure in client-facing copy without a fresh-verification citation — this exact failure mode (a misattributed customer relationship) was found and corrected in this build."
  ],
  "extensions": {
   "service_business_reality_check": {
    "is_service_business": true,
    "paid_outcome_clear": true,
    "workflow_present": true,
    "ai_native_fit_score": 4.5,
    "red_flags": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   "ai_native_fit": {
    "score": 4.6,
    "why": "High-volume, document-heavy, rules-based matching with judgment concentrated in a small exception queue — the exact shape of work current frontier models do well, and margins expand as parsing/matching accuracy improves.",
    "disqualifiers": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   "domain_evidence_register": [
    {
     "claim": "52% of firms receive overdue-invoice aged-receivables lists, up from 45% in 2022",
     "evidence_type": "primary-research summary",
     "source": "Big \"I\" Firm Universe Study (via IA Magazine)",
     "strength": "high",
     "gaps": "None — corroborated across two independent trade-press summaries"
    },
    {
     "claim": "Comulate serves large clients and remains operational as of mid-2026",
     "evidence_type": "press + legal filing coverage",
     "source": "Comulate/Workday Ventures materials; federal court ruling coverage, Feb 2026",
     "strength": "high",
     "gaps": "Exact customer roster not independently verifiable — corrected one misattributed customer pairing this build"
    }
   ],
   "assumption_register": [
    {
     "assumption": "Scan-to-desk conversion reaches 25-40%",
     "impact_if_wrong": "severe — wedge economics fail",
     "how_to_validate": "10-firm pilot cohort with explicit pricing conversation",
     "blocking": true
    },
    {
     "assumption": "Reviewer minutes per client fall as parser coverage grows",
     "impact_if_wrong": "high — margin target missed",
     "how_to_validate": "Instrument reviewer minutes per cycle from pilot 1 onward",
     "blocking": false
    }
   ],
   "language_conflict_map": [
    {
     "term": "pack",
     "meaning_a": "Monthly Recovery Pack (this business's bundled deliverable: ledger + docket + report + payouts + posting file)",
     "context_a": "LedgerClear",
     "meaning_b": "A different bundled-deliverable term used by unrelated businesses elsewhere in the AINBIS portfolio",
     "context_b": "other portfolio businesses (not this one)",
     "resolution": "Always qualify as 'Monthly Recovery Pack' in LedgerClear copy; never bare 'pack' without the qualifier in cross-portfolio contexts"
    }
   ],
   "build_buy_integrate": [
    {
     "subdomain": "Recovery & Matching",
     "decision": "build",
     "reason": "Core differentiated IP — the parser/matching engine is the moat"
    },
    {
     "subdomain": "Referral & Outreach",
     "decision": "buy",
     "reason": "Off-the-shelf CRM suffices; not differentiating"
    }
   ],
   "core_protection_strategy": [
    "[PLACEHOLDER] owner to complete"
   ],
   "boundary_stress_tests": [
    {
     "scenario": "A debtor disputes an inquiry as a collection demand",
     "contexts_touched": [
      "Recovery & Delivery"
     ],
     "breaks_if": "The demand-language filter has a gap for a novel phrasing",
     "verdict": "Mitigated by reviewer approval as a second gate"
    }
   ],
   "unresolved_ownership": [
    {
     "concept": "Account owner split sheet accuracy",
     "candidates": [
      "Firm Principal",
      "B2B services-Accounting Reviewer"
     ],
     "recommendation": "Firm Principal owns and approves the split sheet; LedgerClear only computes from it"
    }
   ],
   "published_language_contracts": [
    {
     "producer": "Intake & Normalization",
     "consumer": "Recovery & Matching",
     "contract": "Canonical normalized aged-receivables list schema",
     "versioning": "Schema version pinned per debtor parser release"
    }
   ],
   "shared_kernel_warnings": [
    "None identified — bounded contexts communicate only via events, no shared kernel"
   ],
   "aggregate_stress_tests": [
    {
     "aggregate": "InvoiceLedgerAggregate",
     "scenario": "Concurrent reviewer sign attempts on the same ledger",
     "invariant_at_risk": "Penny-perfect tie-out before signature",
     "verdict": "Mitigated by optimistic locking on the aggregate root"
    }
   ],
   "agent_stress_tests": [
    {
     "agent": "Inquiry Drafter Agent",
     "scenario": "A debtor's known aggressive collections department prompts an escalated tone",
     "failure_mode": "Draft reads as a threat despite passing the deterministic filter",
     "guardrail": "Reviewer approval catches tone issues the filter misses",
     "verdict": "Acceptable with reviewer gate"
    }
   ],
   "regulated_domain_handling": [
    {
     "regime": "State account owner-licensing statutes",
     "applies_because": "LedgerClear performs back-office accounting adjacent to a licensed industry",
     "controls": [
      "No selling/soliciting/negotiating",
      "No consumer contact"
     ],
     "evidence_required": [
      "[PLACEHOLDER] owner to complete"
     ]
    },
    {
     "regime": "State collection-agency statutes",
     "applies_because": "Debtor inquiries could be miscategorized as third-party debt collection",
     "controls": [
      "Inquiries sent under firm's own name",
      "Administrative-agent authorization",
      "No demand language"
     ],
     "evidence_required": "Per-state counsel review before offering the recovery-share rider"
    }
   ],
   "unit_economics": {
    "price_model": "Flat monthly desk fee by volume tier + one-time scan + capped recovery-share rider",
    "unit_of_value": "recovery cycle (one client-month)",
    "gross_margin_pct": 62,
    "cost_drivers": [
     "Model inference (parse/match/draft)",
     "Reviewer minutes",
     "QA sampling"
    ],
    "breakeven_note": "COGS/client falls from $510 at launch to $245 by year 1 as parser coverage and auto-match rate improve"
   },
   "margin_leakage_map": [
    {
     "leakage": "Reviewer minutes not falling with parser coverage",
     "cause": "New debtor formats not yet in the fixture library",
     "impact": "Gross margin compression per new client",
     "mitigation": "Fixture library grows with every pilot; reuse across clients on the same debtor"
    }
   ],
   "slop_findings": [
    {
     "pattern": "Generic SaaS marketing phrasing",
     "status": "checked",
     "note": "Banned marketing-cliché phrases are enforced out of all landing-page copy per DESIGN-STANDARD.md."
    }
   ],
   "drift_checks": [
    {
     "stage": "build",
     "status": "checked",
     "findings": [
      "[PLACEHOLDER] owner to complete"
     ]
    }
   ],
   "gates": [
    {
     "id": "G1",
     "title": "No public claim before owner-action facts close",
     "passed": false,
     "checks": [
      {
       "name": "Entity confirmed",
       "ok": false,
       "evidence": "Pending owner action"
      },
      {
       "name": "Reviewer identity confirmed",
       "ok": false,
       "evidence": "Pending owner action"
      },
      {
       "name": "Trademark clearance",
       "ok": false,
       "evidence": "Pending owner action"
      }
     ]
    }
   ],
   "contradiction_scan": [
    {
     "id": "C1",
     "severity": "medium",
     "message": "Blueprint attributed Baldwin Group to Comulate; fresh sourcing shows Baldwin Group uses Ascend/ReSource Pro instead",
     "refs": [
      "business-plan.md fresh-verification notes"
     ]
    }
   ],
   "rubric": {
    "categories": [
     {
      "category": "domain_modeling",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "ai_governance",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "compliance_boundary",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "unit_economics",
      "score": 4,
      "min": 3,
      "passed": true
     },
     {
      "category": "gtm_clarity",
      "score": 4,
      "min": 3,
      "passed": true
     }
    ],
    "pass": true,
    "average": 4.1
   },
   "foundry_package": {
    "version": "1.0.0",
    "checksum": "n/a-generated-locally",
    "counts": {
     "subdomains": 4,
     "bounded_contexts": 4,
     "aggregates": 7,
     "events": 6,
     "commands": 6,
     "policies": 4,
     "ai_agents": 4,
     "invariants": 4,
     "integrations": 4,
     "adrs": 2
    },
    "subset": {
     "subdomains": [
      "Recovery & Matching",
      "Recovery & Delivery",
      "Evidence & Compliance",
      "Referral & Outreach"
     ],
     "bounded_contexts": [
      "Intake & Normalization",
      "Recovery & Matching",
      "Recovery & Delivery",
      "Quality Assurance"
     ],
     "aggregates": [
      "DebtorAged-receivables listAggregate",
      "RecoveryCycleAggregate",
      "DiscrepancyDocketAggregate",
      "InvoiceLedgerAggregate",
      "DebtorInquiryAggregate",
      "SignoffAggregate",
      "RetractionAggregate"
     ],
     "events": [
      "aged-receivables list.received",
      "aged-receivables list.normalized",
      "recovery_cycle.matching_completed",
      "discrepancy.reviewer_approved",
      "invoice_ledger.signed",
      "debtor_inquiry.sent"
     ],
     "commands": [
      "ReceiveAged-receivables list",
      "NormalizeAged-receivables list",
      "RunMatching",
      "ApproveDiscrepancy",
      "SignLedger",
      "SendDebtorInquiry"
     ],
     "policies": [
      "Auto-route low-confidence match to reviewer",
      "Block demand-language patterns",
      "Second-reviewer spot check",
      "Auto-escalate aging inquiry"
     ],
     "ai_agents": [
      "Extraction Agent",
      "Matching Agent",
      "Discrepancy Drafter Agent",
      "Inquiry Drafter Agent"
     ],
     "invariants": [
      "A Invoice Ledger cannot be signed without tying to aged-receivables list totals to the penny",
      "A DebtorInquiry cannot be sent without reviewer approval and firm authorization on file",
      "No discrepancy is published without a cited source-aged-receivables list and AMS-invoice reference",
      "LedgerClear never issues a coverage or claims-adjustment determination"
     ],
     "integrations": [
      "Firm management system (AMS) export",
      "Debtor aged-receivables list portals",
      "QuickBooks / AMS posting-file import",
      "Debtor invoice-department mailbox"
     ],
     "adrs": [
      "ADR-001",
      "ADR-002"
     ]
    }
   }
  }
 },
 "ddd_coverage": {
  "slug": "firm-overdue-invoice-invoice-recovery-desk",
  "total": 17,
  "passed": 17,
  "pct": 100,
  "checks": [
   {
    "key": "actors",
    "label": "Actors",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "subdomains",
    "label": "Subdomains",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "bounded_contexts",
    "label": "Bounded Contexts",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "aggregates",
    "label": "Aggregates",
    "count": 7,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "events",
    "label": "Events",
    "count": 6,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "commands",
    "label": "Commands",
    "count": 6,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "invoices",
    "label": "Invoices",
    "count": 4,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "ai_agents",
    "label": "Ai Agents",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "invariants",
    "label": "Invariants",
    "count": 4,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "use_cases",
    "label": "Use Cases",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "human_roles",
    "label": "Human Roles",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "data_objects",
    "label": "Data Objects",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "risk_register",
    "label": "Risk Register",
    "count": 3,
    "min": 3,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "adrs",
    "label": "Adrs",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "mvp_roadmap",
    "label": "Mvp Roadmap",
    "count": 1,
    "min": 1,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "scaling_roadmap",
    "label": "Scaling Roadmap",
    "count": 2,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   },
   {
    "key": "context_map",
    "label": "Context Map",
    "count": 4,
    "min": 2,
    "ok": true,
    "gate": "domain",
    "unblock": "Not needed — check passes at current counts."
   }
  ],
  "failingGates": [
   "[PLACEHOLDER] owner to complete"
  ]
 },
 "architecture": {
  "slug": "firm-overdue-invoice-invoice-recovery-desk",
  "archetypes": [
   "recovery-and-recovery workflow application",
   "back-office document-intelligence service"
  ],
  "archetype_impact": "Recovery cycle (client + calendar month) is the global scoping parameter — every read/write is scoped by firm tenant and cycle, not just tenant alone.",
  "personality": [
   "numerate",
   "calm",
   "evidence-first",
   "no hype"
  ],
  "forces_ranked": [
   {
    "force": "Trust/accuracy (penny-perfect tie-out)",
    "why": "A wrong ledger is the single fastest way to lose a client"
   },
   {
    "force": "Founder-operability (low ops burden)",
    "why": "Founder-operated launch cannot support a platform team"
   },
   {
    "force": "Time-to-first-revenue",
    "why": "Pilot cohort must convert within 90 days to validate the model"
   },
   {
    "force": "Scalability beyond pilot",
    "why": "Lowest priority at launch; revisit at 20+ clients"
   }
  ],
  "tradeoffs": [
   "Modular monolith trades some future scaling ease for launch speed and audit simplicity",
   "Manual debtor follow-up at launch trades automation for learning real response patterns first"
  ],
  "quality_scenarios": [
   {
    "attribute": "accuracy",
    "assumption": "Every aged-receivables list line ties to its source",
    "target": "Ledger tie-out to the penny before signature, 100% of releases"
   },
   {
    "attribute": "reviewability",
    "assumption": "A reviewer can reconstruct any evidence chain quickly",
    "target": "Under 5 minutes to trace any ledger line to its source aged-receivables list"
   }
  ],
  "options": [
   {
    "style": "Modular monolith",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "team_fit": "high (founder-operated)",
    "scaling_path": "Extract modules under pressure",
    "security_impact": "Single audit boundary",
    "fits_here": true,
    "fits_when": "Founder/small-team launch",
    "wrong_here": false,
    "recommended": true
   },
   {
    "style": "Microservices per bounded context",
    "complexity": "high",
    "cost": "high",
    "ops_burden": "high",
    "team_fit": "low at launch",
    "scaling_path": "Already decomposed",
    "security_impact": "More boundaries to secure",
    "fits_here": false,
    "fits_when": "Large team, proven scale pressure",
    "wrong_here": true,
    "recommended": false
   },
   {
    "style": "No-code workflow tool",
    "complexity": "low",
    "cost": "low",
    "ops_burden": "low",
    "team_fit": "medium",
    "scaling_path": "Poor — hard to enforce deterministic gates",
    "security_impact": "Vendor-dependent",
    "fits_here": false,
    "fits_when": "No hard money-math invariant",
    "wrong_here": true,
    "recommended": false
   }
  ],
  "chosen_style": "modular monolith",
  "chosen_rationale": "Modular monolith with background jobs for bursty aged-receivables list-extraction work — one audit boundary, low ops burden, easy per-context ownership as the team grows.",
  "rejected": [
   {
    "style": "Microservices per bounded context",
    "why_rejected": "Premature operational complexity for a founder-operated launch"
   },
   {
    "style": "No-code workflow tool",
    "why_rejected": "Cannot reliably enforce the deterministic penny-perfect gate"
   }
  ],
  "target": {
   "overview": "Single-region modular monolith, Postgres primary store, background job queue for extraction/matching, internal reviewer console, public marketing microsite.",
   "frontend": "Reviewer console (internal, authenticated) + public marketing microsite (static, self-contained)",
   "backend": "Single deployable service, module boundaries enforced by code convention and event-only cross-module calls",
   "data": "Postgres with row-level tenant security; object storage for aged-receivables list files",
   "api": "Internal authenticated API for the reviewer console; no public API at launch",
   "authn_authz": "SSO + MFA for reviewers; row-level auth scaffolding for a future client portal",
   "integrations": "AMS export file ingestion; debtor aged-receivables list mailbox/portal; QuickBooks/AMS posting-file export",
   "background_jobs": "Aged-receivables list extraction, matching, aging-escalation checks",
   "object_storage": "Encrypted, per-firm-prefix isolated",
   "notifications": "Email only at launch (client comms + internal escalation alerts)",
   "search": "None at launch",
   "analytics": "Internal metrics dashboard only; no third-party analytics on the reviewer console",
   "ai": "Single frontier-model provider via a scripted extraction/matching/drafting pipeline, prompts + fixtures versioned in-repo",
   "observability": "Structured logs, RED metrics, model-call cost/latency spans",
   "deployment": "Single production region, multi-AZ, preview environment per PR",
   "security": "Row-level tenant isolation, encryption at rest/in transit, least-privilege access",
   "dr": "Daily backups, tested restore runbook, RPO 24h / RTO 4h at launch scale"
  },
  "modules": [
   {
    "name": "intake-normalization",
    "purpose": "Aged-receivables list receipt, extraction, and tie-out.",
    "owned_domain": [
     "DebtorAged-receivables list"
    ],
    "application_services": [
     "ReceiveAged-receivables list",
     "NormalizeAged-receivables list"
    ],
    "infra_adapters": [
     "Mailbox listener",
     "Object storage adapter",
     "Extraction-model client"
    ],
    "public_interfaces": [
     "aged-receivables list.normalized event"
    ],
    "forbidden_deps": [
     "Cannot call recovery-matching internals directly — event only"
    ],
    "responsibility": "Aged-receivables list receipt, extraction, and tie-out.",
    "owned_data": [
     "DebtorAged-receivables list"
    ],
    "events_produced": [
     "aged-receivables list.normalized event"
    ],
    "events_consumed": [
     "[PLACEHOLDER] owner to complete"
    ],
    "interfaces": [
     "aged-receivables list.normalized event"
    ],
    "depends_on": [
     "[PLACEHOLDER] owner to complete"
    ],
    "entities": [
     "DebtorAged-receivables list"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "recovery-matching",
    "purpose": "Matching, discrepancy classification, ledger tie-out.",
    "owned_domain": [
     "RecoveryCycle",
     "DiscrepancyDocket",
     "InvoiceLedger"
    ],
    "application_services": [
     "RunMatching",
     "ApproveDiscrepancy",
     "SignLedger"
    ],
    "infra_adapters": [
     "AMS-export parser",
     "Invoice-schedule store"
    ],
    "public_interfaces": [
     "discrepancy.reviewer_approved event",
     "invoice_ledger.signed event"
    ],
    "forbidden_deps": [
     "Cannot call recovery-delivery internals directly — event only"
    ],
    "responsibility": "Matching, discrepancy classification, ledger tie-out.",
    "owned_data": [
     "RecoveryCycle",
     "DiscrepancyDocket",
     "InvoiceLedger"
    ],
    "events_produced": [
     "discrepancy.reviewer_approved event",
     "invoice_ledger.signed event"
    ],
    "events_consumed": [],
    "interfaces": [
     "discrepancy.reviewer_approved event",
     "invoice_ledger.signed event"
    ],
    "depends_on": [],
    "entities": [
     "RecoveryCycle",
     "DiscrepancyDocket",
     "InvoiceLedger"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "recovery-delivery",
    "purpose": "Debtor-inquiry drafting/sending, aging, pack assembly.",
    "owned_domain": [
     "DebtorInquiry",
     "Account ownerPayoutAged-receivables list",
     "MonthlyRecoveryPack"
    ],
    "application_services": [
     "SendDebtorInquiry",
     "AssemblePack",
     "DeliverPack"
    ],
    "infra_adapters": [
     "Email-send adapter",
     "Posting-file generator"
    ],
    "public_interfaces": [
     "pack.delivered event"
    ],
    "forbidden_deps": [
     "Cannot bypass quality-assurance signoff gate"
    ],
    "responsibility": "Debtor-inquiry drafting/sending, aging, pack assembly.",
    "owned_data": [
     "DebtorInquiry",
     "Account ownerPayoutAged-receivables list",
     "MonthlyRecoveryPack"
    ],
    "events_produced": [
     "pack.delivered event"
    ],
    "events_consumed": [],
    "interfaces": [
     "pack.delivered event"
    ],
    "depends_on": [],
    "entities": [
     "DebtorInquiry",
     "Account ownerPayoutAged-receivables list",
     "MonthlyRecoveryPack"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   },
   {
    "name": "quality-assurance",
    "purpose": "Signoff and retraction lifecycle.",
    "owned_domain": [
     "Signoff",
     "Retraction"
    ],
    "application_services": [
     "ApproveArtifact",
     "RetractArtifact"
    ],
    "infra_adapters": [
     "Signature-binding session store"
    ],
    "public_interfaces": [
     "ArtifactSigned event"
    ],
    "forbidden_deps": [
     "Cannot draft on behalf of any other module"
    ],
    "responsibility": "Signoff and retraction lifecycle.",
    "owned_data": [
     "Signoff",
     "Retraction"
    ],
    "events_produced": [
     "ArtifactSigned event"
    ],
    "events_consumed": [],
    "interfaces": [
     "ArtifactSigned event"
    ],
    "depends_on": [],
    "entities": [
     "Signoff",
     "Retraction"
    ],
    "failure_risks": [
     "Module-boundary violation via direct DB access"
    ],
    "scaling": "Extract to a service only under sustained isolated load pressure",
    "future_split_trigger": "Sustained CPU/latency pressure isolated to this module"
   }
  ],
  "data_architecture": {
   "primary_db": "Postgres",
   "secondary": [
    "Object storage for aged-receivables list files"
   ],
   "cache": "None at launch",
   "search": "None at launch",
   "vector": "None at launch (retrieval is structured lookup, not embeddings, at this scale)",
   "object_storage": "Per-firm-prefix isolated bucket",
   "schema_strategy": "Migration-gated, reviewed per PR",
   "migrations": "Forward-only, reviewed",
   "backups": "Daily automated, tested restore quarterly",
   "retention": "7 years on signed ledgers/dockets; 13 months on agent-run logs",
   "audit_logs": "Append-only, hash-chained per recovery cycle",
   "soft_delete": "Used for client offboarding, hard-delete on retention expiry",
   "privacy": "Per-tenant row-level security",
   "encryption": "At rest and in transit",
   "multi_tenancy": "Logical isolation via tenant_id row-level security"
  },
  "api": {
   "style": "Internal REST",
   "public_vs_internal": "Internal only at launch",
   "versioning": "Path-versioned when a client portal ships",
   "rate_limiting": "Per-tenant budget caps on model-backed endpoints",
   "idempotency": "Idempotency keys on aged-receivables list ingestion",
   "pagination": "Cursor-based on list endpoints",
   "error_format": "Structured JSON problem-details",
   "webhook_security": "N/A at launch",
   "retries": "Exponential backoff on model-provider calls",
   "contract_testing": "Per-debtor parser schema contract tests in CI",
   "backward_compat": "N/A at launch (no public API)",
   "contract_testing_plan": "Fixture-based regression suite run on every parser/prompt change"
  },
  "security": {
   "authn": "SSO + MFA for reviewers",
   "authz": "Role-based, server-side capability checks",
   "tenant_isolation": "Row-level security keyed on tenant_id",
   "secrets": "Managed secrets store, no secrets in code",
   "encryption": "At rest and in transit",
   "session": "Server-side session with short-lived tokens",
   "input_validation": "Schema validation on every ingestion path",
   "api_protection": "Rate limiting + auth on all internal endpoints",
   "audit_log": "Append-only, hash-chained",
   "admin_access": "Break-glass access logged and time-boxed",
   "supply_chain": "Dependency scanning in CI",
   "threat_model": [
    "Cross-tenant leak",
    "Reviewer identity spoofing",
    "Prompt injection via uploaded aged-receivables lists"
   ],
   "abuse_cases": [
    "Bulk fraudulent aged-receivables list upload attempting to poison the matching engine"
   ],
   "zero_trust": "Server-side checks on every capability, never client-only",
   "asvs_notes": "Aligned to OWASP ASVS L2 controls for a B2B financial-data service"
  },
  "reliability": {
   "failure_modes": [
    "Model-provider outage mid-extraction",
    "Debtor portal credential expiry",
    "Aged-receivables list queue backlog at month-end"
   ],
   "graceful_degradation": "Queue and retry rather than fail hard; reviewer notified of delayed cycles",
   "retry_policy": "Exponential backoff, max 5 attempts on model calls",
   "timeouts": "30s extraction timeout, background-job fallback beyond that",
   "circuit_breaker": "Trip on repeated model-provider failures, alert on-call",
   "queueing": "Background job queue for extraction/matching",
   "idempotency": "Idempotency keys on aged-receivables list ingestion",
   "dlq": "Dead-letter queue for repeatedly failing extraction jobs",
   "transactions": "Aggregate-scoped transactions, no cross-aggregate transactions",
   "dr": "Daily backups, quarterly restore test",
   "incident_response": "Runbook: detect, contain, notify, root-cause, postmortem",
   "slos": [
    {
     "name": "p95 aged-receivables list extraction latency",
     "target": "under 30s"
    },
    {
     "name": "Monthly pack on-time delivery",
     "target": "≥95% of cycles by the 5th business day"
    }
   ]
  },
  "scaling": {
   "mvp_can_stay_simple": [
    "Single Postgres instance",
    "In-process event dispatch"
   ],
   "modular_now": [
    "Module boundaries enforced by convention"
   ],
   "deferrable": [
    "Client-facing portal",
    "Public API",
    "Vector search"
   ],
   "breaks_first": "Reviewer throughput before infrastructure",
   "db_path": "Read replicas once reporting load grows",
   "jobs_path": "Managed queue once in-process dispatch saturates",
   "cache_path": "Add a cache layer only if read latency becomes a measured problem",
   "search_path": "Add full-text search only if client-portal search becomes a real need",
   "files_path": "Object storage scales natively",
   "api_path": "Add a versioned public API only when a client portal ships",
   "multi_region": "Not needed at this scale",
   "cost_control": "Per-tenant model-spend budget caps"
  },
  "ai": {
   "provider": "Single frontier-model provider (model-agnostic schemas/prompts, swappable within days)",
   "prompt_mgmt": "Versioned in-repo, immutable once published",
   "rag": "Structured per-firm + per-debtor retrieval, not embeddings-based at this scale",
   "vector": "Not used at this scale",
   "embeddings": "Not used at this scale",
   "eval": "Fixture-based regression suite per debtor",
   "hitl": "Reviewer gate on every discrepancy and debtor inquiry",
   "guardrails": "Deterministic output filters + structured validation",
   "prompt_injection": "Uploaded aged-receivables list content treated as untrusted data, never instructions",
   "leakage": "Per-tenant retrieval partitioning",
   "fallback": "Dual-provider fallback path documented, not yet implemented at pilot scale",
   "latency_cost": "Tracked per AgentRun",
   "memory": "Session-scoped only, no persistent cross-client memory",
   "tool_permissions": "Extraction/matching/drafting agents have read-only access to their own context's data",
   "auditability": "Every AgentRun logged with prompt version + validator verdict",
   "citation": "Every discrepancy and eligibility-adjacent claim must cite a source"
  },
  "devops": {
   "environments": [
    "local",
    "preview (per-PR)",
    "staging",
    "production (single region + multi-AZ)"
   ],
   "cicd": "PR -> typecheck + unit + snapshot -> preview deploy -> main auto-deploys",
   "iac": "Declarative infra config checked into the repo",
   "secrets": "Managed secrets store",
   "preview_envs": "Per-PR ephemeral environments",
   "migrations": "Reviewed, forward-only",
   "rollback": "Blue/green deploy with fast rollback",
   "release_style": "Continuous deployment on main, feature-flagged risky changes",
   "feature_flags": "Used for prompt-version rollouts",
   "monitoring": "Structured logs + RED metrics",
   "alerting": "On-call paged on SLO breach",
   "logs": "Structured, tenant-scoped, PII-scrubbed",
   "error_tracking": "Source-mapped error tracking",
   "uptime": "Target 99.5% at pilot scale",
   "cost_monitoring": "Per-tenant model-spend dashboard"
  },
  "testing": {
   "unit": "Tie-out math and materiality thresholds",
   "integration": "Cross-module event contracts",
   "contract": "Per-debtor parser schema",
   "e2e": "Intake to delivery smoke test",
   "security": "Row-level isolation tests",
   "a11y": "axe-core on reviewer surfaces",
   "load": "Month-end volume simulation",
   "chaos": "Model-provider outage simulation",
   "migration": "Forward-only migration dry-run in CI",
   "backup_restore": "Quarterly restore drill",
   "ai_eval": "Fixture-based regression suite per debtor",
   "test_data": "Anonymized gold-standard aged-receivables list fixtures"
  },
  "observability": {
   "logs": "Structured, tenant-scoped, PII-scrubbed",
   "metrics": "RED metrics per workflow",
   "traces": "Model-call spans with cost + latency",
   "audit_events": "Append-only, hash-chained per cycle",
   "business_events": "scan_requested, pack_delivered, discrepancy_approved",
   "error_tracking": "Source-mapped error tracking",
   "security_monitoring": "Cross-tenant access-attempt alerting",
   "cost_monitoring": "Per-tenant model-spend dashboard",
   "dashboards": [
    "Ops dashboard",
    "Economics dashboard"
   ],
   "alert_thresholds": [
    "Auto-match rate <80%",
    "Reviewer minutes >180/cycle"
   ],
   "triage": "On-call reviews alert, checks tenant scope, escalates per runbook"
  },
  "cost": {
   "drivers": [
    {
     "name": "Model inference per aged-receivables list",
     "note": "Scales with aged-receivables list volume, falls per-aged-receivables list as parser coverage grows"
    },
    {
     "name": "Reviewer labor minutes",
     "note": "Falls with auto-match rate improvement"
    },
    {
     "name": "Object storage",
     "note": "Linear with client count, low absolute cost"
    }
   ],
   "likely_traps": [
    "Over-provisioning background workers before real volume data exists"
   ],
   "controls": [
    "Per-tenant budget caps",
    "Monthly cost-per-client dashboard review"
   ]
  },
  "multi_tenancy": {
   "model": "Shared infrastructure, logical isolation",
   "isolation": "Row-level security keyed on tenant_id",
   "tenant_aware_authz": "Every capability check includes tenant_id",
   "tenant_config": "Per-firm debtor list and invoice-schedule config",
   "branding": "N/A at launch (internal-only console)",
   "tenant_export": "Full-cycle export available on request",
   "tenant_deletion": "Soft-delete then hard-delete on retention expiry",
   "tenant_audit": "Per-tenant audit log export",
   "noisy_neighbor": "Per-tenant concurrency and budget caps",
   "tenant_rate_limits": "Per-tenant model-call budget",
   "billing": "Stripe, flat monthly + one-time scan fee",
   "why_this_fits": "Small client count at launch makes logical isolation sufficient; a hard single-tenant requirement would trigger a per-client deployment exception."
  },
  "privacy_compliance": {
   "data_classification": "Financial/PII tiers documented in product.security.data_classifications",
   "minimization": "Only fields needed for matching/recovery retained",
   "consent": "Engagement letter + debtor-communication authorization",
   "access_logs": "Per-access logged with actor + timestamp",
   "audit_trails": "Append-only, hash-chained",
   "retention": "7 years on ledgers/dockets; 13 months on agent logs",
   "legal_hold": "Manual legal-hold flag overrides retention deletion",
   "right_to_delete": "Honored post-retention-window or on contract termination per engagement letter",
   "right_to_export": "Full-cycle export available on request",
   "sensitive_handling": "GLBA-adjacent NPI handling program",
   "boundaries": "No account owner activity; no fund custody; no tax/legal advice",
   "residency": "US-only at launch",
   "vendor_risk": "Single model-provider risk documented; dual-provider fallback on the roadmap",
   "breach_response": "Documented incident-response runbook",
   "admin_controls": "Break-glass access logged and time-boxed",
   "evidence_collection": "Audit-log export within 24 hours of a breach or dispute"
  },
  "frontend": {
   "framework": "React (internal reviewer console)",
   "rendering": "Client-rendered SPA for the console; static self-contained HTML for the public microsite",
   "routing": "Client-side router for the console",
   "state": "Local + server-state cache",
   "server_state": "Fetched per reviewer session",
   "forms": "Native form elements with client + server validation",
   "error_handling": "Structured error boundaries",
   "components": "Design-token-driven component library",
   "design_system": "Semantic tokens per DESIGN-STANDARD.md",
   "auth_ui": "SSO redirect flow",
   "authz_aware_ui": "Capability-gated UI elements",
   "a11y": "WCAG 2.2 AA target",
   "i18n": "en-US only at launch",
   "performance": "Console not performance-critical (internal); microsite budget ≤120KB, no external requests",
   "bundling": "Standard bundler, code-split by module",
   "testing": "Component + e2e tests on reviewer surfaces",
   "offline": "Not supported at launch",
   "realtime": "Not needed at launch"
  },
  "backend": {
   "framework": "Node/TypeScript service",
   "layering": "domain / application / infra per module",
   "domain": "Aggregates + value objects per bounded context",
   "services": "Application services orchestrate domain + infra",
   "repositories": "One repository per aggregate root",
   "validation": "Schema validation at every boundary",
   "authorization": "Server-side capability checks only",
   "jobs": "Background job queue for extraction/matching",
   "events": "In-process event dispatch at launch",
   "files": "Object storage adapter",
   "email_sms": "Email adapter for client comms and debtor inquiries",
   "scheduled": "Aging-escalation checks run daily",
   "errors": "Structured error types per layer",
   "logging": "Structured, tenant-scoped, PII-scrubbed",
   "config": "Environment-based config, no secrets in code",
   "di": "Constructor-based dependency injection",
   "testing": "Unit + contract + e2e per module"
  },
  "diagrams": {
   "context_mermaid": "graph TD; Firm-->Intake; Intake-->Recovery; Recovery-->Recovery; Recovery-->QA",
   "container_mermaid": "graph TD; Console-->API; API-->Postgres; API-->ObjectStorage; API-->ModelProvider",
   "data_flow_mermaid": "graph LR; Aged-receivables list-->Extraction-->Matching-->Docket-->Ledger-->Pack",
   "auth_flow_mermaid": "graph LR; Reviewer-->SSO-->MFA-->Session",
   "authz_flow_mermaid": "graph LR; Request-->RoleCheck-->TenantCheck-->Allow",
   "deployment_mermaid": "graph TD; PR-->Preview-->Main-->Production",
   "background_job_mermaid": "graph LR; Queue-->Worker-->Retry-->DLQ",
   "event_flow_mermaid": "graph LR; Aged-receivables listNormalized-->MatchingCompleted-->DiscrepancyApproved-->LedgerSigned",
   "failure_flow_mermaid": "graph LR; Failure-->Retry-->CircuitBreaker-->Alert",
   "multi_tenant_flow_mermaid": "graph LR; Request-->TenantContext-->RowLevelSecurity-->Data",
   "ai_flow_mermaid": "graph LR; Aged-receivables list-->ExtractionAgent-->MatchingAgent-->DrafterAgent-->Reviewer"
  },
  "adrs": [
   {
    "id": "ADR-001",
    "decision": "Adopt a modular monolith, not microservices, at launch",
    "status": "accepted",
    "context": "Founder-operated team; low ops burden required",
    "options": [
     "Modular monolith",
     "Microservices per bounded context",
     "No-code workflow tool"
    ],
    "chosen": "Modular monolith",
    "business_reason": "Fastest path to first paid pilot without a platform team",
    "technical_reason": "One deploy, one audit boundary, easy to reason about at this scale",
    "tradeoffs": "Will need extraction into services if reviewer-console load grows sharply",
    "risks": [
     "[PLACEHOLDER] owner to complete"
    ],
    "revisit_trigger": "Sustained CPU/latency pressure isolated to one module",
    "why": "One deploy, one audit boundary, easy to reason about at this scale",
    "consequences": [
     "[PLACEHOLDER] owner to complete"
    ],
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "Sustained CPU/latency pressure isolated to one module"
   },
   {
    "id": "ADR-002",
    "decision": "Deterministic code owns all money math; the model never computes a final dollar figure",
    "status": "accepted",
    "context": "Penny-perfect tie-out is a hard trust requirement",
    "options": [
     "Model computes totals",
     "Deterministic code computes totals, model only extracts/classifies"
    ],
    "chosen": "Deterministic code computes totals",
    "business_reason": "A wrong dollar figure from a model is the single fastest way to lose a client's trust",
    "technical_reason": "Removes an entire class of hallucination risk from the highest-stakes output",
    "tradeoffs": "Slightly more engineering work per new transaction-type edge case",
    "risks": "Edge cases not yet coded fall through to reviewer manual calculation",
    "revisit_trigger": "None — this is a standing invariant, not revisited",
    "why": "Removes an entire class of hallucination risk from the highest-stakes output",
    "consequences": "Slightly more engineering work per new transaction-type edge case",
    "reversal": "Would require a migration of the affected module's data model.",
    "revisit_when": "None — this is a standing invariant, not revisited"
   }
  ],
  "roadmap": [
   {
    "phase": "Phase 0 — Discovery + pilot LOI",
    "weeks": "Weeks 1-2",
    "outcomes": [
     "3-5 pilot firm LOIs",
     "Evidence pack from each pilot firm",
     "Written ICP + pricing hypothesis"
    ],
    "exit_criteria": [
     "≥3 LOIs signed",
     "Owner-action ledger populated per firm",
     "Reviewer identity confirmed"
    ],
    "kill_criteria": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ],
    "build": [
     "3-5 pilot firm LOIs",
     "Evidence pack from each pilot firm",
     "Written ICP + pricing hypothesis"
    ],
    "defer": [
     "[PLACEHOLDER] owner to complete"
    ],
    "monitor": [
     "≥3 LOIs signed",
     "Owner-action ledger populated per firm",
     "Reviewer identity confirmed"
    ],
    "avoid": [
     "<2 LOIs after 2 weeks",
     "No willingness-to-pay signal above pilot price"
    ],
    "acceptable_debt": [
     "[PLACEHOLDER] owner to complete"
    ],
    "dangerous_debt": [
     "[PLACEHOLDER] owner to complete"
    ],
    "triggers_to_change": [
     "[PLACEHOLDER] owner to complete"
    ]
   },
   {
    "phase": "Phase 1 — Thin vertical slice",
    "weeks": "Weeks 3-4",
    "outcomes": [
     "Intake -> match -> reviewer signoff -> delivery working end-to-end for one AMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "exit_criteria": [
     "1 real Invoice Leakage Scan delivered + reviewer-signed",
     "p95 workflow latency published"
    ],
    "kill_criteria": [
     "Reviewer signoff cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ],
    "build": [
     "Intake -> match -> reviewer signoff -> delivery working end-to-end for one AMS format",
     "Audit trail wired",
     "Instrumentation live"
    ],
    "defer": [],
    "monitor": [
     "1 real Invoice Leakage Scan delivered + reviewer-signed",
     "p95 workflow latency published"
    ],
    "avoid": [
     "Reviewer signoff cycle >10 business days",
     "Evidence bundle cannot be reconstructed on demand"
    ],
    "acceptable_debt": "Manual debtor follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the reviewer-signoff gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   },
   {
    "phase": "Phase 2 — Pilot cohort",
    "weeks": "Weeks 3-8",
    "outcomes": [
     "10 pilot firms scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "exit_criteria": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "kill_criteria": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ],
    "build": [
     "10 pilot firms scanned",
     "First standard-price desk conversion",
     "SOC 2 Type I scoping"
    ],
    "defer": [],
    "monitor": [
     "≥1 standard-price contract",
     "Post-scan debrief trust signal captured",
     "Postmortem cadence in place"
    ],
    "avoid": [
     "No standard-price conversion by Day 90",
     "Scan-to-desk conversion below 25%"
    ],
    "acceptable_debt": "Manual debtor follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the reviewer-signoff gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   },
   {
    "phase": "Phase 3 — Recurring-desk scale-up",
    "weeks": "Weeks 9-13 (Day 90 checkpoint)",
    "outcomes": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action ledger closed for launch"
    ],
    "exit_criteria": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "kill_criteria": [
     "Rework rate persistently above 3%",
     "Reviewer minutes per client not falling with volume"
    ],
    "build": [
     "Public commercial launch of the microsite as 'ready'",
     "Recovery-share rider and Diligence Tie-Out line active",
     "Owner-action ledger closed for launch"
    ],
    "defer": [],
    "monitor": [
     "COGS/rework/cycle-time measured against target",
     "Expansion beyond the pilot cohort gated on targets, not calendar time"
    ],
    "avoid": [
     "Rework rate persistently above 3%",
     "Reviewer minutes per client not falling with volume"
    ],
    "acceptable_debt": "Manual debtor follow-up and onboarding at pilot scale",
    "dangerous_debt": "Skipping the reviewer-signoff gate under volume pressure",
    "triggers_to_change": "Kill/pivot criteria met at any phase gate"
   }
  ],
  "anti_overengineering": {
   "flagged": [
    {
     "item": "Client-facing portal at launch",
     "why": "No client has asked for self-serve status; email/upload-link delivery is sufficient at pilot scale.",
     "simpler": "Defer to year 1, gated on client demand signal."
    },
    {
     "item": "Vector search / embeddings",
     "why": "Data volume at launch doesn't justify it; structured retrieval suffices.",
     "simpler": "Structured per-firm and per-debtor lookup."
    },
    {
     "item": "Microservices per bounded context",
     "why": "Premature operational complexity for a founder-operated launch.",
     "simpler": "Modular monolith with enforced module boundaries."
    }
   ]
  },
  "risks": [
   {
    "risk": "AMS vendor bundles recovery 'free' with a chase workflow",
    "likelihood": "medium-high",
    "impact": "high",
    "mitigation": "AMS-agnostic positioning; recovery/chase as the human moat",
    "detection": "Applied Recon or a competing AMS module adds chase/recovery features",
    "owner": "owner",
    "escalation": "Reviewer -> Senior Reviewer -> Owner -> Counsel",
    "fallback": "AMS-agnostic positioning; recovery/chase as the human moat",
    "category": "business"
   },
   {
    "risk": "Scan-to-desk conversion underperforms",
    "likelihood": "medium",
    "impact": "severe",
    "mitigation": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "detection": "Pilot cohort conversion below 25%",
    "owner": "owner",
    "escalation": "Reviewer -> Senior Reviewer -> Owner -> Counsel",
    "fallback": "Pilot gate at 25%; alternative packaging tested in cohort 2",
    "category": "business"
   },
   {
    "risk": "False-positive discrepancy sent to a debtor",
    "likelihood": "medium",
    "impact": "high",
    "mitigation": "100% reviewer approval; evidence-link requirement; inquiry-not-demand language",
    "detection": "Debtor disputes an inquiry as unfounded",
    "owner": "legal",
    "escalation": "Reviewer -> Senior Reviewer -> Owner -> Counsel",
    "fallback": "100% reviewer approval; evidence-link requirement; inquiry-not-demand language",
    "category": "business"
   }
  ],
  "rules": [
   "No cross-module database table sharing",
   "No model call computes final money math",
   "No public claim before owner-action facts close"
  ],
  "audit": {
   "product_fit": 4,
   "simplicity": 4,
   "security": 4,
   "reliability": 4,
   "scalability": 3,
   "maintainability": 4,
   "performance": 4,
   "cost": 4,
   "compliance": 3,
   "dx": 4,
   "ops_burden": 4,
   "extensibility": 4,
   "team_suitability": 4,
   "time_to_market": 4,
   "recommendation": {
    "verdict": "conditional-go",
    "stack": "Node/TypeScript + Postgres + single frontier-model provider",
    "style": "modular monolith",
    "database": "Postgres with row-level tenant security",
    "hosting": "Single-region, multi-AZ",
    "auth": "SSO + MFA for reviewers",
    "ai_approach": "Scripted extraction/matching/drafting pipeline with reviewer gates",
    "integrations": "AMS export ingestion, debtor aged-receivables list intake, QuickBooks/AMS posting export",
    "build_first": [
     "Intake & Normalization",
     "Recovery & Matching"
    ],
    "revisit_later": [
     "Client-facing portal",
     "Public API"
    ],
    "avoid": [
     "Microservices",
     "Vector search at this scale"
    ],
    "biggest_risks": [
     "Reviewer bottleneck",
     "A debtor-facing claim proves incorrect"
    ],
    "top_10_rules": [
     "No cross-module database table sharing",
     "No model call computes final money math",
     "No public claim before owner-action facts close",
     "Deterministic code owns all money math",
     "Reviewer gate on every client- or debtor-facing output"
    ],
    "first_10_steps": [
     "Confirm the named B2B services-accounting reviewer + engagement letter on file",
     "Populate owner-action ledger with entity, jurisdiction, contact inbox, privacy inbox",
     "Open pilot-cohort intake (cap 10) with explicit pricing conversation",
     "Write ICP + kill/pivot criteria in the plan file",
     "Stand up the evidence-linked intake -> match -> reviewer signoff loop",
     "Wire append-only audit log + hash-chained snapshots",
     "Add row-level auth + tenant-scoped retrieval indices",
     "Instrument scan-request, pack-delivery, and reviewer-signoff events",
     "Publish the microsite with FAQPage schema only and noindex until owner-facts close",
     "Schedule the Day-90 kill/pivot review with executive sponsor"
    ]
   }
  }
 },
 "design": {
  "slug": "firm-overdue-invoice-invoice-recovery-desk",
  "archetypes": [
   "ledger / recovery desk",
   "back-office trust interface"
  ],
  "user_mindset": {
   "goals": "Find out fast whether debtors are underpaying, without operating new software",
   "session_length": "Short, task-focused (scan intake, monthly pack review)",
   "confidence": "Numerate, skeptical of unproven claims — wants evidence, not a dashboard",
   "interface_needs": "Clear evidence chain from aged-receivables list line to ledger to signature"
  },
  "posture": [
   "calm",
   "numerate",
   "institutional-but-warm"
  ],
  "density": "compact",
  "trust_level": {
   "tier": "high",
   "sensitive_domains": [
    "Firm financial data",
    "Account owner payout data"
   ],
   "implications": [
    "Every dollar figure must show its source",
    "No fabricated proof; honest placeholder slots until real cycles ship"
   ]
  },
  "differentiation": {
   "avoid": [
    "LedgerClear avoid — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
    "Wheat/tractor-style vertical clip-art equivalents (generic finance-SaaS iconography)",
    "Alarm-red urgency banners"
   ],
   "strategy": "A ledger aesthetic — deep teal/ink against warm parchment, serif numerals — that reads like a specialist's workbook, not a dashboard demo."
  },
  "territories": [
   {
    "name": "Ledger Desk",
    "color_mood": "deep teal + warm parchment + amber accent",
    "typography": "Serif numerals, sans body",
    "density": "compact",
    "component_feel": "workbook-like, artifact-shaped cards",
    "motion": "minimal, calm",
    "fits": "Recovery/back-office trust interfaces",
    "risks": "Could read as too formal for a younger buyer persona (not a concern here — buyer is an firm principal)"
   },
   {
    "name": "Filing Desk",
    "color_mood": "similar palette family used elsewhere in the portfolio",
    "typography": "Serif display",
    "density": "compact",
    "component_feel": "filing-tab metaphor",
    "motion": "minimal",
    "fits": "Deadline-driven filing businesses",
    "risks": "Wrong metaphor here — no single filing deadline exists in this business"
   },
   {
    "name": "Recovery Console",
    "color_mood": "cooler blue-gray, more software-dashboard feeling",
    "typography": "Sans-only",
    "density": "dense",
    "component_feel": "dashboard-like",
    "motion": "minimal",
    "fits": "A future client-facing portal, not the launch microsite",
    "risks": "Reads too much like software the client has to operate — against the done-for-you positioning"
   }
  ],
  "chosen_territory": "Ledger Desk",
  "chosen_rationale": "The Invoice Ledger is the deliverable; the ledger-desk metaphor keeps every screen artifact-shaped, the way a account owner or acquirer would want to see it.",
  "prioritized_components": [
   {
    "name": "Hero with cycle-status panel",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Stat strip (real, sourced figures)",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Deliverable cards",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Pricing tiers with guarantee callout",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "Honest placeholder proof slots",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   },
   {
    "name": "FAQ",
    "why": "Core to the conversion path from stat proof to pricing trust to CTA"
   }
  ],
  "tokens": {
   "brand": "216 64% 28%",
   "brand-fg": "40 30% 97%",
   "surface": "40 30% 97%",
   "ink": "216 30% 14%",
   "muted": "216 14% 40%",
   "accent": "38 88% 46%"
  },
  "type": {
   "display": "Georgia (system serif stack)",
   "body": "system-ui",
   "fonts_url": ""
  },
  "signature": {
   "motif": "Mismatched aged-receivables list cards resolving into one aligned ledger row",
   "render": "CSS-only shapes/borders, no imagery (120KB budget)"
  },
  "patterns": [
   {
    "name": "Card-based deliverable grid",
    "description": "See site/index.html implementation"
   },
   {
    "name": "Stepped how-it-works numerals",
    "description": "See site/index.html implementation"
   },
   {
    "name": "Dashed placeholder proof slots",
    "description": "See site/index.html implementation"
   }
  ],
  "states": [
   "matched (state-ok)",
   "at-risk/short-paid (state-risk)",
   "pending debtor response (state-pending)",
   "blocked/needs input (state-blocked)"
  ],
  "uniqueness_audit": {
   "app_specific_decisions": [
    "Ledger-teal + amber palette distinct from the portfolio's other palettes",
    "Aged-receivables list-to-ledger visual motif specific to this business's workflow"
   ],
   "cliches_avoided": [
    "LedgerClear cliches avoided — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
    "No stock handshake/office imagery"
   ],
   "scale_notes": "Palette and motif chosen to be visually distinct from sibling businesses in the same multi-tenant site."
  },
  "localization": [
   "en-US only at launch"
  ]
 },
 "seo": {
  "slug": "b2b-invoice-collections-ar-recovery-desk",
  "archetype": "outcome-priced back-office authority site",
  "archetype_impact": "Search fit is a back-office trust authority site, not a filing-deadline authority site. That means depth on debtor-format and discrepancy-classification specifics, evergreen (not deadline-driven) content cadence.",
  "authority_dna": {
   "site_archetype": "outcome-priced back-office authority site",
   "monetization_model": "B2B lead -> Invoice Leakage Scan -> paid Recovery Desk engagement (not ad revenue; not affiliate).",
   "main_search_intents": [
    "informational",
    "commercial"
   ],
   "topical_authority_opportunity": "Own the \"B2B services invoice recovery\" topic cluster by covering overdue-invoice aged-receivables list formats, debtor-quirk patterns, discrepancy classification, and account owner-payout disputes better than any single trade-press explainer.",
   "local_seo_opportunity": "Not justified: buyers search by problem/AMS platform, not by city.",
   "global_national_opportunity": "National (US-first); state B2B services regulation varies but the core service is not state-gated.",
   "easiest_ranking_path": "Long-tail, debtor-specific and AMS-specific queries (\"HawkSoft overdue invoice recovery\", \"why is my aged-receivables list short\") where the SERP is dominated by vendor blog posts, not buyer-first guides.",
   "hardest_ranking_path": "Head terms like \"B2B services invoice software\" — dominated by aged SaaS vendor domains (Fintary, Invoicely, Core Invoices).",
   "trust_credibility_requirements": [
    "Named human reviewer with role + credentials",
    "Debtor/aged-receivables list citations on every claim",
    "Last-reviewed date on regulatory/compliance pages",
    "Direct links to primary trade-press sources, not aggregators"
   ],
   "ymyl": true,
   "expert_review_needed": true,
   "site_structure": "Authority hub + narrow high-intent service page + linkable evidence assets. Not a directory. Not a marketplace.",
   "seo_moat": "Always-current per-AMS and per-debtor how-to pages with real anonymized teardown evidence, refreshed as the parser library grows."
  },
  "search_market": {
   "primary_markets": [
    "B2B services invoice recovery service",
    "overdue invoice invoice recovery",
    "invoice leakage scan"
   ],
   "secondary_markets": [
    "account owner payout dispute resolution",
    "firm M&A invoice diligence",
    "AMS invoice recovery how-to"
   ],
   "low_competition_subtopics": [
    "debtor-specific aged-receivables list quirks",
    "as-earned vs annualized invoice leakage",
    "HawkSoft/EZLynx overdue invoice recovery how-to"
   ],
   "high_commercial_intent": [
    "done-for-you invoice recovery service",
    "outsource B2B services invoice recovery",
    "invoice recovery service for B2B services firms"
   ],
   "informational": [
    "what is overdue invoice invoice recovery",
    "how to recover B2B services aged-receivables lists",
    "why is my aged-receivables list short"
   ],
   "local_intent": [
    "[PLACEHOLDER] owner to complete"
   ],
   "transactional": [
    "invoice leakage scan pricing",
    "book a invoice recovery consultation"
   ],
   "comparison": [
    "invoice recovery service vs software",
    "LedgerClear vs Comulate vs ReSource Pro"
   ],
   "problem_solution": [
    "debtor underpaid my invoice what to do",
    "account owner payout dispute resolution"
   ],
   "near_me": [
    "[PLACEHOLDER] owner to complete"
   ],
   "long_tail": [
    "HawkSoft overdue invoice invoice recovery",
    "as-earned invoice chargeback explained",
    "AMS360 invoice recovery how-to"
   ],
   "questions": [
    "what records does a invoice recovery need?",
    "who reviews a invoice leakage scan?",
    "how long does invoice recovery take?"
   ],
   "emerging": [
    "AI-assisted aged-receivables list extraction",
    "automated debtor inquiry drafting"
   ],
   "seasonal": [
    "tax-season invoice book cleanup",
    "firm M&A diligence season invoice verification"
   ],
   "underserved_serps": [
    "debtor-specific aged-receivables list quirks",
    "account owner payout dispute resolution"
   ],
   "weak_serps": [
    "invoice leakage self-check",
    "invoice recovery checklist"
   ],
   "forum_dominated_serps": [
    "why is my aged-receivables list short",
    "debtor chargeback explained"
   ],
   "winnable_authoritative_serps": [
    "overdue invoice invoice recovery definitive guide",
    "invoice leakage scan evidence requirements"
   ],
   "avoid_initially": [
    "B2B services invoice software",
    "best invoice tracking tools"
   ],
   "easy_wins": [
    "debtor-specific aged-receivables list quirks",
    "invoice recovery checklist",
    "account owner payout dispute anatomy"
   ],
   "moderate": [
    "overdue invoice invoice recovery definitive guide",
    "firm M&A invoice diligence"
   ],
   "long_term_plays": [
    "B2B services invoice software comparison",
    "portfolio-level multi-firm recovery"
   ],
   "do_not_pursue": [
    "generic \"how to start a bookkeeping business\" content",
    "celebrity or trend-jacking posts",
    "AI-generated listicles"
   ]
  },
  "keyword_clusters": [
   {
    "primary": "overdue invoice invoice recovery service",
    "related": [
     "done-for-you invoice recovery",
     "outsource invoice recovery"
    ],
    "intent": "commercial",
    "user_problem": "Firm suspects debtor underpayment and needs a done-for-you fix",
    "funnel": "BOFU",
    "business_value": "high",
    "ranking_difficulty": "medium",
    "conversion_potential": "high",
    "content_effort": "medium",
    "serp_weakness": "Dominated by enterprise SaaS vendor pages, not small-firm-focused content",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Pillar / service page",
    "reason": "High buyer intent + weak SERP for our segment",
    "priority_score": 17,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "invoice leakage scan",
    "related": [
     "invoice leakage self-check",
     "how much invoice am I missing"
    ],
    "intent": "commercial",
    "user_problem": "Wants a low-commitment diagnostic before a full engagement",
    "funnel": "TOFU",
    "business_value": "high",
    "ranking_difficulty": "low",
    "conversion_potential": "high",
    "content_effort": "low",
    "serp_weakness": "No existing competitor owns this exact term",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "Lead-magnet / calculator page",
    "reason": "Own a branded-term wedge outright",
    "priority_score": 16,
    "priority": "P0",
    "bucket": "easy-win"
   },
   {
    "primary": "why is my B2B services aged-receivables list short",
    "related": [
     "debtor underpaid invoice",
     "account owner payout dispute"
    ],
    "intent": "informational",
    "user_problem": "Immediate confusion moment after a light debtor check",
    "funnel": "TOFU",
    "business_value": "medium",
    "ranking_difficulty": "low",
    "conversion_potential": "medium",
    "content_effort": "low",
    "serp_weakness": "Forum-dominated, thin",
    "local_relevance": "low",
    "global_relevance": "high",
    "suggested_page_type": "How-to / FAQ page",
    "reason": "Easy win + strong lead-magnet fit",
    "priority_score": 14,
    "priority": "P0",
    "bucket": "easy-win"
   }
  ],
  "topical_authority_map": {
   "core_topics": [
    "LedgerClear core topics — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
    "Debtor-quirk & discrepancy classification library",
    "Account owner payout dispute resolution"
   ],
   "pillars": [
    {
     "name": "LedgerClear name — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
     "core_intent": "informational",
     "audience": "firm principals and ops managers",
     "conversion_goal": "Self-check / scan request",
     "supporting_pages": [
      "What a chargeback should look like on your ledger",
      "As-earned vs annualized leakage",
      "Debtor aged-receivables list formats explained"
     ],
     "internal_links": [
      "/",
      "/resources/self-check"
     ],
     "schema": [
      "Article",
      "BreadcrumbList",
      "FAQPage (where genuine)"
     ],
     "evidence_needed": [
      "Named reviewer",
      "Primary-source citations",
      "Worked example"
     ],
     "local_variants": [
      "[PLACEHOLDER] owner to complete"
     ],
     "national_variants": [
      "US-national (default)"
     ]
    },
    {
     "name": "Invoice Leakage Scan evidence & trust",
     "core_intent": "commercial",
     "audience": "firm principals",
     "conversion_goal": "Book a scan",
     "supporting_pages": [
      "Anatomy of a Leakage Scan",
      "One debtor, 12 months, $X missing"
     ],
     "internal_links": [
      "/#diagnostic",
      "/resources/evidence"
     ],
     "schema": [
      "Article",
      "FAQPage",
      "BreadcrumbList"
     ],
     "evidence_needed": [
      "Worked evidence artifact",
      "Reviewer credential"
     ],
     "local_variants": [],
     "national_variants": [
      "US-national"
     ]
    }
   ],
   "supporting_page_types": [
    "definition / glossary",
    "how-to workflow",
    "edge-case handling",
    "worked example",
    "FAQ",
    "comparison (only when honest)",
    "evidence artifact / template"
   ]
  },
  "site_architecture": {
   "homepage_strategy": "Single-page conversion-focused microsite; deep content lives in a future /resources hub",
   "main_nav": [
    "Pricing",
    "FAQ",
    "Operating blueprint"
   ],
   "footer_nav": [
    "Compliance",
    "Operating blueprint"
   ],
   "hubs": [
    {
     "name": "Resources hub",
     "purpose": "House long-form authority content",
     "url": "/resources (future)"
    }
   ],
   "url_patterns": [
    "/firm-overdue-invoice-invoice-recovery-desk/"
   ],
   "avoid_url_patterns": [
    "Thin per-debtor programmatic pages with no unique evidence"
   ]
  },
  "global_national": {
   "national_clusters": [
    "LedgerClear national clusters — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail."
   ],
   "linkable_assets": [
    "Invoice Leakage Self-Check calculator"
   ],
   "original_research_ideas": [
    "Aggregate pilot-cohort leakage statistics once cohort completes"
   ],
   "international_needed": false,
   "international_notes": "US-only B2B services distribution regulation; no international expansion in scope"
  },
  "local_seo": {
   "justified": false,
   "reason": "Buyers search by problem/AMS platform, not location",
   "gbp_categories_primary": [
    "[PLACEHOLDER] owner to complete"
   ],
   "gbp_categories_secondary": [
    "[PLACEHOLDER] owner to complete"
   ],
   "location_page_rules": [
    "[PLACEHOLDER] owner to complete"
   ],
   "citations": [
    "[PLACEHOLDER] owner to complete"
   ],
   "review_strategy": "No fabricated reviews; real testimonials only after pilot cohort completes with permission",
   "local_schema": [
    "[PLACEHOLDER] owner to complete"
   ]
  },
  "programmatic": {
   "recommended": false,
   "reason": "No large structured dataset justifies programmatic pages at launch",
   "rules": [
    "[PLACEHOLDER] owner to complete"
   ],
   "per_page_requirements": [
    "[PLACEHOLDER] owner to complete"
   ],
   "quality_gates": [
    "[PLACEHOLDER] owner to complete"
   ]
  },
  "page_templates": [
   {
    "page_type": "Pillar/service page",
    "purpose": "Convert a qualified visitor into a scan request",
    "target_intent": "commercial",
    "url_pattern": "/firm-overdue-invoice-invoice-recovery-desk/",
    "title_pattern": "{Brand} — {outcome} for {audience}",
    "meta_description_pattern": "{Brand} for {audience}. {outcome} — {price/SLA}.",
    "h1_pattern": "{Outcome-led headline}",
    "outline": [
     "Hero",
     "Stat strip",
     "Pain",
     "Deliverables",
     "How it works",
     "Pricing",
     "Proof",
     "FAQ",
     "Compliance"
    ],
    "above_the_fold": [
     "[PLACEHOLDER] owner to complete"
    ],
    "internal_links": [
     "Operating blueprint dossier"
    ],
    "schema": [
     "FAQPage",
     "Service"
    ],
    "cta_strategy": "Single primary CTA (scan request), secondary deep-links only",
    "conversion_elements": [
     "Guarantee beside pricing",
     "Honest placeholder proof"
    ],
    "trust_elements": [
     "Compliance section",
     "Named reviewer (pending owner action)"
    ],
    "faq_opportunities": [
     "Objection-derived FAQ"
    ],
    "media": [
     "[PLACEHOLDER] owner to complete"
    ],
    "quality_requirements": [
     "No banned phrases",
     "Contrast-checked palette"
    ],
    "anti_thin_rules": [
     "Every claim sourced or explicitly placeholdered"
    ]
   }
  ],
  "on_page_rules": {
   "title_tag": "Primary keyword + brand, under 60 chars",
   "meta_description": "Under 155 chars, states the outcome",
   "headings": "One H1, ordered H2/H3",
   "intro": "Answer the query in the first 2 sentences",
   "snippet_targeting": "Direct-answer paragraphs above the fold",
   "tables_lists": "Used for pricing and comparison content only",
   "images": "None required at launch (text-first authority content)",
   "internal_links": "Link every supporting page back to the pillar",
   "external_citations": "Link primary trade-press/vendor sources by name",
   "author_attribution": "Named reviewer bio on YMYL pages",
   "freshness": "Quarterly re-verification of dollar figures and vendor claims",
   "cta_placement": "End of every page + inline after the core answer",
   "mobile": "Mobile-first responsive layout",
   "avoid": [
    "Keyword stuffing",
    "Thin AI-generated filler"
   ]
  },
  "entity_seo": {
   "main_entities": [
    "LedgerClear",
    "Recovery Desk",
    "Invoice Leakage Scan"
   ],
   "related_entities": [
    "Comulate",
    "ReSource Pro",
    "Applied Recon",
    "AgencyBloc"
   ],
   "people": [
    "Named B2B services-accounting reviewer"
   ],
   "orgs": [
    "Big \"I\"",
    "state B2B services departments"
   ],
   "tools": [
    "EZLynx",
    "HawkSoft",
    "AMS360",
    "QQCatalyst",
    "Applied Epic"
   ],
   "regulations": [
    "State account owner-licensing statutes",
    "State collection-agency statutes"
   ],
   "problems": [
    "Invoice underpayment",
    "Account owner payout disputes"
   ],
   "solutions": [
    "Recovery Desk",
    "Invoice Leakage Scan"
   ],
   "processes": [
    "Intake",
    "Matching",
    "Discrepancy review",
    "Delivery"
   ],
   "alternatives": [
    "Enterprise SaaS",
    "BPO services",
    "Specialist bookkeeping firms"
   ],
   "synonyms": [
    "invoice recovery",
    "overdue-invoice recovery",
    "invoice recovery"
   ]
  },
  "schema_strategy": [
   {
    "type": "FAQPage",
    "where": "Homepage FAQ section",
    "required_fields": [
     "mainEntity",
     "acceptedAnswer"
    ],
    "caution": "Only genuine, answered questions — no fabricated Q&A"
   },
   {
    "type": "Service",
    "where": "Homepage, with a real-entity Organization provider",
    "required_fields": [
     "provider",
     "areaServed",
     "serviceType"
    ],
    "caution": "No review/rating/aggregateRating"
   }
  ],
  "internal_linking": {
   "pillar_to_cluster": "Every pillar links to its supporting pages",
   "cluster_to_pillar": "Every supporting page links back to its pillar",
   "cluster_to_cluster": "Cross-linked where the buyer journey naturally continues",
   "service_to_location": "N/A (no location pages)",
   "faq_to_commercial": "FAQ answers link to the pricing section",
   "breadcrumbs": "Present on all supporting content pages",
   "anchor_text_rules": [
    "Descriptive, not \"click here\""
   ]
  },
  "technical_seo": {
   "crawlability": "noindex at launch until owner-action facts close",
   "indexability": "Enabled post-launch review",
   "sitemaps": "Generated once indexable",
   "robots": "noindex,nofollow at launch",
   "canonicals": "Self-canonical",
   "pagination": "N/A",
   "faceted_nav": "N/A",
   "duplicate_control": "Single canonical URL per page",
   "redirects": "N/A at launch",
   "core_web_vitals": "LCP ≤2.5s, INP ≤200ms, CLS ≤0.1 budget enforced",
   "mobile": "Mobile-first responsive",
   "accessibility": "WCAG 2.2 AA",
   "js_seo": "Minimal JS, server-renderable content",
   "rendering": "Static self-contained HTML",
   "gsc_setup": "Pending owner action",
   "analytics_setup": "Pending owner action",
   "rank_tracking": "Pending owner action"
  },
  "eeat": {
   "author_bios": "Named reviewer bio pending owner action",
   "expert_reviewers": "Named B2B services-accounting reviewer",
   "editorial_policy": "Facts cited to primary/trade-press sources; vendor-sponsored claims labeled",
   "fact_checking": "Quarterly re-verification cadence",
   "credentials": [
    "B2B services-accounting reviewer credentials — pending owner action"
   ],
   "citations": "Every load-bearing statistic cited by source name",
   "first_hand_proof": [
    "Anonymized pilot-cohort teardowns once available"
   ],
   "update_cadence": "Quarterly",
   "monetization_disclosure": "Service pricing disclosed on the pricing section itself",
   "ymyl_notes": "Treated as YMYL due to financial-advice-adjacent content; no coverage/legal/tax advice given"
  },
  "ai_search": {
   "principles": [
    "Answer the exact question asked, directly and first",
    "Cite named sources, not vague claims"
   ],
   "tactics": [
    "FAQ schema on genuine FAQs",
    "Definitive per-topic guides answer engines can cite"
   ],
   "do_not": [
    "Fabricate statistics",
    "Claim certifications not held"
   ]
  },
  "conversion": {
   "primary_cta": "Start a free Invoice Leakage Scan",
   "secondary_cta": "See what's in the pack",
   "lead_magnets": [
    "Invoice Leakage Self-Check",
    "Debtor Aged-receivables list Survival Kit"
   ],
   "trust_elements": [
    "Guarantee + out-clause beside pricing",
    "Compliance section with licensing boundary"
   ],
   "per_page_paths": [
    {
     "path": "Homepage -> scan request",
     "page_type": "pillar"
    }
   ],
   "tracking": "data-event taxonomy per DESIGN-STANDARD §4"
  },
  "link_earning": {
   "digital_pr_ideas": [
    "Aggregate anonymized pilot-cohort leakage statistics as original research"
   ],
   "original_research": [
    "Average invoice leakage by debtor mix (post-pilot)"
   ],
   "directories": [
    "State Big \"I\"/PIA association vendor resource pages"
   ],
   "expert_contributions": [
    "Guest posts on AMS user-community blogs"
   ],
   "partnerships": [
    "CPA/bookkeeper referral partners"
   ],
   "avoid": [
    "Paid link schemes",
    "Low-quality directory submissions"
   ]
  },
  "roadmap_90d": [
   {
    "phase": "Launch",
    "goal": "Publish core microsite",
    "pages": [
     "Homepage"
    ],
    "keywords_targeted": [
     "overdue invoice invoice recovery service"
    ],
    "required_assets": [
     "Self-check lead magnet"
    ],
    "internal_links": [
     "[PLACEHOLDER] owner to complete"
    ],
    "difficulty": "low",
    "business_value": "high",
    "conversion_goal": "Scan requests",
    "why_first": "Foundation for every other page"
   }
  ],
  "roadmap_12m": [
   {
    "phase": "Authority hub",
    "goal": "Build /resources content cluster",
    "pages": [
     "Definitive guide",
     "Per-AMS how-tos"
    ],
    "keywords_targeted": [
     "debtor-specific aged-receivables list quirks"
    ],
    "required_assets": [
     "Anonymized pilot-cohort statistics"
    ],
    "internal_links": [
     "Homepage"
    ],
    "difficulty": "medium",
    "business_value": "medium",
    "conversion_goal": "Organic scan requests",
    "why_first": "Compounding organic channel per the GTM kit"
   }
  ],
  "priority_pages": [
   {
    "rank": 1,
    "page_title": "LedgerClear homepage",
    "slug": "/firm-overdue-invoice-invoice-recovery-desk/",
    "page_type": "pillar/service",
    "primary_keyword": "overdue invoice invoice recovery service",
    "secondary_keywords": [
     "invoice leakage scan"
    ],
    "intent": "commercial",
    "funnel": "BOFU",
    "business_value": "high",
    "difficulty": "medium",
    "conversion_potential": "high",
    "cta": "Start a free Invoice Leakage Scan",
    "schema": [
     "FAQPage",
     "Service"
    ],
    "internal_links": [
     "/resources (future)"
    ],
    "required_proof": [
     "[PLACEHOLDER] owner to complete"
    ],
    "why_opportunity": "Owns the branded wedge term outright",
    "production_priority": "P0",
    "scope": "Launch"
   }
  ],
  "competitor_gaps": {
   "typical_competitor_types": [
    "Enterprise SaaS vendor blogs",
    "BPO service pages",
    "Generic bookkeeping content"
   ],
   "common_weaknesses": [
    "Written for large clients, not the $500K-$5M firm",
    "No debtor-specific evidence"
   ],
   "how_to_beat_them": [
    "Publish small-firm-specific, debtor-specific, evidence-first content"
   ]
  },
  "metrics": {
   "weekly": [
    "Scan requests",
    "Self-check completions"
   ],
   "monthly": [
    "Organic scan requests",
    "Keyword ranking movement on P0 terms"
   ],
   "quarterly": [
    "Fresh-verification pass on all cited statistics"
   ],
   "annual": [
    "Full content-cluster audit"
   ]
  },
  "risks": [
   {
    "risk": "YMYL scrutiny on financial-outcome claims without named-reviewer attribution",
    "applies": true,
    "mitigation": "Named reviewer attribution and quarterly re-verification"
   },
   {
    "risk": "Competitor content targeting the same small-firm segment",
    "applies": true,
    "mitigation": "Named reviewer attribution and quarterly re-verification"
   }
  ],
  "first_20_pages": [
   "Homepage",
   "Invoice Leakage Self-Check",
   "Debtor Aged-receivables list Survival Kit",
   "LedgerClear first 20 pages — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail."
  ],
  "first_10_tech_fixes": [
   "Confirm noindex removed only after owner-action facts close",
   "Verify FAQ schema validates"
  ],
  "first_10_authority_actions": [
   "Publish first 3 educational posts",
   "Launch the self-check lead magnet",
   "Pitch first association webinar"
  ],
  "final_recommendation": "Launch noindexed until owner-action facts (entity, reviewer identity, trademark clearance) close; then pursue a narrow, evidence-first authority strategy targeting the $500K-$5M firm segment the enterprise SEO content ignores.",
  "disclaimers": [
   "LedgerClear does not provide legal advice, does not represent itself as a law firm, and does not collect consumer/personal debt under any circumstance."
  ]
 },
 "microsite": {
  "category": "B2B commercial collections / AR recovery",
  "shortTitle": "LedgerClear",
  "audience": "Owners and ops/finance leads of small US B2B service firms (agencies, consultancies, contractors, staffing firms, 5–75 employees) that invoice clients on Net 30/60/90 terms.",
  "problem": "56% of small businesses are owed money right now and 47% have invoices 30+ days overdue — the average business is owed about $17,000. Recovery odds fall from roughly 65% at 24 hours late to roughly 15% past 14 days, but founders have no AR function and dread chasing clients themselves.",
  "offer": "Free AR Health Scan → AR Concierge (15–90 days, 8–12% contingency; 10% flat during the pilot) → Standard Recovery Desk (91–180 days, 18–25%) → Aged/Placement Desk (180+ days, 30–40% via licensed partner) → Legal Referral (flat referral fee, partner attorney network only).",
  "faq": [
   {
    "q": "Is this debt collection that needs a license?",
    "a": "The AR Concierge tier (15–90 days) works as an extension of your own billing desk, under your brand voice, and is structured not to require a collection-agency license. Aged Accounts (180+ days) route to a licensed collection-agency partner. LedgerClear does not represent itself as a licensed third-party collector until it holds direct state licensing."
   },
   {
    "q": "Does the FDCPA apply?",
    "a": "The federal FDCPA (15 U.S.C. §1692a(5)) covers debts for personal, family, or household purposes — business-to-business debt is excluded by statutory definition. LedgerClear collects 100% commercial debt only and hard-blocks any consumer/personal Debtor."
   },
   {
    "q": "What happens to a disputed invoice?",
    "a": "No Contingency Fee is charged on any disputed portion until it resolves. The Account is moved to the exception queue and a Recovery Specialist — not AI — decides whether and how to pursue it."
   },
   {
    "q": "What if the Debtor still won’t pay?",
    "a": "Aged Accounts are documented and routed to a licensed collection-agency partner, or to the partner attorney network for a Legal Referral. LedgerClear never files suit or gives legal advice in-house."
   },
   {
    "q": "Is this the same as a collections agency?",
    "a": "No. A traditional agency is adversarial, charges 15–40%, and can take 120–180 days just to onboard. LedgerClear starts on the earlier, larger tier of merely-late invoices, under your own brand, priced from 8–12% — and pays nothing until money lands."
   }
  ],
  "process": [
   {
    "title": "Intake",
    "body": "Upload your aged-receivables list, invoices, contacts, and prior correspondence; every Debtor is confirmed 100% commercial."
   },
   {
    "title": "Score",
    "body": "Each Account gets a recovery-probability read and an Escalation Tier."
   },
   {
    "title": "Draft and approve",
    "body": "AI drafts the escalating reminder sequence; a Recovery Specialist approves tone and escalation before anything sends."
   },
   {
    "title": "Send and track",
    "body": "The cadence sends under your brand; Promise-to-Pay commitments are tracked and broken promises flagged."
   },
   {
    "title": "Recover or place",
    "body": "Cash lands in your account, or the Account is documented and routed to a licensed collection-agency partner."
   }
  ],
  "northStarCta": {
   "label": "Get your free AR Health Scan",
   "href": "#diagnostic",
   "secondary_label": "See the recovery tiers",
   "secondary_href": "#pricing"
  },
  "trust": {
   "standards": [
    "Done-for-you contingency recovery service — not a law firm, and not a licensed third-party collector until LedgerClear holds direct state licensing",
    "Every Debtor confirmed 100% commercial; consumer debt hard-blocked",
    "A human Recovery Specialist reviews and sends every message; AI never contacts a Debtor directly"
   ],
   "response_time": "AR Health Scan returned within 24–48 hours of a complete aged-receivables list",
   "data_handling": "Signed DPA per Client, least-privilege access, retention limits, no Debtor PII stored beyond necessity"
  },
  "hook": "You’re owed money on overdue invoices — and chasing your own clients is the last thing you want to do.",
  "sub_headline": "Send your aged-receivables list. Get a recovery-probability read per Account, then a done-for-you follow-up run — priced only on what actually gets collected. No collect, no fee.",
  "dream_outcome": "Overdue invoices turn back into cash in the bank, without you sending one more awkward “just checking in” email or turning a client relationship adversarial.",
  "specific_pains": [
   "Overdue Net 30/60/90 invoices with no AR function to chase them",
   "Founder time lost to awkward reminder emails",
   "Recovery odds decaying the longer an Account ages",
   "Traditional agencies too expensive/slow for small, early-stage invoices",
   "Bad debt quietly written off"
  ],
  "cost_of_inaction": "Invoices quietly age out of recoverability and get written off as bad debt — working capital the firm already earned, gone.",
  "mechanism": {
   "name": "The LedgerClear recovery-run engine",
   "steps": [
    {
     "title": "Send your aged-receivables list",
     "body": "Upload your aged-receivables list, invoice PDFs, Debtor contacts, and any prior correspondence. Every Debtor is confirmed 100% commercial before any work starts — consumer debt is hard-blocked."
    },
    {
     "title": "Score and draft",
     "body": "Each Account is scored for recovery probability and assigned an Escalation Tier; AI drafts the escalating reminder sequence in your brand voice."
    },
    {
     "title": "Human approve and send",
     "body": "A Recovery Specialist approves tone and escalation, then the cadence sends under your brand. Every Promise-to-Pay is logged; broken promises are flagged the next day."
    },
    {
     "title": "Recover or place",
     "body": "Confirmed cleared funds close the Account (you owe a Contingency Fee only on what landed). Aged Accounts are documented and routed to a licensed collection-agency partner."
    }
   ]
  },
  "offer_stack": [
   {
    "item": "AR Health Scan",
    "note": "Free recovery-probability read per Account — no obligation, no Contingency Fee triggered"
   },
   {
    "item": "AR Concierge (15–90 days past due)",
    "note": "8–12% contingency, 10% flat during the pilot; branded reminder cadence + Promise-to-Pay tracking"
   },
   {
    "item": "Standard Recovery Desk (91–180 days past due)",
    "note": "18–25% contingency; firmer LedgerClear-attributed cadence + Recovery Specialist negotiation"
   },
   {
    "item": "Aged/Placement Desk (180+ days past due)",
    "note": "30–40% contingency via a licensed collection-agency partner"
   },
   {
    "item": "Monthly AR Health Dashboard",
    "note": "$99–$249/mo optional flat add-on, billed independent of any recovery outcome"
   }
  ],
  "guarantee": "No collect, no fee. If an Account recovers $0 in a given Escalation Tier, you owe $0 for that Account in that tier — no minimum, no setup fee, no cancellation fee. No fee is ever charged on disputed amounts until they resolve.",
  "urgency": "Recovery-probability decay is measurable and fast: the highest-leverage action is contacting a late-paying Debtor within hours, not weeks.",
  "objections": [
   {
    "q": "I don’t want to damage the client relationship.",
    "a": "Early-stage outreach goes out under your own brand voice, professional and procedural — no debt-collector clichés. A Recovery Specialist approves every message before it sends."
   },
   {
    "q": "My invoices are too small for a real collection agency.",
    "a": "That’s exactly the tier LedgerClear serves — the merely-late $500–$15,000 Accounts a traditional agency won’t touch economically."
   },
   {
    "q": "How do I know I’ll actually recover anything?",
    "a": "You don’t pay unless you do. No collect, no fee. The free AR Health Scan tells you which Accounts are still worth chasing before you commit to anything."
   }
  ],
  "who_this_is_not_for": [
   "[PLACEHOLDER] owner to complete"
  ],
  "proof_pillars": [
   {
    "title": "Sourced market figures",
    "body": "56% of small businesses owed money, 47% with invoices 30+ days overdue, ~$17k average owed (QuickBooks/Intuit 2025); $15.2B US collections market (IBISWorld 2025)."
   },
   {
    "title": "Statutory basis",
    "body": "The FDCPA B2B carve-out is cited precisely (15 U.S.C. §1692a(5)); LedgerClear collects commercial debt only."
   },
   {
    "title": "Honest proof placeholders",
    "body": "Recovery-rate results are shown as dashed placeholders until the first pilot cohort completes — never fabricated testimonials or metrics."
   }
  ],
  "stakes_line": "Every day an Account ages past 14 days, the odds of ever collecting it drop — and a traditional collection agency won’t touch a $2,000–$15,000 invoice without a 15–40% fee and a 120–180 day onboarding.",
  "deliverable": "A recovery-probability-scored action plan per Account, a human-approved reminder cadence sent under your brand, Promise-to-Pay tracking, and a weekly Recovered Dollars Report.",
  "unit_of_work": "One Account (one overdue B2B invoice) moved through its Escalation Tier to Recovered Dollars or a documented Placement.",
  "lexicon": {
   "regulator": "State B2B services Departments",
   "regulator_full": "State B2B services Departments (account owner-licensing and collection-agency statute scope)",
   "statute": "State account owner-licensing and collection-agency statutes",
   "statute_frame": "the intake-to-pack workflow where an unrecoverd cycle is a self-inflicted forfeiture risk on the firm's own earned invoices.",
   "persona": "Firm Principal",
   "persona_moment": "You're the principal of a 10-person independent firm with 34 debtor engagements. A account owner just emailed asking why their payout looks light again, and nobody has ever verified a single debtor aged-receivables list against your own client portfolio.",
   "trigger_moment": "a account owner payout dispute, a debtor check that 'looks light,' a tax-season book cleanup, or an firm-sale diligence request",
   "enforcement_stakes": "invoices age past the point any debtor will investigate them, and disputes go unresolved (outcomes vary case-by-case and are never guaranteed)",
   "retention": "the full audit trail of every recovery cycle and debtor inquiry",
   "cta_verb": "Start a free Invoice Leakage Scan",
   "intake_checklist": [
    "AMS export of your full invoice/invoice client portfolio",
    "Debtor/partner engagement list",
    "Last 3 months of debtor aged-receivables lists (PDF, portal CSV, or paper)",
    "Signed debtor-communication authorization"
   ],
   "regulator_faqs": [
    {
     "q": "Do debtors know LedgerClear is inquiring on our behalf?",
     "a": "Yes — every debtor inquiry states it is sent on your firm's behalf under your written authorization, which you control and can revoke at any time."
    },
    {
     "q": "Will a debtor treat a LedgerClear-drafted inquiry differently than one you send yourself?",
     "a": "No — it's evaluated the same either way. What changes is completeness and evidence: a reviewer-approved inquiry cites the specific aged-receivables list line and expected amount, which resolves faster than an unevidenced question."
    }
   ],
   "trust_standards_specific": [
    "[PLACEHOLDER] owner to complete"
   ],
   "Account": "A single overdue B2B invoice placed with LedgerClear for recovery work; the aggregate root of the domain model.",
   "Client": "The small B2B service firm that hires LedgerClear and receives Recovered Dollars, minus the Contingency Fee.",
   "Debtor": "The Client's own customer who owes the unpaid invoice; must be 100% commercial/B2B, never a consumer (hard gate).",
   "Recovery Specialist": "The human who approves every Escalation Tier change, makes every phone call, and negotiates every settlement. AI drafts; the Recovery Specialist decides and sends.",
   "AR Health Scan": "The free diagnostic: LedgerClear scores a Client's aged-receivables list and returns a recovery-probability read per Account.",
   "Escalation Tier": "The Account's stage on the recovery ladder: AR Concierge → Standard Recovery Desk → Aged/Placement Desk → Legal Referral.",
   "Promise-to-Pay": "A Debtor’s logged commitment to pay a specific amount by a specific date; flagged the day it is broken.",
   "Contingency Fee": "The percentage of Recovered Dollars LedgerClear charges for an Account’s Escalation Tier. No collect, no fee.",
   "Recovered Dollars Report": "The weekly Client-facing report showing dollars collected per Account, delivered every Friday during an active engagement.",
   "Placement": "Routing an Account to a licensed collection-agency partner (180+ days) or the partner attorney network (Legal Referral); never performed in-house until LedgerClear holds direct state licensing."
  },
  "proof_angle": {
   "id": "honest-proof",
   "headline": "The numbers on this page are sourced; the recovery results are shown as honest placeholders until the first pilot cohort completes.",
   "lever": "LedgerClear cites market and statute figures by name and marks every unproven recovery claim as a dashed placeholder, never a fabricated testimonial.",
   "outcome_verb": "trust",
   "outcome_frame": "trust a contingency service you only pay when money actually lands",
   "proof_promise": "No collect, no fee — and no invented case study standing in for results LedgerClear has not yet earned."
  },
  "indexable": true,
  "ubiquitousLanguage": {
   "audience": "independent P&C-led B2B service firm principals and ops/accounting managers, $500K-$5M annual invoice revenue, 15-80 debtor engagements",
   "domain": "independent B2B service firm invoice recovery and recovery",
   "deliverable": "Monthly Recovery Pack + reviewer release",
   "reviewer": "B2B services-accounting reviewer",
   "record": "recovery-cycle history register",
   "unit_of_work": "recovery cycle",
   "cta_primary": "Start a free Invoice Leakage Scan",
   "cta_secondary": "See what's in the pack",
   "regulator": "State B2B services Departments",
   "regulator_full": "State B2B services Departments (account owner-licensing and collection-agency statute scope)",
   "statute": "State account owner-licensing and collection-agency statutes",
   "trigger_moment": "a account owner payout dispute, a debtor check that looks light, or a tax-season/M&A diligence request",
   "event_intake_started": "agency_direct_bill_invoice_recovery_desk_intake_started",
   "event_conversation_requested": "agency_direct_bill_invoice_recovery_desk_conversation_requested",
   "Account": "A single overdue B2B invoice placed with LedgerClear for recovery work; the aggregate root of the domain model.",
   "Client": "The small B2B service firm that hires LedgerClear and receives Recovered Dollars, minus the Contingency Fee.",
   "Debtor": "The Client's own customer who owes the unpaid invoice; must be 100% commercial/B2B, never a consumer (hard gate).",
   "Recovery Specialist": "The human who approves every Escalation Tier change, makes every phone call, and negotiates every settlement. AI drafts; the Recovery Specialist decides and sends.",
   "AR Health Scan": "The free diagnostic: LedgerClear scores a Client's aged-receivables list and returns a recovery-probability read per Account.",
   "Escalation Tier": "The Account's stage on the recovery ladder: AR Concierge → Standard Recovery Desk → Aged/Placement Desk → Legal Referral.",
   "Promise-to-Pay": "A Debtor’s logged commitment to pay a specific amount by a specific date; flagged the day it is broken.",
   "Contingency Fee": "The percentage of Recovered Dollars LedgerClear charges for an Account’s Escalation Tier. No collect, no fee.",
   "Recovered Dollars Report": "The weekly Client-facing report showing dollars collected per Account, delivered every Friday during an active engagement.",
   "Placement": "Routing an Account to a licensed collection-agency partner (180+ days) or the partner attorney network (Legal Referral); never performed in-house until LedgerClear holds direct state licensing."
  }
 },
 "evidence": [
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e1",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "Identity",
   "claim_or_finding": "Operating entity declared: Your Deputy, Obuke LLC, support@yourdeputy.com; LedgerClear is its service brand.",
   "status": "verified",
   "evidence": "Owner-supplied entity and support email; reflected in the landing-page footer and disclaimers.",
   "verification_command": "Owner submits entity + jurisdiction pack.",
   "fix_owner": "owner",
   "remediation": "Resolved — entity and contact declared. Remaining owner action: formal trademark/entity-name clearance for LedgerClear before scaling.",
   "severity": "info"
  },
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e2",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "Trust boundary",
   "claim_or_finding": "Public page is a validation microsite for a documentation/recovery-support service; not a licensed account owner, collection agency, or law firm.",
   "status": "verified",
   "evidence": "Microsite carries an explicit trust-boundary and scope disclaimer block.",
   "verification_command": "Inspect /firm-overdue-invoice-invoice-recovery-desk/ for trust boundary.",
   "fix_owner": "engineering",
   "remediation": "None — enforced by template.",
   "severity": "low"
  },
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e3",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "SEO integrity",
   "claim_or_finding": "No fabricated review, rating, or aggregateRating schema; no unclaimed-dollar-figure claims without primary-source support. A Service/Organization node is permitted because it reflects the real operating entity (Your Deputy, Obuke LLC).",
   "status": "verified",
   "evidence": "FAQPage + Service (real-entity Organization provider) schema planned; no review/rating/aggregateRating; marketing-compliance gate applied.",
   "verification_command": "View SEO Factory row for firm-overdue-invoice-invoice-recovery-desk",
   "fix_owner": "engineering",
   "remediation": "None — enforced by SEO factory.",
   "severity": "low"
  },
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e4",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "Competitor/customer attribution correction",
   "claim_or_finding": "The source blueprint attributes The Baldwin Group to Comulate's customer base (\"sold to large clients like Baldwin Group and IMA\"). Fresh verification (Ascend customer case study, corroborated by ReSource Pro materials) shows Baldwin Group's overdue-invoice automation runs on Ascend + ReSource Pro's Overdue invoice Complete, not Comulate.",
   "status": "verified",
   "evidence": "Ascend customer case study (\"The Baldwin Group's seamless two month transition for overdue invoice processing\"); ReSource Pro/Ascend Overdue invoice Complete press materials (Apr 2025).",
   "verification_command": "Re-fetch useascend.com and resourcepro.com Overdue invoice Complete pages; compare stated customer roster against this build's copy.",
   "fix_owner": "engineering",
   "remediation": "Corrected everywhere the Baldwin Group/Comulate pairing appeared in this build's artifacts (business-plan.md fresh-verification notes; landing page and DNA avoid naming Baldwin Group as a Comulate customer). Comulate's broader budget-validation claim (large-client customer base, Workday Ventures backing) stands independent of this correction.",
   "severity": "medium"
  },
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e5",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "Competitive landscape freshness",
   "claim_or_finding": "Applied Systems and Comulate were in active federal litigation as of Feb 2026 (a sandbox-account dispute); the court granted Applied narrow injunctive relief and rejected its broader reverse-engineering/derivative-product claims, leaving Comulate's antitrust counterclaim pending. Comulate remains operational.",
   "status": "verified",
   "evidence": "Comulate's own published summary of the Feb 12, 2026 ruling; Applied Systems May 2026 press release confirming continued Applied Recon investment.",
   "verification_command": "Re-fetch comulate.com/applied-vs-comulate and appliedsystems.com press releases for case status updates.",
   "fix_owner": "owner",
   "remediation": "Noted in business-plan.md as a fresh-verification finding; does not change the blueprint's core recommendation (both vendors remain active, validating enterprise-tier budget) but confirms the AMS-bundling risk (Risk Register R1/R5) is live, not hypothetical.",
   "severity": "low"
  },
  {
   "id": "firm-overdue-invoice-invoice-recovery-desk-e6",
   "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
   "area": "Licensing boundary",
   "claim_or_finding": "LedgerClear claim or finding — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail.",
   "status": "verified",
   "evidence": "Standard account owner-licensing scope (selling/soliciting/negotiating) as described on NAIC and state DOI account owner-licensing pages; verbatim disclaimer present on the landing page and compliance-checklist.md.",
   "verification_command": "Inspect /firm-overdue-invoice-invoice-recovery-desk/ compliance section and builds/firm-overdue-invoice-invoice-recovery-desk/compliance-checklist.md for verbatim disclaimer.",
   "fix_owner": "engineering",
   "remediation": "None — enforced by template and manual review.",
   "severity": "low"
  }
 ],
 "seo_pages": {
  "id": "seo-firm-overdue-invoice-invoice-recovery-desk",
  "business_slug": "firm-overdue-invoice-invoice-recovery-desk",
  "route": "/firm-overdue-invoice-invoice-recovery-desk",
  "title": "LedgerClear — overdue-invoice invoice recovery & recovery desk",
  "description": "LedgerClear for independent P&C and benefits firms. A recoverd, reviewer-signed Invoice Ledger and chased Discrepancy Docket from your own debtor aged-receivables lists — flat fee, 5 business days.",
  "canonical": "/firm-overdue-invoice-invoice-recovery-desk",
  "og_title": "LedgerClear — Overdue-invoice Invoice Recovery & Recovery Desk for Independent B2B services Firms",
  "og_description": "LedgerClear for independent P&C and benefits firms. A recoverd, reviewer-signed Invoice Ledger and chased Discrepancy Docket from your own debtor aged-receivables lists — flat fee, 5 business days.",
  "schema_type": "FAQPage",
  "schema_status": "pending-owner-facts",
  "sitemap_include": false,
  "noindex": true
 },
 "vertical_style": {
  "accent": "ledger-teal",
  "signature": "Ledger-desk tabs with a discrepancy-status chip",
  "layout": "Recovery desk index",
  "anti": "LedgerClear anti — see the operating docs (business-plan.md, ai-engine-spec.md, compliance-checklist.md) for the authoritative detail."
 },
 "canva": {
  "slug": "firm-overdue-invoice-invoice-recovery-desk",
  "territory": "Ledger Desk",
  "family": {
   "id": "B2B services-back-office",
   "name": "B2B services distribution / back-office finance",
   "motion": "calm"
  },
  "tokens": {
   "brand": "216 64% 28%",
   "brand-fg": "40 30% 97%",
   "surface": "40 30% 97%",
   "ink": "216 30% 14%",
   "muted": "216 14% 40%",
   "accent": "38 88% 46%"
  },
  "type": {
   "display": "Georgia",
   "body": "Source Sans 3",
   "fonts_url": ""
  },
  "scale": {
   "h1": "clamp(2.5rem, 5.5vw, 4.25rem)",
   "h2": "clamp(1.75rem, 3vw, 2.5rem)",
   "h3": "clamp(1.25rem, 2vw, 1.5rem)",
   "body": "clamp(1rem, 1.1vw, 1.125rem)",
   "small": "0.8125rem",
   "tracking_display": "-0.02em",
   "tracking_body": "-0.005em",
   "weight_display": 700,
   "weight_body": 450
  },
  "spacing": {
   "card_padding": "1.75rem",
   "card_radius": "0.35rem",
   "card_shadow": "0 0 0 1px hsl(var(--ink) / 0.08)",
   "section_gap": "clamp(3.5rem, 8vw, 6.5rem)",
   "hero_gap": "clamp(1.25rem, 2vw, 2rem)"
  },
  "layout": {
   "hero": "split-primary",
   "card": "elevated-soft",
   "cta": "solid-brand",
   "archetype": "ledger",
   "card_silhouette": "flat-outline",
   "button_geometry": "rounded"
  },
  "background": {
   "hero_gradient": "radial-gradient(1100px 600px at 8% -10%, hsl(216 64% 28% / 0.14), transparent 60%), radial-gradient(800px 500px at 92% 0%, hsl(38 88% 46% / 0.10), transparent 55%)",
   "cta_gradient": "linear-gradient(135deg, hsl(216 64% 28%), hsl(38 88% 46%))",
   "section_wash": "linear-gradient(180deg, hsl(40 30% 97%) 0%, hsl(216 64% 28% / 0.04) 100%)"
  },
  "motif": "Aged-receivables list-stack-to-ledger-row cover art"
 },
 "capabilities": {
  "marketing": true,
  "portal": false,
  "ops": true,
  "chatbot": false,
  "payments": false
 },
 "generated_at": "2026-07-15T00:00:00Z",
 "checksum": "1c12c2afcd537bbb"
}