Version: 1.0 | Status: Implementation-Ready — Gear 1
Scope: Full FHA loan qualification engine per HUD Handbook 4000.1. Executes eligibility gates, UFMIP computation, annual MIP calculation and duration, income qualification, DTI computation, AUS path determination, reserve verification, and cash-to-close. Covers FHA Purchase, Rate/Term Refinance, and Cash-Out Refinance for PRIMARY occupancy only.
Confidential: PreFi, Inc. / Purpose Technology, Inc. d/b/a Purlend
Primary Reference: HUD Handbook 4000.1 (FHA Single Family Housing Policy Handbook). MIP rates reflect the March 2023 HUD reduction. Rate table must be verified annually — flag FHA_MIP_RATE_VERIFY each calendar year.
This skill takes a validated BorrowerProfile and a ProgramEvaluationQueue entry for FHA and produces an FHAQualResult — the definitive FHA loan qualification determination, with full computation trail, AUS path, DTI, UFMIP, monthly MIP, lifetime MIP cost, payment, cash-to-close, and reserve status.
Critical FHA distinctions from Conventional:
This skill produces:
FHAQualResult — qualification status, amount, payment, rate, DTI, MIPFHALineageTrace — step-by-step computation trailFHAConstraintFlags — constraint signals for Constraint Detection pass-throughThis skill does NOT produce:
Mortgage family scope: FHA only — PRIMARY occupancy
Forbidden: Never apply conventional PMI logic, VA residual income, or DSCR rental-income tests in this skill.
Invoke this skill when:
ProgramEvaluationQueue contains an FHA entry with eligibility = ELIGIBLE or CONDITIONALRequired inputs:
BorrowerProfile object (Borrower Profile Skill v1.2+)ProgramEvaluationQueue FHA entry (Program Router Skill v1.0+)**If FHA entry has eligibility = INELIGIBLE:** return FHA_INELIGIBLE — [reason] and stop.
Stage 1 — Validate inputs
Stage 2 — Extract qualification inputs
Stage 3 — Gate 1: Occupancy
Stage 4 — Gate 2: Loan amount / FHA limit
Stage 5 — Gate 3: Credit score and down payment tier
Stage 6 — Gate 4: LTV cap by credit tier
Stage 7 — Compute base loan, UFMIP, and total loan
Stage 8 — Determine MIP rate and duration
Stage 9 — Compute monthly MIP
Stage 10 — Compute rate and P&I (on total loan)
Stage 11 — Income qualification (GMI verification)
Stage 12 — DTI computation
Stage 13 — AUS path determination
Stage 14 — Reserve verification
Stage 15 — Cash-to-close computation
Stage 16 — Final qualification determination
Stage 17 — Build and emit FHAQualResult
Run all stages in sequence. Do not skip any stage. Every intermediate value must be carried into the lineage trace.
From BorrowerProfile:
qualifying_credit_score integer
credit_tier integer (1–8)
gmi_for_dti decimal — grossed-up qualifying income
total_monthly_dti_obligations decimal
occupancy_type must be PRIMARY
loan_purpose PURCHASE | RATE_TERM_REFI | CASH_OUT_REFI
property_value decimal — MIN(purchase_price, appraised_value)
purchase_price decimal
appraised_value decimal (if refi)
down_payment_amount decimal (purchase only)
self_employed_flag boolean
monthly_tax decimal
monthly_insurance decimal
hoa_monthly decimal (0 if none)
funds_available_for_closing decimal
funds_available_for_reserves decimal
From ProgramEvaluationQueue FHA entry:
fha_down_payment_tier "3.5%" | "10%" (set by Router Gate 3)
preliminary_rate decimal (Router placeholder — overridden by Stage 10)
preliminary_loan_amount decimal
property_value rule:
property_value = MIN(purchase_price, appraised_value)
Never use purchase_price alone when appraisal is available.
FHA eligible occupancy: PRIMARY only
IF occupancy_type ≠ PRIMARY:
gate_1 = FAIL
reason = "FHA limited to primary residence. [occupancy_type] not eligible."
ELSE:
gate_1 = PASS
fha_limit_2026_baseline = 806,500 (standard / floor limit — continental US)
NOTE: FHA limits have a FLOOR (low-cost areas: $524,225 for SFR 2026) and
a CEILING ($806,500 for standard). Most metro areas use $806,500.
High-cost areas may have higher limits up to 150% of baseline.
For Gear 1: use $806,500 as the applicable limit unless county data provided.
IF state IN [AK, HI]:
fha_limit = 1,209,750
flag HIGH_COST_STATE_FHA
IF high_cost_area_flag = true:
flag HIGH_COST_AREA_FHA_CHECK
note: "County FHA loan limit may exceed $806,500. Verify HUD county limit."
fha_limit = county_fha_limit (if provided) OR 806,500 (conservative)
base_loan_amount_preliminary = property_value × (1 - down_pct)
where down_pct = 0.035 if fha_down_payment_tier = "3.5%"
= 0.100 if fha_down_payment_tier = "10%"
IF base_loan_amount_preliminary > fha_limit:
gate_2 = FAIL
reason = "FHA base loan $[X] exceeds 2026 FHA limit of $[fha_limit]"
flag ROUTE_JUMBO_FHA
ELSE:
gate_2 = PASS
Already resolved by Program Router. Confirm and carry forward.
IF qualifying_credit_score ≥ 580:
fha_down_payment_tier = "3.5%"
gate_3 = PASS
ELIF qualifying_credit_score ≥ 500:
fha_down_payment_tier = "10%"
gate_3 = PASS
flag FHA_10PCT_DOWN_REQUIRED
note: "Score 500–579: FHA requires 10% down payment."
ELSE: (score < 500)
gate_3 = FAIL
reason = "FHA minimum credit score is 500. Current score: [qualifying_credit_score]"
ASSERT: fha_down_payment_tier from Router matches Gate 3 determination.
If mismatch: flag FHA_DOWN_PAYMENT_TIER_CONFLICT — use Gate 3 result (more current).
LTV cap by tier:
fha_down_payment_tier = "3.5%": max_ltv = 0.9650 (96.50%)
fha_down_payment_tier = "10%": max_ltv = 0.9000 (90.00%)
base_loan_amount = property_value - down_payment_amount
NOTE for 3.5% tier: down_payment_amount must be ≥ property_value × 0.035
IF down_payment_amount < property_value × 0.035:
down_payment_amount = CEIL(property_value × 0.035) (round up to nearest dollar)
flag DOWN_PAYMENT_ADJUSTED
fha_ltv_base = base_loan_amount / property_value
IF fha_ltv_base > max_ltv:
gate_4 = FAIL
reason = "FHA LTV [X]% exceeds maximum [max_ltv*100]% for score tier [fha_down_payment_tier]"
flag LTV_EXCEEDS_FHA_MAX
ROUNDING EDGE CASE:
IF fha_down_payment_tier = "3.5%" AND fha_ltv_base > 0.9650:
Adjust: base_loan_amount = property_value × 0.9650 (force to max LTV)
fha_ltv_base = 0.9650
flag LTV_ADJUSTED_TO_MAX
note: "Base loan adjusted to maximum 96.50% LTV"
ELSE:
gate_4 = PASS
If any gate fails: stop. Set qualification_status = INELIGIBLE. Emit reason. Do not proceed.
This stage is the most critical in the FHA skill. Three distinct loan values must be computed and tracked separately. Confusion between them is the most common FHA math error.
STEP 1 — Base loan amount:
base_loan = property_value - down_payment_amount
STEP 2 — UFMIP (Upfront Mortgage Insurance Premium):
ufmip_rate = 0.0175 (1.75% — standard for all purchase and rate/term refi)
ufmip_amount = base_loan × ufmip_rate
NOTE: ufmip_amount is computed on BASE LOAN, not total loan.
Never compute UFMIP on the financed total — circular error.
STEP 3 — Total financed loan:
fha_total_loan = base_loan + ufmip_amount
STEP 4 — LTV values:
fha_ltv_base = base_loan / property_value
fha_ltv_financed = fha_total_loan / property_value
CRITICAL DISTINCTIONS — must be maintained throughout the skill:
base_loan: used for UFMIP computation, MIP rate lookup, monthly MIP, MIP duration
fha_total_loan: used for P&I payment computation ONLY
fha_ltv_base: used for MIP rate and duration determination
fha_ltv_financed: informational only (always > base LTV due to UFMIP)
NEVER:
• Compute P&I on base_loan (will understate payment)
• Compute UFMIP on total_loan (circular — will overstate)
• Use fha_ltv_financed for MIP rate lookup (will overstate MIP)
• Compute monthly MIP on total_loan (will overstate MIP)
IF loan_purpose = CASH_OUT_REFI:
fha_cash_out_max_ltv = 0.80 (80% of appraised value)
max_base_loan_cash_out = appraised_value × 0.80
IF base_loan > max_base_loan_cash_out:
gate_4_cash_out = FAIL
reason = "FHA cash-out refinance maximum LTV is 80%"
ELSE:
gate_4_cash_out = PASS
Use fha_ltv_base for rate lookup:
LTV > 95.00%: annual_mip_rate = 0.0055 (0.55%)
LTV 90.01% – 95.00%: annual_mip_rate = 0.0050 (0.50%)
LTV ≤ 90.00%: annual_mip_rate = 0.0050 (0.50%)
NOTE: At standard 30-year term, the 0.55% and 0.50% rates differ only
at the > 95% LTV threshold. Both 90.01-95% and ≤ 90% use 0.50%.
The distinction between 90.01-95% and ≤ 90% matters for DURATION only.
FLAG: FHA_MIP_RATE_VERIFY — HUD adjusts MIP rates periodically.
Verify annually that 0.55% / 0.50% rates are current.
Duration depends on fha_ltv_base at origination:
fha_ltv_base > 0.90 (90%): duration = LIFE_OF_LOAN (360 months for 30-year)
fha_ltv_base ≤ 0.90 (90%): duration = 11_YEARS (132 months)
BOUNDARY RULE: fha_ltv_base exactly = 0.90 → duration = 11_YEARS (≤ 90%)
mip_duration_months:
LIFE_OF_LOAN: 360 (for 30-year fixed)
11_YEARS: 132
mip_duration_label:
LIFE_OF_LOAN: "Life of loan — MIP does not cancel"
11_YEARS: "MIP cancels after 11 years (month 132)"
IF fha_ltv_base > 0.95:
annual_mip_rate = 0.0055
mip_duration_months = 360
mip_duration_label = "Life of loan"
ELIF fha_ltv_base > 0.90:
annual_mip_rate = 0.0050
mip_duration_months = 360
mip_duration_label = "Life of loan"
ELSE: (fha_ltv_base ≤ 0.90)
annual_mip_rate = 0.0050
mip_duration_months = 132
mip_duration_label = "MIP cancels after 11 years (month 132)"
monthly_mip_exact = base_loan × annual_mip_rate / 12
monthly_mip = ROUND(monthly_mip_exact, 2)
CRITICAL: base_loan is used here — NOT fha_total_loan.
The annual MIP is assessed on the original base loan balance.
Using total_loan overstates monthly MIP.
lifetime_mip = monthly_mip × mip_duration_months
NOTE: Use ROUNDED monthly_mip for lifetime computation.
(Borrower pays rounded amount each month; lifetime = sum of actual payments.)
mip_10pct_threshold:
IF fha_ltv_base ≤ 0.90 AND down_payment_pct ≥ 0.10:
mip_cancels_at = "Month 132 (11 years)"
flag FHA_MIP_11YR_CANCEL
note: "10%+ down payment at origination → MIP cancels at month 132"
ELSE:
mip_cancels_at = "Never — life of loan"
flag FHA_MIP_LIFE_OF_LOAN
note: "< 10% down → MIP does not cancel regardless of equity"
FHA uses the same base market rate as Conventional (no LLPA system).
FHA pricing is simpler: no credit score × LTV rate adjustment grid.
The MIP effectively replaces the LLPA-based rate premium.
Rate assignment:
fha_rate = base_market_rate (6.50% system placeholder for Gear 1)
NOTE: FHA rates in market are typically within 0.125%–0.25% of conforming rates.
LLPA does not apply to FHA loans.
P&I COMPUTATION:
monthly_rate = fha_rate / 12
compound = (1 + monthly_rate)^360
numerator = monthly_rate × compound
denominator = compound − 1
pmt_factor = numerator / denominator
pi_payment = fha_total_loan × pmt_factor
CRITICAL: P&I is computed on fha_total_loan (includes UFMIP).
NEVER compute P&I on base_loan for FHA.
This understates the payment by approximately ufmip_amount × pmt_factor.
CRITICAL ROUNDING RULE:
Never round monthly_rate, compound, numerator, or denominator.
Round pi_payment only at output (2 decimal places).
Rate monthly_r (1+r)^360 factor
6.00% 0.0050000 6.02258 0.0059955
6.25% 0.0052083 6.48917 0.0061572
6.50% 0.0054167 6.99180 0.0063207
6.75% 0.0056250 7.53325 0.0064860
7.00% 0.0058333 8.11650 0.0066530
7.25% 0.0060417 8.74477 0.0068218
7.50% 0.0062500 9.42153 0.0069921
7.75% 0.0064583 10.15051 0.0071641
8.00% 0.0066667 10.93573 0.0073376
FHA income qualification follows the same framework as Conventional
with the following FHA-specific distinctions:
FHA DISTINCTION 1 — Student loan treatment:
FHA rule (HUD 4000.1 Section II.A.4.b):
USE: 1% of outstanding loan balance per month
OR: documented fully-amortizing monthly payment from servicer
(Whichever the lender documents — IBR/IDR payments NOT acceptable as
the qualifying payment unless fully amortizing)
NOTE: This differs from Fannie Mae (0.5% IDR override).
FHA requires 1% of balance unless the documented payment is a
fully-amortizing payment that will fully pay off the loan.
qualifying_student_loan_payment = MAX(
student_loan_balance × 0.01,
documented_fully_amortizing_monthly_payment
)
flag STUDENT_LOAN_FHA_1PCT_RULE
FHA DISTINCTION 2 — Gift funds:
100% of down payment may come from gift funds for FHA (PRIMARY).
Gift funds DO NOT require a minimum borrower cash contribution.
Requires gift letter and donor documentation (HUD 4000.1 II.A.4).
flag FHA_GIFT_FUNDS_ALLOWED if gift_funds_amount > 0
FHA DISTINCTION 3 — Non-borrowing spouse liabilities (community property states):
In community property states (AZ, CA, ID, LA, NV, NM, TX, WA, WI):
Debts of non-borrowing spouse are included in back-end DTI
even if spouse is not on the loan.
flag COMMUNITY_PROPERTY_STATE_DEBT_CHECK if state IN [AZ, CA, ID, LA, NV, NM, TX, WA, WI]
FHA DISTINCTION 4 — Boarder income:
May count up to 30% of qualifying income if:
- 12-month history of receiving boarder payments documented
- Boarder is not a blood relative
flag BOARDER_INCOME_APPLICABLE if boarder_income > 0
CHECKS IDENTICAL TO CONVENTIONAL:
Self-employment: 2-year history, CPA letter
Variable income: 24-month history, 2-year average
Non-taxable gross-up: 1.25× (SS, disability)
Declining income: use lower of 2 years
Income continuance: 3+ years
gmi_qualifying = gmi_for_dti (from BorrowerProfile — includes all treatment)
If community property state debt inclusion: adjust total_monthly_dti_obligations accordingly.
STEP 1 — Housing expense (front-end):
front_end_housing_expense = pi_payment + monthly_tax + monthly_insurance + hoa_monthly
NOTE: Monthly MIP is NOT included in front-end DTI.
Front-end = P&I + T + I + HOA only.
FHA front-end guideline: ≤ 31% (AUS may exceed)
front_end_dti = front_end_housing_expense / gmi_qualifying
STEP 2 — Total monthly obligations:
total_monthly_obligations = total_monthly_dti_obligations (from BorrowerProfile)
NOTE: Student loan uses 1% rule per Stage 11. If BorrowerProfile used 0.5%,
recalculate with 1% and flag FHA_STUDENT_LOAN_DTI_ADJUSTMENT.
STEP 3 — Back-end DTI:
total_monthly_debt = front_end_housing_expense + monthly_mip + total_monthly_obligations
back_end_dti = total_monthly_debt / gmi_qualifying
STEP 4 — PITIM (for display):
pitim = front_end_housing_expense + monthly_mip
CRITICAL: monthly_mip IS included in back-end DTI.
Front-end excludes MIP; back-end includes MIP.
ROUNDING RULE: Full precision throughout. Round DTI at output only.
FHA uses TOTAL Mortgage Scorecard (not DU or LPA).
TOTAL SCORECARD PATH (automated):
Criteria for TOTAL Accept (approximate — actual TOTAL is a black box):
- Credit score ≥ 580
- Back-end DTI ≤ 57% (TOTAL may approve up to 57%)
- No recent foreclosure, bankruptcy within required waiting periods
- Satisfactory payment history
IF qualifying_credit_score ≥ 580 AND back_end_dti ≤ 0.57:
aus_path = TOTAL_ACCEPT_ELIGIBLE
note: "DTI ≤ 57% and score ≥ 580 — eligible for TOTAL Scorecard Accept finding"
IF qualifying_credit_score ≥ 580 AND back_end_dti > 0.57:
aus_path = TOTAL_REFER
note: "DTI [X]% exceeds TOTAL 57% ceiling — TOTAL will likely Refer"
MANUAL UNDERWRITE PATH:
IF aus_path = TOTAL_REFER OR qualifying_credit_score < 580:
manual_dti_standard = 0.43 (43% hard limit per HUD 4000.1)
manual_dti_preferred = 0.40
IF back_end_dti ≤ 0.43:
aus_path = TOTAL_REFER_MANUAL_ELIGIBLE
note: "TOTAL Refer but DTI ≤ 43% — manual underwrite path available"
flag MANUAL_UW_COMPENSATING_FACTORS_REQUIRED
COMPENSATING FACTORS (manual UW, may allow up to 50% back-end):
- Verified and documented cash reserves (3+ months PITI)
- Minimal payment shock (new payment ≤ prior payment + 5%)
- Residual income (not a formal VA test — general disposable income)
- Energy efficient home (FHA EEM exception)
If 2+ compensating factors: flag MANUAL_DTI_STRETCH_POSSIBLE (up to 50%)
ELIF back_end_dti > 0.43:
aus_path = TOTAL_REFER_MANUAL_INELIGIBLE
note: "DTI [X]% exceeds manual UW limit of 43%. FHA ineligible."
qualification_status = INELIGIBLE_DTI
SCORE 500–579 PATH:
Scores 500–579 are ALWAYS manual underwrite — TOTAL Scorecard will not Accept.
IF qualifying_credit_score < 580:
aus_path = MANUAL_ONLY
Apply manual DTI limits (43% hard / 50% with 2+ compensating factors)
FHA RESERVE REQUIREMENTS:
Standard purchase (1-2 unit): No reserve requirement
3-4 unit properties: 3 months PITI required
Manual underwrite: 3 months PITI as compensating factor (not hard required)
reserve_months_required:
IF property_unit_count IN [3, 4]: 3
ELIF aus_path IN [TOTAL_REFER_MANUAL_ELIGIBLE, MANUAL_ONLY]: 2 (preferred as compensating factor)
ELSE: 0
required_reserves = reserve_months_required × pitim
IF required_reserves > 0:
IF funds_available_for_reserves ≥ required_reserves:
reserve_status = MEETS_REQUIREMENT
reserve_surplus = funds_available_for_reserves - required_reserves
ELSE:
reserve_status = SHORTFALL
reserve_gap = required_reserves - funds_available_for_reserves
IF property_unit_count IN [3,4]: flag RESERVE_SHORTFALL_BLOCKING
ELSE: flag RESERVE_SHORTFALL_ADVISORY
ELSE:
reserve_status = NOT_REQUIRED
note: "FHA standard purchase — no minimum reserve requirement"
NOTE: Even when not required, document available reserves for AUS submission.
TOTAL Scorecard considers reserves in its internal scoring.
PURCHASE:
cash_to_close = down_payment_amount
+ estimated_closing_costs
+ prepaids_and_escrow
− seller_concession_amount
− lender_credit_amount
UFMIP CASH TREATMENT:
ufmip_cash_required = 0 (UFMIP is always financed into the loan)
Never include UFMIP in cash_to_close for purchase loans.
flag UFMIP_FINANCED — "$[ufmip_amount] UFMIP financed into loan. No additional cash required."
FHA SELLER CONCESSION LIMIT:
Maximum seller concessions: 6% of purchase price (regardless of LTV)
Note: FHA seller concession limit is fixed at 6% — does not vary by LTV like Conventional.
IF seller_concession_amount > purchase_price × 0.06:
flag FHA_SELLER_CONCESSION_LIMIT
effective_concession = purchase_price × 0.06
Estimated closing costs (Gear 1 estimate):
est_closing_costs = base_loan × 0.02 (2% of BASE loan — not total)
Prepaid interest:
daily_rate = fha_rate / 365
prepaid_interest = daily_rate × fha_total_loan × 15 (15-day default estimate)
NOTE: Prepaid interest uses total loan (reflects actual first month proration basis)
Escrow setup:
escrow_setup = (monthly_tax + monthly_insurance) × 3
prepaids_and_escrow = prepaid_interest + escrow_setup
CTC FEASIBILITY:
IF funds_available_for_closing ≥ cash_to_close:
ctc_status = MEETS_REQUIREMENT
ctc_surplus = funds_available_for_closing - cash_to_close
ELSE:
ctc_status = SHORTFALL
ctc_gap = cash_to_close - funds_available_for_closing
flag CTC_SHORTFALL
qualification_status:
QUALIFIED_TOTAL_ACCEPT:
All gates passed AND aus_path = TOTAL_ACCEPT_ELIGIBLE
QUALIFIED_MANUAL_UW:
All gates passed AND aus_path IN [TOTAL_REFER_MANUAL_ELIGIBLE, MANUAL_ONLY]
Requires compensating factors documentation
CONDITIONAL:
All gates passed AND one or more of:
- SE_INCOME_CONDITIONAL
- VARIABLE_INCOME_CONDITIONAL
- FHA_10PCT_DOWN_REQUIRED (score 500–579 — higher down, manual only)
INELIGIBLE:
Any gate failed OR aus_path = TOTAL_REFER_MANUAL_INELIGIBLE
{
"schema_version": "clarity_engine_v1.0",
"skill": "FHA",
"skill_version": "1.0",
"deal_id": "string",
"borrower_id": "string",
"created_at": "ISO 8601 UTC",
"qualification_status": "QUALIFIED_TOTAL_ACCEPT | QUALIFIED_MANUAL_UW | CONDITIONAL | INELIGIBLE",
"ineligible_reason": "string | null",
"aus_path": "TOTAL_ACCEPT_ELIGIBLE | TOTAL_REFER | TOTAL_REFER_MANUAL_ELIGIBLE | TOTAL_REFER_MANUAL_INELIGIBLE | MANUAL_ONLY",
"loan": {
"base_loan": 0.00,
"ufmip_amount": 0.00,
"fha_total_loan": 0.00,
"fha_ltv_base": 0.0000,
"fha_ltv_financed": 0.0000,
"down_payment_amount": 0.00,
"down_payment_tier": "3.5% | 10%",
"property_value": 0.00
},
"rate": {
"fha_rate": 0.0000,
"note": "No LLPA — FHA rate is flat market rate"
},
"payment": {
"pi_payment": 0.00,
"monthly_tax": 0.00,
"monthly_insurance": 0.00,
"hoa_monthly": 0.00,
"monthly_mip": 0.00,
"piti": 0.00,
"pitim": 0.00
},
"mip": {
"ufmip_rate": 0.0175,
"ufmip_amount": 0.00,
"annual_mip_rate": 0.0000,
"monthly_mip": 0.00,
"mip_duration_months": 0,
"mip_duration_label": "string",
"lifetime_mip": 0.00,
"mip_cancels": false
},
"dti": {
"gmi_qualifying": 0.00,
"front_end_dti": 0.0000,
"back_end_dti": 0.0000,
"total_aus_limit": 0.57,
"manual_limit": 0.43,
"dti_status": "WITHIN_TOTAL_AUS | WITHIN_MANUAL | EXCEEDS_ALL"
},
"cash_to_close": {
"down_payment": 0.00,
"ufmip_cash": 0.00,
"estimated_closing_costs": 0.00,
"prepaids_and_escrow": 0.00,
"seller_concession": 0.00,
"lender_credit": 0.00,
"total_cash_to_close": 0.00,
"funds_available": 0.00,
"ctc_status": "MEETS_REQUIREMENT | SHORTFALL",
"ctc_surplus_or_gap": 0.00
},
"reserves": {
"reserve_months_required": 0,
"pitim_for_reserve": 0.00,
"required_reserves": 0.00,
"funds_available_for_reserves": 0.00,
"reserve_status": "MEETS_REQUIREMENT | SHORTFALL | NOT_REQUIRED"
},
"flags": [],
"constraint_signals": [],
"human_review_required": false,
"human_review_reasons": [],
"lineage_trace": {
"gate_1_result": "string",
"gate_2_result": "string",
"gate_3_result": "string",
"gate_4_result": "string",
"ufmip_computation": {},
"mip_computation": {},
"dti_computation": {},
"ctc_computation": {}
}
}
Inputs:
qualifying_credit_score: 698
occupancy_type: PRIMARY
loan_purpose: PURCHASE
purchase_price: 425,000
appraised_value: 425,000
down_payment_amount: 14,875 (3.5%)
gmi_for_dti: 8,458.33
total_monthly_dti_obligations: 785.00
monthly_tax: 531.25
monthly_insurance: 100.00
hoa_monthly: 0.00
funds_available_for_closing: 28,105.36
funds_available_for_reserves: 60,894.64
fha_down_payment_tier: "3.5%"
Gate 3 — Credit Score
score 698 ≥ 580 → fha_down_payment_tier = "3.5%" ✓
gate_3 = PASS
Stage 7 — Loan Computation
property_value = MIN(425,000, 425,000) = 425,000
down_payment_amount = 14,875.00
base_loan = 425,000 - 14,875 = 410,125.00
fha_ltv_base = 410,125 / 425,000 = 0.9650 = 96.50%
ufmip_amount = 410,125 × 0.0175 = 7,177.19
fha_total_loan = 410,125.00 + 7,177.19 = 417,302.19
fha_ltv_financed = 417,302.19 / 425,000 = 0.9819 = 98.19%
Stage 8 — MIP Rate and Duration
fha_ltv_base = 96.50% > 95% → annual_mip_rate = 0.0055 (0.55%)
fha_ltv_base = 96.50% > 90% → mip_duration_months = 360 (life of loan)
mip_duration_label = "Life of loan — MIP does not cancel"
Stage 9 — Monthly MIP
monthly_mip_exact = 410,125 × 0.0055 / 12 = 187.9740
monthly_mip = 187.97 (rounded)
lifetime_mip = 187.97 × 360 = 67,669.20
Stage 10 — Rate and P&I
fha_rate = 6.50%
monthly_rate = 0.065 / 12 = 0.0054167
compound = (1.0054167)^360 = 6.99180
pmt_factor = (0.0054167 × 6.99180) / (6.99180 - 1) = 0.037872 / 5.99180 = 0.0063207
P&I = fha_total_loan × pmt_factor
= 417,302.19 × 0.0063207
= 2,637.63
VERIFY: P&I computed on total loan (417,302.19), not base loan (410,125).
Base-loan P&I would be: 410,125 × 0.0063207 = 2,592.27 (WRONG — understates by $45.36/mo)
Stage 12 — DTI
front_end_housing = 2,637.63 + 531.25 + 100.00 + 0 = 3,268.88
front_end_dti = 3,268.88 / 8,458.33 = 0.3865 = 38.65%
pitim = 3,268.88 + 187.97 = 3,456.85
total_monthly_debt = 3,268.88 + 187.97 + 785.00 = 4,241.85
back_end_dti = 4,241.85 / 8,458.33 = 0.5015 = 50.15%
TOTAL AUS 57% limit: 50.15% ≤ 57% → WITHIN_TOTAL_AUS ✓
Manual 43% limit: 50.15% > 43% → exceeds manual
dti_status = WITHIN_TOTAL_AUS
Stage 13 — AUS Path
score 698 ≥ 580 AND back_end_dti 50.15% ≤ 57%
aus_path = TOTAL_ACCEPT_ELIGIBLE
Stage 14 — Reserves
Standard primary purchase → reserve_months_required = 0
reserve_status = NOT_REQUIRED
funds_available_for_reserves: 60,894.64 (well above any threshold)
Stage 15 — Cash to Close
est_closing_costs = 410,125 × 0.02 = 8,202.50
daily_rate = 0.065 / 365 = 0.00017808
prepaid_interest = 0.00017808 × 417,302.19 × 15 = 1,114.71
escrow_setup = (531.25 + 100.00) × 3 = 1,893.75
prepaids = 1,114.71 + 1,893.75 = 3,008.46
cash_to_close = 14,875.00 + 8,202.50 + 3,008.46 - 0 - 0 = 26,085.96
ufmip_cash = $0.00 (financed)
funds_available = 28,105.36
ctc_status = MEETS_REQUIREMENT (surplus $2,019.40)
Stage 16 — Final Result
qualification_status: QUALIFIED_TOTAL_ACCEPT
approved_loan_amount: 417,302.19 (fha_total_loan)
base_loan: 410,125.00
ufmip_amount: 7,177.19
fha_rate: 6.50%
pi_payment: 2,637.63
monthly_mip: 187.97 (life of loan)
pitim: 3,456.85
front_end_dti: 38.65%
back_end_dti: 50.15%
lifetime_mip: 67,669.20
cash_to_close: 26,085.96
reserve_status: NOT_REQUIRED
Constraint signals:
FHA_MIP_LIFE_OF_LOAN — $187.97/mo, $67,669.20 lifetime, never cancels
FHA_CTC_MARGIN_TIGHT — surplus only $2,019.40 (< $5,000 threshold)
Inputs:
qualifying_credit_score: 540
occupancy_type: PRIMARY
purchase_price: 320,000
down_payment_amount: 32,000 (10%)
gmi_for_dti: 6,500.00
total_monthly_dti_obligations: 400.00
monthly_tax: 400.00
monthly_insurance: 80.00
hoa_monthly: 0.00
funds_available_for_closing: 50,000.00
funds_available_for_reserves: 25,000.00
fha_down_payment_tier: "10%"
Gate 3 — Credit Score
score 540: 500 ≤ 540 < 580 → fha_down_payment_tier = "10%"
flag FHA_10PCT_DOWN_REQUIRED
aus_path = MANUAL_ONLY (score < 580 — TOTAL will not Accept)
Stage 7 — Loan Computation
base_loan = 320,000 - 32,000 = 288,000.00
fha_ltv_base = 288,000 / 320,000 = 0.9000 = 90.00%
ufmip_amount = 288,000 × 0.0175 = 5,040.00
fha_total_loan = 288,000 + 5,040 = 293,040.00
fha_ltv_financed = 293,040 / 320,000 = 0.9157 = 91.57%
Stage 8 — MIP Rate and Duration
fha_ltv_base = 90.00% — exactly at boundary ≤ 90%
BOUNDARY RULE: ≤ 90% → duration = 11 YEARS (132 months)
annual_mip_rate = 0.0050 (0.50%)
mip_duration_months = 132
mip_duration_label = "MIP cancels after 11 years (month 132)"
NOTE: Exactly 90.00% → ≤ 90% boundary → 11-year duration, NOT life of loan.
The > 90% threshold is strict greater-than. 90.00% = 11 years.
Stage 9 — Monthly MIP
monthly_mip_exact = 288,000 × 0.0050 / 12 = 120.0000
monthly_mip = 120.00
lifetime_mip = 120.00 × 132 = 15,840.00
MIP savings vs life-of-loan: if LTV were 90.01%, duration = 360
life-of-loan MIP = 120.00 × 360 = 43,200.00 vs 15,840 → $27,360 savings at exactly 90%
Stage 10 — Rate and P&I
fha_rate = 6.50%
pmt_factor = 0.0063207 (from table)
P&I = 293,040.00 × 0.0063207 = 1,852.21
Stage 12 — DTI
front_end_housing = 1,852.21 + 400.00 + 80.00 + 0 = 2,332.21
front_end_dti = 2,332.21 / 6,500.00 = 0.3588 = 35.88%
pitim = 2,332.21 + 120.00 = 2,452.21
total_monthly_debt = 2,332.21 + 120.00 + 400.00 = 2,852.21
back_end_dti = 2,852.21 / 6,500.00 = 0.4388 = 43.88%
TOTAL AUS 57% limit: N/A — score 540 < 580 → MANUAL_ONLY
Manual 43% limit: 43.88% > 43% → EXCEEDS standard manual limit
COMPENSATING FACTOR ANALYSIS:
back_end_dti = 43.88% → 0.88% over manual standard (43%)
Manual limit with 2+ compensating factors: 50%
43.88% ≤ 50% → MANUAL_DTI_STRETCH_ELIGIBLE with compensating factors
Stage 13 — AUS Path
aus_path = MANUAL_ONLY (score < 580)
DTI 43.88% > 43% standard → requires compensating factors
DTI 43.88% ≤ 50% stretch → MANUAL_ELIGIBLE_WITH_COMP_FACTORS
flag MANUAL_UW_COMPENSATING_FACTORS_REQUIRED
flag MANUAL_DTI_STRETCH_APPLICABLE
Available compensating factors to document:
- Funds available for reserves: $25,000 (10.2 months PITIM) → STRONG
- Payment history (advisor to verify 12-month clean)
Stage 15 — Cash to Close
est_closing_costs = 288,000 × 0.02 = 5,760.00
daily_rate = 0.065 / 365 = 0.00017808
prepaid_interest = 0.00017808 × 293,040 × 15 = 782.78
escrow_setup = (400 + 80) × 3 = 1,440.00
prepaids = 782.78 + 1,440.00 = 2,222.78
cash_to_close = 32,000 + 5,760 + 2,222.78 = 39,982.78
funds_available = 50,000.00
ctc_status = MEETS_REQUIREMENT (surplus $10,017.22)
Stage 16 — Final Result
qualification_status: QUALIFIED_MANUAL_UW (with compensating factors)
base_loan: 288,000.00
fha_total_loan: 293,040.00
ufmip: 5,040.00
pi_payment: 1,852.21
monthly_mip: 120.00 (11 years only — cancels month 132)
pitim: 2,452.21
front_end_dti: 35.88%
back_end_dti: 43.88%
lifetime_mip: 15,840.00
cash_to_close: 39,982.78
aus_path: MANUAL_ONLY
flags: [FHA_10PCT_DOWN_REQUIRED, MANUAL_UW_COMPENSATING_FACTORS_REQUIRED, MANUAL_DTI_STRETCH_APPLICABLE, FHA_MIP_11YR_CANCEL]
Purpose: Demonstrates high-credit FHA vs Conventional comparison. Park qualifies strongly for Conventional (preferred). This example shows FHA MIP cost impact that drives the Router's Conventional-first priority for score ≥ 740.
Inputs:
qualifying_credit_score: 755
occupancy_type: PRIMARY
purchase_price: 550,000
down_payment_amount: 55,000 (10%)
gmi_for_dti: 12,500.00
total_monthly_dti_obligations: 650.00
monthly_tax: 687.50
monthly_insurance: 120.00
Stage 7 — Loan Computation
base_loan = 550,000 - 55,000 = 495,000.00
fha_ltv_base = 495,000 / 550,000 = 0.9000 = 90.00%
ufmip_amount = 495,000 × 0.0175 = 8,662.50
fha_total_loan = 495,000 + 8,662.50 = 503,662.50
fha_ltv_financed = 503,662.50 / 550,000 = 0.9157 = 91.57%
Stage 8 — MIP Rate and Duration
fha_ltv_base = 90.00% → exactly ≤ 90% boundary
annual_mip_rate = 0.0050 (0.50%)
mip_duration_months = 132 (11 years)
mip_duration_label = "MIP cancels month 132"
Stage 9 — Monthly MIP
monthly_mip_exact = 495,000 × 0.0050 / 12 = 206.2500
monthly_mip = 206.25
lifetime_mip = 206.25 × 132 = 27,225.00
Stage 10 — Rate and P&I
P&I = 503,662.50 × 0.0063207 = 3,183.49
Stage 12 — DTI
front_end_housing = 3,183.49 + 687.50 + 120.00 + 0 = 3,990.99
front_end_dti = 3,990.99 / 12,500 = 0.3193 = 31.93%
pitim = 3,990.99 + 206.25 = 4,197.24
total_monthly_debt = 3,990.99 + 206.25 + 650.00 = 4,847.24
back_end_dti = 4,847.24 / 12,500 = 0.3878 = 38.78%
TOTAL AUS 57%: PASS ✓
aus_path = TOTAL_ACCEPT_ELIGIBLE
Stage 15 — Cash to Close
est_closing_costs = 495,000 × 0.02 = 9,900.00
daily_rate = 0.065 / 365 = 0.00017808
prepaid_interest = 0.00017808 × 503,662.50 × 15 = 1,345.40
escrow_setup = (687.50 + 120.00) × 3 = 2,422.50
prepaids = 1,345.40 + 2,422.50 = 3,767.90
cash_to_close = 55,000 + 9,900 + 3,767.90 = 68,667.90
FHA vs Conventional Comparison (Park)
FHA: pitim = 4,197.24 | back_dti = 38.78% | lifetime_mip = 27,225 (11yr)
Conventional: pitia = 4,101.24 | back_dti = 38.01% | lifetime_pmi = 17,985 (cancelable at month 109)
FHA higher by: $96.00/month
FHA lifetime MI higher by: $9,240.00
Conclusion: Conventional is preferred for Park (score 755, LLPA = 0%).
Router Rule 3 correctly routes Conventional-first for score ≥ 740.
Stage 16 — Final Result
qualification_status: QUALIFIED_TOTAL_ACCEPT
fha_total_loan: 503,662.50
pi_payment: 3,183.49
monthly_mip: 206.25 (11 years)
pitim: 4,197.24
back_end_dti: 38.78%
lifetime_mip: 27,225.00
cash_to_close: 68,667.90
note: "FHA qualified but Conventional preferred at this credit tier — $96/month savings"
FF-01: Computing P&I on base_loan instead of fha_total_loan
P&I must always use fha_total_loan (includes UFMIP).
base_loan P&I understates monthly payment by [ufmip × pmt_factor].
For Example A: base P&I = 2,592.27 vs correct 2,637.63 — $45.36/mo error.
FF-02: Computing UFMIP on fha_total_loan
UFMIP = base_loan × 0.0175.
Never compute UFMIP on the total loan — circular and incorrect.
Correct: 410,125 × 0.0175 = 7,177.19. Wrong (circular): total × 0.0175.
FF-03: Computing monthly MIP on fha_total_loan
Monthly MIP = base_loan × annual_mip_rate / 12.
Using total_loan overstates MIP by [ufmip × rate / 12].
FF-04: Using fha_ltv_financed for MIP rate or duration lookup
fha_ltv_base governs MIP rate and duration.
fha_ltv_financed is informational only.
For Example A: base LTV 96.50% → 0.55% and life of loan (correct).
financed LTV 98.19% → would give same result here but rule is wrong.
FF-05: Applying LLPA to FHA loans
FHA loans have no LLPA rate grid.
FHA pricing: flat market rate regardless of credit score × LTV combination.
MIP provides the risk-based pricing for FHA — not rate adjustment.
FF-06: Using 0.5% student loan rule for FHA
FHA uses 1% of outstanding balance (HUD 4000.1).
Conventional (Fannie Mae) uses 0.5% IDR override.
Never apply Fannie B3-6-05 to FHA qualification.
FF-07: Including UFMIP in cash-to-close for purchase loans
UFMIP is financed — $0 cash required at closing for UFMIP.
Including ufmip_amount in CTC overstates required cash by ~1.75% of base loan.
FF-08: MIP duration = life of loan when LTV ≤ 90%
Exactly 90.00% → 11-year duration (not life of loan).
LTV > 90% (strictly greater) → life of loan.
The boundary is critical: 90.00% saves $27,360 in Example B vs life-of-loan.
FF-09: Applying PMI logic to FHA
FHA has no PMI. Never reference PMI rates, PMI cancellation HPA rules,
or PMI tables in this skill. FHA uses UFMIP + annual MIP only.
FF-10: Applying conventional LLPA rate table to FHA rate
FHA rate = base market rate. No score/LTV adjustment grid.
Applying LLPA to FHA overstates cost for lower-credit borrowers
and misrepresents the FHA program's purpose.
| Skill | Relationship |
|---|---|
Clarity_Engine_Borrower_Profile_SKILL.md | Required input — provides BorrowerProfile |
Clarity_Engine_Program_Router_SKILL.md | Required input — provides ProgramEvaluationQueue FHA entry |
Clarity_Engine_Math_SKILL.md | Reference — PMT factor computation |
Clarity_Engine_Constraint_Detection_SKILL.md | Receives FHAConstraintFlags |
Clarity_Engine_Conventional_SKILL.md | Sibling skill — FHA vs Conventional comparison |
Clarity_Engine_Optimization_SKILL.md | Downstream — receives FHAQualResult as baseline |
Clarity_Engine_Audit_Trace_SKILL.md | Downstream — receives FHALineageTrace |
Clarity Engine — FHA Mortgage Skill v1.0 | CONFIDENTIAL — PreFi, Inc. / Purpose Technology, Inc. d/b/a Purlend