FA-68636 / Toll and parking fee computation / Open access
Prepaid toll account auto-replenishment: replenishment is attempted with a declined card · case 01
Prepaid toll account auto-replenishment returns a wrong result when replenishment is attempted with a declined card.
ROOT CAUSE
Declined cards still add replenishments to the balance.
VERIFIED REPAIR
Restore the declined card rule so that the step reads `and x['card_ok']:`.
Unsuccessful approach: Allowing one replenishment before honouring the decline still credits unpaid money.
Case contract
Input {balance, charges, threshold, min_replenish, usage_30d, card_ok}. The replenish amount is max(min_replenish, ceil(usage_30d/4) rounded up to a multiple of 500). After each charge, if the balance is strictly below threshold and the card works, one replenishment is added. first_negative is the index of the first charge after which the balance is negative (or null). Return {balance, replenished, first_negative}.
Why this case matters
Fee engines bill customers in integer cents; a wrong boundary, rounding stage or cap scope silently over- or under-charges.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bal = x['balance']
n = 0
first = None
amt = max(x['min_replenish'], -(-x['usage_30d'] // 2000) * 500)
for i, c in enumerate(x['charges']):
bal -= c
if bal < x['threshold'] :
bal += amt
n += 1
if bal < 0 and first is None:
first = i
return {'balance': bal, 'replenished': n, 'first_negative': first}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 1042, 'charges': [150, 400, 400, 275, 1200, 400, 1200, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3603, 'card_ok': False}, {'balance': -3633, 'replenished': 0, 'first_negative': 3}), ({'balance': 3098, 'charges': [275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8704, 'card_ok': True}, {'balance': 2823, 'replenished': 0, 'first_negative': None}), ({'balance': 2083, 'charges': [400, 3000, 1200, 150, 3000, 150, 275, 400], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 15358, 'card_ok': True}, {'balance': 1508, 'replenished': 2, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2570, 'charges': [1200, 150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 14152, 'card_ok': True}, {'balance': 1220, 'replenished': 0, 'first_negative': None}), ({'balance': -415, 'charges': [3000, 400, 150, 400, 3000, 650, 650, 275], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 13000, 'card_ok': False}, {'balance': -8940, 'replenished': 0, 'first_negative': 0})], [({'balance': 960, 'charges': [150, 400], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 1855, 'card_ok': True}, {'balance': 2410, 'replenished': 1, 'first_negative': None}), ({'balance': 2103, 'charges': [400, 275, 1200, 3000], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 12226, 'card_ok': False}, {'balance': -2772, 'replenished': 0, 'first_negative': 3}), ({'balance': 2015, 'charges': [150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 308, 'card_ok': True}, {'balance': 1865, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2113, 'charges': [650, 3000, 400, 650, 1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 3260, 'card_ok': False}, {'balance': -4187, 'replenished': 0, 'first_negative': 1}), ({'balance': 3967, 'charges': [150, 275, 3000, 1200, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8777, 'card_ok': True}, {'balance': 2867, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None})], [({'balance': 397, 'charges': [400, 3000, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3118, 'card_ok': False}, {'balance': -3653, 'replenished': 0, 'first_negative': 0}), ({'balance': 173, 'charges': [1200, 400, 3000, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 12679, 'card_ok': True}, {'balance': 2423, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 3708, 'charges': [1200, 1200, 650, 1200, 650], 'threshold': 1000, 'min_replenish': 2000, 'usage_30d': 11407, 'card_ok': True}, {'balance': 1808, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2856, 'charges': [150, 150, 1200, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 8265, 'card_ok': True}, {'balance': 1206, 'replenished': 0, 'first_negative': None}), ({'balance': 2101, 'charges': [650, 150, 400, 1200, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 2791, 'card_ok': False}, {'balance': -574, 'replenished': 0, 'first_negative': 3})], [({'balance': 581, 'charges': [150, 3000, 400, 400], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 6330, 'card_ok': False}, {'balance': -3369, 'replenished': 0, 'first_negative': 1}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 30, 'charges': [150, 275, 400, 3000, 650], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 6576, 'card_ok': True}, {'balance': 3055, 'replenished': 3, 'first_negative': None}), ({'balance': 1352, 'charges': [1200], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 18621, 'card_ok': True}, {'balance': 5152, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2093, 'charges': [1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 228, 'card_ok': False}, {'balance': 493, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2533, 'charges': [150, 650, 150, 400, 3000, 150, 3000], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 11845, 'card_ok': True}, {'balance': 4033, 'replenished': 3, 'first_negative': None})], [({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 3426, 'charges': [1200, 400], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 13777, 'card_ok': True}, {'balance': 1826, 'replenished': 0, 'first_negative': None}), ({'balance': 841, 'charges': [1200, 150], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 6647, 'card_ok': True}, {'balance': 1491, 'replenished': 1, 'first_negative': None}), ({'balance': 2207, 'charges': [3000, 3000, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 3869, 'card_ok': True}, {'balance': 2232, 'replenished': 3, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1085, 'charges': [150, 3000, 275, 650, 275, 150, 275, 3000], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 2619, 'card_ok': False}, {'balance': -6690, 'replenished': 0, 'first_negative': 1}), ({'balance': -472, 'charges': [1200, 3000, 275, 650], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 16057, 'card_ok': False}, {'balance': -5597, 'replenished': 0, 'first_negative': 0})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('fee oracle' + ' %d' % 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fee oracle 0 | {'balance': 1000, 'first_negative': None, 'replenished': 1} | {'balance': 0, 'first_negative': None, 'replenished': 0} | Failed |
| fee oracle 1 | {'balance': 1367, 'first_negative': None, 'replenished': 5} | {'balance': -3633, 'first_negative': 3, 'replenished': 0} | Failed |
| fee oracle 2 | {'balance': 2823, 'first_negative': None, 'replenished': 0} | {'balance': 2823, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 3 | {'balance': 1508, 'first_negative': None, 'replenished': 2} | {'balance': 1508, 'first_negative': None, 'replenished': 2} | Passed |
| fee oracle 4 | {'balance': 1000, 'first_negative': None, 'replenished': 0} | {'balance': 1000, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 5 | {'balance': 3350, 'first_negative': None, 'replenished': 1} | {'balance': 3350, 'first_negative': None, 'replenished': 1} | Passed |
| fee oracle 6 | {'balance': 1220, 'first_negative': None, 'replenished': 0} | {'balance': 1220, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 7 | {'balance': 1560, 'first_negative': None, 'replenished': 3} | {'balance': -8940, 'first_negative': 0, 'replenished': 0} | Failed |
SHA-256 / b7a67d51090870ab7432ef584d11c9e005630114ffc8e20c025449ca52b74612
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bal = x['balance']
n = 0
first = None
amt = max(x['min_replenish'], -(-x['usage_30d'] // 2000) * 500)
for i, c in enumerate(x['charges']):
bal -= c
if bal < x['threshold'] and (x['card_ok'] or n == 0):
bal += amt
n += 1
if bal < 0 and first is None:
first = i
return {'balance': bal, 'replenished': n, 'first_negative': first}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 1042, 'charges': [150, 400, 400, 275, 1200, 400, 1200, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3603, 'card_ok': False}, {'balance': -3633, 'replenished': 0, 'first_negative': 3}), ({'balance': 3098, 'charges': [275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8704, 'card_ok': True}, {'balance': 2823, 'replenished': 0, 'first_negative': None}), ({'balance': 2083, 'charges': [400, 3000, 1200, 150, 3000, 150, 275, 400], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 15358, 'card_ok': True}, {'balance': 1508, 'replenished': 2, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2570, 'charges': [1200, 150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 14152, 'card_ok': True}, {'balance': 1220, 'replenished': 0, 'first_negative': None}), ({'balance': -415, 'charges': [3000, 400, 150, 400, 3000, 650, 650, 275], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 13000, 'card_ok': False}, {'balance': -8940, 'replenished': 0, 'first_negative': 0})], [({'balance': 960, 'charges': [150, 400], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 1855, 'card_ok': True}, {'balance': 2410, 'replenished': 1, 'first_negative': None}), ({'balance': 2103, 'charges': [400, 275, 1200, 3000], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 12226, 'card_ok': False}, {'balance': -2772, 'replenished': 0, 'first_negative': 3}), ({'balance': 2015, 'charges': [150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 308, 'card_ok': True}, {'balance': 1865, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2113, 'charges': [650, 3000, 400, 650, 1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 3260, 'card_ok': False}, {'balance': -4187, 'replenished': 0, 'first_negative': 1}), ({'balance': 3967, 'charges': [150, 275, 3000, 1200, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8777, 'card_ok': True}, {'balance': 2867, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None})], [({'balance': 397, 'charges': [400, 3000, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3118, 'card_ok': False}, {'balance': -3653, 'replenished': 0, 'first_negative': 0}), ({'balance': 173, 'charges': [1200, 400, 3000, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 12679, 'card_ok': True}, {'balance': 2423, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 3708, 'charges': [1200, 1200, 650, 1200, 650], 'threshold': 1000, 'min_replenish': 2000, 'usage_30d': 11407, 'card_ok': True}, {'balance': 1808, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2856, 'charges': [150, 150, 1200, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 8265, 'card_ok': True}, {'balance': 1206, 'replenished': 0, 'first_negative': None}), ({'balance': 2101, 'charges': [650, 150, 400, 1200, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 2791, 'card_ok': False}, {'balance': -574, 'replenished': 0, 'first_negative': 3})], [({'balance': 581, 'charges': [150, 3000, 400, 400], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 6330, 'card_ok': False}, {'balance': -3369, 'replenished': 0, 'first_negative': 1}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 30, 'charges': [150, 275, 400, 3000, 650], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 6576, 'card_ok': True}, {'balance': 3055, 'replenished': 3, 'first_negative': None}), ({'balance': 1352, 'charges': [1200], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 18621, 'card_ok': True}, {'balance': 5152, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2093, 'charges': [1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 228, 'card_ok': False}, {'balance': 493, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2533, 'charges': [150, 650, 150, 400, 3000, 150, 3000], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 11845, 'card_ok': True}, {'balance': 4033, 'replenished': 3, 'first_negative': None})], [({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 3426, 'charges': [1200, 400], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 13777, 'card_ok': True}, {'balance': 1826, 'replenished': 0, 'first_negative': None}), ({'balance': 841, 'charges': [1200, 150], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 6647, 'card_ok': True}, {'balance': 1491, 'replenished': 1, 'first_negative': None}), ({'balance': 2207, 'charges': [3000, 3000, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 3869, 'card_ok': True}, {'balance': 2232, 'replenished': 3, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1085, 'charges': [150, 3000, 275, 650, 275, 150, 275, 3000], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 2619, 'card_ok': False}, {'balance': -6690, 'replenished': 0, 'first_negative': 1}), ({'balance': -472, 'charges': [1200, 3000, 275, 650], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 16057, 'card_ok': False}, {'balance': -5597, 'replenished': 0, 'first_negative': 0})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('fee oracle' + ' %d' % 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fee oracle 0 | {'balance': 1000, 'first_negative': None, 'replenished': 1} | {'balance': 0, 'first_negative': None, 'replenished': 0} | Failed |
| fee oracle 1 | {'balance': -2633, 'first_negative': 4, 'replenished': 1} | {'balance': -3633, 'first_negative': 3, 'replenished': 0} | Failed |
| fee oracle 2 | {'balance': 2823, 'first_negative': None, 'replenished': 0} | {'balance': 2823, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 3 | {'balance': 1508, 'first_negative': None, 'replenished': 2} | {'balance': 1508, 'first_negative': None, 'replenished': 2} | Passed |
| fee oracle 4 | {'balance': 1000, 'first_negative': None, 'replenished': 0} | {'balance': 1000, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 5 | {'balance': 3350, 'first_negative': None, 'replenished': 1} | {'balance': 3350, 'first_negative': None, 'replenished': 1} | Passed |
| fee oracle 6 | {'balance': 1220, 'first_negative': None, 'replenished': 0} | {'balance': 1220, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 7 | {'balance': -5440, 'first_negative': 1, 'replenished': 1} | {'balance': -8940, 'first_negative': 0, 'replenished': 0} | Failed |
SHA-256 / 7d11dddd48c522d999d701bcd910424d12b61cadb15f4255f6672816fb9c29c8
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
bal = x['balance']
n = 0
first = None
amt = max(x['min_replenish'], -(-x['usage_30d'] // 2000) * 500)
for i, c in enumerate(x['charges']):
bal -= c
if bal < x['threshold'] and x['card_ok']:
bal += amt
n += 1
if bal < 0 and first is None:
first = i
return {'balance': bal, 'replenished': n, 'first_negative': first}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 1042, 'charges': [150, 400, 400, 275, 1200, 400, 1200, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3603, 'card_ok': False}, {'balance': -3633, 'replenished': 0, 'first_negative': 3}), ({'balance': 3098, 'charges': [275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8704, 'card_ok': True}, {'balance': 2823, 'replenished': 0, 'first_negative': None}), ({'balance': 2083, 'charges': [400, 3000, 1200, 150, 3000, 150, 275, 400], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 15358, 'card_ok': True}, {'balance': 1508, 'replenished': 2, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2570, 'charges': [1200, 150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 14152, 'card_ok': True}, {'balance': 1220, 'replenished': 0, 'first_negative': None}), ({'balance': -415, 'charges': [3000, 400, 150, 400, 3000, 650, 650, 275], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 13000, 'card_ok': False}, {'balance': -8940, 'replenished': 0, 'first_negative': 0})], [({'balance': 960, 'charges': [150, 400], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 1855, 'card_ok': True}, {'balance': 2410, 'replenished': 1, 'first_negative': None}), ({'balance': 2103, 'charges': [400, 275, 1200, 3000], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 12226, 'card_ok': False}, {'balance': -2772, 'replenished': 0, 'first_negative': 3}), ({'balance': 2015, 'charges': [150], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 308, 'card_ok': True}, {'balance': 1865, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2113, 'charges': [650, 3000, 400, 650, 1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 3260, 'card_ok': False}, {'balance': -4187, 'replenished': 0, 'first_negative': 1}), ({'balance': 3967, 'charges': [150, 275, 3000, 1200, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 8777, 'card_ok': True}, {'balance': 2867, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None})], [({'balance': 397, 'charges': [400, 3000, 650], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 3118, 'card_ok': False}, {'balance': -3653, 'replenished': 0, 'first_negative': 0}), ({'balance': 173, 'charges': [1200, 400, 3000, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 12679, 'card_ok': True}, {'balance': 2423, 'replenished': 2, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 400, 'charges': [400], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': 0, 'replenished': 0, 'first_negative': None}), ({'balance': 3708, 'charges': [1200, 1200, 650, 1200, 650], 'threshold': 1000, 'min_replenish': 2000, 'usage_30d': 11407, 'card_ok': True}, {'balance': 1808, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2856, 'charges': [150, 150, 1200, 150], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 8265, 'card_ok': True}, {'balance': 1206, 'replenished': 0, 'first_negative': None}), ({'balance': 2101, 'charges': [650, 150, 400, 1200, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 2791, 'card_ok': False}, {'balance': -574, 'replenished': 0, 'first_negative': 3})], [({'balance': 581, 'charges': [150, 3000, 400, 400], 'threshold': 500, 'min_replenish': 2000, 'usage_30d': 6330, 'card_ok': False}, {'balance': -3369, 'replenished': 0, 'first_negative': 1}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 30, 'charges': [150, 275, 400, 3000, 650], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 6576, 'card_ok': True}, {'balance': 3055, 'replenished': 3, 'first_negative': None}), ({'balance': 1352, 'charges': [1200], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 18621, 'card_ok': True}, {'balance': 5152, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 2093, 'charges': [1200, 400], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 228, 'card_ok': False}, {'balance': 493, 'replenished': 0, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 2533, 'charges': [150, 650, 150, 400, 3000, 150, 3000], 'threshold': 1500, 'min_replenish': 2000, 'usage_30d': 11845, 'card_ok': True}, {'balance': 4033, 'replenished': 3, 'first_negative': None})], [({'balance': 1400, 'charges': [400, 150], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 3350, 'replenished': 1, 'first_negative': None}), ({'balance': 1400, 'charges': [400], 'threshold': 1000, 'min_replenish': 1000, 'usage_30d': 9000, 'card_ok': True}, {'balance': 1000, 'replenished': 0, 'first_negative': None}), ({'balance': 3426, 'charges': [1200, 400], 'threshold': 1000, 'min_replenish': 2500, 'usage_30d': 13777, 'card_ok': True}, {'balance': 1826, 'replenished': 0, 'first_negative': None}), ({'balance': 841, 'charges': [1200, 150], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 6647, 'card_ok': True}, {'balance': 1491, 'replenished': 1, 'first_negative': None}), ({'balance': 2207, 'charges': [3000, 3000, 1200, 275], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 3869, 'card_ok': True}, {'balance': 2232, 'replenished': 3, 'first_negative': None}), ({'balance': 300, 'charges': [400, 150, 275], 'threshold': 500, 'min_replenish': 1000, 'usage_30d': 0, 'card_ok': False}, {'balance': -525, 'replenished': 0, 'first_negative': 0}), ({'balance': 1085, 'charges': [150, 3000, 275, 650, 275, 150, 275, 3000], 'threshold': 1500, 'min_replenish': 2500, 'usage_30d': 2619, 'card_ok': False}, {'balance': -6690, 'replenished': 0, 'first_negative': 1}), ({'balance': -472, 'charges': [1200, 3000, 275, 650], 'threshold': 500, 'min_replenish': 2500, 'usage_30d': 16057, 'card_ok': False}, {'balance': -5597, 'replenished': 0, 'first_negative': 0})]]
for i, (args, expected) in enumerate(fixtures[N-1]):
check('fee oracle' + ' %d' % 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 fixture | Actual | Expected | Outcome |
|---|---|---|---|
| fee oracle 0 | {'balance': 0, 'first_negative': None, 'replenished': 0} | {'balance': 0, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 1 | {'balance': -3633, 'first_negative': 3, 'replenished': 0} | {'balance': -3633, 'first_negative': 3, 'replenished': 0} | Passed |
| fee oracle 2 | {'balance': 2823, 'first_negative': None, 'replenished': 0} | {'balance': 2823, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 3 | {'balance': 1508, 'first_negative': None, 'replenished': 2} | {'balance': 1508, 'first_negative': None, 'replenished': 2} | Passed |
| fee oracle 4 | {'balance': 1000, 'first_negative': None, 'replenished': 0} | {'balance': 1000, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 5 | {'balance': 3350, 'first_negative': None, 'replenished': 1} | {'balance': 3350, 'first_negative': None, 'replenished': 1} | Passed |
| fee oracle 6 | {'balance': 1220, 'first_negative': None, 'replenished': 0} | {'balance': 1220, 'first_negative': None, 'replenished': 0} | Passed |
| fee oracle 7 | {'balance': -8940, 'first_negative': 0, 'replenished': 0} | {'balance': -8940, 'first_negative': 0, 'replenished': 0} | Passed |
SHA-256 / 2b793f48cba4b2d64672f370bee7c09c733046b131bb1f170432db2740dec104
Verification & scope
A deterministic, bounded toy model with a stipulated contract; it makes no claim of conformance to any agency manual or standard. 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:48:04.137250+00:00.
Case digest / b6815fc897207b91af6463bfe08c97e3951690edc228a2cf3f3d5fb9e4eb7186