Quota Share
The reinsurer shares a fixed percentage of every risk and every loss in the treaty portfolio.
The @openinsure/reinsurance package manages treaty-based reinsurance programs for MGAs and captives. It calculates cessions, compiles statements, and tracks recoveries across quota share (QS), excess of loss (XOL), and aggregate excess of loss (AXL) structures.
Quota Share
The reinsurer shares a fixed percentage of every risk and every loss in the treaty portfolio.
Excess of Loss (XOL)
The reinsurer pays losses above the retention (attachment) up to a defined limit per occurrence.
Aggregate XL
The reinsurer pays when total portfolio losses for the year exceed the aggregate attachment.
import { calcQuotaShareCession } from '@openinsure/reinsurance';
const cession = calcQuotaShareCession({ treaty: { id: 'qs-gl-2025', cedingPercentage: 0.3, // 30% ceded to reinsurer reinsurers: [ { name: 'Munich Re', share: 0.5 }, { name: 'Swiss Re', share: 0.5 }, ], effectiveDate: '2025-01-01', expirationDate: '2025-12-31', profitCommission: 0.15, // 15% profit commission if LR < 60% }, premium: 2_500_000, losses: 850_000, expenses: 375_000,});
// cession.cedingPremium: 750_000 (30% × 2,500,000)// cession.cedingLosses: 255_000 (30% × 850,000)// cession.commission: 150_000 (reinsurer's ceding commission)// cession.profitCommission: 73_500 (15% × [(750k - 255k - 150k)])// cession.netCession: 271_500 (cedingPremium - cedingLosses - commission)Key terms:
| Term | Definition |
|---|---|
| Ceding percentage | The share of every premium dollar and loss dollar ceded to reinsurers |
| Ceding commission | The reinsurer’s payment to the cedant for acquisition costs (typically 25–35%) |
| Profit commission | Additional commission paid when the reinsurer’s loss ratio is below a threshold |
Per-occurrence XOL protects against individual large losses.
import { calcXOLCession } from '@openinsure/reinsurance';
const cession = calcXOLCession({ treaty: { id: 'xol-gl-2025', retention: 250_000, // Cedant pays first $250k per occurrence limit: 750_000, // Reinsurer pays $250k–$1m per occurrence rateOnLine: 0.035, // 3.5% of subject premium reinstatements: 2, // 2 free reinstatements }, subjectPremium: 2_500_000, occurrences: [ { claimId: 'CLM-001', totalIncurred: 850_000 }, { claimId: 'CLM-002', totalIncurred: 125_000 }, { claimId: 'CLM-003', totalIncurred: 1_100_000 }, ],});
// cession.xolPremium: 87_500 (3.5% × 2,500,000)// cession.recoveries: [// { claimId: 'CLM-001', recovery: 600_000 }, (850k - 250k, capped at 750k)// { claimId: 'CLM-002', recovery: 0 }, (below retention)// { claimId: 'CLM-003', recovery: 750_000 }, (1.1m - 250k, capped at 750k)// ]// cession.totalRecovery: 1_350_000Reinstatements: After the reinsurer pays its limit on an occurrence, the treaty limit is reinstated (subject to an additional reinstatement premium). The reinstatements field tracks how many reinstatements remain.
AXL protects against an adverse portfolio year.
import { calcAggregateXLCession } from '@openinsure/reinsurance';
const cession = calcAggregateXLCession({ treaty: { id: 'axl-2025', aggregateAttachment: 3_000_000, // Cedant absorbs first $3m in losses aggregateLimit: 2_000_000, // Reinsurer pays up to $2m above attachment rateOnLine: 0.08, }, subjectPremium: 2_500_000, totalLossesIncurred: 4_200_000,});
// cession.axlPremium: 200_000 (8% × 2,500,000)// cession.recovery: 1_200_000 (4.2m - 3m attachment)// cession.netRetained: 3_000_000Quarterly cession statements are compiled from all active treaties and reported to reinsurers.
import { compileCessionStatement } from '@openinsure/reinsurance';
const statement = await compileCessionStatement({ orgId: '00000000-0000-4000-a000-000000000001', quarter: '2025-Q2', treaties: [qsTreaty, xolTreaty], db,});
// statement.period: '2025-Q2'// statement.treaties: [...per-treaty breakdown...]// statement.totals: { cedingPremium, cedingLosses, netCession, outstandingRecoveries }// statement.cashCallRequired: true (if recoveries exceed cash collateral threshold)POST /v1/reports/cession-statementAuthorization: Bearer <token>Content-Type: application/json
{ "orgId": "...", "quarter": "2025-Q2", "format": "pdf" // pdf | excel | json}When reinsurer-owed recoveries exceed the trust fund balance, a cash call is triggered.
POST /v1/reinsurance/cash-callAuthorization: Bearer <underwriter_token>Content-Type: application/json
{ "treatyId": "xol-gl-2025", "amount": 750_000, "dueDate": "2025-09-15", "invoiceNumber": "CC-2025-003", "reinsurerId": "munich-re"}Cash calls appear in the Finance Portal under AR Aging — they age like any other receivable and trigger escalation notifications if unpaid past the due date.
When a reinsurer contests a cash call amount, a dispute is created:
import { raiseDispute, resolveDispute } from '@openinsure/reinsurance';
const dispute = raiseDispute({ statementId: 'stmt-2025-q2', treatyId: 'xol-gl-2025', disputedAmount: 125_000, reason: 'Loss allocation methodology disagreement — XOL layer attachment applied incorrectly',});
// Resolution: accepted (full amount), rejected, or compromised (partial)const resolved = resolveDispute(dispute, { resolution: 'compromise', settledAmount: 87_500, notes: 'Parties agreed on revised attachment calculation per treaty addendum.',});Disputes track status transitions (open → under_review → resolved), support documentation references, and maintain a full audit trail for regulatory reporting.
NAIC Schedule F reports reinsurance assumed and ceded annually. The compileCessionStatement() output can be formatted for Schedule F submission:
GET /v1/reports/schedule-f?orgId=...&year=2025&format=pdfThe Finance Portal also provides a Schedule F button under Statutory Reports.
Stop-loss programs appear as XOL treaties in the cession statement. The @openinsure/stop-loss package calculates recoveries, and @openinsure/reinsurance incorporates them into the quarterly statement alongside traditional reinsurance treaties.
See Stop-Loss Insurance for the calculation reference.