Skip to main content

MIAC SRP Workbook Analysis

Source

File: MH_nGSA_3-31-2026.xlsx — MIAC Analytics SRP (Servicing Released Premium) pricing workbook provided by Third Federal (PowerSeller Desktop App client). Date: March 31, 2026.

WORKING DRAFT — Pending validation by Greg, Jay, and Tom.

Key Finding

This is NOT a loan-level MSR valuation. It is a market pricing grid — a set of base SRP values with multi-dimensional adjustments that can be applied to ANY loan in the pipeline. The structure is remarkably similar to LLPA grids and is directly evaluable by PSX's stacking engine.

Workbook Structure

8 sheets organized by product type and servicing fee level:

SheetProductServicing FeeRowsColumns
Conventional 30Conv 30yr Fixed25 bps3619
Conventional 15Conv 15yr Fixed3618
GN30_44Govt 30yr (FHA/VA)44 bps4115
GN30_315Govt 30yr (FHA/VA)31.5 bps3612
GN30_19Govt 30yr (FHA/VA)19 bps3612
GN15_44Govt 15yr (FHA/VA)44 bps4115
GN15_315Govt 15yr (FHA/VA)31.5 bps3712
GN15_19Govt 15yr (FHA/VA)19 bps3612

Data Components Per Sheet

1. Market Context (Row 3)

  • Note Rate: Current market note rate (6.320% as of 3/31/2026)
  • Par Rate: Par coupon rate (6.375%)
  • Date: Valuation date

2. Base SRP Grid (Rows 7-23, Conventional)

