FA-95681 / Shipping rate zone lookup / Open access
Contract discount: discount cents truncated · case 01
Discounts come out a cent short on half-cent results.
ROOT CAUSE
The discount amount is floored instead of rounded half up.
VERIFIED REPAIR
Round the discount half up to the cent.
Unsuccessful approach: Round-half-even still rounds some half cents down.
Case contract
Cents. Weekly spend (dollars, may have cents) selects the discount: >= 5000 -> 25%, >= 2000 -> 18%, >= 500 -> 12%, else 0. Discount = list * pct / 100 rounded half up. Net is floored at the minimum charge, but never above the list rate. Return [pct, net].
Why this case matters
Contract pricing discounts list rates by volume tier subject to a minimum.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(list_rate, spend, min_charge):
pct = 0
for limit, p in ((5000, 25), (2000, 18), (500, 12)):
if spend >= limit:
pct = p
break
disc = list_rate * pct // 100
net = list_rate - disc
floor_amt = min(min_charge, list_rate)
return [pct, max(net, floor_amt)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['half cent discount', [1025, 2000, 500], [18, 840]], ['generated mix 15', [1250, 8000, 900], [25, 937]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 6', [2000, 4999.5, 500], [18, 1640]], ['generated mix 14', [4999, 1999.6, 1200], [12, 4399]]], [['generated mix 27', [1250, 5000, 900], [25, 937]], ['generated mix 50', [1025, 2000, 500], [18, 840]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['generated mix 9', [1000, 500, 900], [12, 900]], ['generated mix 17', [1250, 8000, 900], [25, 937]]], [['generated mix 64', [4999, 5000, 900], [25, 3749]], ['generated mix 30', [1250, 8000, 500], [25, 937]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 20', [4999, 5000, 500], [25, 3749]], ['generated mix 28', [1333, 2000, 1200], [18, 1200]]], [['generated mix 5', [4999, 500, 0], [12, 4399]], ['generated mix 17', [1250, 8000, 900], [25, 937]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum applies', [1000, 6000, 900], [25, 900]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 33', [1025, 1999.6, 500], [12, 902]], ['generated mix 41', [1025, 499.99, 0], [0, 1025]]], [['generated mix 29', [1333, 1999.6, 0], [12, 1173]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 43', [1333, 499.99, 500], [0, 1333]], ['generated mix 51', [1025, 2000, 900], [18, 900]], ['generated mix 59', [1333, 100, 1200], [0, 1333]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| half cent discount | [18, 841] | [18, 840] | Failed |
| generated mix 15 | [25, 938] | [25, 937] | Failed |
| tier edge | [18, 820] | [18, 820] | Passed |
| top tier | [25, 750] | [25, 750] | Passed |
| minimum capped by list | [25, 700] | [25, 700] | Passed |
| just under tier | [12, 880] | [12, 880] | Passed |
| generated mix 6 | [18, 1640] | [18, 1640] | Passed |
| generated mix 14 | [12, 4400] | [12, 4399] | Failed |
SHA-256 / 3f8044e9ef6a919c74093beab8a4f73cd3bbd481b10b6f3b428815b97c8fc072
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(list_rate, spend, min_charge):
pct = 0
for limit, p in ((5000, 25), (2000, 18), (500, 12)):
if spend >= limit:
pct = p
break
disc = round(list_rate * pct / 100)
net = list_rate - disc
floor_amt = min(min_charge, list_rate)
return [pct, max(net, floor_amt)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['half cent discount', [1025, 2000, 500], [18, 840]], ['generated mix 15', [1250, 8000, 900], [25, 937]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 6', [2000, 4999.5, 500], [18, 1640]], ['generated mix 14', [4999, 1999.6, 1200], [12, 4399]]], [['generated mix 27', [1250, 5000, 900], [25, 937]], ['generated mix 50', [1025, 2000, 500], [18, 840]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['generated mix 9', [1000, 500, 900], [12, 900]], ['generated mix 17', [1250, 8000, 900], [25, 937]]], [['generated mix 64', [4999, 5000, 900], [25, 3749]], ['generated mix 30', [1250, 8000, 500], [25, 937]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 20', [4999, 5000, 500], [25, 3749]], ['generated mix 28', [1333, 2000, 1200], [18, 1200]]], [['generated mix 5', [4999, 500, 0], [12, 4399]], ['generated mix 17', [1250, 8000, 900], [25, 937]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum applies', [1000, 6000, 900], [25, 900]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 33', [1025, 1999.6, 500], [12, 902]], ['generated mix 41', [1025, 499.99, 0], [0, 1025]]], [['generated mix 29', [1333, 1999.6, 0], [12, 1173]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 43', [1333, 499.99, 500], [0, 1333]], ['generated mix 51', [1025, 2000, 900], [18, 900]], ['generated mix 59', [1333, 100, 1200], [0, 1333]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| half cent discount | [18, 841] | [18, 840] | Failed |
| generated mix 15 | [25, 938] | [25, 937] | Failed |
| tier edge | [18, 820] | [18, 820] | Passed |
| top tier | [25, 750] | [25, 750] | Passed |
| minimum capped by list | [25, 700] | [25, 700] | Passed |
| just under tier | [12, 880] | [12, 880] | Passed |
| generated mix 6 | [18, 1640] | [18, 1640] | Passed |
| generated mix 14 | [12, 4399] | [12, 4399] | Passed |
SHA-256 / 7df39373a3c1becbd3ac02e52df76cc6cdc5a4a6ece184a3ad04363ac81d0132
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(list_rate, spend, min_charge):
pct = 0
for limit, p in ((5000, 25), (2000, 18), (500, 12)):
if spend >= limit:
pct = p
break
disc = (list_rate * pct + 50) // 100
net = list_rate - disc
floor_amt = min(min_charge, list_rate)
return [pct, max(net, floor_amt)]
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['half cent discount', [1025, 2000, 500], [18, 840]], ['generated mix 15', [1250, 8000, 900], [25, 937]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 6', [2000, 4999.5, 500], [18, 1640]], ['generated mix 14', [4999, 1999.6, 1200], [12, 4399]]], [['generated mix 27', [1250, 5000, 900], [25, 937]], ['generated mix 50', [1025, 2000, 500], [18, 840]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['generated mix 9', [1000, 500, 900], [12, 900]], ['generated mix 17', [1250, 8000, 900], [25, 937]]], [['generated mix 64', [4999, 5000, 900], [25, 3749]], ['generated mix 30', [1250, 8000, 500], [25, 937]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 20', [4999, 5000, 500], [25, 3749]], ['generated mix 28', [1333, 2000, 1200], [18, 1200]]], [['generated mix 5', [4999, 500, 0], [12, 4399]], ['generated mix 17', [1250, 8000, 900], [25, 937]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum applies', [1000, 6000, 900], [25, 900]], ['no discount', [1000, 100, 500], [0, 1000]], ['just under tier', [1000, 1999.6, 500], [12, 880]], ['generated mix 33', [1025, 1999.6, 500], [12, 902]], ['generated mix 41', [1025, 499.99, 0], [0, 1025]]], [['generated mix 29', [1333, 1999.6, 0], [12, 1173]], ['half cent discount', [1025, 2000, 500], [18, 840]], ['tier edge', [1000, 2000, 500], [18, 820]], ['top tier', [1000, 6000, 500], [25, 750]], ['minimum capped by list', [700, 6000, 900], [25, 700]], ['generated mix 43', [1333, 499.99, 500], [0, 1333]], ['generated mix 51', [1025, 2000, 900], [18, 900]], ['generated mix 59', [1333, 100, 1200], [0, 1333]]]]
for label, args, expected in fixtures[N-1]:
check(label, solve(*args), expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| half cent discount | [18, 840] | [18, 840] | Passed |
| generated mix 15 | [25, 937] | [25, 937] | Passed |
| tier edge | [18, 820] | [18, 820] | Passed |
| top tier | [25, 750] | [25, 750] | Passed |
| minimum capped by list | [25, 700] | [25, 700] | Passed |
| just under tier | [12, 880] | [12, 880] | Passed |
| generated mix 6 | [18, 1640] | [18, 1640] | Passed |
| generated mix 14 | [12, 4399] | [12, 4399] | Passed |
SHA-256 / cd516325bca7da5cacf60d6814ac72ffd0fba0481191ad191fa3da3601838e5b
Verification & scope
Stipulated tiers; no earned incentive periods. 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:52:15.876577+00:00.
Case digest / 5eb14d22c8d24990b97a2ac664b1f87d4ab9f29c399a5376b9fb5b959113dc95