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.
Inputs, processing, outputs
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 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
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 and Known Gaps
- 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.
- 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.
- Flat discount curve, no term structure. A single
ifrs17_discount_rateis used for BEL discounting, CSM accretion, and RA. Yield-curve sensitivity and the OCI disaggregation option (par. 88–90) are not modeled. - 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.
- 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.
- No reinsurance-held measurement. IFRS 17 par. 60–70A reinsurance contracts held (separate CSM, loss-recovery component) are not modeled.
- 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
MagicMockprovider 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 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
coveredstatus 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 remainsmissing(see the row above and Limitation 7).
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
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.
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.
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.
Per-tier expectations
Per MRM Framework §10.2 + §10.3, this model's regulatory_frameworks tag list activates the following overlays:
| 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 |
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.