Most ceded-reinsurance errors are not dramatic. A losses-occurring treaty matched on the policy's inception date. A per-risk excess that should have inured to the cat programme tested after it instead. A reserve sent twice and ceded twice. A layer that keeps paying after its reinstatement is gone. Each one moves money to the wrong contract quietly, and each one is found months later by someone reconciling a reinsurer's statement.
InsightCede puts all of that in one service, cede_cession_service, and keeps
the agents out of it. An agent can explain what the engine did, propose a correction, or
draft the notice that follows; it never writes a cession, and it reads what the engine
committed only after the commit.
Two questions before any money moves
Which treaty year? A risks-attaching treaty covers policies that incept in
its term. A losses-occurring treaty covers losses that happen in its term, whatever
year the policy was written. The date the engine matches on comes from the contract, not
from the transaction, which is why it cannot be one WHERE clause over one date
column. A treaty that needs a date the event did not carry is skipped, and the skip is
written down: “VSURE-CAS-QS 2025 is risks_attaching, so it needs the policy inception
date, which this transaction did not carry.”
In what order? Contracts inure to one another's benefit. Facultative normally inures to
the treaty, so the treaty sees the loss net of the fac recovery. An excess treaty can name the
contract it inures to, and it is then always tested first. The order is read from the
contract's inuring_order, never assumed.
| Risks-attaching | Losses-occurring | |
|---|---|---|
| Matched on | The policy's inception date | The loss date |
| A 2025 policy, loss in 2026 | The 2025 treaty year | The 2026 treaty year |
| What the event must carry | policy_inception, on claim events too | loss_date |
| Without it | Skipped, with the reason recorded | Skipped, with the reason recorded |
Where one loss goes
The engine's tests use the demo programme's own claims: a demo US property-casualty carrier
with a 2025 property cat programme of 15M xs 5M and 30M xs 20M, each with one reinstatement,
and 50M xs 50M above. One of them, VCL-2025-000320, was paid at $28,435,097
ground up. In one test a per-risk 5M xs 5M is added that inures to the cat programme, to
prove the order holds.
sankey-beta Ground-up loss,Per-risk treaty,5.0 Ground-up loss,Cat layer 1,15.0 Ground-up loss,Cat layer 2,3.4 Ground-up loss,Retained,5.0
The figure that matters is layer 2. Test the per-risk treaty after the cat programme instead of before it, and $5,000,000 moves between two contracts with different panels. That is the kind of error that does not show up in a total.
The rules the engine enforces
| Rule | What the engine does | Proven by |
|---|---|---|
| A layer cannot pay more than it has | Limit, plus limit again per reinstatement, capped by any aggregate limit. What it cannot absorb is written as uncovered_amount with a reason. | VCL-2025-000902, $18,000,000: layer 1 already used both limits, so 0 ceded and 13,000,000 uncovered: “layer exhausted” |
| A movement cedes the delta | Each event carries the claim's whole position. The engine computes each contract's target and writes only the change against what is already ceded. | The same reserve sent twice on CLM-2026-000003 cedes 13,125 once |
| Paid and outstanding are separate bases | Paid from the paid position, outstanding as incurred less paid. A payment moves the reserve to paid with a contra row. | CLM-2026-000025: 14,500 outstanding, then 14,500 paid and −14,500 outstanding; incurred ceded unchanged |
| A fall is a contra, never an edit | A reduction is a reversal row pointing at the row it reduces. The period it landed in has already been reported. | A voided cheque writes −15,000,000 and −8,435,097; a 1,000,000 recovery takes layer 2 paid to 7,435,097 |
| Erosion is derived, never stored | Eroded limit and reinstatements used are recomputed from the cession ledger after every write. | The source data had stored them independently and drifted to 3 reinstatements used out of 1 available |
| A surplus treaty cedes on lines | Retained line and number of lines against the risk's sum insured. | 1M line, 4 lines: a 3M risk cedes two thirds (66.67%); a 10M risk cedes 4M of it, 40% |
Cessions are append-only. Correcting one means writing a contra entry, because the accounting period it landed in has already been reported.
An occurrence responds to the event, not the claim
A cat excess-of-loss layer attaches on the event: every claim tagged with the same cat code, on a line the treaty covers, within the hours clause. The layer's response is shared across the claims pro rata to each claim's subject loss, rounded to the cent, with the residual cent on the largest claim, so the slices always add up to the layer. When a new claim joins the occurrence, the earlier claims are restated under the same event — and nothing is written where nothing changed.
The engine's note on each event is what Marta reads first; it names the occurrence and the sibling claims it restated. On the Inbound page every event the workbenches reported sits in one list with its outcome, and selecting one shows the cessions it wrote.

Reinstatements are finite and cost money
Eroding a layer consumes reinstatement capacity and raises a reinstatement premium that the carrier owes the panel. The engine charges it only on paid erosion (a reserve reinstates nothing until it is paid), only while a reinstatement remains to be bought, pro rata to the amount reinstated, and pro rata temporis from the loss date. The fractions are kept at four decimals, so each row reproduces from the row itself.
| Claim, layer | Fraction of layer | Time fraction | Premium due |
|---|---|---|---|
VCL-2025-000320, layer 1 (rate 1,275,000) | 1.0000 | 0.3764 — 137 of 364 days from 16 Aug | 479,910.00 |
VCL-2025-000320, layer 2 (rate 1,350,000) | 0.2812 | 0.3764 | 142,888.97 |
VCL-2025-000901, layer 2 | 0.4667 | 0.1621 — from 2 Nov | 102,130.29 |
VCL-2025-000901, layer 1 | none charged | — | the reinstated limit was used; none left to buy |
| Total | 724,929.26 |
Those are demo-programme figures, and the difference between the first two is deliberate. The earlier figure ran pro rata from the transaction date rather than the loss date and charged a reinstatement on a layer that had none left. The correction was written as contra rows against the old figures, not as an edit.

One flow, end to end
| Use case details | A claim payment |
|---|---|
| Trigger | InsightCW writes claim.payment_issued to its outbox in the same transaction as the cheque |
| Actor(s) | InsightCW (the event); the engine; the cession decision and anomaly agents after the commit |
| Agent | None inside the engine. cession_decision_agent explains afterwards; anomaly_explainer_agent proposes any correction |
| Grounded in | Treaties, layers and their basis, inuring order, the claim's prior cessions, the occurrence's other claims |
| Prepares | Loss cessions by contract, layer and basis; recoverables per reinsurer by signed line; reinstatement premium; the note |
| Checkpoint & default level | None for the engine. The explanation is cession_review at L2, and a clean one is only noted |
| What a person decides | Nothing, if the cession is clean. A proposed correction is a person's to apply |
| What is recorded | Append-only cession rows with the source event id, the engine's note on the inbound event, recomputed erosion |

CLM-2026-000003, 25% of a $52,500 reserve sent twice. Every correction on this page is a row like it; nothing here has been edited.What it does not do
- The hours clause is measured in days. Claims carry a loss date, not a time, so a 72-hour clause compares calendar dates. Two losses 71 hours apart that straddle three dates are treated as three days apart.
- Some contract types are named, not implemented. Retrocession, aggregate deductibles and stop-loss are in the type vocabulary; the engine does not apply them.
- Excess-of-loss premium is booked, not ceded. An excess layer's cost is the layer premium agreed at placement. The engine writes nothing per policy for it; a person books it with one action on the programme page. Until then the programme looks free.
- A surplus treaty needs the sum insured. Without it on the event the treaty is skipped, and the note says it “needs the risk's sum insured”.