FA-63271 / Insurance premium rating / Open access
Mid-term endorsement pro-rata premium: Remaining days include the effective day twice · case 01
Additional premiums are one day too large.
ROOT CAUSE
The remaining-days count adds one.
VERIFIED REPAIR
Use end minus effective day.
Unsuccessful approach: Prorating from the previous endorsement uses the wrong start.
Case contract
Input start, end (days), annual premium, endorsements [[effective day, new annual premium]]. Dates must satisfy start<=d<end and be non-decreasing, else 'invalid endorsement date'. Each endorsement charges (new-current)*(end-d)/(end-start) rounded half away from zero, and the new premium becomes current.
Why this case matters
Endorsement premiums must chain from the latest in-force rate and prorate on the actual term length.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
s=x['start']; e=x['end']; T=e-s
def r(v): return math.floor(v+Fraction(1,2)) if v>=0 else -math.floor(-v+Fraction(1,2))
cur=x['annual']; out=[]; last=s
for d,new in x['endorsements']:
if d<s or d>=e or d<last: return 'invalid endorsement date'
out.append(r(Fraction((new-cur)*(e-d+1),T)))
cur=new; last=d
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single increase', {'start': 2912, 'end': 3277, 'annual': 228520, 'endorsements': [[3043, 390228]]}, [103670]], ['increase then decrease', {'start': 477, 'end': 842, 'annual': 136883, 'endorsements': [[562, 340860], [681, 77377]]}, [156476, -116221]], ['decrease then partial restore', {'start': 2037, 'end': 2402, 'annual': 100000, 'endorsements': [[2109, 40001], [2277, 63890]]}, [-48164, 8181]], ['leap-year term', {'start': 2320, 'end': 2686, 'annual': 138690, 'endorsements': [[2497, 161560]]}, [11810]], ['six-month term', {'start': 2269, 'end': 2451, 'annual': 114166, 'endorsements': [[2418, 400299], [2439, 379739]]}, [51881, -1356]], ['endorsement on expiry rejected', {'start': 286, 'end': 651, 'annual': 174243, 'endorsements': [[651, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 962, 'end': 1327, 'annual': 166624, 'endorsements': [[961, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 251, 'end': 616, 'annual': 164047, 'endorsements': [[451, 200000], [351, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 579, 'end': 944, 'annual': 88017, 'endorsements': [[579, 316996]]}, [228979]], ['same-day endorsements', {'start': 17, 'end': 382, 'annual': 194026, 'endorsements': [[137, 250000], [137, 260000]]}, [37572, 6712]], ['last day endorsement', {'start': 2889, 'end': 3254, 'annual': 100000, 'endorsements': [[3253, 255567]]}, [426]]], [['single increase', {'start': 2490, 'end': 2855, 'annual': 104092, 'endorsements': [[2682, 358418]]}, [120544]], ['increase then decrease', {'start': 1761, 'end': 2126, 'annual': 95155, 'endorsements': [[1839, 390602], [1949, 60898]]}, [232310, -159884]], ['decrease then partial restore', {'start': 2809, 'end': 3174, 'annual': 100000, 'endorsements': [[2849, 40002], [3041, 65761]]}, [-53423, 9386]], ['leap-year term', {'start': 2789, 'end': 3155, 'annual': 136600, 'endorsements': [[3052, 310248]]}, [48868]], ['six-month term', {'start': 1197, 'end': 1379, 'annual': 163268, 'endorsements': [[1271, 255330], [1367, 168424]]}, [54630, -5730]], ['endorsement on expiry rejected', {'start': 48, 'end': 413, 'annual': 192511, 'endorsements': [[413, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1771, 'end': 2136, 'annual': 162702, 'endorsements': [[1770, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2865, 'end': 3230, 'annual': 261177, 'endorsements': [[3065, 200000], [2965, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 1467, 'end': 1832, 'annual': 116027, 'endorsements': [[1467, 190089]]}, [74062]], ['same-day endorsements', {'start': 847, 'end': 1212, 'annual': 109565, 'endorsements': [[967, 250000], [967, 260000]]}, [94265, 6712]], ['last day endorsement', {'start': 2776, 'end': 3141, 'annual': 100000, 'endorsements': [[3140, 396043]]}, [811]]], [['single increase', {'start': 1206, 'end': 1571, 'annual': 166000, 'endorsements': [[1276, 393494]]}, [183865]], ['increase then decrease', {'start': 749, 'end': 1114, 'annual': 280762, 'endorsements': [[848, 343990], [953, 67369]]}, [46078, -122016]], ['decrease then partial restore', {'start': 766, 'end': 1131, 'annual': 100000, 'endorsements': [[803, 40003], [1051, 69438]]}, [-53915, 6452]], ['leap-year term', {'start': 2028, 'end': 2394, 'annual': 148609, 'endorsements': [[2319, 100348]]}, [-9890]], ['six-month term', {'start': 1944, 'end': 2126, 'annual': 124458, 'endorsements': [[2010, 171861], [2114, 388840]]}, [30213, 14306]], ['endorsement on expiry rejected', {'start': 1174, 'end': 1539, 'annual': 115160, 'endorsements': [[1539, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 2665, 'end': 3030, 'annual': 152976, 'endorsements': [[2664, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1602, 'end': 1967, 'annual': 240101, 'endorsements': [[1802, 200000], [1702, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 908, 'end': 1273, 'annual': 148941, 'endorsements': [[908, 436896]]}, [287955]], ['same-day endorsements', {'start': 1319, 'end': 1684, 'annual': 113258, 'endorsements': [[1439, 250000], [1439, 260000]]}, [91786, 6712]], ['last day endorsement', {'start': 2821, 'end': 3186, 'annual': 100000, 'endorsements': [[3185, 367523]]}, [733]]], [['single increase', {'start': 2447, 'end': 2812, 'annual': 190688, 'endorsements': [[2655, 312597]]}, [52438]], ['increase then decrease', {'start': 1314, 'end': 1679, 'annual': 268062, 'endorsements': [[1335, 344123], [1518, 58352]]}, [71685, -126052]], ['decrease then partial restore', {'start': 1117, 'end': 1482, 'annual': 100000, 'endorsements': [[1159, 40004], [1334, 61238]]}, [-53092, 8610]], ['leap-year term', {'start': 1273, 'end': 1639, 'annual': 241312, 'endorsements': [[1536, 193555]]}, [-13440]], ['six-month term', {'start': 49, 'end': 231, 'annual': 80756, 'endorsements': [[79, 411368], [219, 276361]]}, [276116, -8902]], ['endorsement on expiry rejected', {'start': 2167, 'end': 2532, 'annual': 216523, 'endorsements': [[2532, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1680, 'end': 2045, 'annual': 258325, 'endorsements': [[1679, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2653, 'end': 3018, 'annual': 115795, 'endorsements': [[2853, 200000], [2753, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2438, 'end': 2803, 'annual': 251511, 'endorsements': [[2438, 112887]]}, [-138624]], ['same-day endorsements', {'start': 1751, 'end': 2116, 'annual': 210625, 'endorsements': [[1871, 250000], [1871, 260000]]}, [26430, 6712]], ['last day endorsement', {'start': 1049, 'end': 1414, 'annual': 100000, 'endorsements': [[1413, 290691]]}, [522]]], [['single increase', {'start': 567, 'end': 932, 'annual': 242069, 'endorsements': [[864, 340392]]}, [18318]], ['increase then decrease', {'start': 2519, 'end': 2884, 'annual': 179314, 'endorsements': [[2537, 319903], [2726, 81013]]}, [133656, -103410]], ['decrease then partial restore', {'start': 1092, 'end': 1457, 'annual': 100000, 'endorsements': [[1105, 40005], [1285, 62765]]}, [-57858, 10725]], ['leap-year term', {'start': 820, 'end': 1186, 'annual': 204385, 'endorsements': [[905, 292674]]}, [67785]], ['six-month term', {'start': 1400, 'end': 1582, 'annual': 108639, 'endorsements': [[1481, 441832], [1570, 418671]]}, [184904, -1527]], ['endorsement on expiry rejected', {'start': 936, 'end': 1301, 'annual': 206524, 'endorsements': [[1301, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 983, 'end': 1348, 'annual': 294557, 'endorsements': [[982, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1953, 'end': 2318, 'annual': 262141, 'endorsements': [[2153, 200000], [2053, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2741, 'end': 3106, 'annual': 192566, 'endorsements': [[2741, 174344]]}, [-18222]], ['same-day endorsements', {'start': 114, 'end': 479, 'annual': 252584, 'endorsements': [[234, 250000], [234, 260000]]}, [-1734, 6712]], ['last day endorsement', {'start': 1695, 'end': 2060, 'annual': 100000, 'endorsements': [[2059, 111498]]}, [32]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single increase | [104113] | [103670] | Failed |
| increase then decrease | [157034, -116943] | [156476, -116221] | Failed |
| decrease then partial restore | [-48328, 8247] | [-48164, 8181] | Failed |
| leap-year term | [11872] | [11810] | Failed |
| six-month term | [53453, -1469] | [51881, -1356] | Failed |
| endorsement on expiry rejected | invalid endorsement date | invalid endorsement date | Passed |
| endorsement before inception rejected | invalid endorsement date | invalid endorsement date | Passed |
| out of order rejected | invalid endorsement date | invalid endorsement date | Passed |
| inception-day endorsement | [229606] | [228979] | Failed |
| same-day endorsements | [37725, 6740] | [37572, 6712] | Failed |
| last day endorsement | [852] | [426] | Failed |
SHA-256 / 033b176ab9615a4c5b245a27eafe21e7f5221d73af820e0bf44296bb99eb5c93
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
s=x['start']; e=x['end']; T=e-s
def r(v): return math.floor(v+Fraction(1,2)) if v>=0 else -math.floor(-v+Fraction(1,2))
cur=x['annual']; out=[]; last=s
for d,new in x['endorsements']:
if d<s or d>=e or d<last: return 'invalid endorsement date'
out.append(r(Fraction((new-cur)*(e-last),T)))
cur=new; last=d
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single increase', {'start': 2912, 'end': 3277, 'annual': 228520, 'endorsements': [[3043, 390228]]}, [103670]], ['increase then decrease', {'start': 477, 'end': 842, 'annual': 136883, 'endorsements': [[562, 340860], [681, 77377]]}, [156476, -116221]], ['decrease then partial restore', {'start': 2037, 'end': 2402, 'annual': 100000, 'endorsements': [[2109, 40001], [2277, 63890]]}, [-48164, 8181]], ['leap-year term', {'start': 2320, 'end': 2686, 'annual': 138690, 'endorsements': [[2497, 161560]]}, [11810]], ['six-month term', {'start': 2269, 'end': 2451, 'annual': 114166, 'endorsements': [[2418, 400299], [2439, 379739]]}, [51881, -1356]], ['endorsement on expiry rejected', {'start': 286, 'end': 651, 'annual': 174243, 'endorsements': [[651, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 962, 'end': 1327, 'annual': 166624, 'endorsements': [[961, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 251, 'end': 616, 'annual': 164047, 'endorsements': [[451, 200000], [351, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 579, 'end': 944, 'annual': 88017, 'endorsements': [[579, 316996]]}, [228979]], ['same-day endorsements', {'start': 17, 'end': 382, 'annual': 194026, 'endorsements': [[137, 250000], [137, 260000]]}, [37572, 6712]], ['last day endorsement', {'start': 2889, 'end': 3254, 'annual': 100000, 'endorsements': [[3253, 255567]]}, [426]]], [['single increase', {'start': 2490, 'end': 2855, 'annual': 104092, 'endorsements': [[2682, 358418]]}, [120544]], ['increase then decrease', {'start': 1761, 'end': 2126, 'annual': 95155, 'endorsements': [[1839, 390602], [1949, 60898]]}, [232310, -159884]], ['decrease then partial restore', {'start': 2809, 'end': 3174, 'annual': 100000, 'endorsements': [[2849, 40002], [3041, 65761]]}, [-53423, 9386]], ['leap-year term', {'start': 2789, 'end': 3155, 'annual': 136600, 'endorsements': [[3052, 310248]]}, [48868]], ['six-month term', {'start': 1197, 'end': 1379, 'annual': 163268, 'endorsements': [[1271, 255330], [1367, 168424]]}, [54630, -5730]], ['endorsement on expiry rejected', {'start': 48, 'end': 413, 'annual': 192511, 'endorsements': [[413, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1771, 'end': 2136, 'annual': 162702, 'endorsements': [[1770, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2865, 'end': 3230, 'annual': 261177, 'endorsements': [[3065, 200000], [2965, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 1467, 'end': 1832, 'annual': 116027, 'endorsements': [[1467, 190089]]}, [74062]], ['same-day endorsements', {'start': 847, 'end': 1212, 'annual': 109565, 'endorsements': [[967, 250000], [967, 260000]]}, [94265, 6712]], ['last day endorsement', {'start': 2776, 'end': 3141, 'annual': 100000, 'endorsements': [[3140, 396043]]}, [811]]], [['single increase', {'start': 1206, 'end': 1571, 'annual': 166000, 'endorsements': [[1276, 393494]]}, [183865]], ['increase then decrease', {'start': 749, 'end': 1114, 'annual': 280762, 'endorsements': [[848, 343990], [953, 67369]]}, [46078, -122016]], ['decrease then partial restore', {'start': 766, 'end': 1131, 'annual': 100000, 'endorsements': [[803, 40003], [1051, 69438]]}, [-53915, 6452]], ['leap-year term', {'start': 2028, 'end': 2394, 'annual': 148609, 'endorsements': [[2319, 100348]]}, [-9890]], ['six-month term', {'start': 1944, 'end': 2126, 'annual': 124458, 'endorsements': [[2010, 171861], [2114, 388840]]}, [30213, 14306]], ['endorsement on expiry rejected', {'start': 1174, 'end': 1539, 'annual': 115160, 'endorsements': [[1539, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 2665, 'end': 3030, 'annual': 152976, 'endorsements': [[2664, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1602, 'end': 1967, 'annual': 240101, 'endorsements': [[1802, 200000], [1702, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 908, 'end': 1273, 'annual': 148941, 'endorsements': [[908, 436896]]}, [287955]], ['same-day endorsements', {'start': 1319, 'end': 1684, 'annual': 113258, 'endorsements': [[1439, 250000], [1439, 260000]]}, [91786, 6712]], ['last day endorsement', {'start': 2821, 'end': 3186, 'annual': 100000, 'endorsements': [[3185, 367523]]}, [733]]], [['single increase', {'start': 2447, 'end': 2812, 'annual': 190688, 'endorsements': [[2655, 312597]]}, [52438]], ['increase then decrease', {'start': 1314, 'end': 1679, 'annual': 268062, 'endorsements': [[1335, 344123], [1518, 58352]]}, [71685, -126052]], ['decrease then partial restore', {'start': 1117, 'end': 1482, 'annual': 100000, 'endorsements': [[1159, 40004], [1334, 61238]]}, [-53092, 8610]], ['leap-year term', {'start': 1273, 'end': 1639, 'annual': 241312, 'endorsements': [[1536, 193555]]}, [-13440]], ['six-month term', {'start': 49, 'end': 231, 'annual': 80756, 'endorsements': [[79, 411368], [219, 276361]]}, [276116, -8902]], ['endorsement on expiry rejected', {'start': 2167, 'end': 2532, 'annual': 216523, 'endorsements': [[2532, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1680, 'end': 2045, 'annual': 258325, 'endorsements': [[1679, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2653, 'end': 3018, 'annual': 115795, 'endorsements': [[2853, 200000], [2753, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2438, 'end': 2803, 'annual': 251511, 'endorsements': [[2438, 112887]]}, [-138624]], ['same-day endorsements', {'start': 1751, 'end': 2116, 'annual': 210625, 'endorsements': [[1871, 250000], [1871, 260000]]}, [26430, 6712]], ['last day endorsement', {'start': 1049, 'end': 1414, 'annual': 100000, 'endorsements': [[1413, 290691]]}, [522]]], [['single increase', {'start': 567, 'end': 932, 'annual': 242069, 'endorsements': [[864, 340392]]}, [18318]], ['increase then decrease', {'start': 2519, 'end': 2884, 'annual': 179314, 'endorsements': [[2537, 319903], [2726, 81013]]}, [133656, -103410]], ['decrease then partial restore', {'start': 1092, 'end': 1457, 'annual': 100000, 'endorsements': [[1105, 40005], [1285, 62765]]}, [-57858, 10725]], ['leap-year term', {'start': 820, 'end': 1186, 'annual': 204385, 'endorsements': [[905, 292674]]}, [67785]], ['six-month term', {'start': 1400, 'end': 1582, 'annual': 108639, 'endorsements': [[1481, 441832], [1570, 418671]]}, [184904, -1527]], ['endorsement on expiry rejected', {'start': 936, 'end': 1301, 'annual': 206524, 'endorsements': [[1301, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 983, 'end': 1348, 'annual': 294557, 'endorsements': [[982, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1953, 'end': 2318, 'annual': 262141, 'endorsements': [[2153, 200000], [2053, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2741, 'end': 3106, 'annual': 192566, 'endorsements': [[2741, 174344]]}, [-18222]], ['same-day endorsements', {'start': 114, 'end': 479, 'annual': 252584, 'endorsements': [[234, 250000], [234, 260000]]}, [-1734, 6712]], ['last day endorsement', {'start': 1695, 'end': 2060, 'annual': 100000, 'endorsements': [[2059, 111498]]}, [32]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single increase | [161708] | [103670] | Failed |
| increase then decrease | [203977, -202124] | [156476, -116221] | Failed |
| decrease then partial restore | [-59999, 19177] | [-48164, 8181] | Failed |
| leap-year term | [22870] | [11810] | Failed |
| six-month term | [286133, -3728] | [51881, -1356] | Failed |
| endorsement on expiry rejected | invalid endorsement date | invalid endorsement date | Passed |
| endorsement before inception rejected | invalid endorsement date | invalid endorsement date | Passed |
| out of order rejected | invalid endorsement date | invalid endorsement date | Passed |
| inception-day endorsement | [228979] | [228979] | Passed |
| same-day endorsements | [55974, 6712] | [37572, 6712] | Failed |
| last day endorsement | [155567] | [426] | Failed |
SHA-256 / b672384d8fec00029af9567d3cc7e466a5bf5237354e6f501826ac5626cd5692
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
import math
from fractions import Fraction
N = 1
observations = []
def solve(x):
s=x['start']; e=x['end']; T=e-s
def r(v): return math.floor(v+Fraction(1,2)) if v>=0 else -math.floor(-v+Fraction(1,2))
cur=x['annual']; out=[]; last=s
for d,new in x['endorsements']:
if d<s or d>=e or d<last: return 'invalid endorsement date'
out.append(r(Fraction((new-cur)*(e-d),T)))
cur=new; last=d
return out
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['single increase', {'start': 2912, 'end': 3277, 'annual': 228520, 'endorsements': [[3043, 390228]]}, [103670]], ['increase then decrease', {'start': 477, 'end': 842, 'annual': 136883, 'endorsements': [[562, 340860], [681, 77377]]}, [156476, -116221]], ['decrease then partial restore', {'start': 2037, 'end': 2402, 'annual': 100000, 'endorsements': [[2109, 40001], [2277, 63890]]}, [-48164, 8181]], ['leap-year term', {'start': 2320, 'end': 2686, 'annual': 138690, 'endorsements': [[2497, 161560]]}, [11810]], ['six-month term', {'start': 2269, 'end': 2451, 'annual': 114166, 'endorsements': [[2418, 400299], [2439, 379739]]}, [51881, -1356]], ['endorsement on expiry rejected', {'start': 286, 'end': 651, 'annual': 174243, 'endorsements': [[651, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 962, 'end': 1327, 'annual': 166624, 'endorsements': [[961, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 251, 'end': 616, 'annual': 164047, 'endorsements': [[451, 200000], [351, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 579, 'end': 944, 'annual': 88017, 'endorsements': [[579, 316996]]}, [228979]], ['same-day endorsements', {'start': 17, 'end': 382, 'annual': 194026, 'endorsements': [[137, 250000], [137, 260000]]}, [37572, 6712]], ['last day endorsement', {'start': 2889, 'end': 3254, 'annual': 100000, 'endorsements': [[3253, 255567]]}, [426]]], [['single increase', {'start': 2490, 'end': 2855, 'annual': 104092, 'endorsements': [[2682, 358418]]}, [120544]], ['increase then decrease', {'start': 1761, 'end': 2126, 'annual': 95155, 'endorsements': [[1839, 390602], [1949, 60898]]}, [232310, -159884]], ['decrease then partial restore', {'start': 2809, 'end': 3174, 'annual': 100000, 'endorsements': [[2849, 40002], [3041, 65761]]}, [-53423, 9386]], ['leap-year term', {'start': 2789, 'end': 3155, 'annual': 136600, 'endorsements': [[3052, 310248]]}, [48868]], ['six-month term', {'start': 1197, 'end': 1379, 'annual': 163268, 'endorsements': [[1271, 255330], [1367, 168424]]}, [54630, -5730]], ['endorsement on expiry rejected', {'start': 48, 'end': 413, 'annual': 192511, 'endorsements': [[413, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1771, 'end': 2136, 'annual': 162702, 'endorsements': [[1770, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2865, 'end': 3230, 'annual': 261177, 'endorsements': [[3065, 200000], [2965, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 1467, 'end': 1832, 'annual': 116027, 'endorsements': [[1467, 190089]]}, [74062]], ['same-day endorsements', {'start': 847, 'end': 1212, 'annual': 109565, 'endorsements': [[967, 250000], [967, 260000]]}, [94265, 6712]], ['last day endorsement', {'start': 2776, 'end': 3141, 'annual': 100000, 'endorsements': [[3140, 396043]]}, [811]]], [['single increase', {'start': 1206, 'end': 1571, 'annual': 166000, 'endorsements': [[1276, 393494]]}, [183865]], ['increase then decrease', {'start': 749, 'end': 1114, 'annual': 280762, 'endorsements': [[848, 343990], [953, 67369]]}, [46078, -122016]], ['decrease then partial restore', {'start': 766, 'end': 1131, 'annual': 100000, 'endorsements': [[803, 40003], [1051, 69438]]}, [-53915, 6452]], ['leap-year term', {'start': 2028, 'end': 2394, 'annual': 148609, 'endorsements': [[2319, 100348]]}, [-9890]], ['six-month term', {'start': 1944, 'end': 2126, 'annual': 124458, 'endorsements': [[2010, 171861], [2114, 388840]]}, [30213, 14306]], ['endorsement on expiry rejected', {'start': 1174, 'end': 1539, 'annual': 115160, 'endorsements': [[1539, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 2665, 'end': 3030, 'annual': 152976, 'endorsements': [[2664, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1602, 'end': 1967, 'annual': 240101, 'endorsements': [[1802, 200000], [1702, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 908, 'end': 1273, 'annual': 148941, 'endorsements': [[908, 436896]]}, [287955]], ['same-day endorsements', {'start': 1319, 'end': 1684, 'annual': 113258, 'endorsements': [[1439, 250000], [1439, 260000]]}, [91786, 6712]], ['last day endorsement', {'start': 2821, 'end': 3186, 'annual': 100000, 'endorsements': [[3185, 367523]]}, [733]]], [['single increase', {'start': 2447, 'end': 2812, 'annual': 190688, 'endorsements': [[2655, 312597]]}, [52438]], ['increase then decrease', {'start': 1314, 'end': 1679, 'annual': 268062, 'endorsements': [[1335, 344123], [1518, 58352]]}, [71685, -126052]], ['decrease then partial restore', {'start': 1117, 'end': 1482, 'annual': 100000, 'endorsements': [[1159, 40004], [1334, 61238]]}, [-53092, 8610]], ['leap-year term', {'start': 1273, 'end': 1639, 'annual': 241312, 'endorsements': [[1536, 193555]]}, [-13440]], ['six-month term', {'start': 49, 'end': 231, 'annual': 80756, 'endorsements': [[79, 411368], [219, 276361]]}, [276116, -8902]], ['endorsement on expiry rejected', {'start': 2167, 'end': 2532, 'annual': 216523, 'endorsements': [[2532, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 1680, 'end': 2045, 'annual': 258325, 'endorsements': [[1679, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 2653, 'end': 3018, 'annual': 115795, 'endorsements': [[2853, 200000], [2753, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2438, 'end': 2803, 'annual': 251511, 'endorsements': [[2438, 112887]]}, [-138624]], ['same-day endorsements', {'start': 1751, 'end': 2116, 'annual': 210625, 'endorsements': [[1871, 250000], [1871, 260000]]}, [26430, 6712]], ['last day endorsement', {'start': 1049, 'end': 1414, 'annual': 100000, 'endorsements': [[1413, 290691]]}, [522]]], [['single increase', {'start': 567, 'end': 932, 'annual': 242069, 'endorsements': [[864, 340392]]}, [18318]], ['increase then decrease', {'start': 2519, 'end': 2884, 'annual': 179314, 'endorsements': [[2537, 319903], [2726, 81013]]}, [133656, -103410]], ['decrease then partial restore', {'start': 1092, 'end': 1457, 'annual': 100000, 'endorsements': [[1105, 40005], [1285, 62765]]}, [-57858, 10725]], ['leap-year term', {'start': 820, 'end': 1186, 'annual': 204385, 'endorsements': [[905, 292674]]}, [67785]], ['six-month term', {'start': 1400, 'end': 1582, 'annual': 108639, 'endorsements': [[1481, 441832], [1570, 418671]]}, [184904, -1527]], ['endorsement on expiry rejected', {'start': 936, 'end': 1301, 'annual': 206524, 'endorsements': [[1301, 200000]]}, 'invalid endorsement date'], ['endorsement before inception rejected', {'start': 983, 'end': 1348, 'annual': 294557, 'endorsements': [[982, 200000]]}, 'invalid endorsement date'], ['out of order rejected', {'start': 1953, 'end': 2318, 'annual': 262141, 'endorsements': [[2153, 200000], [2053, 250000]]}, 'invalid endorsement date'], ['inception-day endorsement', {'start': 2741, 'end': 3106, 'annual': 192566, 'endorsements': [[2741, 174344]]}, [-18222]], ['same-day endorsements', {'start': 114, 'end': 479, 'annual': 252584, 'endorsements': [[234, 250000], [234, 260000]]}, [-1734, 6712]], ['last day endorsement', {'start': 1695, 'end': 2060, 'annual': 100000, 'endorsements': [[2059, 111498]]}, [32]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| single increase | [103670] | [103670] | Passed |
| increase then decrease | [156476, -116221] | [156476, -116221] | Passed |
| decrease then partial restore | [-48164, 8181] | [-48164, 8181] | Passed |
| leap-year term | [11810] | [11810] | Passed |
| six-month term | [51881, -1356] | [51881, -1356] | Passed |
| endorsement on expiry rejected | invalid endorsement date | invalid endorsement date | Passed |
| endorsement before inception rejected | invalid endorsement date | invalid endorsement date | Passed |
| out of order rejected | invalid endorsement date | invalid endorsement date | Passed |
| inception-day endorsement | [228979] | [228979] | Passed |
| same-day endorsements | [37572, 6712] | [37572, 6712] | Passed |
| last day endorsement | [426] | [426] | Passed |
SHA-256 / b41d05a70d4e23d3ed89842ce77bd951dd14f5a8fbcf2167f525148c8bd1a60f
Verification & scope
A deterministic bounded teaching model of a stipulated toy rating contract. Amounts are integer cents and factors exact rationals; it makes no claim of conformance with any filed rating plan, bureau manual or jurisdiction. This reproducer isolates one failure mechanism. Results cover the supplied fixtures. Variants within a family share a test contract and should remain grouped when constructing evaluation splits. Related mechanisms with a shared evaluation_group must also remain together; these controlled models are not independent production incidents.
Observations recorded using Python 3.12.14 at 2026-09-29T14:47:12.824734+00:00.
Case digest / 6fa0a366a213f39161f9f01953a08899a5a6c6d2964e012f36eed5db340cfd83