FAILURE MAP
← Case archive

FA-60071 / Inventory cost layering / Open access

First-expired-first-out lot picking: pick sequence key · case 01

Pickers are sent to lots in lot-number order, leaving short-dated lots to expire.

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

ROOT CAUSE

Eligible lots are sorted by lot id only.

VERIFIED REPAIR

Sort eligible lots by expiry day, then lot id.

Unsuccessful approach: Sorting smallest lots first clears bins but ignores expiry.

Case contract

Input {lots:[[lot,qty,expiry_day,unit_cost]], today, order_qty, min_shelf}. A lot is eligible when expiry_day - today >= min_shelf. Eligible lots are picked by earliest expiry, ties by lot id ascending. If eligible stock < order_qty return {"error":"insufficient","available":eligible qty}. Return {picks:[[lot,qty]], cost}.

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):
    today = x['today']
    elig = [l for l in x['lots'] if l[2] - today >= x['min_shelf']]
    avail = sum(l[1] for l in elig)
    if avail < x['order_qty']:
        return {'error': 'insufficient', 'available': avail}
    elig.sort(key=lambda l: l[0])
    need = x['order_qty']
    picks = []
    cost = 0
    for lot, qty, exp, unit in elig:
        if need == 0:
            break
        take = min(need, qty)
        picks.append([lot, take])
        cost += take * unit
        need -= take
    return {'picks': picks, 'cost': cost}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 106, 10], ['B', 4, 200, 11]], 'today': 101, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 6, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 6, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 381, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 107, 10], ['B', 4, 200, 11]], 'today': 102, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 7, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 7, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 382, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 6, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 1]], 'cost': 70}], ['shelf boundary', {'lots': [['A', 4, 108, 10], ['B', 4, 200, 11]], 'today': 103, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 8, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 8, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 383, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 109, 10], ['B', 4, 200, 11]], 'today': 104, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 9, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 9, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 384, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 110, 10], ['B', 4, 200, 11]], 'today': 105, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 10, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 10, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 385, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]]]
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 fixtureActualExpectedOutcome
earliest expiry{'cost': 78, 'picks': [['L1', 5], ['L2', 2]]}{'cost': 80, 'picks': [['L1', 5], ['L3', 2]]}Failed
shelf boundary{'cost': 30, 'picks': [['A', 3]]}{'cost': 30, 'picks': [['A', 3]]}Passed
insufficient{'available': 4, 'error': 'insufficient'}{'available': 4, 'error': 'insufficient'}Passed
tie by lot{'cost': 20, 'picks': [['A1', 2], ['M5', 1]]}{'cost': 22, 'picks': [['A1', 2], ['Z9', 1]]}Failed
expired skipped{'cost': 8, 'picks': [['NEW', 4]]}{'cost': 8, 'picks': [['NEW', 4]]}Passed
zero order{'cost': 0, 'picks': []}{'cost': 0, 'picks': []}Passed
big lots small order{'cost': 8, 'picks': [['A4', 2]]}{'cost': 9, 'picks': [['C2', 1], ['A4', 1]]}Failed

SHA-256 / 7b9f71d898db9bbe8dba03a1ce17e2a0664bce34b8d8fdc7a6bd8cb27e9b1d97

2 / The unsuccessful fix

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

N = 1
observations = []
def solve(x):
    today = x['today']
    elig = [l for l in x['lots'] if l[2] - today >= x['min_shelf']]
    avail = sum(l[1] for l in elig)
    if avail < x['order_qty']:
        return {'error': 'insufficient', 'available': avail}
    elig.sort(key=lambda l: (l[1], l[0]))
    need = x['order_qty']
    picks = []
    cost = 0
    for lot, qty, exp, unit in elig:
        if need == 0:
            break
        take = min(need, qty)
        picks.append([lot, take])
        cost += take * unit
        need -= take
    return {'picks': picks, 'cost': cost}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 106, 10], ['B', 4, 200, 11]], 'today': 101, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 6, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 6, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 381, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 107, 10], ['B', 4, 200, 11]], 'today': 102, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 7, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 7, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 382, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 6, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 1]], 'cost': 70}], ['shelf boundary', {'lots': [['A', 4, 108, 10], ['B', 4, 200, 11]], 'today': 103, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 8, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 8, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 383, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 109, 10], ['B', 4, 200, 11]], 'today': 104, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 9, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 9, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 384, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 110, 10], ['B', 4, 200, 11]], 'today': 105, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 10, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 10, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 385, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]]]
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 fixtureActualExpectedOutcome
earliest expiry{'cost': 78, 'picks': [['L1', 5], ['L2', 2]]}{'cost': 80, 'picks': [['L1', 5], ['L3', 2]]}Failed
shelf boundary{'cost': 30, 'picks': [['A', 3]]}{'cost': 30, 'picks': [['A', 3]]}Passed
insufficient{'available': 4, 'error': 'insufficient'}{'available': 4, 'error': 'insufficient'}Passed
tie by lot{'cost': 22, 'picks': [['A1', 2], ['Z9', 1]]}{'cost': 22, 'picks': [['A1', 2], ['Z9', 1]]}Passed
expired skipped{'cost': 8, 'picks': [['NEW', 4]]}{'cost': 8, 'picks': [['NEW', 4]]}Passed
zero order{'cost': 0, 'picks': []}{'cost': 0, 'picks': []}Passed
big lots small order{'cost': 9, 'picks': [['C2', 1], ['A4', 1]]}{'cost': 9, 'picks': [['C2', 1], ['A4', 1]]}Passed

