Functional Weave
Code in Python

insurance.loss-ratio@1.0.1

vectors.json

4,178 bytes · view raw

[
 {
  "name": "65% claims and 30% expenses make a 95% combined ratio",
  "args": [
   {
    "minor": 100000000,
    "currency": "GBP"
   },
   {
    "minor": 65000000,
    "currency": "GBP"
   },
   {
    "minor": 30000000,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": 6500,
   "expenseRatioBasisPoints": 3000,
   "combinedRatioBasisPoints": 9500
  }
 },
 {
  "name": "the combined ratio is rounded once: 33.33% and 33.33% but 66.67% together",
  "args": [
   {
    "minor": 300,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": 3333,
   "expenseRatioBasisPoints": 3333,
   "combinedRatioBasisPoints": 6667
  }
 },
 {
  "name": "the same rounded down",
  "args": [
   {
    "minor": 300,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   "down"
  ],
  "expect": {
   "lossRatioBasisPoints": 3333,
   "expenseRatioBasisPoints": 3333,
   "combinedRatioBasisPoints": 6666
  }
 },
 {
  "name": "an underwriting loss: combined above 100%",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   {
    "minor": 120000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": 12000,
   "expenseRatioBasisPoints": 2500,
   "combinedRatioBasisPoints": 14500
  }
 },
 {
  "name": "no claims",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 30000,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": 0,
   "expenseRatioBasisPoints": 3000,
   "combinedRatioBasisPoints": 3000
  }
 },
 {
  "name": "reserve releases outweighing new claims give a negative loss ratio",
  "args": [
   {
    "minor": 100000,
    "currency": "GBP"
   },
   {
    "minor": -5000,
    "currency": "GBP"
   },
   {
    "minor": 30000,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": -500,
   "expenseRatioBasisPoints": 3000,
   "combinedRatioBasisPoints": 2500
  }
 },
 {
  "name": "half a basis point rounds to even",
  "args": [
   {
    "minor": 20000,
    "currency": "GBP"
   },
   {
    "minor": 1,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-even"
  ],
  "expect": {
   "lossRatioBasisPoints": 0,
   "expenseRatioBasisPoints": 0,
   "combinedRatioBasisPoints": 0
  }
 },
 {
  "name": "half a basis point rounds up half-up",
  "args": [
   {
    "minor": 20000,
    "currency": "GBP"
   },
   {
    "minor": 1,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": 1,
   "expenseRatioBasisPoints": 0,
   "combinedRatioBasisPoints": 1
  }
 },
 {
  "name": "a negative half rounds away from zero half-up",
  "args": [
   {
    "minor": 20000,
    "currency": "GBP"
   },
   {
    "minor": -1,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expect": {
   "lossRatioBasisPoints": -1,
   "expenseRatioBasisPoints": 0,
   "combinedRatioBasisPoints": -1
  }
 },
 {
  "name": "no earned premium is refused",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expectError": "earnedPremium must be more than zero"
 },
 {
  "name": "negative earned premium is refused",
  "args": [
   {
    "minor": -100,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expectError": "earnedPremium must be more than zero"
 },
 {
  "name": "claims in another currency are refused",
  "args": [
   {
    "minor": 100,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "EUR"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   "half-up"
  ],
  "expectError": "currency mismatch"
 }
]