FA-60181 / Inventory cost layering / Open access
Negative inventory provisional costing: backorder queue order · case 01
The newest backorder is settled first, attaching the wrong provisional cost to the true-up.
ROOT CAUSE
Settlement starts from the tail of the backorder queue.
VERIFIED REPAIR
Settle the oldest backorder first.
Unsuccessful approach: Settling the highest provisional cost first only coincides when prices rose monotonically.
Case contract
Events: receipts ["recv",qty,cost] and issues ["issue",qty]. Issues draw FIFO layers; any shortfall is issued provisionally at the last receipt cost (default_cost before any receipt) and queued as a backorder. A receipt first settles backorders oldest first, returning the true-up qty*(receipt cost - provisional cost); only the remainder becomes a layer. Return {results, layers, backorder}.
Why this case matters
Inventory valuation and cost-of-goods decisions depend on this rule.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
layers = []
neg = []
last = x['default_cost']
out = []
for ev in x['events']:
if ev[0] == 'recv':
q, c = ev[1], ev[2]
adj = 0
while q > 0 and neg:
k = -1
t = min(q, neg[k][0])
adj += t * (c - neg[k][1])
neg[k][0] -= t
q -= t
if neg[k][0] == 0:
neg.pop(k)
if q > 0:
layers.append([q, c])
last = c
out.append(adj)
else:
q = ev[1]
cost = 0
while q > 0 and layers:
t = min(q, layers[0][0])
cost += t * layers[0][1]
layers[0][0] -= t
q -= t
if layers[0][0] == 0:
layers.pop(0)
if q > 0:
neg.append([q, last])
cost += q * last
out.append(cost)
return {'results': out, 'layers': layers, 'backorder': neg}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 46]]}, {'results': [0, 200, 18], 'layers': [[3, 46]], 'backorder': []}], ['never received', {'default_cost': 31, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [62, 8], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 26]]}, {'results': [0, 40, 10, 90, -12], 'layers': [[1, 26]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 2], ['recv', 3, 50]]}, {'results': [0, 120, -10], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 1], ['issue', 1]]}, {'results': [7, 7], 'layers': [], 'backorder': [[1, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 41], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 21, 82, -1], 'layers': [], 'backorder': [[1, 41]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 47]]}, {'results': [0, 200, 21], 'layers': [[3, 47]], 'backorder': []}], ['never received', {'default_cost': 32, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [64, 6], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 27]]}, {'results': [0, 40, 10, 90, -9], 'layers': [[1, 27]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 3], ['recv', 4, 50]]}, {'results': [0, 180, -20], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 2], ['issue', 1]]}, {'results': [14, 7], 'layers': [], 'backorder': [[2, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 42], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 22, 84, -2], 'layers': [], 'backorder': [[1, 42]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 48]]}, {'results': [0, 200, 24], 'layers': [[3, 48]], 'backorder': []}], ['never received', {'default_cost': 33, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [66, 4], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 28]]}, {'results': [0, 40, 10, 90, -6], 'layers': [[1, 28]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 4], ['recv', 5, 50]]}, {'results': [0, 240, -30], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 3], ['issue', 1]]}, {'results': [21, 7], 'layers': [], 'backorder': [[3, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 43], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 23, 86, -3], 'layers': [], 'backorder': [[1, 43]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 49]]}, {'results': [0, 200, 27], 'layers': [[3, 49]], 'backorder': []}], ['never received', {'default_cost': 34, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [68, 2], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 29]]}, {'results': [0, 40, 10, 90, -3], 'layers': [[1, 29]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 300, -40], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 4], ['issue', 1]]}, {'results': [28, 7], 'layers': [], 'backorder': [[4, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 44], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 24, 88, -4], 'layers': [], 'backorder': [[1, 44]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 200, 30], 'layers': [[3, 50]], 'backorder': []}], ['never received', {'default_cost': 35, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [70, 0], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 30]]}, {'results': [0, 40, 10, 90, 0], 'layers': [[1, 30]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 6], ['recv', 7, 50]]}, {'results': [0, 360, -50], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 5], ['issue', 1]]}, {'results': [35, 7], 'layers': [], 'backorder': [[5, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 45], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 25, 90, -5], 'layers': [], 'backorder': [[1, 45]]}]]]
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 |
|---|---|---|---|
| backorder settled | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | Passed |
| never received | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | Passed |
| partial settle | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | Passed |
| two backorders | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | Passed |
| no negative | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | Passed |
| cheaper receipt | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | Passed |
| left negative | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | Passed |
| cheap backorder first | {'backorder': [[1, 20]], 'layers': [], 'results': [0, 60, 21, 82, -22]} | {'backorder': [[1, 41]], 'layers': [], 'results': [0, 60, 21, 82, -1]} | Failed |
SHA-256 / 47a38a0b95a6c9fb0a2ca65c61bb2a80144b67a78ca32fe26c7ffa293b486ac0
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
layers = []
neg = []
last = x['default_cost']
out = []
for ev in x['events']:
if ev[0] == 'recv':
q, c = ev[1], ev[2]
adj = 0
while q > 0 and neg:
k = max(range(len(neg)), key=lambda i: neg[i][1])
t = min(q, neg[k][0])
adj += t * (c - neg[k][1])
neg[k][0] -= t
q -= t
if neg[k][0] == 0:
neg.pop(k)
if q > 0:
layers.append([q, c])
last = c
out.append(adj)
else:
q = ev[1]
cost = 0
while q > 0 and layers:
t = min(q, layers[0][0])
cost += t * layers[0][1]
layers[0][0] -= t
q -= t
if layers[0][0] == 0:
layers.pop(0)
if q > 0:
neg.append([q, last])
cost += q * last
out.append(cost)
return {'results': out, 'layers': layers, 'backorder': neg}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 46]]}, {'results': [0, 200, 18], 'layers': [[3, 46]], 'backorder': []}], ['never received', {'default_cost': 31, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [62, 8], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 26]]}, {'results': [0, 40, 10, 90, -12], 'layers': [[1, 26]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 2], ['recv', 3, 50]]}, {'results': [0, 120, -10], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 1], ['issue', 1]]}, {'results': [7, 7], 'layers': [], 'backorder': [[1, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 41], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 21, 82, -1], 'layers': [], 'backorder': [[1, 41]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 47]]}, {'results': [0, 200, 21], 'layers': [[3, 47]], 'backorder': []}], ['never received', {'default_cost': 32, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [64, 6], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 27]]}, {'results': [0, 40, 10, 90, -9], 'layers': [[1, 27]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 3], ['recv', 4, 50]]}, {'results': [0, 180, -20], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 2], ['issue', 1]]}, {'results': [14, 7], 'layers': [], 'backorder': [[2, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 42], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 22, 84, -2], 'layers': [], 'backorder': [[1, 42]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 48]]}, {'results': [0, 200, 24], 'layers': [[3, 48]], 'backorder': []}], ['never received', {'default_cost': 33, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [66, 4], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 28]]}, {'results': [0, 40, 10, 90, -6], 'layers': [[1, 28]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 4], ['recv', 5, 50]]}, {'results': [0, 240, -30], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 3], ['issue', 1]]}, {'results': [21, 7], 'layers': [], 'backorder': [[3, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 43], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 23, 86, -3], 'layers': [], 'backorder': [[1, 43]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 49]]}, {'results': [0, 200, 27], 'layers': [[3, 49]], 'backorder': []}], ['never received', {'default_cost': 34, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [68, 2], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 29]]}, {'results': [0, 40, 10, 90, -3], 'layers': [[1, 29]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 300, -40], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 4], ['issue', 1]]}, {'results': [28, 7], 'layers': [], 'backorder': [[4, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 44], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 24, 88, -4], 'layers': [], 'backorder': [[1, 44]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 200, 30], 'layers': [[3, 50]], 'backorder': []}], ['never received', {'default_cost': 35, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [70, 0], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 30]]}, {'results': [0, 40, 10, 90, 0], 'layers': [[1, 30]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 6], ['recv', 7, 50]]}, {'results': [0, 360, -50], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 5], ['issue', 1]]}, {'results': [35, 7], 'layers': [], 'backorder': [[5, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 45], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 25, 90, -5], 'layers': [], 'backorder': [[1, 45]]}]]]
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 |
|---|---|---|---|
| backorder settled | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | Passed |
| never received | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | Passed |
| partial settle | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | Passed |
| two backorders | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | Passed |
| no negative | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | Passed |
| cheaper receipt | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | Passed |
| left negative | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | Passed |
| cheap backorder first | {'backorder': [[1, 20]], 'layers': [], 'results': [0, 60, 21, 82, -22]} | {'backorder': [[1, 41]], 'layers': [], 'results': [0, 60, 21, 82, -1]} | Failed |
SHA-256 / cfc03ea8b9e42fd97ab9f87cc82d494721104a8fd3f303f7d76d97ff55250539
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
layers = []
neg = []
last = x['default_cost']
out = []
for ev in x['events']:
if ev[0] == 'recv':
q, c = ev[1], ev[2]
adj = 0
while q > 0 and neg:
k = 0
t = min(q, neg[k][0])
adj += t * (c - neg[k][1])
neg[k][0] -= t
q -= t
if neg[k][0] == 0:
neg.pop(k)
if q > 0:
layers.append([q, c])
last = c
out.append(adj)
else:
q = ev[1]
cost = 0
while q > 0 and layers:
t = min(q, layers[0][0])
cost += t * layers[0][1]
layers[0][0] -= t
q -= t
if layers[0][0] == 0:
layers.pop(0)
if q > 0:
neg.append([q, last])
cost += q * last
out.append(cost)
return {'results': out, 'layers': layers, 'backorder': neg}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 46]]}, {'results': [0, 200, 18], 'layers': [[3, 46]], 'backorder': []}], ['never received', {'default_cost': 31, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [62, 8], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 26]]}, {'results': [0, 40, 10, 90, -12], 'layers': [[1, 26]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 2], ['recv', 3, 50]]}, {'results': [0, 120, -10], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 1], ['issue', 1]]}, {'results': [7, 7], 'layers': [], 'backorder': [[1, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 41], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 21, 82, -1], 'layers': [], 'backorder': [[1, 41]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 47]]}, {'results': [0, 200, 21], 'layers': [[3, 47]], 'backorder': []}], ['never received', {'default_cost': 32, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [64, 6], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 27]]}, {'results': [0, 40, 10, 90, -9], 'layers': [[1, 27]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 3], ['recv', 4, 50]]}, {'results': [0, 180, -20], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 2], ['issue', 1]]}, {'results': [14, 7], 'layers': [], 'backorder': [[2, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 42], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 22, 84, -2], 'layers': [], 'backorder': [[1, 42]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 48]]}, {'results': [0, 200, 24], 'layers': [[3, 48]], 'backorder': []}], ['never received', {'default_cost': 33, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [66, 4], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 28]]}, {'results': [0, 40, 10, 90, -6], 'layers': [[1, 28]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 4], ['recv', 5, 50]]}, {'results': [0, 240, -30], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 3], ['issue', 1]]}, {'results': [21, 7], 'layers': [], 'backorder': [[3, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 43], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 23, 86, -3], 'layers': [], 'backorder': [[1, 43]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 49]]}, {'results': [0, 200, 27], 'layers': [[3, 49]], 'backorder': []}], ['never received', {'default_cost': 34, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [68, 2], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 29]]}, {'results': [0, 40, 10, 90, -3], 'layers': [[1, 29]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 300, -40], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 4], ['issue', 1]]}, {'results': [28, 7], 'layers': [], 'backorder': [[4, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 44], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 24, 88, -4], 'layers': [], 'backorder': [[1, 44]]}]], [['backorder settled', {'default_cost': 50, 'events': [['recv', 2, 40], ['issue', 5], ['recv', 6, 50]]}, {'results': [0, 200, 30], 'layers': [[3, 50]], 'backorder': []}], ['never received', {'default_cost': 35, 'events': [['issue', 2], ['recv', 3, 35]]}, {'results': [70, 0], 'layers': [[1, 35]], 'backorder': []}], ['partial settle', {'default_cost': 10, 'events': [['recv', 1, 12], ['issue', 4], ['recv', 2, 15], ['issue', 1], ['recv', 5, 11]]}, {'results': [0, 48, 6, 15, -5], 'layers': [[3, 11]], 'backorder': []}], ['two backorders', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 2], ['recv', 1, 30], ['issue', 3], ['recv', 4, 30]]}, {'results': [0, 40, 10, 90, 0], 'layers': [[1, 30]], 'backorder': []}], ['no negative', {'default_cost': 10, 'events': [['recv', 5, 8], ['issue', 3], ['recv', 1, 9]]}, {'results': [0, 24, 0], 'layers': [[2, 8], [1, 9]], 'backorder': []}], ['cheaper receipt', {'default_cost': 99, 'events': [['recv', 1, 60], ['issue', 6], ['recv', 7, 50]]}, {'results': [0, 360, -50], 'layers': [[2, 50]], 'backorder': []}], ['left negative', {'default_cost': 7, 'events': [['issue', 5], ['issue', 1]]}, {'results': [35, 7], 'layers': [], 'backorder': [[5, 7], [1, 7]]}], ['cheap backorder first', {'default_cost': 10, 'events': [['recv', 1, 20], ['issue', 3], ['recv', 1, 45], ['issue', 2], ['recv', 2, 30]]}, {'results': [0, 60, 25, 90, -5], 'layers': [], 'backorder': [[1, 45]]}]]]
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 |
|---|---|---|---|
| backorder settled | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | {'backorder': [], 'layers': [[3, 46]], 'results': [0, 200, 18]} | Passed |
| never received | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | {'backorder': [], 'layers': [[1, 35]], 'results': [62, 8]} | Passed |
| partial settle | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | {'backorder': [], 'layers': [[3, 11]], 'results': [0, 48, 6, 15, -5]} | Passed |
| two backorders | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | {'backorder': [], 'layers': [[1, 26]], 'results': [0, 40, 10, 90, -12]} | Passed |
| no negative | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | {'backorder': [], 'layers': [[2, 8], [1, 9]], 'results': [0, 24, 0]} | Passed |
| cheaper receipt | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | {'backorder': [], 'layers': [[2, 50]], 'results': [0, 120, -10]} | Passed |
| left negative | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | {'backorder': [[1, 7], [1, 7]], 'layers': [], 'results': [7, 7]} | Passed |
| cheap backorder first | {'backorder': [[1, 41]], 'layers': [], 'results': [0, 60, 21, 82, -1]} | {'backorder': [[1, 41]], 'layers': [], 'results': [0, 60, 21, 82, -1]} | Passed |
SHA-256 / c4c729af5249beebee18e841dcf41848a385457c69a3b83b761f4d4c211b3c0e
Verification & scope
Stipulated bounded teaching model with explicit toy rules; not an accounting-standard implementation. 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:43.274263+00:00.
Case digest / 14d6719cc7571b59b1cf4353332bdcb8524b072c9ffdc755c9508e2685f2ec36