T3 — Question Map (underwriting model ↔ forms ↔ docs)

Companion view to forms-inventory.html. This page flips the lens: instead of "what does each form contain?", it asks "for each underwriting concept (gate / category / other), which forms ask about it, and could a document replace the question?"
Generated 2026-05-19. Underwriting model is the 10 gates + 9 categories from underwriting-funnel/gabriel-spec.md §2.

Asked once — clean Asked in multiple forms — dedupe candidate Not asked anywhere — gap Document column populated — extraction opportunity G= gate C= scoring category ID= identity / contact KYC= KYC / compliance = routing / display

Master matrix — underwriting concept × form × document

Concept Weight / role Form 1 Form 2 Form 2.5 Form 3 Could come from doc Stage need (when must the answer be known?) My verdict
G1 UAE Residency gate residency visa-page (doc) visa_page Form 1 (gate — must decline non-residents early) Keep F1 Q (decline early); doc verifies in F3
G2 Age 21–60 gate — (extracted, not asked) emirates_id Form 3 (verified at doc upload) ✓ Correctly doc-only. Don't add a question.
G3 AECB Score ≥ 550 gate aecb_score (self-reported) po-credit (band) aecb_report Form 2 decision (gate — must check before scoring) Simplify F2 to BAND (drop precise number); F3 redundant — drop or replace with doc upload only.
G4 No active defaults (24mo) gate aecb_report Form 3 (AECB pull is authoritative) ✓ Doc-only by design. No Q needed.
G5 Income verification gate document uploads salary_certificate + bank_statements Form 3 (gate satisfied by doc presence) ✓ Doc-only. Confirms self-reported income from F1/F2.
G6 Min HH income ≥ 25K gate incomeInput + commissionInput + householdIncomeInput (partner) household_income_total + variable_income co_applicant_monthly_income + co_applicant_variable_income salary_certificate Form 1 (gate — declines <25K) F1 keeps single "monthly take-home" Q for gate; F2 deepens (fixed vs commission split for Cat D); F2.5 mirrors. Doc verifies. Don't ask 3 times.
G7 Employment tenure gate employment_type + employer_tenure + business_years co_applicant_employment_type + co_applicant_employer_name po-emp-type + po-emp-name + po-emp-title + po-biz-name + po-biz-license salary_certificate + employment_letter + trade_license Form 2 (gate — declines <6mo / <2y) F3's po-emp-* overlay duplicates F2. F3 should pre-fill from F2 + show "confirmed via salary cert". Drop the F3 overlay capture.
G8 Financing 50K–750K gate heroValue (budget) → derived property_budget_aed → derived — (computed) Form 1 + Form 2 (derived from budget × LTV) F2 should pre-fill from F1's heroValue, not re-ask. Single computed display.
G9 DBR ≤ 50% gate 9 debt Qs (mortgage, rent, personal loan, car loan, CC limit, CC outstanding, other commitments) (folds into joint calc) po-cc-limit + po-cc-balance + po-no-cc + po-ob-category + po-ob-amount aecb_report + bank_statements + loan_statements Form 2 (decision — DBR computed here) F2 keeps a SLIMMER set (4 Qs: "any mortgage / rent / loans / credit cards?" yes-no); F3 captures exact amounts AFTER aecb_report upload extracts them. Saves ~5 Qs from F2.
G10 Property eligibility gate areaMulti + propertyType + bedrooms + heroValue + found_property property_area + property_type + has_found_property + property_usage_raw + property_budget_aed — (Sooner valuation) Form 1 (gate — area/value eligibility) F2 should pre-fill from F1, not re-ask. Add property_usage + down_payment_source as F2-only deepening Qs (KYC need).
A Payment Load (DBR) 20% Same data as G9 — see above aecb_report Form 2 Driven by G9 inputs.
B Savings Buffer 20% savings (band) po-savings (band) + po-ownership bank_statements Form 2 (scoring) F3 re-asks. Drop F3's po-savings, pre-fill from F2 + verify via bank statements.
C Employment Stability 10% Same data as G7 — see above (employment type + employer + tenure) salary_certificate + employment_letter Form 2 Driven by G7 inputs.
D Household Income (with commission %) 10% Same data as G6 — see above salary_certificate (split fixed vs variable) Form 2 Driven by G6 inputs. Commission % auto-computed (variable ÷ total).
E UAE Residency Duration 10% — (only residency status, not duration) uae_residency (years bucket) visa-page extracted visa_page (issue date) Form 2 (scoring) OR Form 3 (extracted) Drop F2 Q — visa page issue date gives this exactly. Trade-off: F2 score is incomplete until F3 doc uploads. Accept the trade-off; F2 can show a preliminary score that firms up after F3.
F Credit Relationship (history) 10% (or 0% if thin file) credit_card_outstanding (proxy) aecb_report extracted aecb_report Form 3 (extracted from AECB) Drop F2's credit_card_outstanding Q. AECB report has full history. Same trade-off as Cat E.
G AECB Score 5% (or 15% if thin file) Same data as Gate G3 — see above aecb_report Form 2 (preliminary) → Form 3 (authoritative) F2 band-only for preliminary scoring; F3 doc overrides.
H Re-Leasing Potential 10% areaMulti (tier H from area) property_area (tier H) — (derived from area) Form 1 (derived from area selection) Already derived, not separately asked. F2 dedupe (pre-fill from F1).
I Lifestyle Alignment 5% has_rent + rent_payment (⚠ rent BUG: annual not monthly) bank_statements extracted bank_statements (rent payment patterns) Form 2 (preliminary) → Form 3 (verified) Keep F2 Q (fix to monthly first per P1). Doc verifies in F3.
Identity / contact (not part of scoring model)
ID Full name identity fullName full_name co_applicant_full_name extracted from EID emirates_id + passport Form 1 (lead contact) Stays. Doc verifies spelling.
ID Email contact emailInput contact_email co_applicant_email Form 1 F2 should pre-fill from F1, not re-ask.
ID Phone contact phoneInput contact_phone co_applicant_phone OTP login Form 1 + Form 3 (auth) F1 captures, F3 verifies via OTP. F2 should pre-fill.
ID DoB / nationality identity — (extracted) emirates_id + passport Form 3 (KYC, gate G2) ✓ Correctly doc-only.
KYC / compliance (not gate, not score — required for offer)
KYC Down payment source SoW / AML down_payment_source — (self-declaration) Form 2 (KYC capture before offer) Stays — purely self-declaration. Family gift → SoW doc required.
KYC Property usage compliance + LTV property_usage_raw Form 2 (investment shifts LTV) Stays.
Routing / display
Purchase timeline lead priority timeline property_timeline Form 1 (sales prio) F2 pre-fill from F1.
Has co-applicant? branching householdToggle (implicit) ⚠ MISSING — gates Form 2.5 unconditionally (P1 bug) (branched into) Form 2 (gates Form 2.5) Add explicit yes/no in F2 (per P1 sub-issue #2). Pre-fill from F1 toggle.
Service selection (CFF / Discovery / Brokerage) pricing tier ⚠ MISSING — drives 10/12/15% fee — (not extractable) Form 2 (after sooner_reveal) Add to F2 (per P2 sub-issue #7, blocked on T1 v0.1.1).

Doc-extraction opportunities — Q by Q decision support

For each Q that could be replaced by document extraction, here's the trade-off. Your call.

Currently asks In Could come from doc If we drop the Q, what breaks? My recommendation
residency (status: Nat/Res/Non-res) F1 visa_page Form 1 can't gate non-residents early — they'd reach Form 3 before being declined, wasting their time + ours. Keep Q. Cheap signal, gate-critical.
aecb_score (precise number, optional) F2 aecb_report F2 preliminary decision is less precise (band only). G3 gate could fail at F3 instead of F2. Customer experience: "you passed our quick check but failed credit check" — bad. Replace precise number with band ("Excellent / Good / Fair / Don't know"). Keep the band Q. Drop F3's duplicate.
credit_card_outstanding F2 aecb_report Cat-F scoring incomplete until F3. F2 preliminary SCS less accurate by ~5%. Drop the Q. F2 shows preliminary score, F3 finalizes.
9 debt Qs (mortgage_payment, rent_payment, personal_loan_payment, car_loan_payment, credit_card_payment, credit_card_outstanding, other_monthly_commitments) F2 aecb_report + bank_statements + loan_statements F2 DBR computation incomplete. Preliminary G9 / Cat-A score is approximate. Big UX win — saves 9 Qs. Collapse to 4 yes/no Qs: "Any existing mortgage? Any personal/car loans? Any credit cards? Pay rent?" Use binary signals for F2 preliminary; F3 extracts exact amounts.
uae_residency (years bucket) F2 visa_page (issue date) Cat-E score incomplete until F3. Drop. F2 shows preliminary, F3 firms up.
employment_type F2 + F3 (po-emp-type) salary_certificate or trade_license header G7 gate needs this at F2 to gate. Doc derivation only at F3. Keep F2 Q (gate need). Drop F3 duplicate.
employer_name (F2) + po-emp-name/title (F3) F2 + F3 salary_certificate F2 needs employer for tier classification (Cat C). F3 redundant. Keep F2; drop F3 duplicate. Pre-fill F3 from F2 + "confirmed via salary cert" badge.
employer_tenure (F2) + various F3 F2 + F3 salary_certificate (issue date or start date) G7 gate at F2. F3 redundant. Same as above.
business_years (self-emp, F2) F2 trade_license (issue date) G7 gate at F2. Keep at F2; trade license PDF verifies.
incomeInput + commissionInput (F1) F1 salary_certificate G6 gate at F1. Can't defer to F3. Keep F1 Q but simplify to ONE field: "monthly take-home (AED)". Fixed/variable split asked in F2 only (for Cat-D commission %).
household_income_total + variable_income (F2) F2 salary_certificate + bank_statements Precise Cat-D score needs fixed vs variable split. Form 1's "monthly take-home" doesn't split. Keep F2 Qs. F2 is where the precise scoring happens.
savings (F2 band) + po-savings (F3 band) F2 + F3 bank_statements (closing balance) Cat-B scoring at F2. F3 duplicate. Keep F2; drop F3 duplicate.
Property fields (area, type, bedrooms, budget, found) F1 + F2 G10 gate at F1. F2 confirmation OK but should PRE-FILL not re-ask. F2 pre-fills from F1's URL handoff; user only sees "still looking in X area, budget Y?" as a single confirmation Q.
fullName, email, phone F1 + F2 + F2.5 emirates_id (name only) Contact is a hard requirement at F1 lead gen. F1 captures; F2 + F2.5 + F3 pre-fill, never re-ask.
down_payment_source F2 — (self-declaration) KYC/AML capture. Family gift triggers SoW doc requirement. Stays. Pure self-declaration.
property_usage_raw (primary/secondary/investment) F2 Investment vs primary affects LTV. Stays.

Gaps and big moves — the headline asks

  1. Form 2 has 33 Qs. Could be ~18 if we doc-extract aggressively. Conservative: 25 Qs (drop precise AECB number, collapse 9 debt Qs to 4 yes/no, drop credit_card_outstanding, drop uae_residency duration). Aggressive: 18 Qs (above + drop all detailed loan amounts until F3 doc extraction). Trade-off: F2 preliminary SCS becomes less precise — could be "indicative tier" instead of locked-in.
  2. Form 3's profile-overlay (5-step po-* capture) is fully redundant. Every Q in there is in F2. Drop the overlay, pre-fill from F2 row + show "confirmed via doc upload" badges. Net: F3 becomes purely document collection + OTP. Time ↓ from 5–8min to 3–5min.
  3. Form 2 needs 2 new Qs (not in HTML today): has_co_applicant (yes/no) + service_selection (multi-select for pricing). Already in the sub-issue list as P1 #2 and P2 #7.
  4. Cross-form pre-fill discipline is the biggest unlock. Property fields, contact info, employment basics — all asked in F1 then re-asked in F2. URL prefill plumbing exists (Form 1 → Form 2 via query params for partner stuff); extend it to ALL F1 fields.
  5. F2 "preliminary SCS" vs F3 "final SCS" is the right model. F2 returns an indicative tier + indicative fee + a list of "this firms up after we see your docs". F3 finalizes. UX: customer sees a price quickly (good for conversion), real numbers after docs.

Suggested follow-up subtickets to file under GTM-59

These are new compared to the inventory's 13-item list — they're the consequences of Q-by-Q analysis on this page.

  1. P1 F2 → F3 dedupe: drop F3's po-* profile overlay. Pre-fill from F2 row. Show "confirmed via <doc>" badges as docs upload. (Folds into existing sub-issue #4.)
  2. P2 F2 question simplification: 9 debt Qs → 4 yes/no Qs. Drop precise AECB number → band only. Drop credit_card_outstanding. Drop uae_residency duration. F2 returns indicative tier; F3 doc extraction finalizes.
  3. P2 F1 → F2 pre-fill discipline: extend the URL handoff to ALL F1 fields (property, contact, income). F2 starts with "Still looking in X, budget Y, take-home Z? (edit if changed)" rather than blank.
  4. P2 Indicative-vs-final SCS UX: F2 returns an indicative tier + "firms up after docs" copy. F3 finalizes. Lets us shrink F2 without losing the price-reveal moment.
  5. P2 F1 income field simplification: collapse incomeInput + commissionInput + householdIncomeInput + partnerCommInput into ONE "monthly take-home (combined HH if applying jointly)" field. F2 deepens with fixed/variable split for Cat-D.