| 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). |
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. |
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.
has_co_applicant (yes/no) + service_selection (multi-select for pricing).
Already in the sub-issue list as P1 #2 and P2 #7.
These are new compared to the inventory's 13-item list — they're the consequences of Q-by-Q analysis on this page.
po-* profile overlay. Pre-fill from F2 row. Show "confirmed via <doc>" badges as docs upload. (Folds into existing sub-issue #4.)credit_card_outstanding. Drop uae_residency duration. F2 returns indicative tier; F3 doc extraction finalizes.incomeInput + commissionInput + householdIncomeInput + partnerCommInput into ONE "monthly take-home (combined HH if applying jointly)" field. F2 deepens with fixed/variable split for Cat-D.