Tier 1 · Gaap Ifrs Financial Reporting

IFRS 17 Reserves & CSM

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

Intended Use

IFRS 17 Reserves & CSM Compute IFRS 17 fulfilment cash flows, risk adjustment, and contractual service margin (CSM) for international reporting.

IFRS 17 measurement model — General Measurement Model (Building Block Approach) only today; the Variable Fee Approach (participating contracts) and Premium Allocation Approach (short-duration) are on the roadmap, not implemented (INV-005). CSM-floored-at-zero with loss-component mechanics, periodic experience adjustment per Decision 020 §AP-22. Active for IFRS-reporting subsidiaries; not all firms in tracked universe report under IFRS.


Components

Inputs, processing, outputs

data sources
DS-001 · DS-008
assumptions
A-001, A-002, A-010, A-070, A-080, A-081
engines
insmodel.L4.reserve_engine_ifrs17
insmodel.L4.mortality_engine
insmodel.L4.lapse_engine
insmodel.L4.expense_engine
insmodel.L6.multi_basis_orchestrator
contracts
gaap_reserves_v1
upstream
M-120
dimensions
D6

Methodology & Mechanics

Methodology

M-021 implements the IFRS 17 General Measurement Model — the Building Block Approach (BBA) — for insurance contracts measured on an IFRS-reporting basis. The primary engine is IFRS17BBAEngine (insmodel.L4.reserve_engine_ifrs17, governance id M-101I, firmmodel/engines/ifrs17_bba_engine.py). It projects, for each issue-year × product-line cohort, the three IFRS 17 measurement building blocks period-by-period and reconciles them into the carried insurance-contract liability.

Block 1 — Best Estimate Liability (BEL). The engine computes the probability-weighted present value of future fulfilment cash flows as PV(benefits + directly-attributable expenses) − PV(premiums), discounted at the current market rate (ifrs17_discount_rate, default 4%) rather than a locked-in basis. _compute_bel walks each remaining coverage period applying a survival factor that compounds (1 − mortality)·(1 − lapse), discounting each period's expected death benefits, per-policy expenses, and premiums at (1 + r)^(-t). A negative BEL signals a profitable (asset-like) cohort — premiums exceed expected outflows — which is the case in the canonical snapshot.

Block 2 — Risk Adjustment (RA). _compute_risk_adjustment quantifies compensation for bearing non-financial risk. The default CTE method computes the PV of expected claims and applies an uplift 0.04 + (cte_level − 50)·0.002 (so CTE(75) ⇒ ~9% uplift); a higher confidence level monotonically increases RA. An alternative cost-of-capital method (ifrs17_coc_rate, default 6%) charges the CoC rate against a PV of required capital approximated as one year of claims, run off by survival. fulfilment_cash_flows = bel + ra.

Block 3 — Contractual Service Margin (CSM). The CSM is the unearned profit that defers day-1 gains over the coverage period. Initial CSM is max(0, −BEL − RA) (_initial_csm): a profitable cohort (negative BEL) yields a positive CSM, while an onerous cohort yields zero CSM and a recognized loss component. Each period the CSM is rolled forward: interest is accreted at the discount rate (csm_interest_accretion = csm_boy · r), then a portion is released to P&L via straight-line coverage units (_compute_csm_release: balance ÷ remaining coverage units), with csm_eoy = max(0, csm_boy + interest − release) flooring the balance at zero. CSM is monotonically non-increasing across periods under the best-estimate path.

Unlocking and revenue. The engine re-derives BEL and RA each period on the remaining coverage horizon, so changes in in-force and horizon flow through the fulfilment cash flows (a simplified unlocking; experience/assumption changes are not separately adjusted against the CSM — see Limitations). Insurance revenue is constructed from service provided, not premiums received: expected claims + expected expenses + RA release + CSM release (IFRS 17 par. 83), and insurance service expense is actual claims plus expenses. The carried liability reconciles exactly as total_ifrs17_liability = bel + ra + csm_eoy.


Key Assumptions

Key Assumptions and Their Justification

The engine merges ENGINE_CONTRACT parameter defaults with run-time configuration; the registry binds the formal A-NNN assumption set. The load-bearing methodological choices:

ID Name Value Derivation Justification for IFRS 17
A-001 Base mortality basis best-estimate qx (annual rate) published_source IFRS 17 par. 33 requires current, unbiased, probability-weighted estimates with no margin in BEL; margins sit only in the RA.
A-002 Mortality improvement best-estimate (no margin) published_source Fulfilment cash flows use current best estimates; improvement carried in the underlying qx rather than as a prudence load.
A-010 Lapse assumption best-estimate annual rate (default 3%) data_calibrated Drives the survival factor (1−q)(1−w) in BEL projection; best-estimate per par. 33 (no implicit margin).
A-070 Directly attributable expense per-policy annual (default $100) data_calibrated IFRS 17 par. B65 limits BEL expenses to directly attributable fulfilment costs; non-attributable overhead is excluded.
A-080 Discount-rate basis current market rate (default 4%, flat) published_source IFRS 17 par. 36 mandates current discount rates reflecting the liability's characteristics — not locked-in GAAP rates.
A-081 Risk-adjustment confidence CTE(75) (uplift ≈ 9%) model_choice Par. 37/119 require an RA for non-financial risk plus disclosure of the confidence level; CTE(75) is the engine default, configurable via ifrs17_risk_adjustment_level.

