Products Insurance and reinsurance
Solvency II
Standard formula and internal model validation
SCR from the standard formula, with diversification attributed to each module.
Solvency II ties insurer capital to a one-year value at risk at the ninety-nine and a half percent level. GraphAtlas computes the standard formula SCR, shows the diversification benefit and who earns it, and produces the quantitative reporting templates from the same run.
Try the calculation Request a walkthrough
- Verification
- 5 statements. 1 proved, 1 certified, 3 tested.
- Regime
- Directive 2009/138/EC and Delegated Regulation (EU) 2015/35
- Set by
-
- European Commission and the European Supervisory Authorities
- European Insurance and Occupational Pensions Authority
- Built for
-
- Insurance risk and actuarial function
- Finance and reporting
- Internal model validation
- Version
- 6.0
Try it
Run it on sample data
Five module charges go in and one requirement comes out. Change a charge and see where the diversification comes from.
Fig. 1 Solvency capital requirement for an illustrative composite insurer, EUR million
Verifying receipt
Risk module charges
Added and taken off
Own funds
Solvency capital requirement, EUR million
617.4 million euros
Own funds cover it 1.86 times, a solvency ratio of 186%. Above the 100% line.
| Step | EUR m | Drawn to scale |
|---|---|---|
| Sum of the module charges | 945.0 | |
| Diversification | −307.6 | |
| Basic SCR | 637.4 | |
| Operational risk | +75.0 | |
| Loss-absorbing capacity | −95.0 | |
| Solvency capital requirement | 617.4 |
| Module | Alone | Share | Diversified away | Share, drawn to scale |
|---|---|---|---|---|
| 410.0 | 349.7 | 60.3 | ||
| 85.0 | 48.7 | 36.3 | ||
| 120.0 | 49.2 | 70.8 | ||
| 70.0 | 24.6 | 45.4 | ||
| 260.0 | 165.2 | 94.8 | ||
| Basic SCR | 945.0 | 637.4 | 307.6 | Shares sum exactly |
Correlation matrix, Article 104(1) and Annex IV, point 1
| Market | Default | Life | Health | Non-life | |
|---|---|---|---|---|---|
| Market | 100% | 25% | 25% | 25% | 25% |
| Default | 25% | 100% | 25% | 25% | 50% |
| Life | 25% | 25% | 100% | 25% | 0% |
| Health | 25% | 25% | 25% | 100% | 0% |
| Non-life | 25% | 50% | 0% | 0% | 100% |
The matrix is typed once, as decimal text. The check factors it as L · D · LT in exact fractions and rebuilds it, entry by entry.
Inputs and outputs
What goes in. What comes out
The plate runs a slice of the engine. This is the whole shape of it.
What goes in
- Risk module charges
- The standalone capital for market, counterparty default, life, health and non-life underwriting risk, in your reporting currency.
- Operational risk
- The capital requirement for operational risk, Article 107.
- Loss-absorbing capacity
- The adjustment for technical provisions and deferred taxes, Article 108.
- Own funds
- Eligible own funds, so the page can show the solvency ratio.
What comes out
- Basic SCR
- The square root of the correlation-weighted charges, with the diversification benefit against the plain sum.
- Attribution
- The part of the basic SCR that belongs to each module. The parts add up to the whole.
- SCR and ratio
- The requirement after operational risk and loss absorption, and how many times own funds cover it.
- Derivation
- Every figure as a tree of steps, each with the rule it applies.
- Receipt
- A hash of the inputs, the rule parameters and the result. Anyone can recompute it.
What the plate covers
In the plate above
- The top of the standard formula, from the five module charges to the SCR.
- The exact part of the basic SCR that belongs to each module.
- The correlation matrix, with a certificate that it is positive definite.
In the licensed engine, not the plate
- The sub-module calculations inside each risk module, which the licensed engine runs on your positions.
- The reporting templates and the internal model validation workflow.
- Amendments made after the Directive as made.
Clause map
Every rule has an address
Each row names the clause, the function that carries it and the statements that check it. A test opens each file and confirms the function exists.
| Reference | Rule | Carried by | Checked by |
|---|---|---|---|
| Article 103 | The SCR is the basic SCR plus operational risk, less the adjustment for loss-absorbing capacity. | solvency src/ | Tested SI-05 |
| Article 104(1) and Annex IV, point 1 | The basic SCR aggregates the module charges with the prescribed correlation matrix. | aggregate src/ | Proved SI-01 Tested SI-03 Tested SI-04 |
| Annex IV, point 1 | The correlation matrix, as written in the Directive. | BSCR_ src/ | Certified SI-02 |
| Article 107 | The capital requirement for operational risk is added to the basic SCR. | solvency src/ | Tested SI-05 |
| Article 108 | The adjustment for loss-absorbing capacity is taken off, and it cannot take the SCR below zero. | solvency src/ | Tested SI-05 |
Verification
What we claim, and how it is checked
Every statement is registered, and each says which level of assurance it has earned. The ladder is explained on the verification page.
Proved
True for every input.
- SI-01
For any non-negative module charges, the basic SCR is never above the plain sum of the charges and never below the largest single charge.
6 checks, decided by Z3 5.3.3.0 (WebAssembly) and rerun from the emitted file by Z3 5.3.3 (native) and cvc5 1.4.2 (native, nl-cov). 2 broken variants are refuted. proofs/smt2/SI-01.smt2
Certified
True for the case in hand, with evidence anyone can recheck.
- SI-02
The prescribed basic SCR correlation matrix is positive definite, shown by an exact factorisation into a lower triangle, a diagonal and the transpose of the triangle, which a separate checker accepts.
tests/kernel/exact.test.tssrc/kernel/certify.ts
Tested
True on every input we tried.
- SI-03
At every level of the Solvency II trace, the shares of the parts add up to the share of the whole.
tests/kernel/solvency.test.ts
- SI-04
Every module’s share of the basic SCR is at least zero and at most the module’s own charge.
tests/kernel/solvency.test.ts
- SI-05
The SCR is the basic SCR plus operational risk less the loss-absorbing adjustment, which is limited so the SCR cannot go below zero.
tests/kernel/solvency.test.ts
Use it
The same call, anywhere
This sample is written from the input the plate starts with, so the code and the numbers cannot drift apart.
import {
solvencyCapital,
solvencyRatio,
solvencyReceiptPayload,
} from '@graphatlas/kernel/solvency-ii';
import { receipt } from '@graphatlas/kernel/receipt';
const input = {
modules: { market: 410, default: 85, life: 120, health: 70, nonlife: 260 },
operational: 75,
adjustment: 95,
};
const result = solvencyCapital(input);
const ratio = solvencyRatio(1150, result.scr);
const hash = await receipt(solvencyReceiptPayload(input, result)); const out = {
scr: 617.3971,
basicScr: 637.3971,
diversification: 307.6029,
moduleShares: [349.7624, 48.6745, 49.1844, 24.5726, 165.2031],
ratio: 1.8627,
receipt: '8a7efb34d2e7d9836863d968c1dc70bf02bd3cdca00f7c630cd8f0e024146f99',
}; The call and the numbers come from the engine that built this page, run on the same input as the plate above. Values are rounded to four places for display. The receipt hashes the unrounded numbers.
Runs on
- Browser
- Edge
- Node.js
- Python
- JVM
- .NET
- Excel
- Command line
- Container
Green surfaces are measured on every build of this site. Each must return the same receipt, bit for bit. The others are packaged targets that the build does not measure. How the platform works
Changes
When the rule moves, so does the engine
Publications that touch this regime, and the release that answered each.
-
Updated quantitative reporting templates for the standard formula
Tracking. No release yet
-
Updated methodology for the risk-free interest rate term structure
Shipped as Reserving 3.8, 9 days later
-
Amended Solvency II framework applies from 30 January 2027
Shipped as Solvency II 6.0, 14 days later