From borrower data to eligible offer: program matching, rate calculation, and fee assembly
The pricing engine is a standalone service
The engine takes borrower + property data and matches it against product-specific program schemas
@dataclass(frozen=True, slots=True, kw_only=True) class PricingInput: property_value: int | None occupancy: Occupancy | None purpose: LoanPurpose | None state: State | None property_type: PropertyType | None credit_score: int | None cltv: Decimal | None loan_amount: Decimal | None lien_position: LienPosition | None lien_balance: Decimal | None
Each program runs through a sequential pipeline, every step is audited
pricing/calc/cltv.pypricing/calc/max_loan_amount.pypricing/calc/offers.py:28-30pricing/calc/eligibility.py:287pricing/calc/eligibility.py:287pricing/calc/eligibility.py:287pricing/calc/rate.pypricing/calc/payment.pypricing/calc/fees.pypricing/calc/apr.pypricing/calc/rounding.pypricing/audit.pyThree rule systems, one expression evaluator
Every program evaluation produces one of four result types
pricing/offer.py:14pricing/offer.py:27pricing/offer.py:38pricing/offer.py:33Core design principles of the pricing engine