← Back to Interaction Rule Set

Clarity Engine — FHA Mortgage Skill

Version: 1.0 | Status: Implementation-Ready — Gear 1

Table of Contents SKILL PURPOSE INVOCATION EXECUTION SEQUENCE STAGE 2 — EXTRACT QUALIFICATION INPUTS STAGES 3–6 — ELIGIBILITY GATES STAGE 7 — BASE LOAN, UFMIP, AND TOTAL LOAN STAGE 8 — MIP RATE AND DURATION STAGE 9 — MONTHLY MIP COMPUTATION STAGE 10 — RATE AND P&I PAYMENT STAGE 11 — INCOME QUALIFICATION STAGE 12 — DTI COMPUTATION STAGE 13 — AUS PATH DETERMINATION STAGE 14 — RESERVE VERIFICATION STAGE 15 — CASH TO CLOSE STAGE 16 — FINAL QUALIFICATION DETERMINATION STAGE 17 — EMIT FHAQualResult WORKED EXAMPLES FORBIDDEN PATTERNS COMPANION SKILLS

Clarity Engine — FHA Mortgage Skill

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.

SKILL PURPOSE

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:

This 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.

INVOCATION

Invoke this skill when:

Required inputs:

**If FHA entry has eligibility = INELIGIBLE:** return FHA_INELIGIBLE — [reason] and stop.

EXECUTION SEQUENCE


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.

STAGE 2 — EXTRACT QUALIFICATION INPUTS


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.

STAGES 3–6 — ELIGIBILITY GATES

Gate 1: Occupancy


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

Gate 2: FHA Loan Limit


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

Gate 3: Credit Score and Down Payment Tier


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).

Gate 4: LTV Cap


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.

STAGE 7 — BASE LOAN, UFMIP, AND TOTAL LOAN

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)

Cash-Out Refinance Adjustment


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

STAGE 8 — MIP RATE AND DURATION

MIP Rate Table (30-year loan, HUD March 2023 reduction)


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.

MIP Duration Table


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)"

MIP Decision Logic


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)"

STAGE 9 — MONTHLY MIP COMPUTATION


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"

STAGE 10 — RATE AND P&I PAYMENT


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).

PMT Factor Reference Table


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

STAGE 11 — INCOME QUALIFICATION

Income Verification


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

Final Qualifying GMI


gmi_qualifying = gmi_for_dti  (from BorrowerProfile — includes all treatment)
If community property state debt inclusion: adjust total_monthly_dti_obligations accordingly.

STAGE 12 — DTI COMPUTATION


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.

STAGE 13 — AUS PATH DETERMINATION

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)

STAGE 14 — RESERVE VERIFICATION


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.

STAGE 15 — CASH TO CLOSE


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

STAGE 16 — FINAL QUALIFICATION DETERMINATION


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

STAGE 17 — EMIT FHAQualResult


{
  "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": {}
  }
}

WORKED EXAMPLES

Example A — Marcus & Diana Webb (score 698, 3.5% down, $425,000, PRIMARY)

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)

Example B — Low Credit Borrower (score 540, 10% down, $320,000, PRIMARY)

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]

Example C — Jennifer Park FHA Comparison (score 755, 10% down, $550,000)

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"

FORBIDDEN PATTERNS


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.

COMPANION SKILLS

SkillRelationship
Clarity_Engine_Borrower_Profile_SKILL.mdRequired input — provides BorrowerProfile
Clarity_Engine_Program_Router_SKILL.mdRequired input — provides ProgramEvaluationQueue FHA entry
Clarity_Engine_Math_SKILL.mdReference — PMT factor computation
Clarity_Engine_Constraint_Detection_SKILL.mdReceives FHAConstraintFlags
Clarity_Engine_Conventional_SKILL.mdSibling skill — FHA vs Conventional comparison
Clarity_Engine_Optimization_SKILL.mdDownstream — receives FHAQualResult as baseline
Clarity_Engine_Audit_Trace_SKILL.mdDownstream — receives FHALineageTrace

Clarity Engine — FHA Mortgage Skill v1.0 | CONFIDENTIAL — PreFi, Inc. / Purpose Technology, Inc. d/b/a Purlend