Tier 1 · Statutory Reserves

Closed-Block / Policyholder-Dividend-Obligation Glidepath

M-008 · lifecycle: monitoring · RAT-008-v1.0.1

Intended Use

Closed-Block / Policyholder-Dividend-Obligation Glidepath Project the closed-block (participating) policyholder dividend obligation glidepath from cumulative actual-vs-expected closed-block earnings.

Demutualization closed-block accounting: tracks cumulative actual vs expected closed-block earnings and reserves the excess as a policyholder dividend obligation (PDO), projecting the dividend glidepath to block run-off. IN SCOPE (principal decision 2026-06-05, issue #2004): a demutualized participating closed block is in scope (e.g. PRU's Closed Block Division / legacy par blocks) — a committed Tier-1 build, not conditional. Grounded in the cross-firm 10-K study gap #4.


Components

Inputs, processing, outputs

data sources
DS-081
engines
insmodel.L4.closed_block_pdo
dimensions
D7

Methodology & Mechanics

Methodology

Demutualization closed-block accounting under ASC 944-805 / SFAS 120. Each period the excess of actual over expected closed-block earnings is absorbed into the Policyholder Dividend Obligation (PDO), which accretes the prior balance at the closed-block earned rate and floors at zero:

PDO_t = max(0, PDO_{t-1}·(1 + r_t) + (actual_t − expected_t))

Cumulative excess earnings are an obligation to closed-block policyholders (future dividends), not shareholder profit; a cumulative shortfall reduces but never inverts the obligation. The glidepath tracks the closed-block funding ratio (assets / liabilities) to run-off. The engine takes all parameters from config/input (no hardcoded calibrations); the per-period actual/expected earnings, earned rate, and closed-block assets/liabilities are firm data bound at build time via DS-081. See firmmodel/governance/legacy_metadata/ClosedBlockPDOEngine.yaml for the full SR 11-7 narrative.

Aggregate-risk view (MRM §10.5 documentation-pack item 8): upstream dependencies — none (no upstream models; firm closed-block feed DS-081 only). Downstream consumers — none registered. See Dependencies above.


Key Assumptions

Key Assumptions and Their Justification

M-008 carries no formal A-NNN bindings; the engine takes all parameters from config/input (no hardcoded calibrations), and the per-period actual/expected earnings are firm data bound at build time (DS-081). The structural assumptions of the closed-block / PDO accounting model are:

# Assumption Justification
1 The closed block was funded on an expected (glidepath) basis — if actual experience equals expected, assets run off in step with the liabilities. Definitional to the ASC 944-805 closed-block construct: the block is funded at demutualization to be self-supporting under the expected dividend scale.
2 Cumulative actual earnings in excess of expected = the PDO, an obligation to closed-block policyholders, not shareholder profit. ASC 944-805 / ASC 944-40: excess earnings accrue to participating policyholders as future dividends, classified as a liability (PDO), never equity.
3 The PDO accretes at the closed-block earned (investment) rate between measurement dates. The obligation grows with the investment return on the supporting assets; accretion at the earned rate keeps the PDO consistent with the funding basis.
4 A cumulative earnings shortfall reduces future dividends rather than creating a receivable — the PDO floors at zero. A shortfall cannot become an asset against policyholders; the obligation is bounded below at zero (PDO_t = max(0, ...)).

These four are lifted from the engine's legacy_metadata (firmmodel/governance/legacy_metadata/ClosedBlockPDOEngine.yaml). Sensitivity: the binding levers are the actual-vs-expected earnings decomposition and the earned rate r_t; in the current PRU calibration both the earned-rate path and the actual/expected split are not independently exercised (see Validation Packet) because PRU discloses only the cumulative-excess result, not the per-period flows.


Output Snapshot

Output Snapshot

Deterministic run of ClosedBlockPDOEngine on the disclosed PRU Closed Block feed (DS-081; firmmodel/data_feeds/closed_block_pru.py). No new figures are introduced here — every value is a PRU FY2025 10-K disclosure (Note 16) or a direct recomputation from disclosed figures.

Inputs (disclosed, $M):

year-end CB liabilities CB assets earnings-based PDO (disclosed)
2024-12-31 50,857 48,478 2,096
2025-12-31 50,027 47,762 1,635

Outputs:

output value meaning
pdo_balance (2024-12-31) 2,096 round-trips the disclosed PDO (identity — see Validation Packet)
pdo_balance (2025-12-31) 1,635 round-trips the disclosed PDO; year-over-year reduction $461M
funding_ratio (2025-12-31) 0.9547 recomputed assets / liabilities = 47,762 / 50,027

The PDO round-trip is an identity check (the feed supplies expected_earnings=0, earned_rate=0, and actual_earnings = the year-over-year change in the disclosed PDO), not independent validation. The funding ratio is a recomputation from disclosed assets and liabilities.

Panel B — constructed r_t accretion path (non-circular characterization). A synthetic 5-period fixture (clearly not firm-disclosed) that exercises the accretion mechanic the disclosed round-trip cannot. Inputs: actual = [120, 130, 90, 105, 115], expected = 100 each, r_t = [0.040, 0.050, 0.045, 0.050, 0.055] ($M):

period pdo_balance note
P1 (r=0.040) 20.00 excess 20, opening PDO 0 → no accretion
P2 (r=0.050) 51.00 accretion = 20.00 × 0.05 = 1.00; + excess 30
P3 (r=0.045) 43.30 accretion 2.295 − shortfall 10
P4 (r=0.050) 50.46
P5 (r=0.055) 68.24 ending PDO

Reproduced by scripts/model_snapshots.py M-008; frozen in tests/test_closed_block_pdo_gold.py; cross-checked period-by-period against an independent closed-form challenger in tests/test_closed_block_pdo_validation.py.

Deterministic; panel A from disclosed PRU figures, panel B from a synthetic fixture; no live data.


Limitations

Limitations and Known Gaps

  • Source registered; single-firm fixture. The firm closed-block feed is registered and active (DS-081, Demutualization Closed Block Disclosures, 10-K) and bound in the M-008 registry inputs. It is currently a single-firm, hand-transcribed disclosed-data fixture (Prudential's Closed Block Division, FY2025 10-K Note 16). Multi-firm automated 10-K extraction is the remaining refinement.
  • Effective-challenge / promotion pending. insmodel.L4.closed_block_pdo exists and is unit-tested; the Tier-1 validation-evidence pack is now assembled (validation_evidence/M-008/v1.0.0/). status: under_developmentactive is gated on 2L re-review / effective-challenge sign-off of that pack.
  • Per-period calibration to a real firm is not available (honest open item). The non-circular validation exercises the r_t accretion path and the actual-vs-expected decomposition on constructed inputs against an independent closed-form oracle — confirming the engine implements the ASC 944-805 recursion correctly. It does not calibrate the per-period actual/expected closed-block earnings to a real firm: PRU discloses only the cumulative-excess PDO balance each year-end, not the separate per-period flows (narrated in MD&A, not tabulated). Closing this fully needs a firm that tabulates the decomposition, or an independently-constructed glidepath calibration. Scoped data gap, not a fabricated result.
  • Applicability is limited to demutualized participating closed blocks (not stock-form / non-participating business).
  • Models the PDO accumulation + funding-ratio glidepath, not the full seriatim dividend-scale mechanics or asset run-off cash flows.

Validation Evidence

Validation Packet

Status: remediated (COND-001 / COND-002), 2L re-review pending. The Tier-1 validation evidence pack is assembled at insightalm/modelling/validation_evidence/M-008/v1.0.0/README.md. It supplies the non-circular mechanic-exercising evidence the round-trip identity could not, plus a sensitivity suite, an independent closed-form challenger, and a frozen gold snapshot.

Non-circular validation (COND-001) — exercises the model's core mechanic. Distinct from the round-trip identity, tests/test_closed_block_pdo_validation.py cross-checks the engine against an independent closed-form re-implementation of the ASC 944-805 recursion (challenger_pdo(), which never calls the engine) over a constructed non-zero-r_t path with a genuine actual-vs-expected split:

  • r_t accretion pathTestAccretionPathAgainstClosedFormChallenger: the 5-period pdo_balance (20.00 / 51.00 / 43.30 / 50.46 / 68.24 $M) matches the oracle; the reported accretion column equals PDO_{t-1}·r_t exactly (e.g. P2 = 20.00 × 0.05 = 1.00); a pure-accretion case (200 at 3/4/5% → 224.95) isolates the accretion from the decomposition.
  • actual-vs-expected decompositionperiod_excess = actual − expected each period (test_excess_decomposition_drives_period_change).
  • sensitivity suite (COND-001)TestSensitivitySuiteOnBindingLevers: monotone-increasing in r_t (+200bp and ±100bp two-sided) and in the excess (+$10M/period), and the zero floor binds under a sustained shortfall (unfloored branch goes negative) — each with sign + reproducible magnitude checked against the oracle.
  • challenger (COND-001) — the closed-form oracle agrees with the engine across a seeded 50-path battery (TestChallengerAgreementIsExact); residual is zero up to the engine's 2-dp display rounding (≤ $0.02M).

These inputs are constructed (synthetic) and labelled as such — no firm is claimed to have disclosed these per-period flows (no-fabrication, Decision 053 §4).

Disclosed-firm reasonableness anchor (round-trip identity — labelled). The engine on PRU's disclosed Closed Block feed (DS-081, FY2025 10-K Note 16, SEC accession 0001137774-26-000048; firmmodel/data_feeds/closed_block_pru.py) reproduces the disclosed earnings-based PDO — $2,096M at 2024-12-31 → $1,635M at 2025-12-31 (a $461M reduction) — and the funding ratio 47,762/50,027 = 0.9547. Test: tests/test_closed_block_pru_reconciliation.py (4 cases). This is a round-trip identity (the feed supplies expected_earnings=0, earned_rate=0, and actual_earnings = the YoY ΔPDO), not independent validation; it is retained only as the disclosed reasonableness anchor.

Gold snapshot + doc-currency baseline (COND-002). A deterministic gold/characterization snapshot of the engine output (both panels) is frozen in tests/test_closed_block_pdo_gold.py and reproduced by scripts/model_snapshots.py M-008; M-008 is baselined into insightalm/modelling/model_doc_stamps.yaml (the D049 detector now classifies M-008 current, was unstamped).

Honestly open (NOT cleared): a per-period calibration to a real firm's actual/expected decomposition — PRU narrates but does not tabulate the per-period flows. This is a scoped data gap, not a fabricated result (see Limitations). Effective-challenge / 2L sign-off on the remediation is the remaining gate.


References

References

Regulatory / accounting: - ASC 944-805 — Financial Services — Insurance: Demutualizations and Closed Blocks (formerly SFAS No. 120). Governing standard for closed-block / PDO accounting. - ASC 944-40 — Participating policyholder dividend liabilities (PDO liability classification). - AICPA SOP 95-1 — Accounting for Certain Insurance Activities of Mutual Life Insurance Enterprises (closed-block guidance underlying ASC 944-805).

Source data: - Prudential Financial, Inc. Form 10-K, FY2025 (period 2025-12-31), Note 16 "Closed Block" + Closed Block Division segment discussion. SEC accession 0001137774-26-000048; CIK 0001137774; filed 2026-02-12. Registered as DS-081 (modelling/data_source_registry.yaml); feed firmmodel/data_feeds/closed_block_pru.py.

Internal: - Decision 018 (MRM Framework) — Management/decisions/018-mrm-framework-multi-regime.md (Tier-1 model-risk discipline). - Data source: DS-081 (Demutualization Closed Block Disclosures, 10-K) — modelling/data_source_registry.yaml. - Component legacy_metadata: ecosystem/InsModel/Models/firmmodel/governance/legacy_metadata/ClosedBlockPDOEngine.yaml (the full SR 11-7 narrative for the engine).


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-05 — engine insmodel.L4.closed_block_pdo (ClosedBlockPDOEngine) built and bound: registered in engine_registry.yaml + binding manifest; DS-081 registered in data_source_registry.yaml and bound in the M-008 registry inputs; PRU disclosed-data feed wired (firmmodel/data_feeds/closed_block_pru.py).
  • 2026-06-06 — second-line documentation review. Lifted Key Assumptions (4), References, and Standards Coverage from ClosedBlockPDOEngine.yaml; added Standards Coverage, Dependencies (no upstream models), and Output Snapshot (disclosed PRU figures only) sections to match the gold M-001 card shape; updated Components to bind DS-081; corrected Limitations (DS-081 now registered/active, single-firm fixture is the open item) and the Validation Packet (round-trip identity, not independent validation). No new validation numbers introduced. Stub marker advanced to ``. Promotion-gated items (non-circular back-test, sensitivity suite, challenger, frozen D049 snapshot, 2L sign-off) left for ratification.
  • 2026-06-06 — 1L remediation of RAT-008-v1.0.0 COND-001 / COND-002 (Decision 053 charter §2.2). COND-001: added a non-circular validation suite (tests/test_closed_block_pdo_validation.py) exercising the r_t accretion path + actual-vs-expected decomposition against an independent closed-form challenger (challenger_pdo()), a sensitivity suite on the binding levers (r_t, excess, floor), and a seeded 50-path challenger battery — all on constructed/synthetic inputs (no fabricated firm data). COND-002: froze a deterministic gold characterization snapshot (tests/test_closed_block_pdo_gold.py + scripts/model_snapshots.py M-008, new snap_M_008) and baselined M-008 into model_doc_stamps.yaml (D049 detector now classifies M-008 current). Assembled the validation-evidence pack at validation_evidence/M-008/v1.0.0/README.md; reconciled the registry documentation_pack (validation_evidence/change_log → present) and lifecycle.last_validated_on. Honest open item retained: per-period calibration to a real firm's actual/expected decomposition (PRU does not tabulate it). 2L re-review pending — model stays under_development.

2L Inventory Review

Open findings (1)

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.


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 internal
component tier-1 expectation status
Registry entry required present
Model card (§10.5 doc pack) required present
Validation evidence required present
Change log required present
Independent effective challenge (2L) required attested

Ratification

Ratified — RAT-008-v1.0.1

Latest ratification on file: RAT-008-v1.0.1. Authored by 2L (mrm-peer-reviewer) per Decision 028 charter §5 Pattern A.