FAILURE MAP
← Case archive

FA-59516 / Subscription proration billing / Open access

Prorated amounts in currency minor units: credit rounding direction · case 01

Credit prorations of exactly half a minor unit round toward zero while debits round away.

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

ROOT CAUSE

The signed amount is rounded half toward positive infinity instead of half away from zero.

VERIFIED REPAIR

Restore the contract rule at the credit rounding direction step: use `v = (abs(n) * 2 + x['den']) // (2 * x['den']) v = v if n >= 0 else -v`.

Unsuccessful approach: The attempt floors the signed amount, over-crediting on any fractional credit.

Case contract

Input {price (signed minor units), currency, num, den}. Exponents: USD 2, EUR 2, JPY 0, KWD 3, CLP 0. Amount = price*num/den rounded half away from zero. Display: zero-exponent currencies show an integer; others show sign, major units, a dot and exactly exponent digits, then a space and the code. Return {minor, display}.

Why this case matters

Prorated amounts must round and render in each currency's own minor-unit precision, including credits.

1 / The failure

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]
    n = x['price'] * x['num']
    v = (n * 2 + x['den']) // (2 * x['den'])
    if exp == 0:
        disp = str(v)
    else:
        sign = '-' if v < 0 else ''
        q, r = divmod(abs(v), 10 ** exp)
        disp = '%s%d.%0*d' % (sign, q, exp, r)
    return {'minor': v, 'display': disp + ' ' + x['currency']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe (boundary)', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('partial-repair probe', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'}), ('normal control', {'price': -93, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'})], [('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('partial-repair probe', {'price': -29, 'currency': 'USD', 'num': 316, 'den': 1000}, {'minor': -9, 'display': '-0.09 USD'}), ('partial-repair probe', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'})], [('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('partial-repair probe', {'price': -357324, 'currency': 'USD', 'num': 19, 'den': 30}, {'minor': -226305, 'display': '-2263.05 USD'}), ('partial-repair probe', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 86, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('regression', {'price': -25, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -13, 'display': '-0.13 EUR'}), ('partial-repair probe', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('partial-repair probe', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('normal control', {'price': 8, 'currency': 'EUR', 'num': 25, 'den': 31}, {'minor': 6, 'display': '0.06 EUR'}), ('normal control', {'price': -19, 'currency': 'EUR', 'num': 0, 'den': 31}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 441137, 'currency': 'CLP', 'num': 2, 'den': 2}, {'minor': 441137, 'display': '441137 CLP'})]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), 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
regression (boundary) 0{'display': '-0.01 USD', 'minor': -1}{'display': '-0.02 USD', 'minor': -2}Failed
regression (boundary) 1{'display': '-0.003 KWD', 'minor': -3}{'display': '-0.004 KWD', 'minor': -4}Failed
partial-repair probe (boundary) 2{'display': '3 JPY', 'minor': 3}{'display': '3 JPY', 'minor': 3}Passed
partial-repair probe 3{'display': '30 JPY', 'minor': 30}{'display': '30 JPY', 'minor': 30}Passed
normal control 4{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 5{'display': '-0.035 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Passed
normal control 6{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 7{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / f82fccf2f37e6c9c46c543dd29ae1a01a03148b05f40436cd50e086a7a874939

2 / The unsuccessful fix

Exit 1
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]
    n = x['price'] * x['num']
    v = n // x['den']
    if exp == 0:
        disp = str(v)
    else:
        sign = '-' if v < 0 else ''
        q, r = divmod(abs(v), 10 ** exp)
        disp = '%s%d.%0*d' % (sign, q, exp, r)
    return {'minor': v, 'display': disp + ' ' + x['currency']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe (boundary)', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('partial-repair probe', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'}), ('normal control', {'price': -93, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'})], [('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('partial-repair probe', {'price': -29, 'currency': 'USD', 'num': 316, 'den': 1000}, {'minor': -9, 'display': '-0.09 USD'}), ('partial-repair probe', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'})], [('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('partial-repair probe', {'price': -357324, 'currency': 'USD', 'num': 19, 'den': 30}, {'minor': -226305, 'display': '-2263.05 USD'}), ('partial-repair probe', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 86, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('regression', {'price': -25, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -13, 'display': '-0.13 EUR'}), ('partial-repair probe', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('partial-repair probe', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('normal control', {'price': 8, 'currency': 'EUR', 'num': 25, 'den': 31}, {'minor': 6, 'display': '0.06 EUR'}), ('normal control', {'price': -19, 'currency': 'EUR', 'num': 0, 'den': 31}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 441137, 'currency': 'CLP', 'num': 2, 'den': 2}, {'minor': 441137, 'display': '441137 CLP'})]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), 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
regression (boundary) 0{'display': '-0.02 USD', 'minor': -2}{'display': '-0.02 USD', 'minor': -2}Passed
regression (boundary) 1{'display': '-0.004 KWD', 'minor': -4}{'display': '-0.004 KWD', 'minor': -4}Passed
partial-repair probe (boundary) 2{'display': '2 JPY', 'minor': 2}{'display': '3 JPY', 'minor': 3}Failed
partial-repair probe 3{'display': '29 JPY', 'minor': 29}{'display': '30 JPY', 'minor': 30}Failed
normal control 4{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 5{'display': '-0.035 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Passed
normal control 6{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 7{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / 9946c2a2e7f20e7c412fbad5004a3efe391321e9fb7a5a0f4de616e9a328c1fa

3 / The verified repair

Exit 0
"""Failure Map reference implementation. Python standard library only."""
import json

N = 1
observations = []
def solve(x):
    exp = {'USD': 2, 'EUR': 2, 'JPY': 0, 'KWD': 3, 'CLP': 0}[x['currency']]
    n = x['price'] * x['num']
    v = (abs(n) * 2 + x['den']) // (2 * x['den'])
    v = v if n >= 0 else -v
    if exp == 0:
        disp = str(v)
    else:
        sign = '-' if v < 0 else ''
        q, r = divmod(abs(v), 10 ** exp)
        disp = '%s%d.%0*d' % (sign, q, exp, r)
    return {'minor': v, 'display': disp + ' ' + x['currency']}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe (boundary)', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('partial-repair probe', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'}), ('normal control', {'price': -93, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'})], [('regression (boundary)', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('partial-repair probe', {'price': -29, 'currency': 'USD', 'num': 316, 'den': 1000}, {'minor': -9, 'display': '-0.09 USD'}), ('partial-repair probe', {'price': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': 464209, 'currency': 'EUR', 'num': 10, 'den': 30}, {'minor': 154736, 'display': '1547.36 EUR'}), ('normal control', {'price': 61, 'currency': 'JPY', 'num': 50, 'den': 365}, {'minor': 8, 'display': '8 JPY'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'})], [('regression', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('partial-repair probe', {'price': -357324, 'currency': 'USD', 'num': 19, 'den': 30}, {'minor': -226305, 'display': '-2263.05 USD'}), ('partial-repair probe', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('normal control', {'price': 86, 'currency': 'EUR', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 21, 'currency': 'JPY', 'num': 3, 'den': 30}, {'minor': 2, 'display': '2 JPY'}), ('normal control', {'price': 127, 'currency': 'JPY', 'num': 0, 'den': 2}, {'minor': 0, 'display': '0 JPY'})], [('regression', {'price': -98, 'currency': 'CLP', 'num': 3, 'den': 4}, {'minor': -74, 'display': '-74 CLP'}), ('regression', {'price': -25, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -13, 'display': '-0.13 EUR'}), ('partial-repair probe', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('partial-repair probe', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('normal control', {'price': 8, 'currency': 'EUR', 'num': 25, 'den': 31}, {'minor': 6, 'display': '0.06 EUR'}), ('normal control', {'price': -19, 'currency': 'EUR', 'num': 0, 'den': 31}, {'minor': 0, 'display': '0.00 EUR'}), ('normal control', {'price': 441137, 'currency': 'CLP', 'num': 2, 'den': 2}, {'minor': 441137, 'display': '441137 CLP'})]]
for i, (label, args, expected) in enumerate(fixtures[N-1]):
    check("%s %d" % (label, i), 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
regression (boundary) 0{'display': '-0.02 USD', 'minor': -2}{'display': '-0.02 USD', 'minor': -2}Passed
regression (boundary) 1{'display': '-0.004 KWD', 'minor': -4}{'display': '-0.004 KWD', 'minor': -4}Passed
partial-repair probe (boundary) 2{'display': '3 JPY', 'minor': 3}{'display': '3 JPY', 'minor': 3}Passed
partial-repair probe 3{'display': '30 JPY', 'minor': 30}{'display': '30 JPY', 'minor': 30}Passed
normal control 4{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 5{'display': '-0.035 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Passed
normal control 6{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 7{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / 0a828ef20138f9b3c1a8e2f0826db4f75eb2f67414bb3b7414380e7987816ab6

Verification & scope

A deterministic teaching model of a stipulated billing rule. It makes no claim to reproduce any billing provider's exact behaviour and is not billing software. 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:46:37.047750+00:00.

Case digest / 4bfd5f906c3cb7ef5a933a82944e2cd8dae4c49a740bf8e018aaa5ccce864dbd