SHA-256 / 9a9c5f48c64999eaba7e0cc9f19739b0c41142a725fb43c1f6bb71d753dff292

3 / The verified repair

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

N = 1
observations = []
def solve(x):
    today = x['today']
    elig = [l for l in x['lots'] if l[2] - today >= x['min_shelf']]
    avail = sum(l[1] for l in elig)
    if avail < x['order_qty']:
        return {'error': 'insufficient', 'available': avail}
    elig.sort(key=lambda l: (l[2], l[0]))
    need = x['order_qty']
    picks = []
    cost = 0
    for lot, qty, exp, unit in elig:
        if need == 0:
            break
        take = min(need, qty)
        picks.append([lot, take])
        cost += take * unit
        need -= take
    return {'picks': picks, 'cost': cost}
def check(label, actual, expected):
    observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 106, 10], ['B', 4, 200, 11]], 'today': 101, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 6, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 6, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 381, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 107, 10], ['B', 4, 200, 11]], 'today': 102, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 7, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 7, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 382, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 6, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 1]], 'cost': 70}], ['shelf boundary', {'lots': [['A', 4, 108, 10], ['B', 4, 200, 11]], 'today': 103, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 8, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 8, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 383, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 7, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 2]], 'cost': 80}], ['shelf boundary', {'lots': [['A', 4, 109, 10], ['B', 4, 200, 11]], 'today': 104, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 9, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 9, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 384, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]], [['earliest expiry', {'lots': [['L3', 5, 120, 10], ['L1', 5, 110, 12], ['L2', 5, 130, 9]], 'today': 100, 'order_qty': 8, 'min_shelf': 5}, {'picks': [['L1', 5], ['L3', 3]], 'cost': 90}], ['shelf boundary', {'lots': [['A', 4, 110, 10], ['B', 4, 200, 11]], 'today': 105, 'order_qty': 3, 'min_shelf': 5}, {'picks': [['A', 3]], 'cost': 30}], ['insufficient', {'lots': [['A', 4, 150, 10], ['B', 9, 101, 11]], 'today': 100, 'order_qty': 10, 'min_shelf': 10}, {'error': 'insufficient', 'available': 4}], ['tie by lot', {'lots': [['Z9', 2, 140, 8], ['A1', 2, 140, 7], ['M5', 9, 150, 6]], 'today': 100, 'order_qty': 3, 'min_shelf': 1}, {'picks': [['A1', 2], ['Z9', 1]], 'cost': 22}], ['expired skipped', {'lots': [['OLD', 50, 90, 1], ['NEW', 10, 300, 2]], 'today': 100, 'order_qty': 4, 'min_shelf': 0}, {'picks': [['NEW', 4]], 'cost': 8}], ['zero order', {'lots': [['A', 3, 150, 10]], 'today': 100, 'order_qty': 0, 'min_shelf': 0}, {'picks': [], 'cost': 0}], ['big lots small order', {'lots': [['B7', 100, 400, 3], ['C2', 1, 385, 5], ['A4', 2, 390, 4]], 'today': 100, 'order_qty': 2, 'min_shelf': 30}, {'picks': [['C2', 1], ['A4', 1]], 'cost': 9}]]]
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 fixtureActualExpectedOutcome
earliest expiry{'cost': 80, 'picks': [['L1', 5], ['L3', 2]]}{'cost': 80, 'picks': [['L1', 5], ['L3', 2]]}Passed
shelf boundary{'cost': 30, 'picks': [['A', 3]]}{'cost': 30, 'picks': [['A', 3]]}Passed
insufficient{'available': 4, 'error': 'insufficient'}{'available': 4, 'error': 'insufficient'}Passed
tie by lot{'cost': 22, 'picks': [['A1', 2], ['Z9', 1]]}{'cost': 22, 'picks': [['A1', 2], ['Z9', 1]]}Passed
expired skipped{'cost': 8, 'picks': [['NEW', 4]]}{'cost': 8, 'picks': [['NEW', 4]]}Passed
zero order{'cost': 0, 'picks': []}{'cost': 0, 'picks': []}Passed
big lots small order{'cost': 9, 'picks': [['C2', 1], ['A4', 1]]}{'cost': 9, 'picks': [['C2', 1], ['A4', 1]]}Passed

SHA-256 / d7112bdf7e7b95f8f1df07c32f6cb00cff5fcbfbb22ef62e301033369e533971

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

Case digest / 2ab05fa9f2f595f26c5830fe6fc71bbd72ab74c390e94d21c79676350ee469ce