{
 "groups": [
  {
   "key": "A",
   "name": "Entry, Co-Brand & Pre-Qual"
  },
  {
   "key": "B",
   "name": "Borrower Application (URLA/1003)"
  },
  {
   "key": "C",
   "name": "Connected Data & Verification"
  },
  {
   "key": "D",
   "name": "Documents"
  },
  {
   "key": "E",
   "name": "Disclosures, eSign & Closing"
  },
  {
   "key": "F",
   "name": "The AI Loan Officer Clone"
  },
  {
   "key": "G",
   "name": "Loan Officer Experience"
  },
  {
   "key": "H",
   "name": "Team, Hierarchy & Leadership"
  },
  {
   "key": "I",
   "name": "Partner (Realtor / Builder)"
  },
  {
   "key": "J",
   "name": "Stages, Automation & CRM"
  },
  {
   "key": "K",
   "name": "Compliance & Security (cross-cutting)"
  },
  {
   "key": "L",
   "name": "Platform & Integrations (cross-cutting)"
  },
  {
   "key": "M",
   "name": "Language, Programs & Rollout"
  },
  {
   "key": "N",
   "name": "⭐ The Payment Playground — calculators as the front door"
  }
 ],
 "items": [
  {
   "id": "A1",
   "group": "A",
   "name": "Co-branded application link/landing",
   "accept": "A link with `?lo=&partner=` renders correct dual-brand page + correct disclosures, server-resolved",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "A2",
   "group": "A",
   "name": "Rich link-unfurl card",
   "accept": "Pasting the link in iMessage/RCS/WhatsApp shows a branded card, not a URL",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "A3",
   "group": "A",
   "name": "QR code generation",
   "accept": "LO/realtor generate a scannable QR to the co-branded app",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "A4",
   "group": "A",
   "name": "Installable PWA / home-screen icon",
   "accept": "Borrower can \"add to home screen\"; icon + splash branded",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "A5",
   "group": "A",
   "name": "90-second pre-qual",
   "accept": "Borrower gets an affordability/payment estimate with no SSN/hard pull",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "A6",
   "group": "A",
   "name": "Soft-pull pre-qual (optional)",
   "accept": "With consent, a soft pull returns a real estimate, no score impact",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "A7",
   "group": "A",
   "name": "Instant pre-qual letter",
   "accept": "Borrower/realtor gets a branded pre-qual letter from the pre-qual",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "A8",
   "group": "A",
   "name": "Campaign/source attribution",
   "accept": "Every entry carries LO+partner+campaign attribution downstream",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B1",
   "group": "B",
   "name": "Progressive URLA §1–§8",
   "accept": "Full redesigned 1003 collected via one-question-at-a-time flow",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B2",
   "group": "B",
   "name": "Smart skip logic",
   "accept": "Irrelevant sections/fields never shown (W-2 vs self-employed, purchase vs refi)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B3",
   "group": "B",
   "name": "Auto-save + cross-device resume",
   "accept": "Refresh/switch device resumes at exact spot",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B4",
   "group": "B",
   "name": "Real-time validation",
   "accept": "Field errors are specific and kind, not a red wall",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B5",
   "group": "B",
   "name": "Co-borrower independent invite",
   "accept": "Co-borrower gets own link, completes own sections independently",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B6",
   "group": "B",
   "name": "HMDA §8 demographics",
   "accept": "Correct framing + \"decline to provide\" option; stored apart from decisioning",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B7",
   "group": "B",
   "name": "MISMO 3.4 / ULAD output",
   "accept": "Application exports as a valid MISMO 3.4 file",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B8",
   "group": "B",
   "name": "Plain-language \"what's this?\"",
   "accept": "Every jargon term has one-tap explanation (routes to clone)",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "B9",
   "group": "B",
   "name": "Save-and-resume link",
   "accept": "Borrower can leave and return via secure re-entry",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B10",
   "group": "B",
   "name": "**⭐ Two-year history trigger — residence**",
   "accept": "<24 mo at current address auto-inserts prior-address blocks until 24 mo is covered; gaps blocked with a plain-language reason",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B11",
   "group": "B",
   "name": "**⭐ Two-year history trigger — employment**",
   "accept": "<24 mo at current employer auto-inserts prior-employer blocks until 24 mo is covered; gap-in-employment explanation captured",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B12",
   "group": "B",
   "name": "Marital status + dependents",
   "accept": "§1a marital status; dependent count auto-generates one age/DOB field per dependent, no manual \"add row\" hunting",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B13",
   "group": "B",
   "name": "Typed, native-keyboard fields",
   "accept": "Phone renders a phone keypad and validates as a phone; email validates as email; SSN masked; currency formats as you type; dates use a native picker",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B14",
   "group": "B",
   "name": "§1e other income sources",
   "accept": "Rental, alimony/child support received, retirement, bonus/commission/overtime, self-employment K-1 — each with its own follow-up set",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B15",
   "group": "B",
   "name": "§3 Real Estate Owned schedule",
   "accept": "Each owned property with value, mortgage, taxes/ins/HOA, and rental income; auto-computes net rental",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B16",
   "group": "B",
   "name": "§7 Military service",
   "accept": "Active duty / veteran / surviving spouse; drives VA eligibility, COE request and funding-fee exemption path",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B17",
   "group": "B",
   "name": "§5 Declarations, all of them",
   "accept": "Occupancy, ownership interest, family relationship to seller, borrowed down payment, other mortgage/new credit, subject-to lien, co-signer, outstanding judgments, delinquency/default, party to lawsuit, conveyed title in lieu, pre-foreclosure/short sale, foreclosure, bankruptcy w/ chapter — each with conditional follow-ups",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B18",
   "group": "B",
   "name": "§6 Acknowledgments &amp; agreements",
   "accept": "Presented as readable consent, not a wall; each acknowledgment individually timestamped to the ledger",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B19",
   "group": "B",
   "name": "Language preference",
   "accept": "The URLA language-preference question, asked and stored — and it actually drives the borrower's UI language (ties M1)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B20",
   "group": "B",
   "name": "Housing expense capture",
   "accept": "Current rent/own, monthly housing expense, and proposed housing expense — the fields most often silently wrong",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B21",
   "group": "B",
   "name": "Live 1003 completeness meter",
   "accept": "Borrower and LO both see which of the 9 sections are complete, and exactly what is missing — not a generic percent",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "B22",
   "group": "B",
   "name": "**⭐ Concurrent applications, one person**",
   "accept": "A borrower can run **more than one live application at once** (e.g. refis on two rentals). **Person owns Loans, not the reverse** — one identity, many files (10.2a)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B23",
   "group": "B",
   "name": "**⭐ Borrower file switcher**",
   "accept": "A clear \"which property are we working on?\" control at the top of the app, each file with its own status and needs list — cross-file confusion is how the right document lands on the wrong loan",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B24",
   "group": "B",
   "name": "Person-level prefill",
   "accept": "Identity, address history and employment carry into a second application, so file two starts largely pre-filled instead of blank",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B25",
   "group": "B",
   "name": "**⭐ Per-loan isolation of file-specific data**",
   "accept": "Each loan has **its own URLA, property, declarations, disclosures, TRID clock and credit authorization.** Reuse of a single hard pull across files is **counsel's call, not a developer's inference**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "B26",
   "group": "B",
   "name": "Cross-file document de-duplication",
   "accept": "Ask for the pay stub once; satisfy it on both files; show the borrower plainly that it counted twice",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "C1",
   "group": "C",
   "name": "Asset connection (VOA)",
   "accept": "Borrower links bank; assets populate + document",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C2",
   "group": "C",
   "name": "Income/employment connection (VOIE)",
   "accept": "Payroll connection populates income/employment",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C3",
   "group": "C",
   "name": "D1C/AIM-eligible verification",
   "accept": "Verified data flagged for rep-and-warrant relief",
   "pri": "P1",
   "top": "P1",
   "phase": 1
  },
  {
   "id": "C4",
   "group": "C",
   "name": "Soft→hard credit sequence",
   "accept": "Soft at pre-qual, hard at application, both consent-logged",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C5",
   "group": "C",
   "name": "Trigger-lead consent + education",
   "accept": "Consent posture captured; borrower education card shown",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C6",
   "group": "C",
   "name": "Liabilities pre-fill from credit",
   "accept": "Credit liabilities pre-filled; borrower confirms/annotates",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C7",
   "group": "C",
   "name": "Manual fallback everywhere",
   "accept": "Any connection failure falls back to upload+extract, never dead-ends",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C8",
   "group": "C",
   "name": "**⭐ Source of funds, per account**",
   "accept": "Every asset used for down payment / closing / reserves is tagged to its source — savings, checking, retirement, sale of asset, **gift**, grant, borrowed — and to a specific named account",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C9",
   "group": "C",
   "name": "**⭐ Gift-funds path**",
   "accept": "Selecting \"gift\" triggers donor name, relationship, amount, whether funds are transferred yet, and auto-issues the gift-letter template to the donor for e-signature",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "C10",
   "group": "C",
   "name": "Large-deposit pre-flight",
   "accept": "A deposit inconsistent with income is flagged *at application*, with a kind ask for the explanation — before underwriting asks",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "C11",
   "group": "C",
   "name": "Reserves &amp; funds-to-close math",
   "accept": "Live tally of verified funds vs estimated cash-to-close, so the borrower is never surprised at the end",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "D1",
   "group": "D",
   "name": "Living needs list",
   "accept": "Borrower sees always-current, plain-language needs w/ status",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D2",
   "group": "D",
   "name": "Phone-camera capture",
   "accept": "Camera captures, deskews, enhances a document",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D3",
   "group": "D",
   "name": "Auto-classification",
   "accept": "Captured doc auto-typed (paystub/W-2/statement/ID)",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "D4",
   "group": "D",
   "name": "Auto-extraction + reconciliation",
   "accept": "Extracted figures cross-checked; mismatches flagged to LO",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "D5",
   "group": "D",
   "name": "Needs-list auto-update from LOS conditions",
   "accept": "New LOS condition appears as a plain-language needs item",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D6",
   "group": "D",
   "name": "Re-request loop",
   "accept": "Underwriter re-request becomes a specific, kind borrower ask",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D7",
   "group": "D",
   "name": "Secure document vault",
   "accept": "All docs encrypted, access-scoped, audit-logged",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D8",
   "group": "D",
   "name": "**⭐ Straight-through to processor &amp; underwriter**",
   "accept": "Every document lands in the LOS **already classified, named to convention and attached to its condition** — the processor grabs it where they already work, with no re-upload and no renaming",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "D9",
   "group": "D",
   "name": "Processor/underwriter-side visibility",
   "accept": "Processing and UW see document status, extraction results and the borrower's own words on any exception — without opening the POS",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "E1",
   "group": "E",
   "name": "E-SIGN consent + ability-to-access",
   "accept": "Consent captured w/ hardware/software disclosure before e-delivery",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "E2",
   "group": "E",
   "name": "TRID clock engine",
   "accept": "Six-piece trigger timestamped; LE-in-3-days SLA driven",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "E3",
   "group": "E",
   "name": "Intent-to-proceed (separate event)",
   "accept": "ITP captured as distinct, timestamped, post-LE action",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "E4",
   "group": "E",
   "name": "Changed-circumstance re-disclosure",
   "accept": "Valid CC logged; revised LE supported w/ tolerance baseline",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "E5",
   "group": "E",
   "name": "CD 3-day rule enforcement",
   "accept": "Closing can't be scheduled violating the CD window",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "E6",
   "group": "E",
   "name": "eSign w/ tamper-evident trail",
   "accept": "Signatures carry intent/timestamp/device, per-signer",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "E7",
   "group": "E",
   "name": "Closing scheduler",
   "accept": "Borrower picks a slot; title/notary coordinated",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "E8",
   "group": "E",
   "name": "RON eClose",
   "accept": "Full remote online notarization where legal (49 states+DC)",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "E9",
   "group": "E",
   "name": "Hybrid eClose",
   "accept": "Pre-sign digital + wet-sign exceptions at table",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "E10",
   "group": "E",
   "name": "eNote + MERS eRegistry",
   "accept": "SMART Doc eNote, sealed, registered, lender as controller",
   "pri": "P2",
   "top": "P2",
   "phase": 3
  },
  {
   "id": "F1",
   "group": "F",
   "name": "Docked text clone (Tier 1)",
   "accept": "LO-branded assistant on every screen; answers from approved KB",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F2",
   "group": "F",
   "name": "RAG grounding + cite-or-refuse",
   "accept": "No approved source → deflect+escalate, never improvise",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F3",
   "group": "F",
   "name": "Guardrail charter enforcement",
   "accept": "Rate/approval/advice questions blocked + routed, provably",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F4",
   "group": "F",
   "name": "Output screening (LLM-judge)",
   "accept": "Every response screened pre-delivery against charter",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F5",
   "group": "F",
   "name": "Prompt-injection resistance",
   "accept": "\"Ignore your rules\" fails closed",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F6",
   "group": "F",
   "name": "Warm escalation + LO alert",
   "accept": "Escalation hands off in LO voice + fires contextual LO alert",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F7",
   "group": "F",
   "name": "Immutable clone audit log",
   "accept": "Every exchange logged w/ sources+verdict, PII-redacted",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F8",
   "group": "F",
   "name": "AI disclosure to borrower",
   "accept": "Borrower clearly told it's AI; captured in consent ledger",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "F9",
   "group": "F",
   "name": "Per-LO voice/style profile",
   "accept": "Clone answers in the assigned LO's real tone",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "F10",
   "group": "F",
   "name": "Voice reply (Tier 2)",
   "accept": "Tap to hear answer in LO's consented cloned voice",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "F11",
   "group": "F",
   "name": "Video avatar (Tier 3, opt-in)",
   "accept": "Per-LO opt-in talking head w/ biometric release; deactivates on departure",
   "pri": "P2",
   "top": "P2",
   "phase": 3
  },
  {
   "id": "F12",
   "group": "F",
   "name": "Supervision dashboard",
   "accept": "Compliance can sample/flag/correct conversations",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "G1",
   "group": "G",
   "name": "Prioritized pipeline",
   "accept": "Loans sorted by what's at risk, one-tap actions",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G2",
   "group": "G",
   "name": "<60s application alert",
   "accept": "LO notified within 60s of submit, with context",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G3",
   "group": "G",
   "name": "Stall/abandonment alert",
   "accept": "LO alerted when borrower stalls mid-app",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G4",
   "group": "G",
   "name": "Co-brand builder",
   "accept": "LO creates compliant co-branded link in <60s",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G5",
   "group": "G",
   "name": "Pre-approval letter generator",
   "accept": "Branded, tamper-evident letter from phone in seconds",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G6",
   "group": "G",
   "name": "\"Show me what they see\" co-pilot",
   "accept": "LO opens borrower's exact view (read-only)",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "G7",
   "group": "G",
   "name": "LO mobile app parity",
   "accept": "All LO functions work on phone",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G8",
   "group": "G",
   "name": "First-touch SLA visibility",
   "accept": "LO+manager see whether first-touch met SLA",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "G9",
   "group": "G",
   "name": "**⭐ Live application data view**",
   "accept": "LO sees the borrower's 1003 **as it is being filled**, section by section, field by field — not a PDF at the end",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G10",
   "group": "G",
   "name": "**⭐ Field-level stuck telemetry**",
   "accept": "LO sees exactly which field a borrower stalled on, and for how long — the difference between \"they went quiet\" and \"they froze at SSN\"",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G11",
   "group": "G",
   "name": "LO annotation without overwrite",
   "accept": "LO can add a note or request a correction on any field; the LO can never silently edit the borrower's answer",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G12",
   "group": "G",
   "name": "1003 completeness by section",
   "accept": "LO sees the same 9-section completeness meter the borrower sees (B21), plus what underwriting will still ask for",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "G13",
   "group": "G",
   "name": "**⭐ Search weighted to last name**",
   "accept": "Instant, fuzzy, typo-tolerant search that **ranks last name first** (\"mitchel\" finds Mitchell); also matches first name, **property address**, loan number, email, phone, partner; **results group by person, not by file**; includes closed/withdrawn, labeled",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G14",
   "group": "G",
   "name": "**⭐ Switchable pipeline views**",
   "accept": "One tap between **needs-me-today · by stage · by borrower · by partner · by aging · closed** — each sortable, filterable, exportable, persisted per user, and scoped by role",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "G15",
   "group": "G",
   "name": "Multi-loan borrower card",
   "accept": "A borrower with more than one active file reads as **one relationship with two loans**, never as two look-alike rows (10.2a)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "H1",
   "group": "H",
   "name": "RBAC role model",
   "accept": "All Part 5.1 roles enforced, least-privilege",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "H2",
   "group": "H",
   "name": "Assignment engine",
   "accept": "Processor-to-LO pinning, round-robin, geo/program routing",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "H3",
   "group": "H",
   "name": "State-licensing enforcement",
   "accept": "LO only assignable where NMLS-licensed",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "H4",
   "group": "H",
   "name": "Reassignment w/ audit + transition",
   "accept": "One-tap reassign, logged, graceful borrower transition",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "H5",
   "group": "H",
   "name": "National leader org view",
   "accept": "Whole-org production + drill-to-one-loan",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "H6",
   "group": "H",
   "name": "Stuck-loan radar",
   "accept": "At-risk loans surfaced across org",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "H7",
   "group": "H",
   "name": "Per-LO scorecards",
   "accept": "Production/conversion/speed/satisfaction per LO",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "H8",
   "group": "H",
   "name": "Recruiting analytics",
   "accept": "Ramp/cohort/attribution views",
   "pri": "P2",
   "top": "P2",
   "phase": 3
  },
  {
   "id": "H9",
   "group": "H",
   "name": "Tenant isolation",
   "accept": "No cross-tenant/branch data visibility",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I1",
   "group": "I",
   "name": "Co-branded partner page",
   "accept": "Unified LO+realtor page (see A1)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I2",
   "group": "I",
   "name": "Partner status view",
   "accept": "Realtor sees stage-level status of *their* borrowers only",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I3",
   "group": "I",
   "name": "Partner milestone notifications",
   "accept": "Realtor notified as their loans advance",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I4",
   "group": "I",
   "name": "Bounded self-serve pre-qual",
   "accept": "Realtor generates pre-qual within LO guardrails",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I5",
   "group": "I",
   "name": "RESPA §8 co-marketing guardrails",
   "accept": "Co-branded pages built to equal-prominence/no-value standard by default",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I6",
   "group": "I",
   "name": "Partner scorecard + attribution",
   "accept": "Referrals/pull-through/repeat tracked per partner",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I7",
   "group": "I",
   "name": "**⭐ Shareable marketing surface**",
   "accept": "LO and realtor each get a co-branded page they can share anywhere — application link, calculators, QR, both photos, both brands, disclosures locked",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I8",
   "group": "I",
   "name": "Open-house / listing kit",
   "accept": "One tap produces a co-branded flyer + QR for a specific listing, pointing at the calculators and the application",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I9",
   "group": "I",
   "name": "Co-branded calculator link",
   "accept": "The agent can share *just* the payment/affordability calculator, still co-branded and still attributed",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I10",
   "group": "I",
   "name": "Partner-visible next step",
   "accept": "Every partner-facing surface names the one thing that would move the loan, so the agent knows how to help",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I11",
   "group": "I",
   "name": "**⭐ A page per partner**",
   "accept": "Each realtor gets their **own** co-branded page — their photo, brokerage, bio, **swappable hero image**, own short URL and QR. Built by the LO in under a minute",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I12",
   "group": "I",
   "name": "Partner-editable content, locked chrome",
   "accept": "The agent can change their photo, hero image and bio; **NMLS IDs, Equal Housing, state licensing and RESPA equal-prominence layout cannot be edited or removed by anyone**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I13",
   "group": "I",
   "name": "**⭐ Attribution bound at first touch**",
   "accept": "A borrower starting from a partner page binds LO + partner to that loan through funding, resolved server-side — survives resumes, handoffs and device switches",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I14",
   "group": "I",
   "name": "**⭐ Under-contract update stream**",
   "accept": "On acceptance the partner is enrolled in milestone updates (appraisal → UW → conditional → clear to close → funded) via text + email, self-contained and forwardable, branded unfurl card, bounded cadence w/ working unsubscribe",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I15",
   "group": "I",
   "name": "**⭐⭐ Partner-initiated pre-approval request**",
   "accept": "Agent fills only offer fields — **property address, offer price, requested amount, closing date, concessions**. Approval amount, program, terms, conditions, expiration and disclosures are **read-only and system-supplied**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I16",
   "group": "I",
   "name": "**⭐⭐ LO one-tap approve / edit / decline**",
   "accept": "The request lands on the LO with the borrower's file beside it — never an email to be missed. Approve, edit or decline with a reason; every action logged with actor + timestamp",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I17",
   "group": "I",
   "name": "**⭐⭐ The offer email, generated and sent**",
   "accept": "CLEAR's existing **\"Copy Offer Email\"** wording, unchanged — **to the borrower, copying the buyer's agent, asking the agent to copy the LO on the offer they send the listing agent**, and showing them the LO's intro script in advance. The POS generates it pre-filled, **sends from the LO's work email with the letter already attached** (removing today's two failure modes: forgotten attachment, personal account)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I18",
   "group": "I",
   "name": "Tamper-evident letter + live expiry",
   "accept": "Every issued letter is verifiable and **its +60-day validity is a tracked date, not a number frozen in a PDF**; a listing agent can confirm a letter is genuine",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I21",
   "group": "I",
   "name": "**Port the existing tool's proven parts**",
   "accept": "Per-LO **real drawn/uploaded signature**, valid-through auto +60 days, loan-exceeds-sale warning, rate-above-25% warning, single-page PDF with the listing-agent band at the bottom, work-email reminder — all carried over from `clear-preapproval.pages.dev`, **not redesigned**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I22",
   "group": "I",
   "name": "**Replace the client-side PIN with real auth**",
   "accept": "Today's tool gates on a 4-digit PIN in the source — a deterrent, not a vault. The POS uses real authentication and role scoping (H1, K6)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I23",
   "group": "I",
   "name": "**No silent third-party phone-home**",
   "accept": "The tool CLEAR adapted this from POSTed every borrower's name, address and loan figures to an outside script on each print. That was stripped, and the rule is inherited: **borrower data never leaves to a third party as a side effect of a feature**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "I19",
   "group": "I",
   "name": "Partner page analytics",
   "accept": "The LO sees views, calculator sessions and applications started per partner page — which partners are actually working it",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "I20",
   "group": "I",
   "name": "Partner roster &amp; bulk build",
   "accept": "LO manages all partners in one place and spins up a new partner page from a template",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "J1",
   "group": "J",
   "name": "Canonical stage model",
   "accept": "One shared stage vocabulary POS/LOS/CRM",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J2",
   "group": "J",
   "name": "Event bus",
   "accept": "Every state change emits a typed event",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J3",
   "group": "J",
   "name": "Visual borrower status tracker",
   "accept": "Clean mobile \"where am I / what's next\"",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J4",
   "group": "J",
   "name": "Milestone cards (branded, visual)",
   "accept": "Warm branded card at each stage, right channel",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J5",
   "group": "J",
   "name": "Nudge + abandonment recovery",
   "accept": "Designed re-engagement sequences",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J6",
   "group": "J",
   "name": "CRM sync contract",
   "accept": "Field-level, directional, consent-aware sync",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "J7",
   "group": "J",
   "name": "Template + brand-lock library",
   "accept": "Editable templates, locked compliance elements",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "J8",
   "group": "J",
   "name": "Two-way borrower messaging",
   "accept": "Borrower replies land as one LO/clone thread",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K1",
   "group": "K",
   "name": "Immutable consent ledger",
   "accept": "Every consent w/ exact language+version+timestamp",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K2",
   "group": "K",
   "name": "Immutable audit trail",
   "accept": "Every consequential event, examiner-exportable",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K3",
   "group": "K",
   "name": "Adverse-action / incompleteness engine",
   "accept": "ECOA timers + specific reasons (incl. AI reason codes)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K4",
   "group": "K",
   "name": "Appraisal delivery tracking",
   "accept": "ECOA valuations rule timing enforced",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K5",
   "group": "K",
   "name": "TCPA consent + quiet hours + STOP",
   "accept": "Marketing texts gated; opt-out instant + synced",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K6",
   "group": "K",
   "name": "GLBA security program",
   "accept": "MFA, encryption in transit+rest, least privilege",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K7",
   "group": "K",
   "name": "Record retention + legal hold",
   "accept": "Per-type retention; freeze-on-matter; export",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K8",
   "group": "K",
   "name": "Fair-lending + AI model governance",
   "accept": "Model docs, disparate-impact testing, NIST AI RMF",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K9",
   "group": "K",
   "name": "Advertising/NMLS disclosure lock",
   "accept": "Triggering-term + NMLS display auto-inserted",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K10",
   "group": "K",
   "name": "**⭐ SMS opt-in block, verbatim**",
   "accept": "Every phone-collecting form carries the full block: **unchecked by default**, names CLEAR + the LO + NMLS, states **\"consent is not a condition of receiving a loan,\"** message frequency, **\"message and data rates may apply,\"** STOP/HELP, Terms + Privacy links (8.7)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K11",
   "group": "K",
   "name": "**⭐ Email consent + CAN-SPAM**",
   "accept": "Commercial email carries accurate sender, non-deceptive subject, **physical postal address** and **one-click unsubscribe with no login**; unsubscribing from marketing **never suppresses transactional loan messages**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K12",
   "group": "K",
   "name": "**⭐ Granular preference center + revocation**",
   "accept": "Loan status / documents / marketing / partner updates each independently controllable; revocation honored via **any reasonable method** incl. a reply, propagated to POS + CRM + clone + partner stream **within seconds**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K13",
   "group": "K",
   "name": "**⭐ Credit authorization as its own act**",
   "accept": "Soft and hard separately authorized on their own screen — never bundled into a terms acceptance; discloses hard-inquiry impact, the 45-day shopping window and the trigger-lead ban before the tap; co-borrowers authorize from their own session",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K14",
   "group": "K",
   "name": "Consent stores language + version",
   "accept": "Every consent record holds the **exact text shown**, its version, timestamp, IP and device — not a boolean (ties K1)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K15",
   "group": "K",
   "name": "Quiet hours by recipient time zone",
   "accept": "Messaging windows enforced against the borrower's local time, not the server's",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K16",
   "group": "K",
   "name": "Partner-stream consent is separate",
   "accept": "The realtor's update-stream opt-in and opt-out are independent of the borrower's (6.2c)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K17",
   "group": "K",
   "name": "Revoke-all readiness",
   "accept": "A revocation on one topic can be configured to apply across all messaging — built now, ahead of the FCC \"revoke-all\" date of **Jan 31, 2027**",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K18",
   "group": "K",
   "name": "**⭐ Written-estimate disclaimer, auto-applied**",
   "accept": "Any surface showing a consumer **their own** estimated terms before the LE renders **\"Your actual rate, payment, and costs could be higher. Get an official Loan Estimate before choosing a loan.\"** — **≥12pt, top of the front of the first page** (§1026.19(e)(2)(ii)). Applies to the Payment Playground and the pre-qual result; **inherited automatically by any new estimate surface**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K19",
   "group": "K",
   "name": "**⭐ Borrower-visible fee ledger**",
   "accept": "The borrower can see every fee, its amount, when it was authorized and by what act — before it is charged, not on the Closing Disclosure",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K20",
   "group": "K",
   "name": "**⭐ Six-piece pre-trigger warning**",
   "accept": "The system detects when one more field creates a TRID application and warns the LO first, so the clock is started **deliberately**, never by accident",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K21",
   "group": "K",
   "name": "**⭐ Pre-ITP fee gate, enforced at the data layer**",
   "accept": "Before intent to proceed the system will accept exactly **one** fee type — a bona fide, reasonable credit report fee. Every other fee is **rejected by the model**, not by a policy reminder (§1026.19(e)(2)(i))",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K22",
   "group": "K",
   "name": "**⭐ No required documents before ITP**",
   "accept": "Needs-list items may appear and invite uploads, but **nothing can be marked required or block progress** until ITP is recorded (§1026.19(e)(2)(iii))",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "K23",
   "group": "K",
   "name": "Application-created notice to the borrower",
   "accept": "When the six pieces exist, the borrower is told plainly that this is now an application and the Loan Estimate is due within three business days",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "K24",
   "group": "K",
   "name": "ITP is never bundled",
   "accept": "Intent to proceed is its own affirmative, timestamped act — **never pre-checked, never inferred from silence, never riding on the LE eSignature**",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L1",
   "group": "L",
   "name": "Multi-tenant architecture",
   "accept": "Tenant-scoped data + row-level isolation",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L2",
   "group": "L",
   "name": "LosAdapter (LendingPad impl)",
   "accept": "Bidirectional MISMO push + webhook consume, LendingPad",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L3",
   "group": "L",
   "name": "LosAdapter (NachoLOS impl)",
   "accept": "Same contract, NachoLOS implementation",
   "pri": "P2",
   "top": "P2",
   "phase": 3
  },
  {
   "id": "L4",
   "group": "L",
   "name": "Credit integration",
   "accept": "Soft + hard tri-merge",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L5",
   "group": "L",
   "name": "Verification integration",
   "accept": "Truv/Plaid VOA/VOIE",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L6",
   "group": "L",
   "name": "Doc-AI integration",
   "accept": "Ocrolus/Textract classify+extract",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "L7",
   "group": "L",
   "name": "Disclosure/eClose integration",
   "accept": "DocMagic/Docutech + RON/eNote",
   "pri": "P0/P1",
   "top": "P0",
   "phase": 2
  },
  {
   "id": "L8",
   "group": "L",
   "name": "CRM integration",
   "accept": "GHL/Total Expert sync",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "L9",
   "group": "L",
   "name": "Fraud/ID integration",
   "accept": "Persona/Socure step-up",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "L10",
   "group": "L",
   "name": "Idempotent webhooks + reconciliation",
   "accept": "Retries, dead-letter, daily POS↔LOS heal",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L11",
   "group": "L",
   "name": "Vendor sandbox environment",
   "accept": "Full flow testable against vendor test envs",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "L12",
   "group": "L",
   "name": "Observability + 0.4 metrics",
   "accept": "All success metrics instrumented from launch",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M1",
   "group": "M",
   "name": "**⭐ Full Spanish borrower journey**",
   "accept": "Every borrower screen, error, needs item, card and SMS available in Spanish end-to-end",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M2",
   "group": "M",
   "name": "**AI clone answers in Spanish**",
   "accept": "Spanish knowledge base, LO voice, language persists across sessions",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M3",
   "group": "M",
   "name": "Language as profile setting",
   "accept": "Choice remembered cross-device; drives all downstream comms",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M4",
   "group": "M",
   "name": "English-side staff view",
   "accept": "LO/processor view stays English regardless of borrower language",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M5",
   "group": "M",
   "name": "Translated-disclosure handling",
   "accept": "Counsel-directed: which docs translate, how labeled",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "M6",
   "group": "M",
   "name": "Program-aware paths (Conv/FHA/VA/USDA/Jumbo/Non-QM)",
   "accept": "Program drives questions + needs list; VA incl. COE + funding-fee logic",
   "pri": "P0/P1",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M7",
   "group": "M",
   "name": "USDA address eligibility up front",
   "accept": "Geographic check before deep questions",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "M8",
   "group": "M",
   "name": "Refi vs purchase divergence",
   "accept": "Different first questions + pre-fill; no realtor in refi flow",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M9",
   "group": "M",
   "name": "Denied/withdrawn automation halt",
   "accept": "All borrower automation stops immediately on adverse status",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M10",
   "group": "M",
   "name": "Co-borrower stall handling",
   "accept": "Re-invite / proceed-without; loan never silently stuck",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "M11",
   "group": "M",
   "name": "LO-assisted application",
   "accept": "LO completes app with borrower, attribution + consent preserved",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "M12",
   "group": "M",
   "name": "Duplicate-application rule",
   "accept": "Explicit handling incl. attribution implications",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "M13",
   "group": "M",
   "name": "Baseline measurement (Floify)",
   "accept": "Current completion/cycle metrics captured before build",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M14",
   "group": "M",
   "name": "Pilot + parallel-run rollout",
   "accept": "3–5 pilot LOs; no borrower migrated mid-loan",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M15",
   "group": "M",
   "name": "Knowledge-base authoring + approval workflow",
   "accept": "Several hundred approved answers, versioned, compliance-reviewed",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "M16",
   "group": "M",
   "name": "Pen test + DR/BCP + accessibility audit",
   "accept": "Independent pre-launch; tested restores; WCAG 2.2 AA verified",
   "pri": "P0/P1",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N1",
   "group": "N",
   "name": "**⭐ Payment Playground**",
   "accept": "Borrower moves price, down payment, term and credit band and watches the payment update live — with taxes, insurance, HOA and MI broken out, not hidden",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N2",
   "group": "N",
   "name": "**⭐ PPE-fed live pricing**",
   "accept": "Every rate shown comes from the LO's pricing engine and is stamped with the time it was priced; if pricing is unavailable the tool says so rather than showing a stale number",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N3",
   "group": "N",
   "name": "Affordability calculator",
   "accept": "\"What can I afford\" from income, debts and down payment — returns a range and the assumptions behind it",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N4",
   "group": "N",
   "name": "Refinance calculator",
   "accept": "Current loan vs proposed: payment change, break-even month, lifetime interest, cash-out scenario",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N5",
   "group": "N",
   "name": "Rent vs. buy",
   "accept": "Honest both-sides comparison including opportunity cost — not a sales tool",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "N6",
   "group": "N",
   "name": "Buydown &amp; points comparison",
   "accept": "2-1 buydown, permanent points and par, side by side with break-even",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "N7",
   "group": "N",
   "name": "Save &amp; share a scenario",
   "accept": "Borrower saves a scenario; it arrives in the LO's pipeline as a warm signal and pre-fills the application",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N8",
   "group": "N",
   "name": "Scenario → application handoff",
   "accept": "\"Apply with these numbers\" carries price, down payment and program straight into the 1003 with nothing retyped",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N9",
   "group": "N",
   "name": "Co-branded, embeddable",
   "accept": "The calculator runs standalone at a co-branded URL and embeds in an agent's or LO's own site, attribution intact",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "N10",
   "group": "N",
   "name": "Compliance framing",
   "accept": "Every result is labeled an estimate with assumptions shown; no APR or rate is presented as an offer; disclosures locked (ties K5, 8.2)",
   "pri": "P0",
   "top": "P0",
   "phase": 1
  },
  {
   "id": "N11",
   "group": "N",
   "name": "Property-aware estimates",
   "accept": "Given an address, pull real tax and (where available) HOA and insurance estimates instead of a generic percentage",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  },
  {
   "id": "N12",
   "group": "N",
   "name": "Scenario history",
   "accept": "Borrower sees the scenarios they have tried, and the LO sees them too — a record of what the borrower actually wants",
   "pri": "P1",
   "top": "P1",
   "phase": 2
  }
 ],
 "generated": "from parts/p11.md"
}