{"abstract":"Order lines are short-picked without an exception when the remainder cannot be expressed in allowed units.","category":"Warehouse slotting and bin packing","checks":8,"contract":"qty eaches; pack [eaches per inner, per case, per pallet] with 0 meaning the level does not exist; allowed unit codes for the pick location. Greedy from largest allowed defined unit: PAL, CS, IP, EA. Return [[unit, count]] for nonzero counts in that order, then [\"UNPICKABLE\", eaches] if a remainder cannot be expressed.","contract_signature":"qty, pack, allowed","evaluation_group":"w2-warehouse-slotting-uom-breakdown","failed_approach":"Reporting qty minus remainder states the picked amount, not the unpickable one.","family":"w2-warehouse-slotting-uom-breakdown-unpickable-remainder","id":"FA-95266","implementations":{"attempt":{"sha256":"2037f47247d6844aaa7ade19b7b73a331d5be71ae39a4eb366f020772081bbe6","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(qty, pack, allowed):\n    levels = [('PAL', pack[2]), ('CS', pack[1]), ('IP', pack[0]), ('EA', 1)]\n    rem = qty\n    out = []\n    for unit, size in levels:\n        if unit not in allowed or size <= 0:\n            continue\n        n = rem // size\n        if n:\n            out.append([unit, n])\n            rem -= n * size\n    if rem:\n        out.append(['UNPICKABLE', qty - rem])\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['generated mix 8', [1000, [0, 48, 0], ['CS', 'IP']], [['CS', 20], ['UNPICKABLE', 40]]]], [['generated mix 14', [50, [0, 48, 480], ['PAL', 'CS', 'IP']], [['CS', 1], ['UNPICKABLE', 2]]], ['generated mix 13', [13, [4, 24, 480], ['PAL', 'IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['generated mix 9', [250, [6, 48, 480], ['PAL', 'CS']], [['CS', 5], ['UNPICKABLE', 10]]], ['generated mix 19', [500, [0, 48, 480], ['PAL', 'CS', 'EA']], [['PAL', 1], ['EA', 20]]]], [['generated mix 62', [500, [6, 12, 240], ['PAL', 'CS']], [['PAL', 2], ['CS', 1], ['UNPICKABLE', 8]]], ['generated mix 44', [1000, [0, 12, 240], ['CS', 'IP']], [['CS', 83], ['UNPICKABLE', 4]]], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['generated mix 20', [0, [6, 12, 0], ['PAL', 'CS', 'IP']], []], ['generated mix 28', [50, [4, 48, 0], ['PAL', 'CS', 'IP', 'EA']], [['CS', 1], ['EA', 2]]]], [['generated mix 7', [3, [4, 48, 480], ['PAL', 'CS', 'IP']], [['UNPICKABLE', 3]]], ['generated mix 65', [500, [4, 12, 240], ['PAL', 'CS']], [['PAL', 2], ['CS', 1], ['UNPICKABLE', 8]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['generated mix 32', [25, [4, 24, 240], ['PAL', 'CS', 'EA']], [['CS', 1], ['EA', 1]]], ['generated mix 40', [3, [4, 48, 480], ['IP']], [['UNPICKABLE', 3]]]], [['generated mix 27', [25, [4, 48, 960], ['IP']], [['IP', 6], ['UNPICKABLE', 1]]], ['generated mix 7', [3, [4, 48, 480], ['PAL', 'CS', 'IP']], [['UNPICKABLE', 3]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['generated mix 44', [1000, [0, 12, 240], ['CS', 'IP']], [['CS', 83], ['UNPICKABLE', 4]]], ['generated mix 52', [50, [4, 48, 0], ['EA']], [['EA', 50]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"},"broken":{"sha256":"3790e50855154a93d5c248be49908fca4b8f74cfea992d9a3bee140f00f870e2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(qty, pack, allowed):\n    levels = [('PAL', pack[2]), ('CS', pack[1]), ('IP', pack[0]), ('EA', 1)]\n    rem = qty\n    out = []\n    for unit, size in levels:\n        if unit not in allowed or size <= 0:\n            continue\n        n = rem // size\n        if n:\n            out.append([unit, n])\n            rem -= n * size\n    return out\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['generated mix 8', [1000, [0, 48, 0], ['CS', 'IP']], [['CS', 20], ['UNPICKABLE', 40]]]], [['generated mix 14', [50, [0, 48, 480], ['PAL', 'CS', 'IP']], [['CS', 1], ['UNPICKABLE', 2]]], ['generated mix 13', [13, [4, 24, 480], ['PAL', 'IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['generated mix 9', [250, [6, 48, 480], ['PAL', 'CS']], [['CS', 5], ['UNPICKABLE', 10]]], ['generated mix 19', [500, [0, 48, 480], ['PAL', 'CS', 'EA']], [['PAL', 1], ['EA', 20]]]], [['generated mix 62', [500, [6, 12, 240], ['PAL', 'CS']], [['PAL', 2], ['CS', 1], ['UNPICKABLE', 8]]], ['generated mix 44', [1000, [0, 12, 240], ['CS', 'IP']], [['CS', 83], ['UNPICKABLE', 4]]], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['undefined inner', [13, [0, 12, 0], ['IP', 'EA']], [['EA', 13]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['generated mix 20', [0, [6, 12, 0], ['PAL', 'CS', 'IP']], []], ['generated mix 28', [50, [4, 48, 0], ['PAL', 'CS', 'IP', 'EA']], [['CS', 1], ['EA', 2]]]], [['generated mix 7', [3, [4, 48, 480], ['PAL', 'CS', 'IP']], [['UNPICKABLE', 3]]], ['generated mix 65', [500, [4, 12, 240], ['PAL', 'CS']], [['PAL', 2], ['CS', 1], ['UNPICKABLE', 8]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['pallet not allowed', [500, [6, 24, 240], ['CS', 'EA']], [['CS', 20], ['EA', 20]]], ['case and each', [50, [6, 24, 0], ['CS', 'EA']], [['CS', 2], ['EA', 2]]], ['generated mix 32', [25, [4, 24, 240], ['PAL', 'CS', 'EA']], [['CS', 1], ['EA', 1]]], ['generated mix 40', [3, [4, 48, 480], ['IP']], [['UNPICKABLE', 3]]]], [['generated mix 27', [25, [4, 48, 960], ['IP']], [['IP', 6], ['UNPICKABLE', 1]]], ['generated mix 7', [3, [4, 48, 480], ['PAL', 'CS', 'IP']], [['UNPICKABLE', 3]]], ['inner only', [13, [4, 12, 0], ['IP']], [['IP', 3], ['UNPICKABLE', 1]]], ['full breakdown', [251, [6, 24, 240], ['PAL', 'CS', 'IP', 'EA']], [['PAL', 1], ['IP', 1], ['EA', 5]]], ['no each picking', [50, [6, 24, 0], ['CS', 'IP']], [['CS', 2], ['UNPICKABLE', 2]]], ['zero qty', [0, [6, 24, 240], ['EA']], []], ['generated mix 44', [1000, [0, 12, 240], ['CS', 'IP']], [['CS', 83], ['UNPICKABLE', 4]]], ['generated mix 52', [50, [4, 48, 0], ['EA']], [['EA', 50]]]]]\nfor label, args, expected in fixtures[N-1]:\n    check(label, solve(*args), expected)\nprint(json.dumps({\"observations\": observations, \"passed\": all(x[\"passed\"] for x in observations)}, ensure_ascii=False))\nraise SystemExit(0 if all(x[\"passed\"] for x in observations) else 1)\n"}},"limitations":"Greedy stipulated conversion with integer pack sizes. 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.","method":"Deterministic executable model with adversarial boundary fixtures.","provenance":{"created_by":"Failure Map","dependencies":"Python standard library","family":"w2-warehouse-slotting-uom-breakdown-unpickable-remainder","generated_at":"2026-09-29T14:52:12.071704+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Pick tasks are expressed in the largest unit a location can present.","root_cause":"The leftover eaches after the greedy pass are discarded.","sha256":"65e2e248189548330aec8bf9305385f00e8a3c95cb41460b22c8490aea7a72f2","title":"UOM breakdown: remainder silently dropped · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verified":true,"visibility":"public","verification":{"attempt":{"elapsed_ms":41.462,"exit_code":1,"observations":[{"actual":[["CS",2],["UNPICKABLE",48]],"check":"no each picking","expected":[["CS",2],["UNPICKABLE",2]],"passed":false},{"actual":[["IP",3],["UNPICKABLE",12]],"check":"inner only","expected":[["IP",3],["UNPICKABLE",1]],"passed":false},{"actual":[["PAL",1],["IP",1],["EA",5]],"check":"full breakdown","expected":[["PAL",1],["IP",1],["EA",5]],"passed":true},{"actual":[["EA",13]],"check":"undefined inner","expected":[["EA",13]],"passed":true},{"actual":[["CS",20],["EA",20]],"check":"pallet not allowed","expected":[["CS",20],["EA",20]],"passed":true},{"actual":[["CS",2],["EA",2]],"check":"case and each","expected":[["CS",2],["EA",2]],"passed":true},{"actual":[],"check":"zero qty","expected":[],"passed":true},{"actual":[["CS",20],["UNPICKABLE",960]],"check":"generated mix 8","expected":[["CS",20],["UNPICKABLE",40]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"no each picking\", \"actual\": [[\"CS\", 2], [\"UNPICKABLE\", 48]], \"expected\": [[\"CS\", 2], [\"UNPICKABLE\", 2]], \"passed\": false}, {\"check\": \"inner only\", \"actual\": [[\"IP\", 3], [\"UNPICKABLE\", 12]], \"expected\": [[\"IP\", 3], [\"UNPICKABLE\", 1]], \"passed\": false}, {\"check\": \"full breakdown\", \"actual\": [[\"PAL\", 1], [\"IP\", 1], [\"EA\", 5]], \"expected\": [[\"PAL\", 1], [\"IP\", 1], [\"EA\", 5]], \"passed\": true}, {\"check\": \"undefined inner\", \"actual\": [[\"EA\", 13]], \"expected\": [[\"EA\", 13]], \"passed\": true}, {\"check\": \"pallet not allowed\", \"actual\": [[\"CS\", 20], [\"EA\", 20]], \"expected\": [[\"CS\", 20], [\"EA\", 20]], \"passed\": true}, {\"check\": \"case and each\", \"actual\": [[\"CS\", 2], [\"EA\", 2]], \"expected\": [[\"CS\", 2], [\"EA\", 2]], \"passed\": true}, {\"check\": \"zero qty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"generated mix 8\", \"actual\": [[\"CS\", 20], [\"UNPICKABLE\", 960]], \"expected\": [[\"CS\", 20], [\"UNPICKABLE\", 40]], \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":37.891,"exit_code":1,"observations":[{"actual":[["CS",2]],"check":"no each picking","expected":[["CS",2],["UNPICKABLE",2]],"passed":false},{"actual":[["IP",3]],"check":"inner only","expected":[["IP",3],["UNPICKABLE",1]],"passed":false},{"actual":[["PAL",1],["IP",1],["EA",5]],"check":"full breakdown","expected":[["PAL",1],["IP",1],["EA",5]],"passed":true},{"actual":[["EA",13]],"check":"undefined inner","expected":[["EA",13]],"passed":true},{"actual":[["CS",20],["EA",20]],"check":"pallet not allowed","expected":[["CS",20],["EA",20]],"passed":true},{"actual":[["CS",2],["EA",2]],"check":"case and each","expected":[["CS",2],["EA",2]],"passed":true},{"actual":[],"check":"zero qty","expected":[],"passed":true},{"actual":[["CS",20]],"check":"generated mix 8","expected":[["CS",20],["UNPICKABLE",40]],"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"no each picking\", \"actual\": [[\"CS\", 2]], \"expected\": [[\"CS\", 2], [\"UNPICKABLE\", 2]], \"passed\": false}, {\"check\": \"inner only\", \"actual\": [[\"IP\", 3]], \"expected\": [[\"IP\", 3], [\"UNPICKABLE\", 1]], \"passed\": false}, {\"check\": \"full breakdown\", \"actual\": [[\"PAL\", 1], [\"IP\", 1], [\"EA\", 5]], \"expected\": [[\"PAL\", 1], [\"IP\", 1], [\"EA\", 5]], \"passed\": true}, {\"check\": \"undefined inner\", \"actual\": [[\"EA\", 13]], \"expected\": [[\"EA\", 13]], \"passed\": true}, {\"check\": \"pallet not allowed\", \"actual\": [[\"CS\", 20], [\"EA\", 20]], \"expected\": [[\"CS\", 20], [\"EA\", 20]], \"passed\": true}, {\"check\": \"case and each\", \"actual\": [[\"CS\", 2], [\"EA\", 2]], \"expected\": [[\"CS\", 2], [\"EA\", 2]], \"passed\": true}, {\"check\": \"zero qty\", \"actual\": [], \"expected\": [], \"passed\": true}, {\"check\": \"generated mix 8\", \"actual\": [[\"CS\", 20]], \"expected\": [[\"CS\", 20], [\"UNPICKABLE\", 40]], \"passed\": false}], \"passed\": false}\n"}},"member_only":{"stages":["fixed"],"fields":["implementations.fixed","verification.fixed","harness","repair"],"note":"The verified repair, its recorded checks, the repair description, and the scoring harness are available to members."}}