Source: https://guthlabs.ai/docs/instruments/pmi-ltv-estimator/mechanism/

instrument mechanism / verified-clean

# PMI / LTV Estimator mechanism

The inspectable method record for PMI / LTV Estimator, kept separate from implementation and qualification.

Status: **VERIFIED_CLEAN**Lifecycle: **verified-clean**

## Model scope

The supplied honest label is directionally appropriate but should explicitly state that the 80% result is only a simplified eligibility estimate, not a guaranteed cancellation date or legal entitlement. The specification must define the PMI cost formula, PMI-rate units, and amortization/principal-reduction inputs before implementation can receive PASS.

- LTV=loan/appraised_value is correct when both values use the same currency and loan means the current loan balance.

- No formula is specified for estimated annual PMI cost. A common rough assumption is current loan balance × PMI rate, but PMI may instead be based on the original loan amount and may be recalculated periodically.

- No formula or required inputs are specified for estimated payments to 80% LTV. This requires at least a principal-reduction amount per payment or a complete amortization schedule; dividing the balance gap by the total payment would be incorrect because total payments include interest.

- The statement 'PMI removal at LTV≤80%' is an oversimplification. Borrower-requested cancellation, automatic termination, lender rules, loan type, payment history, and applicable law can differ; automatic termination is commonly associated with 78% original LTV rather than 80%.

## Units and conventions

- loan_balance and appraised_value are positive monetary amounts in the same currency.

- For the test vectors, PMI rate is supplied as a percentage number such as 0.5 and converted to a decimal by dividing by 100.

- For test-vector purposes, estimated annual PMI cost is defined as loan_balance × PMI_rate_decimal and represents a pre-removal annualized estimate.

- For test-vector purposes, estimated payments to 80% LTV is ceil(max(0, loan_balance − 0.80 × appraised_value) ÷ principal_reduction_per_payment), where principal_reduction_per_payment is the principal retired each payment, not the total payment.

- LTV output is expressed as a percentage: loan_balance ÷ appraised_value × 100.

## Inspectable vector

One of 4 source-bound review vectors:

````
{
  "inputs": {
    "loan_balance": 360000,
    "appraised_value": 450000,
    "pmi_rate_percent": 0.5,
    "principal_reduction_per_payment": 1500
  },
  "expected_outputs": {
    "ltv_percent": 80,
    "estimated_pmi_cost_per_year": 1800,
    "estimated_payments_to_80_ltv": 0
  },
  "working": "LTV = 360000 ÷ 450000 × 100 = 0.8 × 100 = 80%. PMI rate = 0.5 ÷ 100 = 0.005. Annual PMI = 360000 × 0.005 = 1800. 80% target balance = 450000 × 0.80 = 360000. Balance gap = 360000 − 360000 = 0. Payments = max(0, 0 ÷ 1500) = 0."
}
````

## Failure boundary

**BREAK_CLAIMED** · SELF_FLAGGED

The specification has a division-by-zero failure when home_value is zero and cannot compute a payment count for any ordinary case because it provides no payment amount, principal-per-payment value, interest rate, or amortization schedule. The PMI-rate input also has a potentially severe percent-versus-decimal convention ambiguity.

## Other records

[01**Overview**](<https://guthlabs.ai/docs/instruments/pmi-ltv-estimator/>)[03**Implementation**](<https://guthlabs.ai/docs/instruments/pmi-ltv-estimator/implementation/>)[04**Qualification**](<https://guthlabs.ai/docs/instruments/pmi-ltv-estimator/qualification/>)

## Sources and evidence

These pointers bind the page to evidence. They do not grant authority or collapse verification into deployment.

- `VERIFIED_LEDGER.json`

- `evidence-tranche4/tranche4-results.json`

- `BOUNDARY_HAZARD_CATALOG.json`
