Tier 1 · Gaap Ifrs Financial Reporting

Funds-Withheld / Modco Reinsurance Embedded Derivative

M-041 · lifecycle: development · RAT-041-v1.0.3 · conditionally-approved scaffold

Intended Use

Funds-Withheld / Modco Reinsurance Embedded Derivative Bifurcate and fair-value the embedded derivative (total-return-of-withheld-portfolio feature) in funds-withheld and modified-coinsurance reinsurance treaties.

ASC 815 host-vs-embedded bifurcation on funds-withheld / modco treaties; fair-values the total-return feature on the withheld asset portfolio. A named net-income-volatility driver (PRU FY2025 10-K); sensitive to asset credit spreads. Distinct from the index-credit embedded derivatives already covered by insmodel.L4.va_guarantee, insmodel.L4.indexed_annuity, and insmodel.L4.rila_model — do not duplicate those. Gap #1 from the cross-firm 10-K footprint study (vertical/research/03_insurance_gap_analysis.md).


Components

Inputs, processing, outputs

data sources
DS-001
engines
insmodel.L4.funds_withheld_modco
dimensions
D2

Methodology & Mechanics

Methodology

Engine BUILT and code-grounded. insmodel.L4.funds_withheld_modco (FundsWithheldModcoEngine, firmmodel/engines/funds_withheld_modco_engine.py) is implemented, @engine-decorated, bound in engine_registry.yaml (model_membership: [M-041]), SR 11-7 legacy_metadata archived, with 11 unit tests passing and a reproducible deterministic snapshot. The method below describes the running code (Decision 049 doc-currency: this narrative matches the engine source).

The method is ASC 815-15 host-vs-embedded-derivative bifurcation. A funds-withheld / modco treaty is separated into its host (financing) leg — the withheld / modco reserve balance earning the contractual host_funding_rate, carried at amortised cost and reported as the residual host_carrying_value = withheld_balance − embedded_derivative_fv — and the embedded derivative: the feature that passes the total return of the withheld / modco asset portfolio to the counterparty. The embedded derivative is fair-valued as the present value of the excess-return leg over the projection horizon:

ED_fv = Σ_t  notional_t · (asset_total_return − host_funding_rate) · participation · DF(t)

where asset_total_return = risk_free_rate + asset_credit_spread (OAS decomposition), notional_t = withheld_balance · (1 − balance_runoff)^(t−1), DF(t) discounts at the flat per-treaty discount_rate, and an optional contractual floor on the passed return is supported. The credit-spread-sensitive, net-income-volatility-driving portion is isolated as ed_credit_spread_value (the leg repriced with OAS set to zero, differenced), and a +1bp OAS sensitivity is reported as ed_credit_spread_dv01 so downstream stress suites can shock the embedded derivative without a full re-projection. No firm calibration is invented — every economic input (withheld balance, host funding rate, OAS, discount rate, participation) is supplied via engine_context.

This engine does not replace insmodel.L4.reinsurance_engine (ReinsuranceEngine, firmmodel/engines/reinsurance_engine.py), which handles only modco cash-flow mechanics (_apply_modco: modco_adjustment = ceded_reserve_change + interest_on_ceded). That engine does not bifurcate the contract and does not fair-value the total-return feature — exactly the step this engine adds.


Key Assumptions

Key Assumptions and Their Justification

Engine ships UNCALIBRATED — no A-NNN assumptions are bound. The registry entry lists assumptions: [], and the engine carries no @uses_assumptions decorator: every economic input is a treaty input supplied at runtime via engine_context, not a registered calibrated assumption. This is a deliberate design choice (the same posture as ReinsuranceEngine) — the engine implements the deterministic ASC 815-15 bifurcation math and never invents firm calibrations.

The method exercises the following input families, each supplied per treaty (not a registered A-NNN value):

  • Asset credit spread (OAS) — the option-adjusted spread of the withheld / modco portfolio; the credit-spread-sensitive driver of the total-return feature. Supplied as asset_credit_spread.
  • Discount basis — the flat per-treaty discount_rate for the excess-return leg (defaults to the host funding rate).
  • Total-return participationparticipation_rate (default 1.0 = full pass-through; per-treaty override for partial-participation structures).
  • Projection horizonprojection_years (default 10).

