Skip to content

What (One-liner) ​

A pension/insurance liability book against its assets on a real sovereign spot curve — liability PV and Fisher-Weil duration, the Redington duration gap, the funding ratio with its ±100bp sensitivity, and the hedge ratio of a duration overlay.

How to use ​

Drag ldi_funding_gap_v1 into Canvas, pick a liability profile (level annuity by default), set the annual payment and horizon, enter the asset value and asset duration, optionally a hedge overlay (notional + duration), choose the discount curve (UK gilts nominal by default), and run — it self-fetches the official curve (BoE GLC, Fed GSW, ECB AAA, or Japan MoF). Wire it upstream of risk_management or an ALM institution_composite to give the LDI/duration seats their quantitative face.

Core formula ​

PV_L    = Σ CF_i · e^{−r(t_i)·t_i}                     # spot curve, continuous compounding
D_L(FW) = Σ t_i · CF_i · e^{−r(t_i)·t_i} / PV_L        # Fisher-Weil duration
gap     = D_A − D_L                                    # negative = assets shorter
FR      = A / PV_L,   FR±100bp: liability full reval, asset A·e^{∓D_A·0.01}
hedge   = N_hedge·D_hedge / (PV_L·D_L)

Assumptions & applicability ​

Assumptions: continuous-compounding discounting (annually-compounded sources converted via ln(1+r), declared in curve_meta); parameterised level-payment liability; asset side = value + duration; linear spot interpolation with flat extrapolation.

Applicable: GBP/USD/EUR/JPY liability books on the official curves; funding-ratio and duration-gap posture reading; hedge-ratio bookkeeping.

Not applicable: Solvency II SCR (EIOPA shock schedule ≠ flat ±100bp), key-rate/twist risk, longevity/inflation basis, intraday hedging.

Input / Output contract ​

Inputs: liability_profile, liability_annual, liability_years, asset_value, asset_duration, curve (boe_nominal / boe_real / gsw_nominal / ecb / jp_mof), hedge_notional, hedge_duration.

Output (v2, time-series native): metrics (the 12 keys above, = the last row) plus series — every metric as a daily series over the curve panel (dates/dates_ord/n_dates), plus curve_meta (source, as-of, staleness, tenor range, compounding normalisation, par-approximation flag). A curve that cannot be fetched returns status: unavailable with the reason — it never fabricates a curve.

Known limitations ​

  1. The ±100bp bound is asymmetric by construction: the liability leg is fully revalued while the asset leg uses the duration approximation (asset cashflows are not supplied). 1a. The series revalues TODAY'S static book on each historical date — a liability-revaluation what-if lens (declared curve_meta.asset_side = static_book), not a portfolio backtest. 1b. Series depth = what the curve source adapter holds (BoE adapter currently carries 2025→present; GSW/MoF carry decades) — declared via curve_meta.date_min/n_dates, never padded.
  2. jp_mof supplies par yields used as a spot approximation — flagged in curve_meta.par_yield_approx.
  3. Parallel shifts only; key-rate/twist exposures are out of scope.
  4. Curves are official daily estimates with a publication lag; curve_meta.age_days and stale report it honestly.

Verifiable intelligence for the decisions that demand scrutiny.