FAILURE MAP
← Case archive

FA-59511 / Subscription proration billing / Open access

Prorated amounts in currency minor units: fraction zero padding · case 01

Amounts like 12.05 display as 12.5.

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

ROOT CAUSE

The minor-unit digits are printed without zero padding.

VERIFIED REPAIR

Restore the contract rule at the fraction zero padding step: use `disp = '%s%d.%0*d' % (sign, q, exp, r)`.

Unsuccessful approach: The attempt pads to two digits for every currency, misprinting three-decimal dinars.

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 = (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.%d' % (sign, q, 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': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('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': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('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': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]
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.4 KWD', 'minor': -4}{'display': '-0.004 KWD', 'minor': -4}Failed
regression (boundary) 1{'display': '-0.2 USD', 'minor': -2}{'display': '-0.02 USD', 'minor': -2}Failed
partial-repair probe 2{'display': '-0.35 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Failed
partial-repair probe 3{'display': '0.3 KWD', 'minor': 3}{'display': '0.003 KWD', 'minor': 3}Failed
boundary control 4{'display': '3 JPY', 'minor': 3}{'display': '3 JPY', 'minor': 3}Passed
boundary control 5{'display': '-0.53 EUR', 'minor': -53}{'display': '-0.53 EUR', 'minor': -53}Passed
normal control 6{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 7{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 8{'display': '30 JPY', 'minor': 30}{'display': '30 JPY', 'minor': 30}Passed
normal control 9{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / c08270190b8738b169d9ca51ea6c879f768e5e84a1df14047e7c5874833cfc21

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 = (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.%02d' % (sign, q, 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': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('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': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('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': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]
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.04 KWD', 'minor': -4}{'display': '-0.004 KWD', 'minor': -4}Failed
regression (boundary) 1{'display': '-0.02 USD', 'minor': -2}{'display': '-0.02 USD', 'minor': -2}Passed
partial-repair probe 2{'display': '-0.35 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Failed
partial-repair probe 3{'display': '0.03 KWD', 'minor': 3}{'display': '0.003 KWD', 'minor': 3}Failed
boundary control 4{'display': '3 JPY', 'minor': 3}{'display': '3 JPY', 'minor': 3}Passed
boundary control 5{'display': '-0.53 EUR', 'minor': -53}{'display': '-0.53 EUR', 'minor': -53}Passed
normal control 6{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 7{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 8{'display': '30 JPY', 'minor': 30}{'display': '30 JPY', 'minor': 30}Passed
normal control 9{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / 461d2b5bbc642e9db34f338ff7c532cc3e1366b87ca502f63395c67ef060940f

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': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('regression (boundary)', {'price': -3, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -2, 'display': '-0.02 USD'}), ('partial-repair probe', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -6310, 'currency': 'EUR', 'num': 23, 'den': 31}, {'minor': -4682, 'display': '-46.82 EUR'}), ('normal control', {'price': 63, 'currency': 'JPY', 'num': 925, 'den': 1000}, {'minor': 58, 'display': '58 JPY'}), ('normal control', {'price': 59, 'currency': 'JPY', 'num': 2, 'den': 4}, {'minor': 30, 'display': '30 JPY'}), ('normal control', {'price': -18, 'currency': 'JPY', 'num': 81, 'den': 365}, {'minor': -4, 'display': '-4 JPY'})], [('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('regression (boundary)', {'price': -7, 'currency': 'KWD', 'num': 1, 'den': 2}, {'minor': -4, 'display': '-0.004 KWD'}), ('partial-repair probe', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': -48, 'currency': 'JPY', 'num': 0, 'den': 4}, {'minor': 0, 'display': '0 JPY'}), ('normal control', {'price': -51, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -26, 'display': '-0.26 EUR'}), ('normal control', {'price': -79, 'currency': 'JPY', 'num': 200, 'den': 365}, {'minor': -43, 'display': '-43 JPY'}), ('normal control', {'price': -20, 'currency': 'USD', 'num': 1, 'den': 2}, {'minor': -10, 'display': '-0.10 USD'})], [('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('regression', {'price': -35, 'currency': 'KWD', 'num': 30, 'den': 30}, {'minor': -35, 'display': '-0.035 KWD'}), ('partial-repair probe', {'price': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('partial-repair probe', {'price': 96, 'currency': 'KWD', 'num': 19, 'den': 31}, {'minor': 59, 'display': '0.059 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('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': 675691, 'currency': 'KWD', 'num': 214, 'den': 365}, {'minor': 396159, 'display': '396.159 KWD'}), ('normal control', {'price': -28, 'currency': 'EUR', 'num': 30, 'den': 30}, {'minor': -28, 'display': '-0.28 EUR'})], [('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('regression', {'price': 26, 'currency': 'KWD', 'num': 3, 'den': 31}, {'minor': 3, 'display': '0.003 KWD'}), ('partial-repair probe', {'price': 79, 'currency': 'KWD', 'num': 2, 'den': 2}, {'minor': 79, 'display': '0.079 KWD'}), ('partial-repair probe', {'price': -147, 'currency': 'KWD', 'num': 546, 'den': 1000}, {'minor': -80, 'display': '-0.080 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 95, 'currency': 'USD', 'num': 25, 'den': 30}, {'minor': 79, 'display': '0.79 USD'}), ('normal control', {'price': 553663, 'currency': 'USD', 'num': 138, 'den': 365}, {'minor': 209330, 'display': '2093.30 USD'}), ('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': -74, 'currency': 'KWD', 'num': 111, 'den': 365}, {'minor': -23, 'display': '-0.023 KWD'}), ('regression', {'price': -88, 'currency': 'KWD', 'num': 15, 'den': 31}, {'minor': -43, 'display': '-0.043 KWD'}), ('partial-repair probe', {'price': 48, 'currency': 'KWD', 'num': 269, 'den': 1000}, {'minor': 13, 'display': '0.013 KWD'}), ('partial-repair probe', {'price': 140, 'currency': 'KWD', 'num': 661, 'den': 1000}, {'minor': 93, 'display': '0.093 KWD'}), ('boundary control', {'price': 5, 'currency': 'JPY', 'num': 1, 'den': 2}, {'minor': 3, 'display': '3 JPY'}), ('boundary control', {'price': -105, 'currency': 'EUR', 'num': 1, 'den': 2}, {'minor': -53, 'display': '-0.53 EUR'}), ('normal control', {'price': 248141, 'currency': 'EUR', 'num': 187, 'den': 365}, {'minor': 127130, 'display': '1271.30 EUR'}), ('normal control', {'price': -70, 'currency': 'JPY', 'num': 209, 'den': 365}, {'minor': -40, 'display': '-40 JPY'}), ('normal control', {'price': 26512, 'currency': 'USD', 'num': 248, 'den': 365}, {'minor': 18014, 'display': '180.14 USD'}), ('normal control', {'price': -927642, 'currency': 'KWD', 'num': 9, 'den': 31}, {'minor': -269315, 'display': '-269.315 KWD'})]]
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.004 KWD', 'minor': -4}{'display': '-0.004 KWD', 'minor': -4}Passed
regression (boundary) 1{'display': '-0.02 USD', 'minor': -2}{'display': '-0.02 USD', 'minor': -2}Passed
partial-repair probe 2{'display': '-0.035 KWD', 'minor': -35}{'display': '-0.035 KWD', 'minor': -35}Passed
partial-repair probe 3{'display': '0.003 KWD', 'minor': 3}{'display': '0.003 KWD', 'minor': 3}Passed
boundary control 4{'display': '3 JPY', 'minor': 3}{'display': '3 JPY', 'minor': 3}Passed
boundary control 5{'display': '-0.53 EUR', 'minor': -53}{'display': '-0.53 EUR', 'minor': -53}Passed
normal control 6{'display': '-46.82 EUR', 'minor': -4682}{'display': '-46.82 EUR', 'minor': -4682}Passed
normal control 7{'display': '58 JPY', 'minor': 58}{'display': '58 JPY', 'minor': 58}Passed
normal control 8{'display': '30 JPY', 'minor': 30}{'display': '30 JPY', 'minor': 30}Passed
normal control 9{'display': '-4 JPY', 'minor': -4}{'display': '-4 JPY', 'minor': -4}Passed

SHA-256 / 64604ba84aa4c1b221e068417dcf3594c62f3aa695499ffcc9bf55f3810f2fdf

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

Case digest / e8aed62c42af76d1a26e395f6d01736bcb36057afa6938a4fb59acbe4107f61a