If firm-calibrated defaults are later registered as A-NNN assumptions (e.g. an OAS-decomposition basis sourced from a credit-spread feed), that binding plus the matching @uses_assumptions decorator is a ratification item — see Limitations. It is not claimed here today (no such assumptions exist on assumption_domains.yaml).


Output Snapshot

Output Snapshot

Deterministic snapshot — reproducible, no live data. Models/scripts/model_snapshots.py M-041 reproduces the table below on documented synthetic canonical treaties (BV-032-immune; no FRED / firm data touched). No firm withheld balance, OAS, funding rate, or disclosed embedded-derivative balance is asserted.

Treaty Inputs embedded_derivative_fv ed_credit_spread_value ed_credit_spread_dv01 host_carrying_value
FWH001 $1,000,000 withheld · host 4.00% · rf 3.00% · OAS 2.00% · disc 4.00% · 10y · participation 1.0 81,108.96 162,217.92 811.09 918,891.04
MODCO001 $500,000 withheld · host 5.00% · rf 3.00% · OAS 2.00% · disc 4.00% · 10y (zero-excess: total return == host) 0.00 500,000.00

The FWH001 case is hand-verifiable: the excess-return leg is $1,000,000 × (5% − 4%) × 1.0 = $10,000/yr level for 10 years; the 10-year annuity factor at 4% is 8.110896, so ED fv = 10,000 × 8.110896 = 81,108.96. host_carrying_value + embedded_derivative_fv = withheld balance (the bifurcation reconciles). MODCO001 is the zero-excess control (asset total return equals host funding rate ⇒ embedded derivative = 0), a sign/identity check. Output schema (embedded_derivative_fv, ed_credit_spread_value, ed_credit_spread_dv01, host_carrying_value, …) is declared on the engine_registry.yaml entry outputs and consumed in-process — there is no cross-codebase boundary contract (so contracts: [] is correct, not a gap).


Limitations

Limitations and Known Gaps

