FAILURE MAP
← Case archive

FA-62931 / Insurance premium rating / Open access

Short-rate cancellation return premium: Flat cancellation refund depends on who cancels · case 01

An insured who cancels before inception is charged a short-rate penalty.

Verified by executionVariant 1 · 10 checks per implementationDownload source bundle ↓JSON ↗

ROOT CAUSE

The flat-cancel rule was restricted to insurer cancellations.

VERIFIED REPAIR

Refund the full premium for any cancellation with zero days in force.

Unsuccessful approach: Extending flat treatment to day one refunds premium that has been earned.

Case contract

Input premium, term_days, days_in_force d, initiator, min_earned_permille. d<0 or term<=0 -> 'invalid'; d>=term -> 0; d==0 (flat cancel) returns the full premium. Otherwise unearned = premium*(term-d)/term; the insurer returns it in full; an insured cancellation returns 90% of unearned but never more than premium minus the minimum earned premium. Round half-up once.

Why this case matters

Premium rating engines apply ordered tabular rules where one misplaced boundary or step silently misprices policies.

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):
    p=x['premium']; t=x['term_days']; d=x['days_in_force']
    if d<0 or t<=0: return 'invalid'
    if d>=t: return 0
    if d==0 and x['initiator']=='insurer': return p
    unearned=Fraction(p*(t-d),t)
    if x['initiator']=='insured':
        ret=unearned*Fraction(90,100)
        ret=min(ret,p-Fraction(p*x['min_earned_permille'],1000))
    else:
        ret=unearned
    return math.floor(ret+Fraction(1,2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['insured cancels mid-term', {'premium': 167157, 'term_days': 365, 'days_in_force': 113, 'initiator': 'insured', 'min_earned_permille': 100}, 103866], ['insurer cancels mid-term', {'premium': 107827, 'term_days': 365, 'days_in_force': 285, 'initiator': 'insurer', 'min_earned_permille': 250}, 23633], ['insurer cancel early with minimum on file', {'premium': 135423, 'term_days': 365, 'days_in_force': 32, 'initiator': 'insurer', 'min_earned_permille': 400}, 123550], ['insured minimum earned binds', {'premium': 102264, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insured', 'min_earned_permille': 300}, 71585], ['flat cancel by insured', {'premium': 246750, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 246750], ['flat cancel by insurer', {'premium': 77604, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 77604], ['one day in force', {'premium': 285647, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 284060], ['expiry day', {'premium': 163861, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 253298, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 169415, 'term_days': 182, 'days_in_force': 105, 'initiator': 'insured', 'min_earned_permille': 100}, 64508]], [['insured cancels mid-term', {'premium': 136580, 'term_days': 365, 'days_in_force': 120, 'initiator': 'insured', 'min_earned_permille': 100}, 82509], ['insurer cancels mid-term', {'premium': 142197, 'term_days': 365, 'days_in_force': 42, 'initiator': 'insurer', 'min_earned_permille': 100}, 125835], ['insurer cancel early with minimum on file', {'premium': 130516, 'term_days': 365, 'days_in_force': 22, 'initiator': 'insurer', 'min_earned_permille': 400}, 122649], ['insured minimum earned binds', {'premium': 155356, 'term_days': 365, 'days_in_force': 30, 'initiator': 'insured', 'min_earned_permille': 300}, 108749], ['flat cancel by insured', {'premium': 128340, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 128340], ['flat cancel by insurer', {'premium': 205493, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 205493], ['one day in force', {'premium': 125332, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 124636], ['expiry day', {'premium': 149858, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 143435, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 219606, 'term_days': 182, 'days_in_force': 115, 'initiator': 'insured', 'min_earned_permille': 100}, 72760]], [['insured cancels mid-term', {'premium': 236883, 'term_days': 365, 'days_in_force': 198, 'initiator': 'insured', 'min_earned_permille': 100}, 97544], ['insurer cancels mid-term', {'premium': 224272, 'term_days': 365, 'days_in_force': 89, 'initiator': 'insurer', 'min_earned_permille': 100}, 169586], ['insurer cancel early with minimum on file', {'premium': 271417, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insurer', 'min_earned_permille': 400}, 255801], ['insured minimum earned binds', {'premium': 236806, 'term_days': 365, 'days_in_force': 27, 'initiator': 'insured', 'min_earned_permille': 300}, 165764], ['flat cancel by insured', {'premium': 50665, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 50665], ['flat cancel by insurer', {'premium': 266999, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 266999], ['one day in force', {'premium': 51282, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 50997], ['expiry day', {'premium': 202320, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 67184, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 241675, 'term_days': 182, 'days_in_force': 118, 'initiator': 'insured', 'min_earned_permille': 100}, 76486]], [['insured cancels mid-term', {'premium': 82503, 'term_days': 365, 'days_in_force': 154, 'initiator': 'insured', 'min_earned_permille': 100}, 42924], ['insurer cancels mid-term', {'premium': 137193, 'term_days': 365, 'days_in_force': 295, 'initiator': 'insurer', 'min_earned_permille': 100}, 26311], ['insurer cancel early with minimum on file', {'premium': 157674, 'term_days': 365, 'days_in_force': 15, 'initiator': 'insurer', 'min_earned_permille': 400}, 151194], ['insured minimum earned binds', {'premium': 283617, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insured', 'min_earned_permille': 300}, 198532], ['flat cancel by insured', {'premium': 97666, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 97666], ['flat cancel by insurer', {'premium': 137018, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 137018], ['one day in force', {'premium': 261346, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 259894], ['expiry day', {'premium': 135749, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 260111, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 289415, 'term_days': 182, 'days_in_force': 81, 'initiator': 'insured', 'min_earned_permille': 100}, 144548]], [['insured cancels mid-term', {'premium': 59284, 'term_days': 365, 'days_in_force': 188, 'initiator': 'insured', 'min_earned_permille': 100}, 25874], ['insurer cancels mid-term', {'premium': 88844, 'term_days': 365, 'days_in_force': 105, 'initiator': 'insurer', 'min_earned_permille': 100}, 63286], ['insurer cancel early with minimum on file', {'premium': 70835, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insurer', 'min_earned_permille': 400}, 66177], ['insured minimum earned binds', {'premium': 148105, 'term_days': 365, 'days_in_force': 29, 'initiator': 'insured', 'min_earned_permille': 300}, 103674], ['flat cancel by insured', {'premium': 267217, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 267217], ['flat cancel by insurer', {'premium': 201088, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 201088], ['one day in force', {'premium': 293778, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 292146], ['expiry day', {'premium': 81772, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 193452, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 273407, 'term_days': 182, 'days_in_force': 107, 'initiator': 'insured', 'min_earned_permille': 100}, 101401]]]
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 fixtureActualExpectedOutcome
insured cancels mid-term103866103866Passed
insurer cancels mid-term2363323633Passed
insurer cancel early with minimum on file123550123550Passed
insured minimum earned binds7158571585Passed
flat cancel by insured185063246750Failed
flat cancel by insurer7760477604Passed
one day in force284060284060Passed
expiry day00Passed
negative days rejectedinvalidinvalidPassed
six month policy insured cancel6450864508Passed

SHA-256 / de421ff9b8a20257b5fa4d4c9cd48b46b406e63ee3e96ca7614cff2b1b1682f4

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):
    p=x['premium']; t=x['term_days']; d=x['days_in_force']
    if d<0 or t<=0: return 'invalid'
    if d>=t: return 0
    if d<=1: return p
    unearned=Fraction(p*(t-d),t)
    if x['initiator']=='insured':
        ret=unearned*Fraction(90,100)
        ret=min(ret,p-Fraction(p*x['min_earned_permille'],1000))
    else:
        ret=unearned
    return math.floor(ret+Fraction(1,2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['insured cancels mid-term', {'premium': 167157, 'term_days': 365, 'days_in_force': 113, 'initiator': 'insured', 'min_earned_permille': 100}, 103866], ['insurer cancels mid-term', {'premium': 107827, 'term_days': 365, 'days_in_force': 285, 'initiator': 'insurer', 'min_earned_permille': 250}, 23633], ['insurer cancel early with minimum on file', {'premium': 135423, 'term_days': 365, 'days_in_force': 32, 'initiator': 'insurer', 'min_earned_permille': 400}, 123550], ['insured minimum earned binds', {'premium': 102264, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insured', 'min_earned_permille': 300}, 71585], ['flat cancel by insured', {'premium': 246750, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 246750], ['flat cancel by insurer', {'premium': 77604, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 77604], ['one day in force', {'premium': 285647, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 284060], ['expiry day', {'premium': 163861, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 253298, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 169415, 'term_days': 182, 'days_in_force': 105, 'initiator': 'insured', 'min_earned_permille': 100}, 64508]], [['insured cancels mid-term', {'premium': 136580, 'term_days': 365, 'days_in_force': 120, 'initiator': 'insured', 'min_earned_permille': 100}, 82509], ['insurer cancels mid-term', {'premium': 142197, 'term_days': 365, 'days_in_force': 42, 'initiator': 'insurer', 'min_earned_permille': 100}, 125835], ['insurer cancel early with minimum on file', {'premium': 130516, 'term_days': 365, 'days_in_force': 22, 'initiator': 'insurer', 'min_earned_permille': 400}, 122649], ['insured minimum earned binds', {'premium': 155356, 'term_days': 365, 'days_in_force': 30, 'initiator': 'insured', 'min_earned_permille': 300}, 108749], ['flat cancel by insured', {'premium': 128340, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 128340], ['flat cancel by insurer', {'premium': 205493, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 205493], ['one day in force', {'premium': 125332, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 124636], ['expiry day', {'premium': 149858, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 143435, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 219606, 'term_days': 182, 'days_in_force': 115, 'initiator': 'insured', 'min_earned_permille': 100}, 72760]], [['insured cancels mid-term', {'premium': 236883, 'term_days': 365, 'days_in_force': 198, 'initiator': 'insured', 'min_earned_permille': 100}, 97544], ['insurer cancels mid-term', {'premium': 224272, 'term_days': 365, 'days_in_force': 89, 'initiator': 'insurer', 'min_earned_permille': 100}, 169586], ['insurer cancel early with minimum on file', {'premium': 271417, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insurer', 'min_earned_permille': 400}, 255801], ['insured minimum earned binds', {'premium': 236806, 'term_days': 365, 'days_in_force': 27, 'initiator': 'insured', 'min_earned_permille': 300}, 165764], ['flat cancel by insured', {'premium': 50665, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 50665], ['flat cancel by insurer', {'premium': 266999, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 266999], ['one day in force', {'premium': 51282, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 50997], ['expiry day', {'premium': 202320, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 67184, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 241675, 'term_days': 182, 'days_in_force': 118, 'initiator': 'insured', 'min_earned_permille': 100}, 76486]], [['insured cancels mid-term', {'premium': 82503, 'term_days': 365, 'days_in_force': 154, 'initiator': 'insured', 'min_earned_permille': 100}, 42924], ['insurer cancels mid-term', {'premium': 137193, 'term_days': 365, 'days_in_force': 295, 'initiator': 'insurer', 'min_earned_permille': 100}, 26311], ['insurer cancel early with minimum on file', {'premium': 157674, 'term_days': 365, 'days_in_force': 15, 'initiator': 'insurer', 'min_earned_permille': 400}, 151194], ['insured minimum earned binds', {'premium': 283617, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insured', 'min_earned_permille': 300}, 198532], ['flat cancel by insured', {'premium': 97666, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 97666], ['flat cancel by insurer', {'premium': 137018, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 137018], ['one day in force', {'premium': 261346, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 259894], ['expiry day', {'premium': 135749, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 260111, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 289415, 'term_days': 182, 'days_in_force': 81, 'initiator': 'insured', 'min_earned_permille': 100}, 144548]], [['insured cancels mid-term', {'premium': 59284, 'term_days': 365, 'days_in_force': 188, 'initiator': 'insured', 'min_earned_permille': 100}, 25874], ['insurer cancels mid-term', {'premium': 88844, 'term_days': 365, 'days_in_force': 105, 'initiator': 'insurer', 'min_earned_permille': 100}, 63286], ['insurer cancel early with minimum on file', {'premium': 70835, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insurer', 'min_earned_permille': 400}, 66177], ['insured minimum earned binds', {'premium': 148105, 'term_days': 365, 'days_in_force': 29, 'initiator': 'insured', 'min_earned_permille': 300}, 103674], ['flat cancel by insured', {'premium': 267217, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 267217], ['flat cancel by insurer', {'premium': 201088, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 201088], ['one day in force', {'premium': 293778, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 292146], ['expiry day', {'premium': 81772, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 193452, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 273407, 'term_days': 182, 'days_in_force': 107, 'initiator': 'insured', 'min_earned_permille': 100}, 101401]]]
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 fixtureActualExpectedOutcome
insured cancels mid-term103866103866Passed
insurer cancels mid-term2363323633Passed
insurer cancel early with minimum on file123550123550Passed
insured minimum earned binds7158571585Passed
flat cancel by insured246750246750Passed
flat cancel by insurer7760477604Passed
one day in force285647284060Failed
expiry day00Passed
negative days rejectedinvalidinvalidPassed
six month policy insured cancel6450864508Passed

SHA-256 / 04db8fc5c84b8b2dc768c8d998abcc2e2474880e340800e5a648e38760bccc53

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):
    p=x['premium']; t=x['term_days']; d=x['days_in_force']
    if d<0 or t<=0: return 'invalid'
    if d>=t: return 0
    if d==0: return p
    unearned=Fraction(p*(t-d),t)
    if x['initiator']=='insured':
        ret=unearned*Fraction(90,100)
        ret=min(ret,p-Fraction(p*x['min_earned_permille'],1000))
    else:
        ret=unearned
    return math.floor(ret+Fraction(1,2))
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['insured cancels mid-term', {'premium': 167157, 'term_days': 365, 'days_in_force': 113, 'initiator': 'insured', 'min_earned_permille': 100}, 103866], ['insurer cancels mid-term', {'premium': 107827, 'term_days': 365, 'days_in_force': 285, 'initiator': 'insurer', 'min_earned_permille': 250}, 23633], ['insurer cancel early with minimum on file', {'premium': 135423, 'term_days': 365, 'days_in_force': 32, 'initiator': 'insurer', 'min_earned_permille': 400}, 123550], ['insured minimum earned binds', {'premium': 102264, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insured', 'min_earned_permille': 300}, 71585], ['flat cancel by insured', {'premium': 246750, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 246750], ['flat cancel by insurer', {'premium': 77604, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 77604], ['one day in force', {'premium': 285647, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 284060], ['expiry day', {'premium': 163861, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 253298, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 169415, 'term_days': 182, 'days_in_force': 105, 'initiator': 'insured', 'min_earned_permille': 100}, 64508]], [['insured cancels mid-term', {'premium': 136580, 'term_days': 365, 'days_in_force': 120, 'initiator': 'insured', 'min_earned_permille': 100}, 82509], ['insurer cancels mid-term', {'premium': 142197, 'term_days': 365, 'days_in_force': 42, 'initiator': 'insurer', 'min_earned_permille': 100}, 125835], ['insurer cancel early with minimum on file', {'premium': 130516, 'term_days': 365, 'days_in_force': 22, 'initiator': 'insurer', 'min_earned_permille': 400}, 122649], ['insured minimum earned binds', {'premium': 155356, 'term_days': 365, 'days_in_force': 30, 'initiator': 'insured', 'min_earned_permille': 300}, 108749], ['flat cancel by insured', {'premium': 128340, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 250}, 128340], ['flat cancel by insurer', {'premium': 205493, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 205493], ['one day in force', {'premium': 125332, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 124636], ['expiry day', {'premium': 149858, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 143435, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 250}, 'invalid'], ['six month policy insured cancel', {'premium': 219606, 'term_days': 182, 'days_in_force': 115, 'initiator': 'insured', 'min_earned_permille': 100}, 72760]], [['insured cancels mid-term', {'premium': 236883, 'term_days': 365, 'days_in_force': 198, 'initiator': 'insured', 'min_earned_permille': 100}, 97544], ['insurer cancels mid-term', {'premium': 224272, 'term_days': 365, 'days_in_force': 89, 'initiator': 'insurer', 'min_earned_permille': 100}, 169586], ['insurer cancel early with minimum on file', {'premium': 271417, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insurer', 'min_earned_permille': 400}, 255801], ['insured minimum earned binds', {'premium': 236806, 'term_days': 365, 'days_in_force': 27, 'initiator': 'insured', 'min_earned_permille': 300}, 165764], ['flat cancel by insured', {'premium': 50665, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 50665], ['flat cancel by insurer', {'premium': 266999, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 250}, 266999], ['one day in force', {'premium': 51282, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 50997], ['expiry day', {'premium': 202320, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 67184, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 241675, 'term_days': 182, 'days_in_force': 118, 'initiator': 'insured', 'min_earned_permille': 100}, 76486]], [['insured cancels mid-term', {'premium': 82503, 'term_days': 365, 'days_in_force': 154, 'initiator': 'insured', 'min_earned_permille': 100}, 42924], ['insurer cancels mid-term', {'premium': 137193, 'term_days': 365, 'days_in_force': 295, 'initiator': 'insurer', 'min_earned_permille': 100}, 26311], ['insurer cancel early with minimum on file', {'premium': 157674, 'term_days': 365, 'days_in_force': 15, 'initiator': 'insurer', 'min_earned_permille': 400}, 151194], ['insured minimum earned binds', {'premium': 283617, 'term_days': 365, 'days_in_force': 21, 'initiator': 'insured', 'min_earned_permille': 300}, 198532], ['flat cancel by insured', {'premium': 97666, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 97666], ['flat cancel by insurer', {'premium': 137018, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 137018], ['one day in force', {'premium': 261346, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 100}, 259894], ['expiry day', {'premium': 135749, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 260111, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 289415, 'term_days': 182, 'days_in_force': 81, 'initiator': 'insured', 'min_earned_permille': 100}, 144548]], [['insured cancels mid-term', {'premium': 59284, 'term_days': 365, 'days_in_force': 188, 'initiator': 'insured', 'min_earned_permille': 100}, 25874], ['insurer cancels mid-term', {'premium': 88844, 'term_days': 365, 'days_in_force': 105, 'initiator': 'insurer', 'min_earned_permille': 100}, 63286], ['insurer cancel early with minimum on file', {'premium': 70835, 'term_days': 365, 'days_in_force': 24, 'initiator': 'insurer', 'min_earned_permille': 400}, 66177], ['insured minimum earned binds', {'premium': 148105, 'term_days': 365, 'days_in_force': 29, 'initiator': 'insured', 'min_earned_permille': 300}, 103674], ['flat cancel by insured', {'premium': 267217, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insured', 'min_earned_permille': 100}, 267217], ['flat cancel by insurer', {'premium': 201088, 'term_days': 365, 'days_in_force': 0, 'initiator': 'insurer', 'min_earned_permille': 100}, 201088], ['one day in force', {'premium': 293778, 'term_days': 180, 'days_in_force': 1, 'initiator': 'insurer', 'min_earned_permille': 250}, 292146], ['expiry day', {'premium': 81772, 'term_days': 365, 'days_in_force': 365, 'initiator': 'insured', 'min_earned_permille': 100}, 0], ['negative days rejected', {'premium': 193452, 'term_days': 365, 'days_in_force': -1, 'initiator': 'insured', 'min_earned_permille': 100}, 'invalid'], ['six month policy insured cancel', {'premium': 273407, 'term_days': 182, 'days_in_force': 107, 'initiator': 'insured', 'min_earned_permille': 100}, 101401]]]
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 fixtureActualExpectedOutcome
insured cancels mid-term103866103866Passed
insurer cancels mid-term2363323633Passed
insurer cancel early with minimum on file123550123550Passed
insured minimum earned binds7158571585Passed
flat cancel by insured246750246750Passed
flat cancel by insurer7760477604Passed
one day in force284060284060Passed
expiry day00Passed
negative days rejectedinvalidinvalidPassed
six month policy insured cancel6450864508Passed

SHA-256 / 8c6d8f7d5b6d5cb471c05c630920bceb4897fca789049505fe23d6fafbd9ece3

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:09.477856+00:00.

Case digest / 6dba1ef5b982834c7571460c9e636d91758d8b992c523c55561a6a8f36c769f1