fintech-algorithms
Using a coding agent? Give it the skill: npx skills add IslamBaraka90/Fintech-Algorithms-Library What it does →

Insurance Fundamental Score

Install and import#

bash
npm install fintech-algorithms
ts
import { 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#

NameTypeNotes
dataRecordValueA 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#

data
{
  "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#

Insurance Fundamental Score — article hero
Insurance Fundamental Score — component ledger
Insurance Fundamental Score — decision boundary
Insurance Fundamental Score — evidence clock
Insurance Fundamental Score — model anatomy
Insurance Fundamental Score — system map

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.

Read the article →

References#

The rest of the Sector-Specific Equity Scoring family#