Insurance Fundamental Score
Install and import#
npm install fintech-algorithmsimport { insuranceFundamentalScore } from "fintech-algorithms/fundamental-analysis-and-valuation/sector-specific-equity-scoring/insurance-fundamental-score";Signature#
insuranceFundamentalScore(data)Scores a non-life insurer on seven banded solvency, underwriting and profitability components, then subtracts 20 points for each of the SCR and MCR coverage ratios that sits below 1.
Parameters#
| Name | Type | Notes |
|---|---|---|
data | RecordValue | A plain object. framework must be the string solvency-ii-nonlife-teaching-v1. weights must be an object holding exactly solvency, minimum_capital, underwriting, reserve_quality, own_fund_quality, concentration and profitability. The nonnegative inputs are scr_coverage_ratio, mcr_coverage_ratio, combined_ratio, tier1_own_funds_share and investment_concentration_ratio; adverse_reserve_development_ratio and return_on_equity need only be finite and may be negative. |
Returns#
{ state: string; method: string; component_scores: Record<string, number>; weights: Record<string, number>; base_score: number; floor_breaches: string[]; penalty: number; fundamental_score: number; coverage_ratio: number; reason: string }
component_scores holds the seven band scores on a 0-100 scale and base_score is their weighted sum. floor_breaches lists whichever of scr_coverage_ratio and mcr_coverage_ratio is below 1, penalty is 20 times that count, and fundamental_score is base_score less the penalty clamped to [0, 100]. state is capital-requirement-review when there is any breach, otherwise the band of the final score: strong-review-band at 75 or more, mixed-review-band at 50 or more, weak-review-band below that. method is insurance-sector-score-v1 and coverage_ratio is 1.
Errors#
- When data is not a plain object — throws TypeError
- When framework is not a nonempty string, or a required input is not a finite number — throws TypeError
- When framework is not solvency-ii-nonlife-teaching-v1 — throws RangeError
- When weights does not hold exactly the seven component names, or its values do not sum to 1 within 1e-9 — throws RangeError
- When an input required to be nonnegative is negative — throws RangeError
Complexity: time O(1),
space O(1).
Worked example#
executed Captured by running this function on the input its own test provides. Real output of real code — but not asserted against a published figure.
Input#
{
"framework": "solvency-ii-nonlife-teaching-v1",
"scr_coverage_ratio": 1.72,
"mcr_coverage_ratio": 3.25,
"combined_ratio": 0.94,
"adverse_reserve_development_ratio": 0.01,
"tier1_own_funds_share": 0.78,
"investment_concentration_ratio": 0.18,
"return_on_equity": 0.11,
"weights": {
"solvency": 0.22,
"minimum_capital": 0.1,
"underwriting": 0.22,
"reserve_quality": 0.14,
"own_fund_quality": 0.12,
"concentration": 0.08,
"profitability": 0.12
}
}Call#
insuranceFundamentalScore(data)Returns#
object with 10 fields: state, method, component_scores, weights, base_score, floor_breaches, penalty, fundamental_score, …
{
"state": "mixed-review-band",
"method": "insurance-sector-score-v1",
"component_scores": {
"solvency": 72,
"minimum_capital": 100,
"underwriting": 70.00000000000004,
"reserve_quality": 70,
"own_fund_quality": 70,
"concentration": 73.33333333333333,
"profitability": 69.23076923076923
},
"weights": {
"solvency": 0.22,
"minimum_capital": 0.1,
"underwriting": 0.22,
"reserve_quality": 0.14,
"own_fund_quality": 0.12,
"concentration": 0.08,
"profitability": 0.12
},
"base_score": 73.61435897435898,
"floor_breaches": [],
"penalty": 0,
"fundamental_score": 73.61435897435898,
"coverage_ratio": 1,
"reason": "solvency-ii-tagged-nonlife-package-bands"
}Other exports#
This module also exports
calculate, bankFundamentalScore, reitFundamentalScore, utilityFundamentalScore, earlyStageLiquidityAndRunwayScore, cyclicalAndCommodityCycleNormalization, holdingCompanyLookThroughScore, sectorSpecificWeightCalibration, unsupportedScopeAndCoverageDecision. Every module additionally exports run as an alias of its
primary function, and a meta object carrying its catalog id, domain, family,
shape and article URL.
Diagrams#
How it works#
This page states the contract — how to call it correctly. The article explains the concept: why it works, and where it breaks.
References#
- Calculation of the Solvency Capital Requirement — European Parliament and Council via EIOPA Single Rulebook
- Capital management disclosures — European Commission via EIOPA Single Rulebook
- IFRS 17 Insurance Contracts — International Accounting Standards Board
- Glossary of Insurance Terms — Combined Ratio — National Association of Insurance Commissioners
- Insurance Regulatory Information System — Property/Casualty Ratios — National Association of Insurance Commissioners
- Non-GAAP Financial Measures Compliance and Disclosure Interpretations — U.S. Securities and Exchange Commission
- Evidence boundary