Functional Weave
Code in Rust

insurance.claim-reserve@1.0.1

vectors.json

11,487 bytes · view raw

[
 {
  "name": "a claim's life: reserve, part payment, strengthening, an overpayment of the reserve, a recovery, closure",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "reserve",
     "amount": {
      "minor": 500000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-02-01",
     "kind": "payment",
     "amount": {
      "minor": 150000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-03-01",
     "kind": "reserve",
     "amount": {
      "minor": 450000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-04-01",
     "kind": "payment",
     "amount": {
      "minor": 500000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-05-01",
     "kind": "recovery",
     "amount": {
      "minor": 80000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-05-01",
     "kind": "reserve",
     "amount": {
      "minor": 0,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "reserve",
    "paid": {
     "minor": 0,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 500000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 500000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 500000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-02-01",
    "kind": "payment",
    "paid": {
     "minor": 150000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 350000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 500000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 0,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-03-01",
    "kind": "reserve",
    "paid": {
     "minor": 150000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 450000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 600000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 100000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-04-01",
    "kind": "payment",
    "paid": {
     "minor": 650000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 650000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 50000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-05-01",
    "kind": "recovery",
    "paid": {
     "minor": 650000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 80000,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 570000,
     "currency": "GBP"
    },
    "movement": {
     "minor": -80000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-05-01",
    "kind": "reserve",
    "paid": {
     "minor": 650000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 80000,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 570000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 0,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "no transactions, no positions",
  "args": [
   [],
   "GBP"
  ],
  "expect": []
 },
 {
  "name": "a claim withdrawn: the reserve released to nil is a negative movement",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "reserve",
     "amount": {
      "minor": 200000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-06-30",
     "kind": "reserve",
     "amount": {
      "minor": 0,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "reserve",
    "paid": {
     "minor": 0,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 200000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 200000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 200000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-06-30",
    "kind": "reserve",
    "paid": {
     "minor": 0,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 0,
     "currency": "GBP"
    },
    "movement": {
     "minor": -200000,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "a payment with no reserve set raises incurred by the whole payment",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "payment",
     "amount": {
      "minor": 12345,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "payment",
    "paid": {
     "minor": 12345,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 12345,
     "currency": "GBP"
    },
    "movement": {
     "minor": 12345,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "a payment within the reserve moves nothing",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "reserve",
     "amount": {
      "minor": 100000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-01-11",
     "kind": "payment",
     "amount": {
      "minor": 100000,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "reserve",
    "paid": {
     "minor": 0,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 100000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 100000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 100000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-01-11",
    "kind": "payment",
    "paid": {
     "minor": 100000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 100000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 0,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "a reserve cut after a payment",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "reserve",
     "amount": {
      "minor": 100000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-01-20",
     "kind": "payment",
     "amount": {
      "minor": 30000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-02-01",
     "kind": "reserve",
     "amount": {
      "minor": 20000,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "reserve",
    "paid": {
     "minor": 0,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 100000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 100000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 100000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-01-20",
    "kind": "payment",
    "paid": {
     "minor": 30000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 70000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 100000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 0,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-02-01",
    "kind": "reserve",
    "paid": {
     "minor": 30000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 20000,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 50000,
     "currency": "GBP"
    },
    "movement": {
     "minor": -50000,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "recoveries can take incurred below zero on a claim recovered in full with costs",
  "args": [
   [
    {
     "date": "2026-01-10",
     "kind": "payment",
     "amount": {
      "minor": 1000,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-03-10",
     "kind": "recovery",
     "amount": {
      "minor": 1500,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expect": [
   {
    "date": "2026-01-10",
    "kind": "payment",
    "paid": {
     "minor": 1000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 0,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": 1000,
     "currency": "GBP"
    },
    "movement": {
     "minor": 1000,
     "currency": "GBP"
    }
   },
   {
    "date": "2026-03-10",
    "kind": "recovery",
    "paid": {
     "minor": 1000,
     "currency": "GBP"
    },
    "recovered": {
     "minor": 1500,
     "currency": "GBP"
    },
    "outstanding": {
     "minor": 0,
     "currency": "GBP"
    },
    "incurred": {
     "minor": -500,
     "currency": "GBP"
    },
    "movement": {
     "minor": -1500,
     "currency": "GBP"
    }
   }
  ]
 },
 {
  "name": "transactions out of date order are refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "reserve",
     "amount": {
      "minor": 100,
      "currency": "GBP"
     }
    },
    {
     "date": "2026-01-01",
     "kind": "payment",
     "amount": {
      "minor": 50,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "transactions must be in date order: 2026-01-01 comes after 2026-02-01"
 },
 {
  "name": "a negative reserve is refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "reserve",
     "amount": {
      "minor": -100,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "a reserve must not be negative"
 },
 {
  "name": "a zero payment is refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "payment",
     "amount": {
      "minor": 0,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "a payment must be more than zero"
 },
 {
  "name": "a negative recovery is refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "recovery",
     "amount": {
      "minor": -5,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "a recovery must be more than zero"
 },
 {
  "name": "an unknown kind is refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "expense",
     "amount": {
      "minor": 5,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "unknown transaction kind"
 },
 {
  "name": "a transaction in another currency is refused",
  "args": [
   [
    {
     "date": "2026-02-01",
     "kind": "reserve",
     "amount": {
      "minor": 5,
      "currency": "EUR"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "currency mismatch"
 },
 {
  "name": "a malformed date is refused",
  "args": [
   [
    {
     "date": "2026-02-30",
     "kind": "reserve",
     "amount": {
      "minor": 5,
      "currency": "GBP"
     }
    }
   ],
   "GBP"
  ],
  "expectError": "is not a real calendar date"
 }
]