Native, offline components for insurance solvency calculations under Solvency II, including valuation, technical provisions, market and underwriting risks, capital aggregation, own funds, groups and archived reporting checks. Provides explicit dated rule profiles, regulatory parameters, correlation matrices, synthetic reference cases, local discount curve adapters and traceable analyst overrides. Implements components of Directive 2009/138/EC, European Parliament and Council (2009) < https://eur-lex.europa.eu/eli/dir/2009/138/oj>, and Delegated Regulation (EU) 2015/35, European Commission (2014) < https://eur-lex.europa.eu/eli/reg_del/2015/35/oj>. Users provide portfolio inputs, market observations and model results; no network connection or 'Python' runtime is required.
CRAN edition 0.5.1, derived from native R Golden Source 0.5.0 (commit 14b25dc).
Maintainer: Dimitrios Geromichalos [email protected].
See ?solvency2 for the package overview and documentation("DEVELOPMENT")
for the bounded standard tests and optional exhaustive reference suite.
Automated package checks run on Linux (R release, oldrel-1 and devel), Windows and macOS. They include the reference tests, help examples and vignette. Click the status badge to inspect the individual platform results.
Native R tools for offline Solvency II analysis: 399 granular calculations, source-bound parameters and correlation matrices, dated rule profiles, synthetic reference portfolios, and archived reporting definitions and checks.
Use one formula in a spreadsheet replacement, combine components in your own valuation pipeline, inspect a regulatory parameter, or run a dependency graph. You do not need to adopt a monolithic application or install Python.
library(solvency2)
ctx <- Context(
as_of = "2025-01-17", known_at = "2026-09-23", currency = "EUR",
profile_id = "EU-S2-DOCUMENTS-2024-2025-v0.1"
)
charge <- intangible_risk(100, context = ctx)
charge$value
charge$sources
charge$details
Results retain their units, formula identifier, explicit context, source references, input/profile fingerprints and qualification limits. Monetary values use the stated currency, not implicit thousands; rates are decimal fractions unless the individual function documents another convention.
The exact scope is available through coverage(), rule_profiles() and
api_catalogue(). Every calculation has an R help page and an executable example.
The catalogue preserves the Python reference's domain paths and source signatures;
use ?function_name or args(function_name) for the R calling convention.
There is no runtime internet access, background update or market-data download.
Obtain production curves, cashflows, holdings and qualifications yourself.
DiscountCurve(), load_discount_curve_json(), load_discount_curve_csv() and
discount_curve_from_spot_rates() provide explicit local input routes.
best_estimate_with_curve() binds exact payment-date factors to supplied cashflows.
No interpolation, extrapolation, calendar convention or currency conversion is
silently selected. Archived rate APIs accept explicit market_data inputs.
Bundled market examples are invented and marked SYNTHETIC_DEMO; they are not
observed production curves. Regulatory constants and source matrices are not
synthetic.
parameter("scalars/intangible", ctx)
parameter("matrices/health_nslt", ctx)
scenario <- ctx
scenario$overrides <- list(NumericOverride(
"profile.json", list("scalars", "intangible", "value"),
0.70, "Illustrative analyst sensitivity, not a regulatory amendment"
))
intangible_risk(100, context = scenario)$value
intangible_risk(100, context = ctx)$value # installed baseline unchanged
Overrides are context-local, validated and audited with original values and reasons. JSON array paths use zero-based indices, also in R. Symmetric matrix overrides update the counterpart consistently. Version guards and nonnumeric regulatory qualifications cannot be bypassed with a numeric override.
reference_cases() contains 12,382 fixed independent calculation cases and
reference_portfolios() contains 227 integration portfolios. Additional synthetic
reporting datasets are accessible with reference_datasets() and
reference_dataset(). These include valid, boundary and deliberately rejected
inputs; they are not all successful calculation examples.
p <- reference_portfolios()$portfolios[[1]]
result <- calculate(p$nodes, context = do.call(Context, p$context))
names(result$results)
An Engine() instance offers the same run() interface with an instance-local
cache. Dependencies pass numeric values while provenance remains in node results.
Demo provenance also propagates through dependent nodes.
From a checked-out source directory with R and the declared dependencies installed:
R CMD build solvency2-CARAN
R CMD INSTALL solvency2_0.5.1.tar.gz
The package requires R >= 4.1, jsonlite, digest, gmp, Rmpfr and xml2. Source builds of the last three may need the corresponding GMP, MPFR and libxml2 development libraries; binary R packages already provide the compiled dependencies. Python, NumPy and SciPy are not runtime dependencies.
Use help(package = "solvency2"), vignette("getting-started", package = "solvency2")
and documentation() for local help. export_resources() writes verified JSON
to an explicitly requested new directory; normal calculations do not write files.
The immediate reference is the published native R solvency2 0.5.0,
which implements the Python solvency2 0.5.0 reference.
GOLDEN_SOURCE.json records its commit and source fingerprints. Data are preserved
losslessly, including provenance and dated scope restrictions. R uses native
GMP/MPFR arithmetic, stats::optim and stats::fft; numerical backend diagnostics,
R input hashes and XML serialization hashes identify the implementation actually
used rather than imitating Python runtime metadata.
The package implements the reference's documented components. It does not develop
an insurer's internal model, perform actuarial projection on behalf of the user,
grant supervisory approval, infer complete reporting obligations or submit filings.
Externally supplied model results and qualifications remain explicit inputs.
REFERENCE_COMPONENT, ANALYST_SCENARIO, SYNTHETIC_DEMO, PARTIAL and
DRAFT_XBRL_INSTANCE describe distinct outcomes; none means regulatory approval.
Unsupported or ambiguous situations remain visible through structured errors or
review findings, never an invented default result.
Original code and invented demonstration data: RiskDataScience GmbH,
GPL-3.0-or-later. Contact: [email protected].
Regulatory and reporting extracts retain their separately identified reuse terms;
see inst/THIRD_PARTY_NOTICES.md, inst/THIRD_PARTY_DATA_REGISTER.json and
inst/licenses/. No observed historical market-data archive is included.