Skip to main content

MCA, SBA, and BLOC are independent Product Decisions

Status: accepted Date: 2026-07-09 Phase 9 of the underwriting roadmap introduces a Per-Product Decision Model: every Underwriting Decision carries a Product Decision for each Funding Product. This ADR locks the first open design question — whether MCA / SBA / BLOC stay collapsed or split at the decision layer.

Decision

Split all three. mca, sba, and bloc are each their own Funding Product and each receive their own Product Decision on every run. The five-product set is: card_stacking | term_loan | mca | sba | bloc This reverses the 2026-04-23 variant-(A) call at the decision layer only. The workflow/UX layer may still group the three under one Established tab / established_funding primary with an establishedSubVariant chosen at approval — that grouping is presentation, not authority.

Context

Today evaluateEstablished returns two booleans (mcaEligible, sbaEligible). The SBA gate silently covers BLOC (comment in establishedUnderwriting.ts: “SBA/BLOC: 680+…”). Operators cannot see “MCA qualified, SBA declined, BLOC not evaluated” as three verdicts; coaching, CRM badges, and overrides inherit that blind spot. Locked decision #5 (cross-track non-exclusivity) already requires that a decline on one product must not erase another. Collapsing three Established products into one Product Decision would re-create the same erasure inside the Established family.

Considered options

  • A — Split all three (accepted): five equal Product Decisions. UX may still group Established.
  • B — Keep one established Product Decision: cards + TL independent; Established stays collapsed with sub-variant flags inside. Rejected — operators need per-product reasons and overrides; collapsing re-hides MCA-vs-SBA-vs-BLOC disagreement.
  • C — Split MCA vs SBA; leave BLOC as an alias on SBA: deferred the BLOC question into Decision 2. Rejected for Decision 1 because the product set must be stable before the BLOC evaluator strategy is chosen; aliasing BLOC would bake a non-product into the taxonomy.

Consequences

  • products[] on an Underwriting Decision is always length 5; a declined or unevaluated product is a row with reasons, never an absence.
  • evaluateEstablished (or its Phase 9 successors) must emit per-product statuses for MCA, SBA, and BLOC — not a single Established boolean pair.
  • Workflow locked decision #4 (one established_funding primary + sub-variant at approval) remains valid as UX/sequencing. It no longer describes the decision-layer shape.
  • Glossary: CONTEXT.md → “Funding product”, “Product Decision”. System reference: docs/design/underwriting.md §7.
  • Open follow-ups: BLOC evaluator + SBA questionnaire gate → ADR-0003 (accepted). Still open: credit-repair reason attachment, parked-as-derived, override symmetry for all five products.