Operational assumptions beyond the formal IDs: - Coverage units: CSM amortization is straight-line over ifrs17_coverage_period_years (default 20). IFRS 17 par. B119 permits coverage units reflecting quantity-of-service; the engine uses uniform units, a defensible simplification for level-benefit cohorts. - Discount curve: a single flat rate is used for accretion, BEL discounting, and CSM interest. There is no term structure (see Limitations). - Experience as best-estimate: the engine sets actual benefits/expenses equal to expected, so there is no experience-variance line; this isolates the methodology from stochastic noise and makes the snapshot fully deterministic. - Cohort granularity: measurement is at issue-year × product-line, satisfying the par. 14–24 annual-cohort grouping requirement but not the onerous/non-onerous profitability sub-grouping within a cohort.


Output Snapshot

Output Snapshot

Deterministic single-cohort run of IFRS17BBAEngine v1.0.0 — reproducible, requires no live firm data (python scripts/model_snapshots.py M-021 in InsModel; the invocation pattern is asserted by tests/test_ifrs17_bba_engine.py, 25 passing tests). The provider is a MagicMock — all numbers derive from configuration parameters, not a database.

Input: cohort C001 · 1,000 policies · issue year 2024 · discount 4.0% · mortality 0.5% · lapse 3.0% · premium $2,000/policy · benefit $100,000/policy · expense $100/policy · CTE(75) risk adjustment · period 1.

output value meaning
bel -14,179,223.95 best estimate liability; negative ⇒ profitable cohort (PV premiums > PV outflows)
risk_adjustment 568,475.87 compensation for non-financial risk, CTE(75) uplift on PV(claims)
fulfilment_cash_flows -13,610,748.09 BEL + RA
csm_boy 13,917,735.11 unearned profit at beginning of period (initial CSM = max(0, −BEL − RA))
csm_interest_accretion 556,709.40 interest on CSM at the 4% discount rate
csm_release 723,722.23 profit released to P&L this period via straight-line coverage units
csm_eoy 13,750,722.28 CSM carried forward, floored at zero
insurance_revenue 1,353,642.01 service-based revenue = expected claims + expenses + RA release + CSM release (not premiums)
insurance_service_expense 600,000.00 actual claims + expenses incurred
total_ifrs17_liability 139,974.20 BEL + RA + CSM_eoy — the carried insurance-contract liability

This cohort is profitable: premiums of $2,000/policy materially exceed expected mortality outflows (0.5% × $100,000 = $500/policy of expected claims plus $100 expense), so the BEL is deeply negative and the engine defers the entire day-1 gain into a positive CSM of ~$13.9M rather than recognizing it immediately. Period 1 accretes 4% interest on the CSM and releases ~$724K to P&L via straight-line coverage units; the carried liability of $139,974.20 reconciles exactly as BEL (−14,179,223.95) + RA (568,475.87) + CSM_eoy (13,750,722.28). Note that insurance revenue ($1.35M) is decoupled from premiums received ($2.0M) — the defining IFRS 17 presentation departure from premium-based GAAP.

Captured 2026-06-04 · deterministic, no live data.


Limitations

Limitations and Known Gaps

  1. Only the BBA is implemented — no VFA, no PAA. The engine defers the Variable Fee Approach (participating/with-profits contracts) and the Premium Allocation Approach (short-duration contracts). The registry description ("building-block / variable-fee depending on contract type") overstates current capability: in code, all cohorts are measured under BBA regardless of contract type.
  2. Deterministic best-estimate only. There is no stochastic BEL; cash flows use a single best-estimate path with actuals set equal to expecteds. There is therefore no experience-variance or assumption-change line, and the RA is a parametric uplift, not a measured CTE of a simulated loss distribution.
  3. Flat discount curve, no term structure. A single ifrs17_discount_rate is used for BEL discounting, CSM accretion, and RA. Yield-curve sensitivity and the OCI disaggregation option (par. 88–90) are not modeled.
  4. CSM unlocking is simplified. BEL and RA are re-projected each period on the shrinking horizon, but changes in fulfilment cash flows relating to future service are not adjusted against the CSM per par. 44(c). The roll-forward is interest + straight-line release only.
  5. Coverage units are straight-line, not service-weighted. Amortization uses uniform units over a fixed coverage period; par. B119 quantity-of-service weighting is not implemented, biasing release timing for non-level cohorts.
  6. No reinsurance-held measurement. IFRS 17 par. 60–70A reinsurance contracts held (separate CSM, loss-recovery component) are not modeled.
  7. Firm-data / 10-K path is divergent and not exercised here. Per BV-032 the firm-financials path is divergent; this card makes no 10-K validation claims. The snapshot uses a MagicMock provider with synthetic cohort parameters.

