Skip to content

Financial Modelling · Section 3

Contracts as compositions

The algebra of financial terms — how quota share, CatXoL, and AggXoL are each a composition of the same small set of building blocks.

The dissection translated Contract 1 into five terms applied in sequence. Those same terms — with different parameters and wiring — assemble every other Helios Re contract too:

  • Contract 5 (Baltica EU Windstorm Quota Share, 25%) — filter to EU windstorm, check the coverage period, scale every loss by 25%.
  • Contract 3 (SunCoast All-US AggXoL, $50M xs $300M, inuring C1+C2) — filter to SunCoast’s US perils, subtract C1 and C2 gross losses (inuring), check the coverage period, sum all occurrences per trial and apply an attachment and limit to the total, scale by participation.

Notice the reuse: a quota share scales losses, and so does a CatXoL’s participation step; a CatXoL applies an attachment and limit per occurrence, and an AggXoL applies the same operation to the aggregate. The same five blocks recur:

Building blockContract type
Quota ShareCatXoLAggXoL
Loss filter✓ (peril / geography)✓ (peril / geography)✓ (peril / geography)
Contract period
Scaling✓ (cession %)✓ (participation)✓ (participation)
Occurrence excessoptional (event limit)✓ (AA, \ell)
Aggregate excessoptional (annual limit)✓ (00, (1+n)(1{+}n) \cdot \ell)✓ (AA, \ell)

Each block is formalized in the term reference, where you will find its formula, its effect on Trial 9 in isolation, a runnable implementation over the TELT, and the EP curves it produces across all 20 trials:

TermWhat it doesNotation
Loss filterKeeps only the TELT rows matching a predicate (peril, geography, line of business)filter(P)\text{filter}(P)
Contract periodDrops events outside the coverage windowperiod(t0,t1)\text{period}(t_0, t_1)
ScalingMultiplies every loss by a constant — cession % or participationscale(f)\text{scale}(f)
Occurrence excessApplies an attachment and limit to each occurrenceocc_excess(A,)\text{occ}\_{\text{excess}}(A, \ell)
Aggregate excessApplies an attachment and limit to the trial totalagg_excess(A,)\text{agg}\_{\text{excess}}(A, \ell)

Two of these change the granularity of the data: occurrence excess preserves per-occurrence rows, while aggregate excess collapses all occurrences within a trial into a single trial-level result. That resolution change matters when composing — downstream terms after an aggregate excess receive trial-level data, not occurrence-level. The catalog also covers optional terms that build on these — triggers and aggregate/disaggregate — used in the more elaborate structures.

A contract is what you get when you chain the blocks together: each contract type is a specific composition of the same terms, differing only in which ones it uses and how they are parameterised.

We write a composition as C=TkT1C = T_k \circ \cdots \circ T_1: apply T1T_1 first, then T2T_2 to the result, and so on. Data flows left to right through the pipeline, but the formula reads right to left, following the mathematical convention for function composition — so every contract below begins, on the right, with a filter and a coverage period selecting the losses it sees, and ends, on the left, with scaling for participation.

The simplest structure: a fixed cession percentage qq behind a filter and a coverage period.

QS(q)=scale(q)period(t0,t1)filter(P)\text{QS}(q) = \text{scale}(q) \circ \text{period}(t_0, t_1) \circ \text{filter}(P)

Optional event and annual limits add an occurrence excess and an aggregate excess into the pipeline.

All five blocks. The occurrence excess clips each event, the aggregate excess caps the annual total (the limit (1+n)(1+n)\cdot\ell encodes nn reinstatements), and scaling applies participation.

CatXoL(A,,n,p)=scale(p)agg_excess(0,  (1+n))  occ_excess(A,)period(t0,t1)filter(P)\begin{aligned} \text{CatXoL}(A, \ell, n, p) = {} & \text{scale}(p) \circ \text{agg}\_{\text{excess}}(0,\; (1+n) \cdot \ell) \\ & \circ\; \text{occ}\_{\text{excess}}(A, \ell) \circ \text{period}(t_0, t_1) \circ \text{filter}(P) \end{aligned}

Drops the per-occurrence layer: the aggregate excess applies directly to the trial total.

AggXoL(A,,p)=scale(p)agg_excess(A,)period(t0,t1)filter(P)\text{AggXoL}(A, \ell, p) = \text{scale}(p) \circ \text{agg}\_{\text{excess}}(A, \ell) \circ \text{period}(t_0, t_1) \circ \text{filter}(P)

The term reference and contract catalog formalize each block and each contract in turn. Beyond the canonical types, contracts can also feed one another — the programs page covers the sourcing and inuring relationships that turn a stack of contracts into a graph. And every contract produces not just a gross loss but a full set of financial perspectives: subject, gross, retained, and net.