FA-63176 / Insurance premium rating / Open access
Calendar period earned and unearned premium: Policies written on the period end count as unearned · case 01
The unearned reserve includes premium for policies written after the valuation date.
ROOT CAUSE
The in-force test is inclusive at the written date.
VERIFIED REPAIR
Count only policies written strictly before the end that remain in force.
Unsuccessful approach: Requiring the policy to be written in the period drops older in-force policies.
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=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, 124681] | [254, 92587] | Failed |
| 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 / 52187605e1907c070634cf1749fdaa2e5246f316e5cb266a7d46afc2720ee3f8
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 s<=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, 0] | [194447, 370248] | Failed |
| straddling policies with fractional cents | [37, 0] | [37, 0] | Passed |
| odd short-term book | [234969, 19826] | [234969, 19826] | Passed |
SHA-256 / 589865b6ce774697a2ad773a42a49086c96afac253ee5aa9b8b984a4fe5c6072
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.733637+00:00.
Case digest / fc43e8f0a130a9aa119d8c627bb6ae22bb68c5c420645c2e07e95e6617cd4581