{"abstract":"Returning an entire purchase layer is rejected.","category":"Double-entry ledger accounting","checks":7,"contract":"x = [['buy', qty, unit_cost] | ['sell', qty, unit_price] | ['purchase_return', qty, unit_cost]]. Layers are kept oldest first; a buy at the same cost as the newest layer merges into it. A sale consumes layers oldest first (COGS) and records revenue; a sale exceeding on-hand quantity is rejected whole. A purchase return removes qty from the newest layer at that cost holding at least qty, else it is rejected. Emptied layers are removed. Return {'cogs', 'revenue', 'inventory': sum qty*cost, 'layers', 'rejected': event indexes}.","evaluation_group":"w2-double-entry-ledger-accounting-fifo-perpetual-inventory","failed_approach":"Checking total stock instead of the layer lets returns drive a layer negative.","family":"w2-double-entry-ledger-accounting-fifo-perpetual-inventory-return-quantity-check","id":"FA-58106","implementations":{"attempt":{"sha256":"4f08aa857fd6e1dbdde509075b00df7c2221453e9e2b77ab8364fbcbcc22910d","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = []\n    cogs = revenue = 0\n    short = []\n    for i, ev in enumerate(x):\n        if ev[0] == 'buy':\n            if layers and layers[-1][1] == ev[2]:\n                layers[-1][0] += ev[1]\n            else:\n                layers.append([ev[1], ev[2]])\n        elif ev[0] == 'sell':\n            qty = ev[1]\n            if qty > sum(l[0] for l in layers):\n                short.append(i)\n                continue\n            revenue += qty * ev[2]\n            while qty:\n                head = layers[0]\n                take = min(qty, head[0])\n                cogs += take * head[1]\n                head[0] -= take\n                qty -= take\n                if head[0] == 0:\n                    layers.pop(0)\n        elif ev[0] == 'purchase_return':\n            match = [l for l in layers if l[1] == ev[2] and sum(k[0] for k in layers) >= ev[1]]\n            if not match:\n                short.append(i)\n                continue\n            match[-1][0] -= ev[1]\n            if match[-1][0] == 0:\n                layers.remove(match[-1])\n    inventory = sum(q * c for q, c in layers)\n    return {'cogs': cogs, 'revenue': revenue, 'inventory': inventory, 'layers': layers, 'rejected': short}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: return quantity check', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 10, 100], ['sell', 6, 250], ['buy', 2, 100], ['sell', 12, 250], ['buy', 5, 120], ['buy', 5, 100], ['purchase_return', 5, 120]], {'cogs': 640, 'revenue': 1500, 'inventory': 1300, 'layers': [[8, 100], [5, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 5, 150], ['sell', 3, 250], ['sell', 2, 250], ['buy', 10, 100], ['buy', 10, 120], ['purchase_return', 2, 100], ['purchase_return', 5, 100], ['buy', 10, 150], ['buy', 2, 120], ['purchase_return', 5, 100]], {'cogs': 750, 'revenue': 1250, 'inventory': 3240, 'layers': [[3, 100], [10, 120], [10, 150], [2, 120]], 'rejected': [9]}], ['control 1', [['sell', 3, 250], ['buy', 2, 120], ['purchase_return', 1, 100], ['buy', 5, 100], ['buy', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 980, 'layers': [[2, 120], [5, 100], [2, 120]], 'rejected': [0, 2]}], ['control 2', [['buy', 1, 120], ['sell', 12, 200], ['sell', 2, 250], ['sell', 2, 250]], {'cogs': 0, 'revenue': 0, 'inventory': 120, 'layers': [[1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 5, 100], ['sell', 3, 250], ['sell', 12, 200]], {'cogs': 300, 'revenue': 750, 'inventory': 200, 'layers': [[2, 100]], 'rejected': [2]}], ['control 4', [['buy', 10, 120], ['purchase_return', 1, 100], ['sell', 1, 200], ['purchase_return', 2, 100], ['sell', 2, 200], ['purchase_return', 1, 120], ['buy', 10, 120], ['buy', 5, 120]], {'cogs': 360, 'revenue': 600, 'inventory': 2520, 'layers': [[21, 120]], 'rejected': [1, 3]}], ['control 5', [['sell', 12, 250], ['sell', 12, 200], ['buy', 5, 100], ['sell', 12, 250], ['sell', 12, 200], ['purchase_return', 1, 100], ['sell', 3, 250]], {'cogs': 300, 'revenue': 750, 'inventory': 100, 'layers': [[1, 100]], 'rejected': [0, 1, 3, 4]}]], [['regression: return quantity check', [['sell', 1, 200], ['buy', 5, 120], ['sell', 6, 200], ['purchase_return', 2, 120], ['sell', 3, 200], ['buy', 10, 150], ['buy', 10, 120], ['buy', 5, 100], ['purchase_return', 5, 100]], {'cogs': 360, 'revenue': 600, 'inventory': 2700, 'layers': [[10, 150], [10, 120]], 'rejected': [0, 2]}], ['regression: return quantity check, partial-repair probe', [['buy', 2, 120], ['sell', 3, 200], ['buy', 1, 150], ['sell', 1, 200], ['purchase_return', 1, 100], ['sell', 6, 200], ['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 2, 120], ['buy', 10, 100]], {'cogs': 120, 'revenue': 200, 'inventory': 3770, 'layers': [[1, 120], [1, 150], [10, 100], [10, 150], [10, 100]], 'rejected': [1, 4, 5, 8]}], ['control 1', [['sell', 12, 200], ['sell', 6, 250], ['sell', 6, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2]}], ['control 2', [['buy', 10, 100], ['sell', 12, 250], ['sell', 2, 250], ['sell', 12, 200], ['sell', 6, 200], ['buy', 1, 150], ['buy', 2, 120]], {'cogs': 800, 'revenue': 1700, 'inventory': 590, 'layers': [[2, 100], [1, 150], [2, 120]], 'rejected': [1, 3]}], ['control 3', [['purchase_return', 2, 100], ['sell', 12, 250], ['buy', 10, 100], ['buy', 1, 100], ['sell', 6, 200]], {'cogs': 600, 'revenue': 1200, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [0, 1]}], ['control 4', [['buy', 10, 150], ['sell', 3, 250], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['buy', 1, 100], ['sell', 1, 250], ['buy', 2, 100], ['sell', 12, 200], ['buy', 10, 100]], {'cogs': 1050, 'revenue': 1600, 'inventory': 2350, 'layers': [[3, 150], [5, 120], [13, 100]], 'rejected': [2, 8]}], ['control 5', [['sell', 2, 250], ['purchase_return', 1, 150], ['buy', 10, 100], ['buy', 10, 150], ['buy', 2, 150], ['buy', 2, 100], ['sell', 2, 250], ['sell', 3, 250], ['buy', 5, 120]], {'cogs': 500, 'revenue': 1250, 'inventory': 3100, 'layers': [[5, 100], [12, 150], [2, 100], [5, 120]], 'rejected': [0, 1]}]], [['regression: return quantity check', [['purchase_return', 1, 100], ['sell', 1, 200], ['sell', 1, 250], ['sell', 3, 200], ['sell', 6, 200], ['buy', 10, 120], ['buy', 2, 150], ['buy', 2, 100], ['purchase_return', 2, 150]], {'cogs': 0, 'revenue': 0, 'inventory': 1400, 'layers': [[10, 120], [2, 100]], 'rejected': [0, 1, 2, 3, 4]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['sell', 6, 200], ['sell', 3, 250], ['buy', 1, 120], ['buy', 5, 100], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 890, 'layers': [[1, 150], [1, 120], [5, 100], [1, 120]], 'rejected': [1, 2, 7]}], ['control 1', [['purchase_return', 5, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 320, 'layers': [[2, 100], [1, 120]], 'rejected': [0, 1]}], ['control 2', [['sell', 1, 250], ['buy', 5, 100], ['buy', 10, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 10, 100], ['sell', 6, 200], ['buy', 1, 120], ['buy', 10, 150], ['buy', 10, 150]], {'cogs': 800, 'revenue': 1700, 'inventory': 5020, 'layers': [[19, 100], [1, 120], [20, 150]], 'rejected': [0]}], ['control 3', [['buy', 1, 100], ['purchase_return', 5, 100], ['sell', 3, 200], ['buy', 1, 150], ['buy', 1, 150], ['sell', 3, 200], ['buy', 2, 120], ['buy', 10, 120]], {'cogs': 400, 'revenue': 600, 'inventory': 1440, 'layers': [[12, 120]], 'rejected': [1, 2]}], ['control 4', [['purchase_return', 1, 100], ['buy', 2, 150], ['sell', 6, 200], ['sell', 2, 250], ['buy', 5, 120], ['buy', 5, 150], ['sell', 1, 250], ['purchase_return', 2, 100]], {'cogs': 420, 'revenue': 750, 'inventory': 1230, 'layers': [[4, 120], [5, 150]], 'rejected': [0, 2, 7]}], ['control 5', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 340, 'revenue': 600, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [1]}]], [['regression: return quantity check', [['buy', 5, 120], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 120], ['buy', 2, 100], ['purchase_return', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 400, 'layers': [[4, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['buy', 5, 100], ['purchase_return', 2, 150], ['buy', 1, 100], ['buy', 1, 100], ['sell', 3, 250], ['buy', 10, 150], ['buy', 5, 100], ['sell', 1, 250]], {'cogs': 450, 'revenue': 1000, 'inventory': 2400, 'layers': [[4, 100], [10, 150], [5, 100]], 'rejected': [2]}], ['control 1', [['sell', 1, 250], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 120], ['buy', 5, 150], ['sell', 3, 200], ['sell', 1, 200], ['sell', 6, 250], ['buy', 2, 120]], {'cogs': 540, 'revenue': 800, 'inventory': 690, 'layers': [[3, 150], [2, 120]], 'rejected': [0, 1, 2, 7]}], ['control 2', [['buy', 1, 100], ['purchase_return', 2, 150], ['purchase_return', 1, 120], ['purchase_return', 2, 100], ['buy', 5, 100], ['buy', 10, 100], ['buy', 1, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 1870, 'layers': [[16, 100], [1, 150], [1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 2, 150], ['buy', 10, 120], ['sell', 1, 200], ['purchase_return', 5, 100], ['buy', 1, 100], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 540, 'revenue': 800, 'inventory': 1960, 'layers': [[8, 120], [1, 100], [2, 150], [6, 100]], 'rejected': [3]}], ['control 4', [['sell', 12, 200], ['sell', 12, 250], ['buy', 2, 150], ['sell', 12, 250], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 120], ['buy', 10, 150], ['sell', 3, 200], ['buy', 2, 150]], {'cogs': 450, 'revenue': 600, 'inventory': 2650, 'layers': [[1, 150], [1, 100], [5, 120], [12, 150]], 'rejected': [0, 1, 3]}], ['control 5', [['buy', 1, 100], ['buy', 2, 120], ['buy', 2, 120], ['sell', 3, 200], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 100]], {'cogs': 700, 'revenue': 1200, 'inventory': 680, 'layers': [[4, 120], [2, 100]], 'rejected': [4, 7]}]], [['regression: return quantity check', [['purchase_return', 1, 120], ['buy', 2, 150], ['sell', 6, 200], ['buy', 1, 120], ['sell', 12, 250], ['purchase_return', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 300, 'layers': [[2, 150]], 'rejected': [0, 2, 4]}], ['regression: return quantity check, partial-repair probe', [['sell', 3, 200], ['sell', 1, 250], ['buy', 2, 100], ['purchase_return', 1, 100], ['buy', 10, 120], ['purchase_return', 5, 100]], {'cogs': 0, 'revenue': 0, 'inventory': 1300, 'layers': [[1, 100], [10, 120]], 'rejected': [0, 1, 5]}], ['control 1', [['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 5, 100], ['sell', 6, 200], ['sell', 3, 200], ['sell', 2, 200]], {'cogs': 1400, 'revenue': 2200, 'inventory': 600, 'layers': [[4, 150]], 'rejected': []}], ['control 2', [['purchase_return', 2, 100], ['sell', 1, 200], ['buy', 5, 100], ['buy', 5, 100], ['purchase_return', 1, 150], ['sell', 2, 250], ['buy', 1, 100], ['sell', 1, 200]], {'cogs': 300, 'revenue': 700, 'inventory': 800, 'layers': [[8, 100]], 'rejected': [0, 1, 4]}], ['control 3', [['purchase_return', 1, 100], ['buy', 1, 100], ['sell', 3, 200], ['buy', 10, 100], ['buy', 5, 100], ['sell', 2, 200], ['purchase_return', 2, 150]], {'cogs': 200, 'revenue': 400, 'inventory': 1400, 'layers': [[14, 100]], 'rejected': [0, 2, 6]}], ['control 4', [['buy', 10, 120], ['buy', 1, 120], ['purchase_return', 2, 150], ['sell', 2, 250], ['buy', 1, 100]], {'cogs': 240, 'revenue': 500, 'inventory': 1180, 'layers': [[9, 120], [1, 100]], 'rejected': [2]}], ['control 5', [['sell', 6, 250], ['purchase_return', 2, 100], ['sell', 12, 250], ['sell', 3, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2, 3]}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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":"1286a2197be42de3699cf2e4d345b0361413f71da2a11941836bc715ff1550b2","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = []\n    cogs = revenue = 0\n    short = []\n    for i, ev in enumerate(x):\n        if ev[0] == 'buy':\n            if layers and layers[-1][1] == ev[2]:\n                layers[-1][0] += ev[1]\n            else:\n                layers.append([ev[1], ev[2]])\n        elif ev[0] == 'sell':\n            qty = ev[1]\n            if qty > sum(l[0] for l in layers):\n                short.append(i)\n                continue\n            revenue += qty * ev[2]\n            while qty:\n                head = layers[0]\n                take = min(qty, head[0])\n                cogs += take * head[1]\n                head[0] -= take\n                qty -= take\n                if head[0] == 0:\n                    layers.pop(0)\n        elif ev[0] == 'purchase_return':\n            match = [l for l in layers if l[1] == ev[2] and l[0] > ev[1]]\n            if not match:\n                short.append(i)\n                continue\n            match[-1][0] -= ev[1]\n            if match[-1][0] == 0:\n                layers.remove(match[-1])\n    inventory = sum(q * c for q, c in layers)\n    return {'cogs': cogs, 'revenue': revenue, 'inventory': inventory, 'layers': layers, 'rejected': short}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: return quantity check', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 10, 100], ['sell', 6, 250], ['buy', 2, 100], ['sell', 12, 250], ['buy', 5, 120], ['buy', 5, 100], ['purchase_return', 5, 120]], {'cogs': 640, 'revenue': 1500, 'inventory': 1300, 'layers': [[8, 100], [5, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 5, 150], ['sell', 3, 250], ['sell', 2, 250], ['buy', 10, 100], ['buy', 10, 120], ['purchase_return', 2, 100], ['purchase_return', 5, 100], ['buy', 10, 150], ['buy', 2, 120], ['purchase_return', 5, 100]], {'cogs': 750, 'revenue': 1250, 'inventory': 3240, 'layers': [[3, 100], [10, 120], [10, 150], [2, 120]], 'rejected': [9]}], ['control 1', [['sell', 3, 250], ['buy', 2, 120], ['purchase_return', 1, 100], ['buy', 5, 100], ['buy', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 980, 'layers': [[2, 120], [5, 100], [2, 120]], 'rejected': [0, 2]}], ['control 2', [['buy', 1, 120], ['sell', 12, 200], ['sell', 2, 250], ['sell', 2, 250]], {'cogs': 0, 'revenue': 0, 'inventory': 120, 'layers': [[1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 5, 100], ['sell', 3, 250], ['sell', 12, 200]], {'cogs': 300, 'revenue': 750, 'inventory': 200, 'layers': [[2, 100]], 'rejected': [2]}], ['control 4', [['buy', 10, 120], ['purchase_return', 1, 100], ['sell', 1, 200], ['purchase_return', 2, 100], ['sell', 2, 200], ['purchase_return', 1, 120], ['buy', 10, 120], ['buy', 5, 120]], {'cogs': 360, 'revenue': 600, 'inventory': 2520, 'layers': [[21, 120]], 'rejected': [1, 3]}], ['control 5', [['sell', 12, 250], ['sell', 12, 200], ['buy', 5, 100], ['sell', 12, 250], ['sell', 12, 200], ['purchase_return', 1, 100], ['sell', 3, 250]], {'cogs': 300, 'revenue': 750, 'inventory': 100, 'layers': [[1, 100]], 'rejected': [0, 1, 3, 4]}]], [['regression: return quantity check', [['sell', 1, 200], ['buy', 5, 120], ['sell', 6, 200], ['purchase_return', 2, 120], ['sell', 3, 200], ['buy', 10, 150], ['buy', 10, 120], ['buy', 5, 100], ['purchase_return', 5, 100]], {'cogs': 360, 'revenue': 600, 'inventory': 2700, 'layers': [[10, 150], [10, 120]], 'rejected': [0, 2]}], ['regression: return quantity check, partial-repair probe', [['buy', 2, 120], ['sell', 3, 200], ['buy', 1, 150], ['sell', 1, 200], ['purchase_return', 1, 100], ['sell', 6, 200], ['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 2, 120], ['buy', 10, 100]], {'cogs': 120, 'revenue': 200, 'inventory': 3770, 'layers': [[1, 120], [1, 150], [10, 100], [10, 150], [10, 100]], 'rejected': [1, 4, 5, 8]}], ['control 1', [['sell', 12, 200], ['sell', 6, 250], ['sell', 6, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2]}], ['control 2', [['buy', 10, 100], ['sell', 12, 250], ['sell', 2, 250], ['sell', 12, 200], ['sell', 6, 200], ['buy', 1, 150], ['buy', 2, 120]], {'cogs': 800, 'revenue': 1700, 'inventory': 590, 'layers': [[2, 100], [1, 150], [2, 120]], 'rejected': [1, 3]}], ['control 3', [['purchase_return', 2, 100], ['sell', 12, 250], ['buy', 10, 100], ['buy', 1, 100], ['sell', 6, 200]], {'cogs': 600, 'revenue': 1200, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [0, 1]}], ['control 4', [['buy', 10, 150], ['sell', 3, 250], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['buy', 1, 100], ['sell', 1, 250], ['buy', 2, 100], ['sell', 12, 200], ['buy', 10, 100]], {'cogs': 1050, 'revenue': 1600, 'inventory': 2350, 'layers': [[3, 150], [5, 120], [13, 100]], 'rejected': [2, 8]}], ['control 5', [['sell', 2, 250], ['purchase_return', 1, 150], ['buy', 10, 100], ['buy', 10, 150], ['buy', 2, 150], ['buy', 2, 100], ['sell', 2, 250], ['sell', 3, 250], ['buy', 5, 120]], {'cogs': 500, 'revenue': 1250, 'inventory': 3100, 'layers': [[5, 100], [12, 150], [2, 100], [5, 120]], 'rejected': [0, 1]}]], [['regression: return quantity check', [['purchase_return', 1, 100], ['sell', 1, 200], ['sell', 1, 250], ['sell', 3, 200], ['sell', 6, 200], ['buy', 10, 120], ['buy', 2, 150], ['buy', 2, 100], ['purchase_return', 2, 150]], {'cogs': 0, 'revenue': 0, 'inventory': 1400, 'layers': [[10, 120], [2, 100]], 'rejected': [0, 1, 2, 3, 4]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['sell', 6, 200], ['sell', 3, 250], ['buy', 1, 120], ['buy', 5, 100], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 890, 'layers': [[1, 150], [1, 120], [5, 100], [1, 120]], 'rejected': [1, 2, 7]}], ['control 1', [['purchase_return', 5, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 320, 'layers': [[2, 100], [1, 120]], 'rejected': [0, 1]}], ['control 2', [['sell', 1, 250], ['buy', 5, 100], ['buy', 10, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 10, 100], ['sell', 6, 200], ['buy', 1, 120], ['buy', 10, 150], ['buy', 10, 150]], {'cogs': 800, 'revenue': 1700, 'inventory': 5020, 'layers': [[19, 100], [1, 120], [20, 150]], 'rejected': [0]}], ['control 3', [['buy', 1, 100], ['purchase_return', 5, 100], ['sell', 3, 200], ['buy', 1, 150], ['buy', 1, 150], ['sell', 3, 200], ['buy', 2, 120], ['buy', 10, 120]], {'cogs': 400, 'revenue': 600, 'inventory': 1440, 'layers': [[12, 120]], 'rejected': [1, 2]}], ['control 4', [['purchase_return', 1, 100], ['buy', 2, 150], ['sell', 6, 200], ['sell', 2, 250], ['buy', 5, 120], ['buy', 5, 150], ['sell', 1, 250], ['purchase_return', 2, 100]], {'cogs': 420, 'revenue': 750, 'inventory': 1230, 'layers': [[4, 120], [5, 150]], 'rejected': [0, 2, 7]}], ['control 5', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 340, 'revenue': 600, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [1]}]], [['regression: return quantity check', [['buy', 5, 120], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 120], ['buy', 2, 100], ['purchase_return', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 400, 'layers': [[4, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['buy', 5, 100], ['purchase_return', 2, 150], ['buy', 1, 100], ['buy', 1, 100], ['sell', 3, 250], ['buy', 10, 150], ['buy', 5, 100], ['sell', 1, 250]], {'cogs': 450, 'revenue': 1000, 'inventory': 2400, 'layers': [[4, 100], [10, 150], [5, 100]], 'rejected': [2]}], ['control 1', [['sell', 1, 250], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 120], ['buy', 5, 150], ['sell', 3, 200], ['sell', 1, 200], ['sell', 6, 250], ['buy', 2, 120]], {'cogs': 540, 'revenue': 800, 'inventory': 690, 'layers': [[3, 150], [2, 120]], 'rejected': [0, 1, 2, 7]}], ['control 2', [['buy', 1, 100], ['purchase_return', 2, 150], ['purchase_return', 1, 120], ['purchase_return', 2, 100], ['buy', 5, 100], ['buy', 10, 100], ['buy', 1, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 1870, 'layers': [[16, 100], [1, 150], [1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 2, 150], ['buy', 10, 120], ['sell', 1, 200], ['purchase_return', 5, 100], ['buy', 1, 100], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 540, 'revenue': 800, 'inventory': 1960, 'layers': [[8, 120], [1, 100], [2, 150], [6, 100]], 'rejected': [3]}], ['control 4', [['sell', 12, 200], ['sell', 12, 250], ['buy', 2, 150], ['sell', 12, 250], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 120], ['buy', 10, 150], ['sell', 3, 200], ['buy', 2, 150]], {'cogs': 450, 'revenue': 600, 'inventory': 2650, 'layers': [[1, 150], [1, 100], [5, 120], [12, 150]], 'rejected': [0, 1, 3]}], ['control 5', [['buy', 1, 100], ['buy', 2, 120], ['buy', 2, 120], ['sell', 3, 200], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 100]], {'cogs': 700, 'revenue': 1200, 'inventory': 680, 'layers': [[4, 120], [2, 100]], 'rejected': [4, 7]}]], [['regression: return quantity check', [['purchase_return', 1, 120], ['buy', 2, 150], ['sell', 6, 200], ['buy', 1, 120], ['sell', 12, 250], ['purchase_return', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 300, 'layers': [[2, 150]], 'rejected': [0, 2, 4]}], ['regression: return quantity check, partial-repair probe', [['sell', 3, 200], ['sell', 1, 250], ['buy', 2, 100], ['purchase_return', 1, 100], ['buy', 10, 120], ['purchase_return', 5, 100]], {'cogs': 0, 'revenue': 0, 'inventory': 1300, 'layers': [[1, 100], [10, 120]], 'rejected': [0, 1, 5]}], ['control 1', [['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 5, 100], ['sell', 6, 200], ['sell', 3, 200], ['sell', 2, 200]], {'cogs': 1400, 'revenue': 2200, 'inventory': 600, 'layers': [[4, 150]], 'rejected': []}], ['control 2', [['purchase_return', 2, 100], ['sell', 1, 200], ['buy', 5, 100], ['buy', 5, 100], ['purchase_return', 1, 150], ['sell', 2, 250], ['buy', 1, 100], ['sell', 1, 200]], {'cogs': 300, 'revenue': 700, 'inventory': 800, 'layers': [[8, 100]], 'rejected': [0, 1, 4]}], ['control 3', [['purchase_return', 1, 100], ['buy', 1, 100], ['sell', 3, 200], ['buy', 10, 100], ['buy', 5, 100], ['sell', 2, 200], ['purchase_return', 2, 150]], {'cogs': 200, 'revenue': 400, 'inventory': 1400, 'layers': [[14, 100]], 'rejected': [0, 2, 6]}], ['control 4', [['buy', 10, 120], ['buy', 1, 120], ['purchase_return', 2, 150], ['sell', 2, 250], ['buy', 1, 100]], {'cogs': 240, 'revenue': 500, 'inventory': 1180, 'layers': [[9, 120], [1, 100]], 'rejected': [2]}], ['control 5', [['sell', 6, 250], ['purchase_return', 2, 100], ['sell', 12, 250], ['sell', 3, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2, 3]}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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"},"fixed":{"sha256":"0ed7eb9560b7739cb82d2a6469be9628bd4247c3e01d6d5be4e2d8c2726dcbc7","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    layers = []\n    cogs = revenue = 0\n    short = []\n    for i, ev in enumerate(x):\n        if ev[0] == 'buy':\n            if layers and layers[-1][1] == ev[2]:\n                layers[-1][0] += ev[1]\n            else:\n                layers.append([ev[1], ev[2]])\n        elif ev[0] == 'sell':\n            qty = ev[1]\n            if qty > sum(l[0] for l in layers):\n                short.append(i)\n                continue\n            revenue += qty * ev[2]\n            while qty:\n                head = layers[0]\n                take = min(qty, head[0])\n                cogs += take * head[1]\n                head[0] -= take\n                qty -= take\n                if head[0] == 0:\n                    layers.pop(0)\n        elif ev[0] == 'purchase_return':\n            match = [l for l in layers if l[1] == ev[2] and l[0] >= ev[1]]\n            if not match:\n                short.append(i)\n                continue\n            match[-1][0] -= ev[1]\n            if match[-1][0] == 0:\n                layers.remove(match[-1])\n    inventory = sum(q * c for q, c in layers)\n    return {'cogs': cogs, 'revenue': revenue, 'inventory': inventory, 'layers': layers, 'rejected': short}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: return quantity check', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 10, 100], ['sell', 6, 250], ['buy', 2, 100], ['sell', 12, 250], ['buy', 5, 120], ['buy', 5, 100], ['purchase_return', 5, 120]], {'cogs': 640, 'revenue': 1500, 'inventory': 1300, 'layers': [[8, 100], [5, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 5, 150], ['sell', 3, 250], ['sell', 2, 250], ['buy', 10, 100], ['buy', 10, 120], ['purchase_return', 2, 100], ['purchase_return', 5, 100], ['buy', 10, 150], ['buy', 2, 120], ['purchase_return', 5, 100]], {'cogs': 750, 'revenue': 1250, 'inventory': 3240, 'layers': [[3, 100], [10, 120], [10, 150], [2, 120]], 'rejected': [9]}], ['control 1', [['sell', 3, 250], ['buy', 2, 120], ['purchase_return', 1, 100], ['buy', 5, 100], ['buy', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 980, 'layers': [[2, 120], [5, 100], [2, 120]], 'rejected': [0, 2]}], ['control 2', [['buy', 1, 120], ['sell', 12, 200], ['sell', 2, 250], ['sell', 2, 250]], {'cogs': 0, 'revenue': 0, 'inventory': 120, 'layers': [[1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 5, 100], ['sell', 3, 250], ['sell', 12, 200]], {'cogs': 300, 'revenue': 750, 'inventory': 200, 'layers': [[2, 100]], 'rejected': [2]}], ['control 4', [['buy', 10, 120], ['purchase_return', 1, 100], ['sell', 1, 200], ['purchase_return', 2, 100], ['sell', 2, 200], ['purchase_return', 1, 120], ['buy', 10, 120], ['buy', 5, 120]], {'cogs': 360, 'revenue': 600, 'inventory': 2520, 'layers': [[21, 120]], 'rejected': [1, 3]}], ['control 5', [['sell', 12, 250], ['sell', 12, 200], ['buy', 5, 100], ['sell', 12, 250], ['sell', 12, 200], ['purchase_return', 1, 100], ['sell', 3, 250]], {'cogs': 300, 'revenue': 750, 'inventory': 100, 'layers': [[1, 100]], 'rejected': [0, 1, 3, 4]}]], [['regression: return quantity check', [['sell', 1, 200], ['buy', 5, 120], ['sell', 6, 200], ['purchase_return', 2, 120], ['sell', 3, 200], ['buy', 10, 150], ['buy', 10, 120], ['buy', 5, 100], ['purchase_return', 5, 100]], {'cogs': 360, 'revenue': 600, 'inventory': 2700, 'layers': [[10, 150], [10, 120]], 'rejected': [0, 2]}], ['regression: return quantity check, partial-repair probe', [['buy', 2, 120], ['sell', 3, 200], ['buy', 1, 150], ['sell', 1, 200], ['purchase_return', 1, 100], ['sell', 6, 200], ['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 2, 120], ['buy', 10, 100]], {'cogs': 120, 'revenue': 200, 'inventory': 3770, 'layers': [[1, 120], [1, 150], [10, 100], [10, 150], [10, 100]], 'rejected': [1, 4, 5, 8]}], ['control 1', [['sell', 12, 200], ['sell', 6, 250], ['sell', 6, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2]}], ['control 2', [['buy', 10, 100], ['sell', 12, 250], ['sell', 2, 250], ['sell', 12, 200], ['sell', 6, 200], ['buy', 1, 150], ['buy', 2, 120]], {'cogs': 800, 'revenue': 1700, 'inventory': 590, 'layers': [[2, 100], [1, 150], [2, 120]], 'rejected': [1, 3]}], ['control 3', [['purchase_return', 2, 100], ['sell', 12, 250], ['buy', 10, 100], ['buy', 1, 100], ['sell', 6, 200]], {'cogs': 600, 'revenue': 1200, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [0, 1]}], ['control 4', [['buy', 10, 150], ['sell', 3, 250], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['buy', 1, 100], ['sell', 1, 250], ['buy', 2, 100], ['sell', 12, 200], ['buy', 10, 100]], {'cogs': 1050, 'revenue': 1600, 'inventory': 2350, 'layers': [[3, 150], [5, 120], [13, 100]], 'rejected': [2, 8]}], ['control 5', [['sell', 2, 250], ['purchase_return', 1, 150], ['buy', 10, 100], ['buy', 10, 150], ['buy', 2, 150], ['buy', 2, 100], ['sell', 2, 250], ['sell', 3, 250], ['buy', 5, 120]], {'cogs': 500, 'revenue': 1250, 'inventory': 3100, 'layers': [[5, 100], [12, 150], [2, 100], [5, 120]], 'rejected': [0, 1]}]], [['regression: return quantity check', [['purchase_return', 1, 100], ['sell', 1, 200], ['sell', 1, 250], ['sell', 3, 200], ['sell', 6, 200], ['buy', 10, 120], ['buy', 2, 150], ['buy', 2, 100], ['purchase_return', 2, 150]], {'cogs': 0, 'revenue': 0, 'inventory': 1400, 'layers': [[10, 120], [2, 100]], 'rejected': [0, 1, 2, 3, 4]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['sell', 6, 200], ['sell', 3, 250], ['buy', 1, 120], ['buy', 5, 100], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 890, 'layers': [[1, 150], [1, 120], [5, 100], [1, 120]], 'rejected': [1, 2, 7]}], ['control 1', [['purchase_return', 5, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 320, 'layers': [[2, 100], [1, 120]], 'rejected': [0, 1]}], ['control 2', [['sell', 1, 250], ['buy', 5, 100], ['buy', 10, 100], ['sell', 2, 250], ['buy', 2, 100], ['buy', 10, 100], ['sell', 6, 200], ['buy', 1, 120], ['buy', 10, 150], ['buy', 10, 150]], {'cogs': 800, 'revenue': 1700, 'inventory': 5020, 'layers': [[19, 100], [1, 120], [20, 150]], 'rejected': [0]}], ['control 3', [['buy', 1, 100], ['purchase_return', 5, 100], ['sell', 3, 200], ['buy', 1, 150], ['buy', 1, 150], ['sell', 3, 200], ['buy', 2, 120], ['buy', 10, 120]], {'cogs': 400, 'revenue': 600, 'inventory': 1440, 'layers': [[12, 120]], 'rejected': [1, 2]}], ['control 4', [['purchase_return', 1, 100], ['buy', 2, 150], ['sell', 6, 200], ['sell', 2, 250], ['buy', 5, 120], ['buy', 5, 150], ['sell', 1, 250], ['purchase_return', 2, 100]], {'cogs': 420, 'revenue': 750, 'inventory': 1230, 'layers': [[4, 120], [5, 150]], 'rejected': [0, 2, 7]}], ['control 5', [['buy', 2, 120], ['purchase_return', 1, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 340, 'revenue': 600, 'inventory': 500, 'layers': [[5, 100]], 'rejected': [1]}]], [['regression: return quantity check', [['buy', 5, 120], ['purchase_return', 2, 100], ['buy', 2, 100], ['purchase_return', 5, 120], ['buy', 2, 100], ['purchase_return', 2, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 400, 'layers': [[4, 100]], 'rejected': [1, 5]}], ['regression: return quantity check, partial-repair probe', [['buy', 1, 150], ['buy', 5, 100], ['purchase_return', 2, 150], ['buy', 1, 100], ['buy', 1, 100], ['sell', 3, 250], ['buy', 10, 150], ['buy', 5, 100], ['sell', 1, 250]], {'cogs': 450, 'revenue': 1000, 'inventory': 2400, 'layers': [[4, 100], [10, 150], [5, 100]], 'rejected': [2]}], ['control 1', [['sell', 1, 250], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 120], ['buy', 5, 150], ['sell', 3, 200], ['sell', 1, 200], ['sell', 6, 250], ['buy', 2, 120]], {'cogs': 540, 'revenue': 800, 'inventory': 690, 'layers': [[3, 150], [2, 120]], 'rejected': [0, 1, 2, 7]}], ['control 2', [['buy', 1, 100], ['purchase_return', 2, 150], ['purchase_return', 1, 120], ['purchase_return', 2, 100], ['buy', 5, 100], ['buy', 10, 100], ['buy', 1, 150], ['buy', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 1870, 'layers': [[16, 100], [1, 150], [1, 120]], 'rejected': [1, 2, 3]}], ['control 3', [['buy', 2, 150], ['buy', 10, 120], ['sell', 1, 200], ['purchase_return', 5, 100], ['buy', 1, 100], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 100], ['sell', 3, 200]], {'cogs': 540, 'revenue': 800, 'inventory': 1960, 'layers': [[8, 120], [1, 100], [2, 150], [6, 100]], 'rejected': [3]}], ['control 4', [['sell', 12, 200], ['sell', 12, 250], ['buy', 2, 150], ['sell', 12, 250], ['buy', 2, 150], ['buy', 1, 100], ['buy', 5, 120], ['buy', 10, 150], ['sell', 3, 200], ['buy', 2, 150]], {'cogs': 450, 'revenue': 600, 'inventory': 2650, 'layers': [[1, 150], [1, 100], [5, 120], [12, 150]], 'rejected': [0, 1, 3]}], ['control 5', [['buy', 1, 100], ['buy', 2, 120], ['buy', 2, 120], ['sell', 3, 200], ['sell', 12, 200], ['buy', 5, 120], ['sell', 3, 200], ['purchase_return', 1, 100], ['buy', 2, 100]], {'cogs': 700, 'revenue': 1200, 'inventory': 680, 'layers': [[4, 120], [2, 100]], 'rejected': [4, 7]}]], [['regression: return quantity check', [['purchase_return', 1, 120], ['buy', 2, 150], ['sell', 6, 200], ['buy', 1, 120], ['sell', 12, 250], ['purchase_return', 1, 120]], {'cogs': 0, 'revenue': 0, 'inventory': 300, 'layers': [[2, 150]], 'rejected': [0, 2, 4]}], ['regression: return quantity check, partial-repair probe', [['sell', 3, 200], ['sell', 1, 250], ['buy', 2, 100], ['purchase_return', 1, 100], ['buy', 10, 120], ['purchase_return', 5, 100]], {'cogs': 0, 'revenue': 0, 'inventory': 1300, 'layers': [[1, 100], [10, 120]], 'rejected': [0, 1, 5]}], ['control 1', [['buy', 10, 100], ['buy', 10, 150], ['purchase_return', 5, 100], ['sell', 6, 200], ['sell', 3, 200], ['sell', 2, 200]], {'cogs': 1400, 'revenue': 2200, 'inventory': 600, 'layers': [[4, 150]], 'rejected': []}], ['control 2', [['purchase_return', 2, 100], ['sell', 1, 200], ['buy', 5, 100], ['buy', 5, 100], ['purchase_return', 1, 150], ['sell', 2, 250], ['buy', 1, 100], ['sell', 1, 200]], {'cogs': 300, 'revenue': 700, 'inventory': 800, 'layers': [[8, 100]], 'rejected': [0, 1, 4]}], ['control 3', [['purchase_return', 1, 100], ['buy', 1, 100], ['sell', 3, 200], ['buy', 10, 100], ['buy', 5, 100], ['sell', 2, 200], ['purchase_return', 2, 150]], {'cogs': 200, 'revenue': 400, 'inventory': 1400, 'layers': [[14, 100]], 'rejected': [0, 2, 6]}], ['control 4', [['buy', 10, 120], ['buy', 1, 120], ['purchase_return', 2, 150], ['sell', 2, 250], ['buy', 1, 100]], {'cogs': 240, 'revenue': 500, 'inventory': 1180, 'layers': [[9, 120], [1, 100]], 'rejected': [2]}], ['control 5', [['sell', 6, 250], ['purchase_return', 2, 100], ['sell', 12, 250], ['sell', 3, 200]], {'cogs': 0, 'revenue': 0, 'inventory': 0, 'layers': [], 'rejected': [0, 1, 2, 3]}]]]\nfor label, args, expected in fixtures[N-1]:\n    try:\n        actual = solve(args)\n    except Exception as exc:\n        actual = 'raised ' + type(exc).__name__\n    check(label, actual, 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":"A deterministic bounded teaching model with stipulated toy bookkeeping rules stated in the contract; amounts are integer cents; it makes no claim of conformance to any accounting standard or product. 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-double-entry-ledger-accounting-fifo-perpetual-inventory-return-quantity-check","generated_at":"2026-09-29T14:46:23.505175+00:00","license":"CC0-1.0","python":"3.12.14","seed":1,"split":"open-access"},"relevance":"Ledger software must keep debits equal to credits and apply normal-balance, period and cutoff rules exactly; small sign or boundary slips silently misstate financial statements.","repair":"Accept layers holding at least the returned quantity.","root_cause":"The layer must hold strictly more than the returned quantity.","sha256":"1a806e49c0d28679db6ab69246829816e132c9fcf5f9a6dc43501040526e6af5","title":"FIFO perpetual inventory journal: return quantity check · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":42.167,"exit_code":1,"observations":[{"actual":{"cogs":640,"inventory":1300,"layers":[[8,100],[5,100]],"rejected":[1,5],"revenue":1500},"check":"regression: return quantity check","expected":{"cogs":640,"inventory":1300,"layers":[[8,100],[5,100]],"rejected":[1,5],"revenue":1500},"passed":true},{"actual":{"cogs":750,"inventory":2740,"layers":[[-2,100],[10,120],[10,150],[2,120]],"rejected":[],"revenue":1250},"check":"regression: return quantity check, partial-repair probe","expected":{"cogs":750,"inventory":3240,"layers":[[3,100],[10,120],[10,150],[2,120]],"rejected":[9],"revenue":1250},"passed":false},{"actual":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"check":"control 1","expected":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"passed":true},{"actual":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"check":"control 2","expected":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"passed":true},{"actual":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"check":"control 3","expected":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"passed":true},{"actual":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"check":"control 4","expected":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"passed":true},{"actual":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"check":"control 5","expected":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: return quantity check\", \"actual\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1300, \"layers\": [[8, 100], [5, 100]], \"rejected\": [1, 5]}, \"expected\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1300, \"layers\": [[8, 100], [5, 100]], \"rejected\": [1, 5]}, \"passed\": true}, {\"check\": \"regression: return quantity check, partial-repair probe\", \"actual\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 2740, \"layers\": [[-2, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": []}, \"expected\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 3240, \"layers\": [[3, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": [9]}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"expected\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.176,"exit_code":1,"observations":[{"actual":{"cogs":640,"inventory":1900,"layers":[[8,100],[5,120],[5,100]],"rejected":[1,5,8],"revenue":1500},"check":"regression: return quantity check","expected":{"cogs":640,"inventory":1300,"layers":[[8,100],[5,100]],"rejected":[1,5],"revenue":1500},"passed":false},{"actual":{"cogs":750,"inventory":3240,"layers":[[3,100],[10,120],[10,150],[2,120]],"rejected":[9],"revenue":1250},"check":"regression: return quantity check, partial-repair probe","expected":{"cogs":750,"inventory":3240,"layers":[[3,100],[10,120],[10,150],[2,120]],"rejected":[9],"revenue":1250},"passed":true},{"actual":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"check":"control 1","expected":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"passed":true},{"actual":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"check":"control 2","expected":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"passed":true},{"actual":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"check":"control 3","expected":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"passed":true},{"actual":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"check":"control 4","expected":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"passed":true},{"actual":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"check":"control 5","expected":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: return quantity check\", \"actual\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1900, \"layers\": [[8, 100], [5, 120], [5, 100]], \"rejected\": [1, 5, 8]}, \"expected\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1300, \"layers\": [[8, 100], [5, 100]], \"rejected\": [1, 5]}, \"passed\": false}, {\"check\": \"regression: return quantity check, partial-repair probe\", \"actual\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 3240, \"layers\": [[3, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": [9]}, \"expected\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 3240, \"layers\": [[3, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": [9]}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"expected\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":44.34,"exit_code":0,"observations":[{"actual":{"cogs":640,"inventory":1300,"layers":[[8,100],[5,100]],"rejected":[1,5],"revenue":1500},"check":"regression: return quantity check","expected":{"cogs":640,"inventory":1300,"layers":[[8,100],[5,100]],"rejected":[1,5],"revenue":1500},"passed":true},{"actual":{"cogs":750,"inventory":3240,"layers":[[3,100],[10,120],[10,150],[2,120]],"rejected":[9],"revenue":1250},"check":"regression: return quantity check, partial-repair probe","expected":{"cogs":750,"inventory":3240,"layers":[[3,100],[10,120],[10,150],[2,120]],"rejected":[9],"revenue":1250},"passed":true},{"actual":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"check":"control 1","expected":{"cogs":0,"inventory":980,"layers":[[2,120],[5,100],[2,120]],"rejected":[0,2],"revenue":0},"passed":true},{"actual":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"check":"control 2","expected":{"cogs":0,"inventory":120,"layers":[[1,120]],"rejected":[1,2,3],"revenue":0},"passed":true},{"actual":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"check":"control 3","expected":{"cogs":300,"inventory":200,"layers":[[2,100]],"rejected":[2],"revenue":750},"passed":true},{"actual":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"check":"control 4","expected":{"cogs":360,"inventory":2520,"layers":[[21,120]],"rejected":[1,3],"revenue":600},"passed":true},{"actual":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"check":"control 5","expected":{"cogs":300,"inventory":100,"layers":[[1,100]],"rejected":[0,1,3,4],"revenue":750},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: return quantity check\", \"actual\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1300, \"layers\": [[8, 100], [5, 100]], \"rejected\": [1, 5]}, \"expected\": {\"cogs\": 640, \"revenue\": 1500, \"inventory\": 1300, \"layers\": [[8, 100], [5, 100]], \"rejected\": [1, 5]}, \"passed\": true}, {\"check\": \"regression: return quantity check, partial-repair probe\", \"actual\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 3240, \"layers\": [[3, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": [9]}, \"expected\": {\"cogs\": 750, \"revenue\": 1250, \"inventory\": 3240, \"layers\": [[3, 100], [10, 120], [10, 150], [2, 120]], \"rejected\": [9]}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 980, \"layers\": [[2, 120], [5, 100], [2, 120]], \"rejected\": [0, 2]}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"expected\": {\"cogs\": 0, \"revenue\": 0, \"inventory\": 120, \"layers\": [[1, 120]], \"rejected\": [1, 2, 3]}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 200, \"layers\": [[2, 100]], \"rejected\": [2]}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"expected\": {\"cogs\": 360, \"revenue\": 600, \"inventory\": 2520, \"layers\": [[21, 120]], \"rejected\": [1, 3]}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"expected\": {\"cogs\": 300, \"revenue\": 750, \"inventory\": 100, \"layers\": [[1, 100]], \"rejected\": [0, 1, 3, 4]}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}