The core pricing grid. SRP values in basis points indexed by rate spread to par (how far the loan's rate is from the current par rate):

Index SpreadSRP (bps)MultipleMeaning
-1.0001536.12xDeep discount — loan rate well below par
-0.5001395.56xBelow par
0.0001265.04xAt par — baseline
+0.5001004.00xAbove par — higher prepay risk
+1.000853.40xWell above par — highest prepay risk

The Multiple column expresses SRP as a multiple of the servicing fee (25 bps for Conv 30). A 5.04x multiple at par means the servicing right is worth 5.04 × 25 = 126 bps.

3. Excess Servicing Price Multiples (Columns 4-5)

Values for excess servicing strips at two spread ranges:

  • (.2501 - .3750) — lower excess servicing strip
  • (.3751 - .5000) — higher excess servicing strip

These are used when the servicing fee exceeds the minimum required — the excess has its own value.

4. Adjustment Grids

FICO Adjustments (basis points)

FICO RangeAdjustment
< 620-16 bps
620-639-10 bps
640-679-7 bps
680-719-2 bps
720+0 bps (base)

UPB (Loan Balance) Adjustments (basis points)

UPB RangeAdjustment
< $50K-140 bps
$50K-99K-42 bps
$100K-149K-16 bps
$150K-199K-7 bps
$200K-249K-3 bps
$250K-299K0 bps (base)
$300K-349K+2 bps
$350K-548.24K+3 bps
$548.25K-647.2K0 bps
$647.3K-999K-10 bps
$1M+-10 bps

LTV Adjustments (basis points)

LTV RangeAdjustment
< 850 bps
85-890 bps
90-94-1 bps
95-99-3 bps
100-109-5 bps
110-119-7 bps
120+-12 bps

Program Adjustments (basis points)

ProgramAdjustment
HARP+3 bps
Loan Mod-7 bps
Waive Escrows-14 bps

Remittance Type Adjustments (basis points)

Remit TypeAdjustment
FHLMC_STD+5 bps
FNMA_MBS+10 bps
FNMA_MBS_EXP+3 bps

Term Adjustments (basis points)

TermAdjustment
20 Year-7 bps
25 Year-3 bps

5. Notes (Rows 34-36)

  • Adjusted prices are floored at 0
  • Base SRPs and adjusters are represented in basis points
  • Coupons outside of +/- 100 bps ITM/OTM should be assigned +/- 100 bps SRP, respectively

How the Desk Uses This

For any loan in the pipeline:

1. Determine the loan's rate spread to par:
spread = loan_note_rate - current_par_rate (6.375)

2. Look up base SRP from the grid (interpolate if between rows)

3. Apply adjustments:
+ FICO adjustment (based on borr_credit_score)
+ UPB adjustment (based on loan_amount)
+ LTV adjustment (based on ltv)
+ Program adjustment (if HARP, Loan Mod, or Waive Escrow)
+ Remittance adjustment (based on remit type)
+ Term adjustment (if 20yr or 25yr)

4. Net SRP = Base SRP + sum(adjustments)
(floored at 0)

5. Compare Net SRP to the value of retaining servicing:
If Net SRP > retain value → sell servicing (take the SRP)
If retain value > Net SRP → retain servicing (keep the MSR)

Mapping to Desktop App Tables

MIAC DataDesktop App TableColumn
Base SRP valuesrmcat_msr_pricesMSR price by instrument/coupon
FICO/UPB/LTV adjustmentsrmcat_price_adjustment_valuesOr a dedicated MSR adjustment table
Excess servicing multiplesUsed in BestEx servicing strategyexcess_servicing_value calculation
Par rate / valuation datermcat_todays_par_ratesMarket context

Client Comparison: Third Federal vs. LG

A second MIAC workbook (LG_nGSA_2-27-2026.xlsx, dated Feb 27, 2026) reveals that the grid structure is universal but content varies per client:

ComponentThird Federal (MH)LG
Sheets89 (adds Conventional Hybrids/ARMs)
Servicing fee tiers (Conv 30)1 (25 bps)3 (25, 37.5, 50 bps)
State adjustmentsNoneFull 50-state grid (TX: +13, CA: -16, FL: +5)
Base SRP at par (Conv 30, 25bps)126 bps / 5.04x123 bps / 4.93x
FICO adjustmentsSame values (±1 bps)Same values
UPB adjustmentsSame valuesSame values (LG has +4 for $548-647K)
LTV/Program/Remit/TermSame valuesSame values
Par rate6.375% (Mar 31)5.875% (Feb 27)

Conclusion: MIAC uses a universal template. The adjustment grids (FICO, UPB, LTV, Program, Remit, Term) are nearly identical across clients. What varies: base SRP values (calibrated per client's portfolio), number of servicing fee tiers, presence of state adjustments, and which product sheets are included.

This means a single parser handles all clients — it just needs to detect variable column counts and optional sections.

API Integration Design

Loan Fields Required from Desktop App

For Rudy's plugin to send loan data to an SRP evaluation endpoint:

FieldRequired?WhyDesktop App Source
loan_idYesMatch results backrmcat_loan.loan_id
note_rateYesIndex spread (note_rate - par_rate)rmcat_loan.note_rate
borr_credit_scoreYesFICO adjustmentloan.borr_credit_score
loan_amountYesUPB adjustmentrmcat_loan.loan_amount
ltvYesLTV adjustmentrmcat_loan.ltv
stateYesState adjustment (if client has it)rmcat_loan.state
amortization_termYesTerm adjustment (20yr/25yr)loan.amortization_term
instrument_nameYesWhich product sheet to usermcat_loan.instrument_name
servicing_feeYesWhich servicing fee columnrmcat_loan.servicing_fee
program_nameOptionalProgram adjustment (HARP, Loan Mod)rmcat_loan.program_name
remittance_typeOptionalRemit adjustment (FHLMC_STD, FNMA_MBS)Derived from pscat_instruments.rm_servicing_type or pscat_pools.remittance_type
escrow_indicatorOptionalWaive Escrows adjustment (-14 bps)loan.escrowindicator
mortgage_typeOptionalRoute Conv vs. Govt sheetsloan.loan_type

All 9 required fields already exist in the Desktop App's tables. The optional fields are available via joins. Rudy doesn't need to add any new columns.

Expected Response

Per loan:

{
"loan_id": "12345",
"base_srp_bps": 126,
"multiple": 5.04,
"adjustments": {
"fico": -2,
"upb": 3,
"ltv": 0,
"state": -4,
"program": 0,
"remittance": 10,
"term": 0,
"escrow": 0
},
"net_srp_bps": 133,
"servicing_fee_bps": 25,
"index_spread": 0.125
}

Endpoint Location (Pending Decision)

Product Owner is evaluating whether this endpoint belongs in PSX (leverages existing stacking engine and LLPA endpoint pattern) or PSSaaS (MSR valuation is a secondary marketing operation, aligns with database-per-tenant model). Decision pending.

Desktop App Integration Gap

The API returns per-loan SRP values. But using those values in BestEx (servicing strategy), Risk Manager (position reconciliation), and reports requires additional SQL/stored procedures in the Desktop App that Tom/Greg/Rudy must write. The API is the calculation service; the Desktop App is the workflow integration. PSSaaS eliminates this gap by building both layers in one system.

Implications for PSX / PSSaaS

PSX Stacking Engine Compatibility

The MIAC SRP grid is structurally identical to an LLPA grid:

  • Base value indexed by a primary dimension (rate spread vs. coupon rate)
  • Additive adjustments across multiple dimensions (FICO, UPB, LTV, Program, Term)
  • Floor at zero

PSX's stacking engine could evaluate MIAC SRP grids the same way it evaluates agency LLPAs — as an extracted_profile with participant_type = 'msr_pricing'. The dimensions (FICO, UPB, LTV) are the same dimensions the stacking engine already resolves.

Daily Interpolation

The base SRP grid uses Index Spread (rate relative to par) as its primary dimension. As rates move daily (captured via dataQollab TBA snapshots), the par rate changes, which shifts every loan's index spread, which changes every loan's SRP value. Daily re-evaluation is a simple grid lookup with the updated par rate — no new MIAC data needed.

Client-Specific vs. Universal

MIAC calibrates this grid for each client based on their portfolio characteristics. Different clients may have different base SRPs and different adjustment values. This means:

  • The grid is tenant-specific in PSSaaS (database-per-tenant)
  • Each tenant imports their own MIAC grid
  • The structure is universal; the values are client-specific

Rudy's Plugin

Rudy's plugin for the Desktop App ingests this XLSX and populates the MSR pricing tables. The plugin needs to:

  1. Parse each sheet (8 product/servicing-fee combinations)
  2. Extract the base SRP grid (index spread → SRP/multiple)
  3. Extract all adjustment grids (FICO, UPB, LTV, program, remit, term)
  4. Write to the appropriate rmcat_msr_* tables
  5. Record the valuation date and par rate for context