FA-63171 / Insurance premium rating / Open access
Calendar period earned and unearned premium: Expired policies contribute negative earnings · case 01
Policies that expired before the period reduce earned premium.
ROOT CAUSE
The overlap is not clamped at zero.
VERIFIED REPAIR
Clamp the overlap length with max(0, ...).
Unsuccessful approach: Clamping only the end point still subtracts the start.
Case contract
Input period [start, end) in days and policies [[written day, term days (>0 else 'invalid term'), premium]]. Earned = premium*overlap/term where overlap = max(0, min(end, w+term) - max(start, w)). Unearned at end counts policies written before end and still in force after it. Sum exactly; round each total half-up once.
Why this case matters
Earned premium is the denominator of every loss ratio, so exposure-overlap slips distort rate indications.
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,e=x['period']
earned=Fraction(0); unearned=Fraction(0)
for w,t,p in x['policies']:
if t<=0: return 'invalid term'
ov=min(e,w+t)-max(s,w)
earned+=Fraction(p*ov,t)
if w<e<w+t: unearned+=Fraction(p*(w+t-e),t)
return [math.floor(earned+Fraction(1,2)),math.floor(unearned+Fraction(1,2))]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['written before period', {'period': [365, 730], 'policies': [[324, 365, 93669]]}, [83147, 0]], ['written inside period', {'period': [365, 730], 'policies': [[533, 365, 117853]]}, [63608, 54245]], ['expired before period', {'period': [365, 730], 'policies': [[-35, 365, 148225], [370, 90, 92990]]}, [92990, 0]], ['written on period end', {'period': [365, 730], 'policies': [[730, 365, 32094], [729, 365, 92841]]}, [254, 92587]], ['portfolio', {'period': [365, 730], 'policies': [[413, 365, 183654], [12, 90, 36485], [122, 365, 151203], [231, 90, 180174], [71, 365, 34329], [54, 365, 151391]]}, [239117, 24152]], ['invalid term', {'period': [365, 730], 'policies': [[158, 365, 43634], [365, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [365, 730], 'policies': [[385, 90, 140014], [565, 182, 108120]]}, [238035, 10099]], ['odd premiums', {'period': [365, 730], 'policies': [[265, 365, 100002], [382, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [365, 730], 'policies': [[330, 1095, 583340]]}, [194447, 370248]], ['straddling policies with fractional cents', {'period': [365, 730], 'policies': [[359, 10, 21], [359, 10, 31], [359, 10, 41]]}, [37, 0]], ['odd short-term book', {'period': [365, 730], 'policies': [[573, 91, 18271], [440, 91, 34247], [600, 91, 42635], [597, 91, 87475], [664, 91, 72167]]}, [234969, 19826]]], [['written before period', {'period': [730, 1095], 'policies': [[676, 365, 86766]]}, [73929, 0]], ['written inside period', {'period': [730, 1095], 'policies': [[863, 365, 122374]]}, [77783, 44591]], ['expired before period', {'period': [730, 1095], 'policies': [[330, 365, 100586], [735, 90, 179403]]}, [179403, 0]], ['written on period end', {'period': [730, 1095], 'policies': [[1095, 365, 194938], [1094, 365, 125247]]}, [343, 124904]], ['portfolio', {'period': [730, 1095], 'policies': [[452, 182, 38894], [786, 90, 192426], [651, 365, 89026], [991, 182, 131336], [1012, 90, 41350], [762, 365, 43130]]}, [414715, 63284]], ['invalid term', {'period': [730, 1095], 'policies': [[880, 182, 193108], [730, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [730, 1095], 'policies': [[750, 90, 185755], [930, 182, 109810]]}, [285308, 10257]], ['odd premiums', {'period': [730, 1095], 'policies': [[630, 365, 100003], [747, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [730, 1095], 'policies': [[578, 1095, 627827]]}, [209276, 331401]], ['straddling policies with fractional cents', {'period': [730, 1095], 'policies': [[724, 10, 31], [724, 10, 41], [724, 10, 51]]}, [49, 0]], ['odd short-term book', {'period': [730, 1095], 'policies': [[872, 91, 46017], [905, 91, 10461], [881, 91, 85493], [802, 91, 79735], [1015, 91, 16273]]}, [236012, 1967]]], [['written before period', {'period': [1095, 1460], 'policies': [[930, 365, 46452]]}, [25453, 0]], ['written inside period', {'period': [1095, 1460], 'policies': [[1373, 365, 195163]]}, [46518, 148645]], ['expired before period', {'period': [1095, 1460], 'policies': [[695, 365, 64736], [1100, 90, 187581]]}, [187581, 0]], ['written on period end', {'period': [1095, 1460], 'policies': [[1460, 365, 116247], [1459, 365, 161845]]}, [443, 161402]], ['portfolio', {'period': [1095, 1460], 'policies': [[809, 90, 85334], [988, 365, 127330], [1062, 182, 81532], [885, 365, 82598], [816, 365, 94974], [1138, 365, 44694]]}, [253634, 5265]], ['invalid term', {'period': [1095, 1460], 'policies': [[801, 365, 157643], [1095, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1095, 1460], 'policies': [[1115, 90, 154958], [1295, 182, 93684]]}, [239891, 8751]], ['odd premiums', {'period': [1095, 1460], 'policies': [[995, 365, 100004], [1112, 365, 77777]]}, [146760, 3622]], ['multi-year policy written before period', {'period': [1095, 1460], 'policies': [[1073, 1095, 841400]]}, [280467, 544028]], ['straddling policies with fractional cents', {'period': [1095, 1460], 'policies': [[1089, 10, 41], [1089, 10, 51], [1089, 10, 61]]}, [61, 0]], ['odd short-term book', {'period': [1095, 1460], 'policies': [[1280, 91, 43335], [1376, 91, 37625], [1277, 91, 93139], [1230, 91, 26463], [1137, 91, 95619]]}, [293287, 2894]]], [['written before period', {'period': [1460, 1825], 'policies': [[1387, 365, 174151]]}, [139321, 0]], ['written inside period', {'period': [1460, 1825], 'policies': [[1481, 365, 120643]]}, [113702, 6941]], ['expired before period', {'period': [1460, 1825], 'policies': [[1060, 365, 112581], [1465, 90, 106905]]}, [106905, 0]], ['written on period end', {'period': [1460, 1825], 'policies': [[1825, 365, 120557], [1824, 365, 45919]]}, [126, 45793]], ['portfolio', {'period': [1460, 1825], 'policies': [[1641, 90, 183349], [1707, 90, 189032], [1128, 90, 83324], [1477, 365, 35180], [1239, 365, 138579], [1596, 90, 66151]]}, [526746, 1639]], ['invalid term', {'period': [1460, 1825], 'policies': [[1377, 90, 33336], [1460, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1460, 1825], 'policies': [[1480, 90, 35810], [1660, 182, 151524]]}, [173181, 14153]], ['odd premiums', {'period': [1460, 1825], 'policies': [[1360, 365, 100005], [1477, 365, 77777]]}, [146761, 3622]], ['multi-year policy written before period', {'period': [1460, 1825], 'policies': [[1407, 1095, 704120]]}, [234707, 435333]], ['straddling policies with fractional cents', {'period': [1460, 1825], 'policies': [[1454, 10, 51], [1454, 10, 61], [1454, 10, 71]]}, [73, 0]], ['odd short-term book', {'period': [1460, 1825], 'policies': [[1709, 91, 69811], [1602, 91, 79731], [1722, 91, 27803], [1668, 91, 42721], [1522, 91, 13361]]}, [233427, 0]]], [['written before period', {'period': [1825, 2190], 'policies': [[1679, 365, 162636]]}, [97582, 0]], ['written inside period', {'period': [1825, 2190], 'policies': [[1909, 365, 107429]]}, [82706, 24723]], ['expired before period', {'period': [1825, 2190], 'policies': [[1425, 365, 156847], [1830, 90, 145464]]}, [145464, 0]], ['written on period end', {'period': [1825, 2190], 'policies': [[2190, 365, 153785], [2189, 365, 118456]]}, [325, 118131]], ['portfolio', {'period': [1825, 2190], 'policies': [[1640, 365, 165893], [1636, 365, 55534], [1501, 182, 103008], [1691, 182, 186674], [1608, 90, 107738], [1731, 90, 165397]]}, [157821, 0]], ['invalid term', {'period': [1825, 2190], 'policies': [[1792, 365, 129364], [1825, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1825, 2190], 'policies': [[1845, 90, 40166], [2025, 182, 155271]]}, [180934, 14503]], ['odd premiums', {'period': [1825, 2190], 'policies': [[1725, 365, 100006], [1842, 365, 77777]]}, [146762, 3622]], ['multi-year policy written before period', {'period': [1825, 2190], 'policies': [[1691, 1095, 785867]]}, [261956, 427741]], ['straddling policies with fractional cents', {'period': [1825, 2190], 'policies': [[1819, 10, 61], [1819, 10, 71], [1819, 10, 81]]}, [85, 0]], ['odd short-term book', {'period': [1825, 2190], 'policies': [[1900, 91, 72581], [1919, 91, 12069], [1923, 91, 13583], [1939, 91, 33511], [1891, 91, 72849]]}, [204593, 0]]]]
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 |
|---|---|---|---|
| written before period | [83147, 0] | [83147, 0] | Passed |
| written inside period | [63608, 54245] | [63608, 54245] | Passed |
| expired before period | [78777, 0] | [92990, 0] | Failed |
| written on period end | [254, 92587] | [254, 92587] | Passed |
| portfolio | [44414, 24152] | [239117, 24152] | Failed |
| invalid term | invalid term | invalid term | Passed |
| short-term in period | [238035, 10099] | [238035, 10099] | Passed |
| odd premiums | [146759, 3622] | [146759, 3622] | Passed |
| multi-year policy written before period | [194447, 370248] | [194447, 370248] | Passed |
| straddling policies with fractional cents | [37, 0] | [37, 0] | Passed |
| odd short-term book | [234969, 19826] | [234969, 19826] | Passed |
SHA-256 / d9638513539d7bff15dc7f1ef38fb34f5c449974884ec2e8d569fd3ad6cb1fac
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,e=x['period']
earned=Fraction(0); unearned=Fraction(0)
for w,t,p in x['policies']:
if t<=0: return 'invalid term'
ov=max(0,min(e,w+t))-max(s,w)
earned+=Fraction(p*ov,t)
if w<e<w+t: unearned+=Fraction(p*(w+t-e),t)
return [math.floor(earned+Fraction(1,2)),math.floor(unearned+Fraction(1,2))]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['written before period', {'period': [365, 730], 'policies': [[324, 365, 93669]]}, [83147, 0]], ['written inside period', {'period': [365, 730], 'policies': [[533, 365, 117853]]}, [63608, 54245]], ['expired before period', {'period': [365, 730], 'policies': [[-35, 365, 148225], [370, 90, 92990]]}, [92990, 0]], ['written on period end', {'period': [365, 730], 'policies': [[730, 365, 32094], [729, 365, 92841]]}, [254, 92587]], ['portfolio', {'period': [365, 730], 'policies': [[413, 365, 183654], [12, 90, 36485], [122, 365, 151203], [231, 90, 180174], [71, 365, 34329], [54, 365, 151391]]}, [239117, 24152]], ['invalid term', {'period': [365, 730], 'policies': [[158, 365, 43634], [365, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [365, 730], 'policies': [[385, 90, 140014], [565, 182, 108120]]}, [238035, 10099]], ['odd premiums', {'period': [365, 730], 'policies': [[265, 365, 100002], [382, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [365, 730], 'policies': [[330, 1095, 583340]]}, [194447, 370248]], ['straddling policies with fractional cents', {'period': [365, 730], 'policies': [[359, 10, 21], [359, 10, 31], [359, 10, 41]]}, [37, 0]], ['odd short-term book', {'period': [365, 730], 'policies': [[573, 91, 18271], [440, 91, 34247], [600, 91, 42635], [597, 91, 87475], [664, 91, 72167]]}, [234969, 19826]]], [['written before period', {'period': [730, 1095], 'policies': [[676, 365, 86766]]}, [73929, 0]], ['written inside period', {'period': [730, 1095], 'policies': [[863, 365, 122374]]}, [77783, 44591]], ['expired before period', {'period': [730, 1095], 'policies': [[330, 365, 100586], [735, 90, 179403]]}, [179403, 0]], ['written on period end', {'period': [730, 1095], 'policies': [[1095, 365, 194938], [1094, 365, 125247]]}, [343, 124904]], ['portfolio', {'period': [730, 1095], 'policies': [[452, 182, 38894], [786, 90, 192426], [651, 365, 89026], [991, 182, 131336], [1012, 90, 41350], [762, 365, 43130]]}, [414715, 63284]], ['invalid term', {'period': [730, 1095], 'policies': [[880, 182, 193108], [730, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [730, 1095], 'policies': [[750, 90, 185755], [930, 182, 109810]]}, [285308, 10257]], ['odd premiums', {'period': [730, 1095], 'policies': [[630, 365, 100003], [747, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [730, 1095], 'policies': [[578, 1095, 627827]]}, [209276, 331401]], ['straddling policies with fractional cents', {'period': [730, 1095], 'policies': [[724, 10, 31], [724, 10, 41], [724, 10, 51]]}, [49, 0]], ['odd short-term book', {'period': [730, 1095], 'policies': [[872, 91, 46017], [905, 91, 10461], [881, 91, 85493], [802, 91, 79735], [1015, 91, 16273]]}, [236012, 1967]]], [['written before period', {'period': [1095, 1460], 'policies': [[930, 365, 46452]]}, [25453, 0]], ['written inside period', {'period': [1095, 1460], 'policies': [[1373, 365, 195163]]}, [46518, 148645]], ['expired before period', {'period': [1095, 1460], 'policies': [[695, 365, 64736], [1100, 90, 187581]]}, [187581, 0]], ['written on period end', {'period': [1095, 1460], 'policies': [[1460, 365, 116247], [1459, 365, 161845]]}, [443, 161402]], ['portfolio', {'period': [1095, 1460], 'policies': [[809, 90, 85334], [988, 365, 127330], [1062, 182, 81532], [885, 365, 82598], [816, 365, 94974], [1138, 365, 44694]]}, [253634, 5265]], ['invalid term', {'period': [1095, 1460], 'policies': [[801, 365, 157643], [1095, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1095, 1460], 'policies': [[1115, 90, 154958], [1295, 182, 93684]]}, [239891, 8751]], ['odd premiums', {'period': [1095, 1460], 'policies': [[995, 365, 100004], [1112, 365, 77777]]}, [146760, 3622]], ['multi-year policy written before period', {'period': [1095, 1460], 'policies': [[1073, 1095, 841400]]}, [280467, 544028]], ['straddling policies with fractional cents', {'period': [1095, 1460], 'policies': [[1089, 10, 41], [1089, 10, 51], [1089, 10, 61]]}, [61, 0]], ['odd short-term book', {'period': [1095, 1460], 'policies': [[1280, 91, 43335], [1376, 91, 37625], [1277, 91, 93139], [1230, 91, 26463], [1137, 91, 95619]]}, [293287, 2894]]], [['written before period', {'period': [1460, 1825], 'policies': [[1387, 365, 174151]]}, [139321, 0]], ['written inside period', {'period': [1460, 1825], 'policies': [[1481, 365, 120643]]}, [113702, 6941]], ['expired before period', {'period': [1460, 1825], 'policies': [[1060, 365, 112581], [1465, 90, 106905]]}, [106905, 0]], ['written on period end', {'period': [1460, 1825], 'policies': [[1825, 365, 120557], [1824, 365, 45919]]}, [126, 45793]], ['portfolio', {'period': [1460, 1825], 'policies': [[1641, 90, 183349], [1707, 90, 189032], [1128, 90, 83324], [1477, 365, 35180], [1239, 365, 138579], [1596, 90, 66151]]}, [526746, 1639]], ['invalid term', {'period': [1460, 1825], 'policies': [[1377, 90, 33336], [1460, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1460, 1825], 'policies': [[1480, 90, 35810], [1660, 182, 151524]]}, [173181, 14153]], ['odd premiums', {'period': [1460, 1825], 'policies': [[1360, 365, 100005], [1477, 365, 77777]]}, [146761, 3622]], ['multi-year policy written before period', {'period': [1460, 1825], 'policies': [[1407, 1095, 704120]]}, [234707, 435333]], ['straddling policies with fractional cents', {'period': [1460, 1825], 'policies': [[1454, 10, 51], [1454, 10, 61], [1454, 10, 71]]}, [73, 0]], ['odd short-term book', {'period': [1460, 1825], 'policies': [[1709, 91, 69811], [1602, 91, 79731], [1722, 91, 27803], [1668, 91, 42721], [1522, 91, 13361]]}, [233427, 0]]], [['written before period', {'period': [1825, 2190], 'policies': [[1679, 365, 162636]]}, [97582, 0]], ['written inside period', {'period': [1825, 2190], 'policies': [[1909, 365, 107429]]}, [82706, 24723]], ['expired before period', {'period': [1825, 2190], 'policies': [[1425, 365, 156847], [1830, 90, 145464]]}, [145464, 0]], ['written on period end', {'period': [1825, 2190], 'policies': [[2190, 365, 153785], [2189, 365, 118456]]}, [325, 118131]], ['portfolio', {'period': [1825, 2190], 'policies': [[1640, 365, 165893], [1636, 365, 55534], [1501, 182, 103008], [1691, 182, 186674], [1608, 90, 107738], [1731, 90, 165397]]}, [157821, 0]], ['invalid term', {'period': [1825, 2190], 'policies': [[1792, 365, 129364], [1825, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1825, 2190], 'policies': [[1845, 90, 40166], [2025, 182, 155271]]}, [180934, 14503]], ['odd premiums', {'period': [1825, 2190], 'policies': [[1725, 365, 100006], [1842, 365, 77777]]}, [146762, 3622]], ['multi-year policy written before period', {'period': [1825, 2190], 'policies': [[1691, 1095, 785867]]}, [261956, 427741]], ['straddling policies with fractional cents', {'period': [1825, 2190], 'policies': [[1819, 10, 61], [1819, 10, 71], [1819, 10, 81]]}, [85, 0]], ['odd short-term book', {'period': [1825, 2190], 'policies': [[1900, 91, 72581], [1919, 91, 12069], [1923, 91, 13583], [1939, 91, 33511], [1891, 91, 72849]]}, [204593, 0]]]]
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 |
|---|---|---|---|
| written before period | [83147, 0] | [83147, 0] | Passed |
| written inside period | [63608, 54245] | [63608, 54245] | Passed |
| expired before period | [78777, 0] | [92990, 0] | Failed |
| written on period end | [254, 92587] | [254, 92587] | Passed |
| portfolio | [44414, 24152] | [239117, 24152] | Failed |
| invalid term | invalid term | invalid term | Passed |
| short-term in period | [238035, 10099] | [238035, 10099] | Passed |
| odd premiums | [146759, 3622] | [146759, 3622] | Passed |
| multi-year policy written before period | [194447, 370248] | [194447, 370248] | Passed |
| straddling policies with fractional cents | [37, 0] | [37, 0] | Passed |
| odd short-term book | [234969, 19826] | [234969, 19826] | Passed |
SHA-256 / 66f0f43144571502ff65dafaab976856aca1a643a84b7f11b1eacc55cc8de234
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,e=x['period']
earned=Fraction(0); unearned=Fraction(0)
for w,t,p in x['policies']:
if t<=0: return 'invalid term'
ov=max(0,min(e,w+t)-max(s,w))
earned+=Fraction(p*ov,t)
if w<e<w+t: unearned+=Fraction(p*(w+t-e),t)
return [math.floor(earned+Fraction(1,2)),math.floor(unearned+Fraction(1,2))]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['written before period', {'period': [365, 730], 'policies': [[324, 365, 93669]]}, [83147, 0]], ['written inside period', {'period': [365, 730], 'policies': [[533, 365, 117853]]}, [63608, 54245]], ['expired before period', {'period': [365, 730], 'policies': [[-35, 365, 148225], [370, 90, 92990]]}, [92990, 0]], ['written on period end', {'period': [365, 730], 'policies': [[730, 365, 32094], [729, 365, 92841]]}, [254, 92587]], ['portfolio', {'period': [365, 730], 'policies': [[413, 365, 183654], [12, 90, 36485], [122, 365, 151203], [231, 90, 180174], [71, 365, 34329], [54, 365, 151391]]}, [239117, 24152]], ['invalid term', {'period': [365, 730], 'policies': [[158, 365, 43634], [365, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [365, 730], 'policies': [[385, 90, 140014], [565, 182, 108120]]}, [238035, 10099]], ['odd premiums', {'period': [365, 730], 'policies': [[265, 365, 100002], [382, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [365, 730], 'policies': [[330, 1095, 583340]]}, [194447, 370248]], ['straddling policies with fractional cents', {'period': [365, 730], 'policies': [[359, 10, 21], [359, 10, 31], [359, 10, 41]]}, [37, 0]], ['odd short-term book', {'period': [365, 730], 'policies': [[573, 91, 18271], [440, 91, 34247], [600, 91, 42635], [597, 91, 87475], [664, 91, 72167]]}, [234969, 19826]]], [['written before period', {'period': [730, 1095], 'policies': [[676, 365, 86766]]}, [73929, 0]], ['written inside period', {'period': [730, 1095], 'policies': [[863, 365, 122374]]}, [77783, 44591]], ['expired before period', {'period': [730, 1095], 'policies': [[330, 365, 100586], [735, 90, 179403]]}, [179403, 0]], ['written on period end', {'period': [730, 1095], 'policies': [[1095, 365, 194938], [1094, 365, 125247]]}, [343, 124904]], ['portfolio', {'period': [730, 1095], 'policies': [[452, 182, 38894], [786, 90, 192426], [651, 365, 89026], [991, 182, 131336], [1012, 90, 41350], [762, 365, 43130]]}, [414715, 63284]], ['invalid term', {'period': [730, 1095], 'policies': [[880, 182, 193108], [730, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [730, 1095], 'policies': [[750, 90, 185755], [930, 182, 109810]]}, [285308, 10257]], ['odd premiums', {'period': [730, 1095], 'policies': [[630, 365, 100003], [747, 365, 77777]]}, [146759, 3622]], ['multi-year policy written before period', {'period': [730, 1095], 'policies': [[578, 1095, 627827]]}, [209276, 331401]], ['straddling policies with fractional cents', {'period': [730, 1095], 'policies': [[724, 10, 31], [724, 10, 41], [724, 10, 51]]}, [49, 0]], ['odd short-term book', {'period': [730, 1095], 'policies': [[872, 91, 46017], [905, 91, 10461], [881, 91, 85493], [802, 91, 79735], [1015, 91, 16273]]}, [236012, 1967]]], [['written before period', {'period': [1095, 1460], 'policies': [[930, 365, 46452]]}, [25453, 0]], ['written inside period', {'period': [1095, 1460], 'policies': [[1373, 365, 195163]]}, [46518, 148645]], ['expired before period', {'period': [1095, 1460], 'policies': [[695, 365, 64736], [1100, 90, 187581]]}, [187581, 0]], ['written on period end', {'period': [1095, 1460], 'policies': [[1460, 365, 116247], [1459, 365, 161845]]}, [443, 161402]], ['portfolio', {'period': [1095, 1460], 'policies': [[809, 90, 85334], [988, 365, 127330], [1062, 182, 81532], [885, 365, 82598], [816, 365, 94974], [1138, 365, 44694]]}, [253634, 5265]], ['invalid term', {'period': [1095, 1460], 'policies': [[801, 365, 157643], [1095, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1095, 1460], 'policies': [[1115, 90, 154958], [1295, 182, 93684]]}, [239891, 8751]], ['odd premiums', {'period': [1095, 1460], 'policies': [[995, 365, 100004], [1112, 365, 77777]]}, [146760, 3622]], ['multi-year policy written before period', {'period': [1095, 1460], 'policies': [[1073, 1095, 841400]]}, [280467, 544028]], ['straddling policies with fractional cents', {'period': [1095, 1460], 'policies': [[1089, 10, 41], [1089, 10, 51], [1089, 10, 61]]}, [61, 0]], ['odd short-term book', {'period': [1095, 1460], 'policies': [[1280, 91, 43335], [1376, 91, 37625], [1277, 91, 93139], [1230, 91, 26463], [1137, 91, 95619]]}, [293287, 2894]]], [['written before period', {'period': [1460, 1825], 'policies': [[1387, 365, 174151]]}, [139321, 0]], ['written inside period', {'period': [1460, 1825], 'policies': [[1481, 365, 120643]]}, [113702, 6941]], ['expired before period', {'period': [1460, 1825], 'policies': [[1060, 365, 112581], [1465, 90, 106905]]}, [106905, 0]], ['written on period end', {'period': [1460, 1825], 'policies': [[1825, 365, 120557], [1824, 365, 45919]]}, [126, 45793]], ['portfolio', {'period': [1460, 1825], 'policies': [[1641, 90, 183349], [1707, 90, 189032], [1128, 90, 83324], [1477, 365, 35180], [1239, 365, 138579], [1596, 90, 66151]]}, [526746, 1639]], ['invalid term', {'period': [1460, 1825], 'policies': [[1377, 90, 33336], [1460, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1460, 1825], 'policies': [[1480, 90, 35810], [1660, 182, 151524]]}, [173181, 14153]], ['odd premiums', {'period': [1460, 1825], 'policies': [[1360, 365, 100005], [1477, 365, 77777]]}, [146761, 3622]], ['multi-year policy written before period', {'period': [1460, 1825], 'policies': [[1407, 1095, 704120]]}, [234707, 435333]], ['straddling policies with fractional cents', {'period': [1460, 1825], 'policies': [[1454, 10, 51], [1454, 10, 61], [1454, 10, 71]]}, [73, 0]], ['odd short-term book', {'period': [1460, 1825], 'policies': [[1709, 91, 69811], [1602, 91, 79731], [1722, 91, 27803], [1668, 91, 42721], [1522, 91, 13361]]}, [233427, 0]]], [['written before period', {'period': [1825, 2190], 'policies': [[1679, 365, 162636]]}, [97582, 0]], ['written inside period', {'period': [1825, 2190], 'policies': [[1909, 365, 107429]]}, [82706, 24723]], ['expired before period', {'period': [1825, 2190], 'policies': [[1425, 365, 156847], [1830, 90, 145464]]}, [145464, 0]], ['written on period end', {'period': [1825, 2190], 'policies': [[2190, 365, 153785], [2189, 365, 118456]]}, [325, 118131]], ['portfolio', {'period': [1825, 2190], 'policies': [[1640, 365, 165893], [1636, 365, 55534], [1501, 182, 103008], [1691, 182, 186674], [1608, 90, 107738], [1731, 90, 165397]]}, [157821, 0]], ['invalid term', {'period': [1825, 2190], 'policies': [[1792, 365, 129364], [1825, 0, 1000]]}, 'invalid term'], ['short-term in period', {'period': [1825, 2190], 'policies': [[1845, 90, 40166], [2025, 182, 155271]]}, [180934, 14503]], ['odd premiums', {'period': [1825, 2190], 'policies': [[1725, 365, 100006], [1842, 365, 77777]]}, [146762, 3622]], ['multi-year policy written before period', {'period': [1825, 2190], 'policies': [[1691, 1095, 785867]]}, [261956, 427741]], ['straddling policies with fractional cents', {'period': [1825, 2190], 'policies': [[1819, 10, 61], [1819, 10, 71], [1819, 10, 81]]}, [85, 0]], ['odd short-term book', {'period': [1825, 2190], 'policies': [[1900, 91, 72581], [1919, 91, 12069], [1923, 91, 13583], [1939, 91, 33511], [1891, 91, 72849]]}, [204593, 0]]]]
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 |
|---|---|---|---|
| written before period | [83147, 0] | [83147, 0] | Passed |
| written inside period | [63608, 54245] | [63608, 54245] | Passed |
| expired before period | [92990, 0] | [92990, 0] | Passed |
| written on period end | [254, 92587] | [254, 92587] | Passed |
| portfolio | [239117, 24152] | [239117, 24152] | Passed |
| invalid term | invalid term | invalid term | Passed |
| short-term in period | [238035, 10099] | [238035, 10099] | Passed |
| odd premiums | [146759, 3622] | [146759, 3622] | Passed |
| multi-year policy written before period | [194447, 370248] | [194447, 370248] | Passed |
| straddling policies with fractional cents | [37, 0] | [37, 0] | Passed |
| odd short-term book | [234969, 19826] | [234969, 19826] | Passed |
SHA-256 / 3adca050d1d829be9c46e2b2e3fc8e29c509bd01814e008d3c327f596701ae48
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:11.708128+00:00.
Case digest / 143f488266f163219aba3f961a83f6fb0679f9c72c29ceb3fb8795e1f14eaa09