Engine is BUILT and tested; the model remains under_development pending 2L sign-off. The following are genuine, honestly-stated conditionals:

  • No firm-calibrated reconciliation (PENDING — not fabricated). The deterministic snapshot runs on documented synthetic treaties. No reconciliation to a disclosed firm embedded-derivative balance (PRU et al.) is asserted — it requires real disclosed inputs (withheld balance, OAS, funding rate, disclosed ED balance) that are not sourced. This element is reported pending in the validation pack (§4), not papered over with synthetic numbers.
  • Uncalibrated by design. The engine carries no @uses_assumptions and no A-NNN are registered; economic inputs are treaty inputs via engine_context. Registering firm-calibrated defaults as A-NNN (with the matching decorator and a data-source binding) is a future ratification item — DS-001 is a placeholder; no calibrated data source is bound.
  • Regulatory tag APPLIED + tier re-derived (COND-005, RAT-041-v1.0.3) — tier change FLAGGED for 2L. The §8.3 enum extension landed: asc_815 is now a registered regulatory_frameworks value AND a §6.3(b) Tier-1 trigger. The registry is re-tagged to asc_944 + asc_815 + internal, and the materiality tier is re-derived 2 → 1 (Tier-1 trigger (b) asc_815 + trigger (c) audited-financial-statement numbers), reconciling the model-level tier with the engine_registry tier: tier-1 already on insmodel.L4.funds_withheld_modco. The tier re-derivation is a defensible 1L registry act flagged for 2L confirmation (RAT-041-v1.0.4) — it is not self-ratified, and it does not change model state (under_development). (Enum-leg precedent: issue #2002 / PR #2443 for bma_bscr + asc_815.)
  • No cross-codebase output contract (by design, not a gap). Engine outputs are declared on the engine entry and consumed in-process (like ReinsuranceEngine); contracts: [] is therefore correct. A contract would only be added if a downstream codebase consumed the output across a boundary.
  • Scope. Covers only the funds-withheld / modco total-return embedded derivative. The index-credit embedded derivatives (FIA/RILA/GMxB-on-VA) are out of scope — already covered by insmodel.L4.va_guarantee, insmodel.L4.indexed_annuity, insmodel.L4.rila_model.

Remaining to flip under_development → active (2L work, not 1L): - 2L effective-challenge sign-off (Validation & Audit) per MRM §10.2 / §10.6.

COND-005 status: the asc_815 §8.3 enum extension is landed (governance leg, above 1L); the consequent re-tag + tier 2 → 1 re-derivation are applied by this pass and flagged for 2L confirmation (RAT-041-v1.0.4).


Validation Evidence

Validation Packet

Partial — 1L evidence assembled; 2L sign-off pending. Registry lifecycle: validation_evidence: partial, peer_review.status: pending. The v1.0.0 pack at modelling/validation_evidence/M-041/v1.0.0/ (a thin index mapping MRM §10.5 elements to runnable tests + the snapshot) is on disk. A 2L reviewer running pytest tests/test_funds_withheld_modco_engine.py and model_snapshots.py M-041 in the InsModel checkout reproduces the evidence.

§10.5 element Status Evidence
1. Conceptual soundness present Card Methodology (ASC 815-15) + legacy_metadata/FundsWithheldModcoEngine.yaml (SR 11-7 narrative)
2. Deterministic gold snapshot present model_snapshots.py M-041 — FWH001 81,108.96 hand-verifiable; MODCO001 zero-excess control
3. Unit / internal-consistency tests present 11 tests in tests/test_funds_withheld_modco_engine.py (all passing) — host+ED reconciliation, OAS decomposition, DV01 sign, floor, zero-excess
4. Firm-calibrated reconciliation PENDING requires real disclosed inputs (PRU et al.); reported honestly as pending — not fabricated
5. 2L effective-challenge sign-off PENDING independent ratification (Validation & Audit), MRM §10.6 — flips under_development → active (§10.2)

Items 1–3 are 1L deliverables (done). Items 4–5 are honestly conditional: item 4 is data-gated; item 5 is the 2L gate this hand-off requests.


References

References

Regulatory / accounting: - ASC 815 (Derivatives and Hedging) — host-vs-embedded-derivative bifurcation; the governing standard for the planned method. - ASC 944 (Financial Services — Insurance / LDTI) — surrounding US-GAAP insurance accounting context for the ceded treaty.

Source data / external: - Prudential Financial (PRU) FY2025 Form 10-K — names funds-withheld / modco embedded-derivative remeasurement as a net-income-volatility driver.

Internal: - firmmodel/engines/funds_withheld_modco_engine.py (FundsWithheldModcoEngine) — the implemented engine. - tests/test_funds_withheld_modco_engine.py — 11 unit tests; Models/scripts/model_snapshots.py M-041 — deterministic snapshot. - modelling/validation_evidence/M-041/v1.0.0/ — the §10.5 evidence index. - Cross-firm 10-K footprint study, "Gap #1" — vertical/research/03_insurance_gap_analysis.md. - Decision 018 (MRM Framework) — Management/decisions/018-mrm-framework-multi-regime.md; the framework under which this card is governed. - ASC 815 enum extension (RAT-041 COND-005) — landed in modelling/charters/mrm_framework.md (§8.3 enum line 608 + §6.3(b) Tier-1 trigger line 407; precedent: issue #2002 / PR #2443 for bma_bscr + asc_815). The consequent M-041 re-tag + tier 2 → 1 re-derivation are applied (this pass) and flagged for 2L confirmation (RAT-041-v1.0.4).


Change Log

Change Log

Card change history. Code-side change history lives in git log of the component files.

  • 2026-06-05 — stub created from registry data per Decision 023 Phase 5 / B-07.
  • 2026-06-06 — 1L remediation pass (RAT-041 COND-005) — partially reverted, see below. The pass had claimed asc_815 was added to the §8.3 enum and M-041 re-tagged; that enum edit was an over-reach (amending the MRM standard is a governance act, not 1L) and was reverted.
  • 2026-06-07 — corrected the COND-005 claim (2L re-review caught a card-vs-artifact contradiction, COND-006). asc_815 is NOT in the §8.3 enum and the registry tag is asc_944 + internal; the enum extension is a tracked governance follow-up (precedent: #2002). Standards Coverage, Limitations, References, and this Change Log reverted from "resolved" to honest "open/pending". No model code, output, or state change. COND-001/002/003/004 remain genuine engine-build / validation prerequisites (honest conditional).
  • 2026-06-06 — 2L documentation pass (card text only; no model-state change). Hand-authored Methodology (planned / pending engine build, grounded in the existing ReinsuranceEngine modco-mechanics boundary), Key Assumptions (no A-NNN bound; required families marked to-be-confirmed-at-build), Validation Packet (honest pending state mirroring registry lifecycle), and References. Added missing Standards Coverage, Dependencies, and Output Snapshot sections (matching the gold-standard M-001 structure). Cross-referenced Limitations to the new pending sections and to insightalm #2001. Advanced header marker from to. Output-changing / modeling-code items (engine build, output contract, assumption registration, validation evidence, §8.3 enum) left for ratification — no model state changed.
  • 2026-06-281L build reconciliation (D053, #2308). The engine insmodel.L4.funds_withheld_modco (FundsWithheldModcoEngine) is BUILT, bound, and merged on InsModel main (@engine, 11 tests passing, deterministic snapshot reproducible, SR 11-7 legacy_metadata archived) — but this card and the registry still described the pre-build "planned / pending engine build / validation_evidence: missing" state (a registry-and-card-vs-disk contradiction). Rewrote Methodology (now code-grounded: ASC 815-15 PV-of-excess-leg, OAS decomposition, DV01), Key Assumptions (uncalibrated by design — no @uses_assumptions, no A-NNN; treaty inputs via engine_context — corrects the prior over-claim risk, COND-006), Output Snapshot (real reproducible table: FWH001 ED fv 81,108.96 hand-verifiable, MODCO001 zero-excess control), Components, Validation Packet (partial — §10.5 elements 1–3 done, 4 firm-reconciliation + 5 2L sign-off honestly PENDING), Limitations, References, Standards Coverage. Registry promoted via registry_deltas/M-041.yaml (PROMOTION channel: validation_evidence: partial, change_log: present, honest BUILT notes). Status STAYS under_development — only 2L effective-challenge sign-off flips it to active. contracts: [] and assumptions: [] are correct (in-process outputs; uncalibrated engine), not gaps. asc_815 §8.3 enum re-tag remains a GOVERNANCE follow-up above 1L (COND-005). No model code or output changed; this is the registry/card sync to the already-built engine.
  • 2026-06-291L COND-005 re-tag + tier re-derivation (RAT-041-v1.0.3). With the asc_815 §8.3 enum leg now landed (registered framework + §6.3(b) Tier-1 trigger — verified in mrm_framework.md), applied the consequent 1L registry acts via registry_deltas/M-041.yaml: re-tagged regulatory_frameworks[asc_944, asc_815, internal] and re-derived materiality.tier 2 → 1 (Tier-1 triggers (b)+(c)), with the §-reasoning recorded in the materiality justification. This reconciles the model-level tier with the engine_registry tier: tier-1 already on the bound engine. The tier change is FLAGGED for 2L confirmation (RAT-041-v1.0.4) — not self-ratified. Updated Standards Coverage, Limitations, References, and the COND-005 status line from "open / governance-follow-up" to "applied / flagged-for-2L". Status STAYS under_development (1L never self-promotes state). No engine code, output, or model state changed.

2L Inventory Review

Open findings (3)

Independent 2nd-line review (INV-2026-06) — implemented capability vs registered scope. Each carries a recommended fix and is tracked in insightalm-mrm until closed.

HIGH INV-029 · P5 · validation-gap

Validation evidence + change logs missing across most of the inventory

Only M-001/M-020/M-050 carried full documentation packs before this pass. Most models record validation_evidence: missing and change_log: missing with peer_review: pending. Gold tests freeze behaviour but many assert only structural invariants (e.g. reserve>0), not correctness against external truth. The flagship T0-vs-10-K match is circular (BV-032).

Recommendation: For each Tier-1 model: produce a validation-evidence pack (back-test vs disclosed results once BV-032 re-calibration lands, sensitivity suite, challenger comparison), a change log, and a 2L ratification. Sequence behind BV-032 (firm-data) for anything needing 10-K reconciliation.

low LG-041-08 · ·

The README's reproduction command hard-codes a stale checkout path (check_registry_integrity.py [redacted]); the canonical checkout is [redacted]

Recommendation: Correct the path. Non-blocking (the no-arg invocation passes).

major LG-041-07 · ·

STALE / OVER-CLAIMING validation README. validation_evidence/M-041/v1.0.0/ README.md (2026-06-08) asserts assumptions A-286..A-289 are bound (A-288 consumed) and a contract funds_withheld_embedded_derivative_v1 is bound — NEITHER exists on disk (highest registered assumption is A-285; no such contract in contract_registry.yaml), and the reconciled card itself now correctly disclaims both (by-design `[]`). The README contradicts the reconciled reality.

Recommendation: Correct the README to match the reconciled card (no bound A-NNN, no registered contract; document the by-design `[]` postures). Blocks COND-004 adequacy.


Validation Coverage

Per-tier expectations

Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:

asc_944 asc_815 internal
component tier-1 expectation status
Registry entry required present
Model card (§10.5 doc pack) required present
Validation evidence required partial
Change log required present
Independent effective challenge (2L) required pending

Ratification

Conditionally-approved scaffold — RAT-041-v1.0.3

2L issued RAT-041-v1.0.3 as a conditionally-approved Tier 3 analytic scaffold. The model exists, runs, and matches its card — but its approval is intelligence-use-only: its outputs must never be read as a booked, regulatory, capital, or reserving figure. Booked use (and tier promotion) is gated on the PLANNED engines, which are not built. The conditions below are on record.

id deadline condition
COND-001 CLEARED. Engine built, bound, active; integrity gate passes; card current.
COND-002 2026-09-04 Resolve the output-contract posture. EITHER (a) explicitly ADOPT the by-design no-MRM-contract posture (outputs consumed in-process; the reproducing gold snapshot is the deterministic output anchor) and record that decision in the Validation Packet, OR (b) register a funds_withheld_embedded_derivative output contract in contract_registry.yaml and bind it to M-041. The card's in-process argument is defensible; it is not yet a recorded clearance. (The pack README's claim that a contract is ALREADY bound is false — LG-041-07.)
COND-003 2026-09-04 Finalize the assumptions posture. EITHER register the A-NNN (credit-spread/OAS basis, discount basis, total-return measurement, participation) with calibrated values + sources and have the engine CONSUME them, OR document a deliberate, justified engine-contract-default policy reconciled to the registry (the M-005 leg-(b) precedent). inputs.assumptions: [] today; engine has no @uses_assumptions. (The pack README's claim that A-286..A-289 are bound is false — LG-041-07.)
COND-004 2026-09-04 Bring the validation pack to adequacy: it already has 11/11 tests + a reproducing gold snapshot + the SR-11-7 archive (real). Add the disclosed-firm embedded-derivative reconciliation (honestly pending today — do NOT fabricate) OR record it as a deliberate data-gated deferral with the gate named, and a conceptual-soundness review beyond the legacy_metadata. CORRECT the stale README over-claims first (LG-041-07). Until adequate, held at under_development.
COND-005 2026-09-04 §8.3 enum extension DONE — asc_815 is a registered framework (line 608) and a Tier-1 trigger (line 407). NOT cleared: re-tag M-041.regulatory_frameworks to add asc_815 (it is the true governing standard for the bifurcation method), and re-derive the materiality tier under §6.3 — asc_815 is a Tier-1 trigger, so the recorded tier: 2 should be re-derived and reconciled with the engine_registry tier: tier-1. The card flags this honestly.
COND-006 CLEARED (v1.0.2). Re-confirmed: card true to the artifacts, no false 'resolved' prose. No regression.