Tracked for ratification (not applied in this documentation pass — they are output-changing or modeling-code work): the Tier-1 validation evidence pack (conceptual-soundness review + A-080/A-081/A-001 sensitivity testing + a real IFRS-17 disclosed-liability/CSM back-test), VFA/PAA build-out and par.44(c) future-service CSM unlocking (INV-005), a term-structure discount curve and reinsurance-held measurement (par.60–70A), and the credentialed-external RAT-021-v1.0.1 supersession once COND-001/002 close.


Validation Evidence

Validation Packet

evidence status reference
Unit/contract test suite present tests/test_ifrs17_bba_engine.py — 25 tests: BEL sign, RA monotonicity in CTE level, CSM non-negativity/decrease, liability decomposition (liability == bel+ra+csm), revenue ≠ premiums.
Deterministic snapshot present scripts/model_snapshots.py M-021.
Multi-basis orchestration present tests/test_multi_basis_vm20_ifrs17.py (GAAP/STAT/IFRS-17 parallel run).
Independent challenge (2L) pending per registry peer_review.status.
Back-test vs disclosed IFRS-17 liability missing Blocked on the firm-data re-calibration (BV-032).

Model-vs-reality back-testing (SR 26-2 ongoing; canonical record backtest_results.yaml): under Decision 048 (A4-30) the aggregate reserve is reconciled to filed reserves through the firm-calibrated book — each firm's canonical segment-reserve decomposition (DS-073), not a notional cohort. Record BT-012 (status: covered): the reserve aggregate reconciles to reported policy reserves by reportable segment for the segment-grade cohort, superseding the earlier Mock-notional 0% (BT-011). Predictive record BT-013: at quarterly cadence a reserve roll-forward is benchmarked against naive persistence — persistence is a tight ~3.4% q/q baseline that a structural roll-forward beats only where segment flows are cleanest; the data needed to beat it robustly (segment-level flows / disclosed θ sensitivities) is named, not assumed.

Scope of BT-012 for M-021: BT-012 is the shared firm reserve-aggregate reconciliation (the BV-032 firm-calibrated-book path, the same record carried "as M-020"), not an IFRS-17-specific CSM or total-liability back-test. Its covered status here means the reserve aggregate ties to filed segment reserves — it is not a validation of the IFRS-17 disclosed insurance-contract liability or CSM. A disclosed-liability/CSM back-test remains missing (see the row above and Limitation 7).


References

References

Regulatory / accounting: - IFRS 17 Insurance Contracts (IASB, 2017; amended 2020, effective 2023-01-01) — General Measurement Model (Building Block Approach). - IFRS 17 par. 32–52 — BBA measurement components: fulfilment cash flows (BEL), risk adjustment, contractual service margin. - IFRS 17 par. 33–36 — Best-estimate (no-margin) fulfilment cash flows and current discount-rate requirement. - IFRS 17 par. 37 / 119 — Risk adjustment and confidence-level disclosure. - IFRS 17 par. 44–46 / B119 — CSM recognition, interest accretion, release by coverage units. - IFRS 17 par. 83 — Insurance revenue presentation (service-based, not premium-based). - ASOP No. 56 — Modeling.

Implementation: - Engine: ecosystem/InsModel/Models/firmmodel/engines/ifrs17_bba_engine.py (IFRS17BBAEngine, governance id M-101I, v1.0.0). - Tests: tests/test_ifrs17_bba_engine.py (25 tests); tests/test_multi_basis_vm20_ifrs17.py. - Snapshot: scripts/model_snapshots.py M-021.


Change Log

Change Log

Canonical going-forward change log: M-021-changes.md (Keep-a-Changelog format, versioned with the InsModel release cycle, baselined at the IFRS17BBAEngine v1.0.0 release point). Code-side change history lives in git log of the component files; release notes in ecosystem/InsModel/CHANGELOG.md. Note: COND-002 (change log) on RAT-021-v1.0.0 remains open pending canonical ratification of that artifact.

Pre-baseline authorship history of this card:

  • 2026-05-08 — stub created from registry data per Decision 023 Phase 5 / B-07.
  • 2026-05-09 — added DS-018 + DS-062 references and Standards Coverage section per Stage B (DG-005 closure); Methodology / Key Assumptions / Validation sections remain stubbed for actuarial author follow-on.
  • 2026-06-04 — Validation Packet: added the model-vs-reality back-test reference (BT-012 firm-calibrated reserve reconciliation; BT-013 predictive vs persistence) per A4-30 / Decision 048. SR 26-2 ongoing back-testing now documented on the card.
  • 2026-06-06 — Documentation pass: Description aligned to corrected registry (BBA only; VFA/PAA on roadmap, per INV-005 / Limitation 1); BT-012 clarified in the Validation Packet as the shared firm reserve-aggregate reconciliation (not an IFRS-17 CSM/disclosed-liability back-test); per-version change log baselined at M-021-changes.md. Documentation-only — no methodology, assumption, or output change.

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:

asop_56 ifrs_17 sr_26_2 pcaob_as_2501 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-021-v1.0.1

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