Functional Weave
Code in Python

insurance.excess-apply@1.0.0

vectors.json

8,313 bytes · view raw

[
 {
  "name": "a 2,500.00 loss less 250.00 compulsory and 250.00 voluntary excess pays 2,000.00",
  "args": [
   {
    "minor": 250000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 200000,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 50000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a loss smaller than the excess pays nothing",
  "args": [
   {
    "minor": 30000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 30000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 0,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 30000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a loss exactly the excess pays nothing",
  "args": [
   {
    "minor": 50000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 0,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 50000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a zero loss",
  "args": [
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 25000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 0,
    "currency": "GBP"
   },
   "payout": {
    "minor": 0,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "no excess pays the whole loss",
  "args": [
   {
    "minor": 123456,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 0,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 0,
    "currency": "GBP"
   },
   "payout": {
    "minor": 123456,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 0,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the limit caps the payout after the excess",
  "args": [
   {
    "minor": 1200000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 1000000,
    "currency": "GBP"
   },
   "limitApplied": true,
   "uninsured": {
    "minor": 200000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "with the excess within the limit it erodes the limit",
  "args": [
   {
    "minor": 1200000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 25000,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   true
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 950000,
    "currency": "GBP"
   },
   "limitApplied": true,
   "uninsured": {
    "minor": 250000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a loss just over the limit: after the excess it is under, so the limit does not bite",
  "args": [
   {
    "minor": 1040000,
    "currency": "GBP"
   },
   {
    "minor": 50000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 990000,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 50000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "the same loss with the excess within the limit: capped first, then the excess",
  "args": [
   {
    "minor": 1040000,
    "currency": "GBP"
   },
   {
    "minor": 50000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   true
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 950000,
    "currency": "GBP"
   },
   "limitApplied": true,
   "uninsured": {
    "minor": 90000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "well under the limit, the limit changes nothing",
  "args": [
   {
    "minor": 500000,
    "currency": "GBP"
   },
   {
    "minor": 10000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 10000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 10000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 490000,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 10000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a limit of zero pays nothing",
  "args": [
   {
    "minor": 500000,
    "currency": "GBP"
   },
   {
    "minor": 10000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 10000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 10000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 0,
    "currency": "GBP"
   },
   "limitApplied": true,
   "uninsured": {
    "minor": 500000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "payout exactly the limit is not reduced by it",
  "args": [
   {
    "minor": 1050000,
    "currency": "GBP"
   },
   {
    "minor": 50000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 1000000,
    "currency": "GBP"
   },
   false
  ],
  "expect": {
   "totalExcess": {
    "minor": 50000,
    "currency": "GBP"
   },
   "excessApplied": {
    "minor": 50000,
    "currency": "GBP"
   },
   "payout": {
    "minor": 1000000,
    "currency": "GBP"
   },
   "limitApplied": false,
   "uninsured": {
    "minor": 50000,
    "currency": "GBP"
   }
  }
 },
 {
  "name": "a negative loss is refused",
  "args": [
   {
    "minor": -1,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expectError": "loss must not be negative"
 },
 {
  "name": "a negative excess is refused",
  "args": [
   {
    "minor": 1000,
    "currency": "GBP"
   },
   {
    "minor": -100,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expectError": "excess must not be negative"
 },
 {
  "name": "a negative limit is refused",
  "args": [
   {
    "minor": 1000,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   {
    "minor": -5,
    "currency": "GBP"
   },
   false
  ],
  "expectError": "policyLimit must not be negative"
 },
 {
  "name": "an excess in another currency is refused",
  "args": [
   {
    "minor": 1000,
    "currency": "GBP"
   },
   {
    "minor": 100,
    "currency": "EUR"
   },
   {
    "minor": 0,
    "currency": "GBP"
   },
   null,
   false
  ],
  "expectError": "currency mismatch"
 }
]