{"abstract":"Customers with credit balances are not counted as open.","category":"Double-entry ledger accounting","checks":7,"contract":"x = {'control': [[day, amount]], 'sub': {customer: [[day, amount]]}, 'as_of': day}. Only rows dated on or before as_of count. The subledger total nets every customer balance, including credit (negative) balances. Return {'control', 'subledger', 'difference': control - subledger, 'credit_balances': customers with negative balance sorted by name, 'open_customers': count of nonzero balances}.","evaluation_group":"w2-double-entry-ledger-accounting-subledger-control-tieout","failed_approach":"Counting every customer includes fully settled accounts.","family":"w2-double-entry-ledger-accounting-subledger-control-tieout-open-customer-count","id":"FA-58271","implementations":{"attempt":{"sha256":"91bfae0189adb7dcfe102a61c457e4100e7e012c8717dc17da00fc7136a8da81","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cut = x['as_of']\n    control = sum(a for d, a in x['control'] if d <= cut)\n    per = {}\n    for cust, rows in x['sub'].items():\n        per[cust] = sum(a for d, a in rows if d <= cut)\n    sub_total = sum(per.values())\n    credit = sorted(c for c, v in per.items() if v < 0)\n    return {'control': control, 'subledger': sub_total, 'difference': control - sub_total, 'credit_balances': credit, 'open_customers': len(per)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: open customer count', {'control': [[9, 250], [10, 100], [11, 400]], 'sub': {'dyna': [[1, 400], [11, 400]], 'acme': [[1, -300], [10, 250], [1, -80]], 'bolt': [[1, -80]]}, 'as_of': 10}, {'control': 350, 'subledger': 190, 'difference': 160, 'credit_balances': ['acme', 'bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 100], [19, -80], [21, -80]], 'sub': {'bolt': [[5, -80], [1, 250], [5, -80]], 'acme': [[21, 100]], 'dyna': [[20, 400], [1, 250], [20, 100]], 'crux': [[20, 400], [5, 100]]}, 'as_of': 20}, {'control': 20, 'subledger': 1340, 'difference': -1320, 'credit_balances': [], 'open_customers': 3}], ['control 1', {'control': [[21, 400], [5, 250], [19, 250], [20, 400], [19, -80]], 'sub': {'bolt': [[5, 250]]}, 'as_of': 20}, {'control': 820, 'subledger': 250, 'difference': 570, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 100], [10, 100], [9, 400], [10, 100], [1, 250], [9, 250]], 'sub': {'dyna': [[1, 400], [11, 400], [1, 400]]}, 'as_of': 10}, {'control': 1200, 'subledger': 800, 'difference': 400, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[10, 400], [10, 100], [9, 250], [11, 250], [1, 400]], 'sub': {'bolt': [[11, 400], [10, 400], [5, 100]]}, 'as_of': 10}, {'control': 1150, 'subledger': 500, 'difference': 650, 'credit_balances': [], 'open_customers': 1}], ['control 4', {'control': [[5, 400], [1, 250], [9, -80], [5, -80], [5, 250]], 'sub': {'acme': [[5, 250], [11, 100]], 'crux': [[5, 400]], 'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 5', {'control': [[11, 250], [1, -80], [11, 400], [1, -80]], 'sub': {'acme': [[1, 250], [1, -80], [11, 250]], 'bolt': [[11, 100]], 'dyna': [[11, -80]]}, 'as_of': 10}, {'control': -160, 'subledger': 170, 'difference': -330, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[31, 400], [30, 250]], 'sub': {'bolt': [[1, 400], [1, 400], [5, -300]], 'acme': [[32, 250]], 'crux': [[5, -300], [31, 400], [5, -300]]}, 'as_of': 31}, {'control': 650, 'subledger': 300, 'difference': 350, 'credit_balances': ['crux'], 'open_customers': 2}], ['control 1', {'control': [[1, 400], [11, 250]], 'sub': {'dyna': [[1, 250]], 'crux': [[1, 250], [1, 250], [1, 100]], 'acme': [[10, 250], [1, 250], [11, 250]], 'bolt': [[11, 250], [5, 400]]}, 'as_of': 10}, {'control': 400, 'subledger': 1750, 'difference': -1350, 'credit_balances': [], 'open_customers': 4}], ['control 2', {'control': [[20, 250], [19, 100], [5, 400]], 'sub': {'bolt': [[20, 250]], 'acme': [[1, -300], [1, 100], [1, 250]]}, 'as_of': 20}, {'control': 750, 'subledger': 300, 'difference': 450, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[5, 400], [20, -80], [19, 250]], 'sub': {'acme': [[21, 250]], 'bolt': [[20, 250], [1, -80], [1, -80]], 'dyna': [[21, -80], [20, 100]], 'crux': [[5, 400], [21, 400], [20, -300]]}, 'as_of': 20}, {'control': 570, 'subledger': 290, 'difference': 280, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[10, 250], [9, -80], [1, 250], [1, 100]], 'sub': {'dyna': [[1, 400], [10, 400]], 'acme': [[10, 250], [5, 400], [11, -300]], 'crux': [[11, 250], [1, 400], [5, -300]], 'bolt': [[5, 250]]}, 'as_of': 10}, {'control': 520, 'subledger': 1800, 'difference': -1280, 'credit_balances': [], 'open_customers': 4}], ['control 5', {'control': [[5, -80], [19, 400], [1, -80]], 'sub': {'crux': [[21, -300], [21, 400]], 'bolt': [[1, 250], [21, 250]], 'dyna': [[21, -300], [20, 250], [5, 250]]}, 'as_of': 20}, {'control': 240, 'subledger': 750, 'difference': -510, 'credit_balances': [], 'open_customers': 2}], ['control 6', {'control': [[10, 100], [5, 250], [5, 400], [11, -80], [1, 400], [9, 400]], 'sub': {'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 1550, 'subledger': 250, 'difference': 1300, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[9, 250], [11, 100], [11, -80], [11, 250]], 'sub': {'dyna': [[1, 250], [11, 400], [10, -80]], 'acme': [[11, -300], [1, 400], [1, 400]], 'bolt': [[1, -300]]}, 'as_of': 10}, {'control': 250, 'subledger': 670, 'difference': -420, 'credit_balances': ['bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 400], [1, 250], [5, -80], [5, 250], [11, -80], [1, 400]], 'sub': {'dyna': [[11, 100]], 'acme': [[5, 400], [1, 100]], 'crux': [[5, 400], [5, -300]]}, 'as_of': 10}, {'control': 1220, 'subledger': 600, 'difference': 620, 'credit_balances': [], 'open_customers': 2}], ['control 1', {'control': [[1, -80], [1, 100], [32, 400], [31, 250]], 'sub': {'bolt': [[1, 250]]}, 'as_of': 31}, {'control': 270, 'subledger': 250, 'difference': 20, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 250], [1, 400], [11, 100]], 'sub': {'crux': [[5, -80], [1, 250], [1, 250]]}, 'as_of': 10}, {'control': 650, 'subledger': 420, 'difference': 230, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[5, 250], [30, 400], [30, -80], [1, -80], [5, 250]], 'sub': {'bolt': [[5, 250]], 'acme': [[1, 250]], 'dyna': [[31, 400]]}, 'as_of': 31}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[19, 100], [21, 250], [20, -80], [20, -80], [19, 400], [21, 100]], 'sub': {'dyna': [[21, 100]], 'acme': [[21, 100], [21, 400], [20, 250]], 'crux': [[20, -80], [21, -80], [5, 250]]}, 'as_of': 20}, {'control': 340, 'subledger': 420, 'difference': -80, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[31, -80], [32, 400], [31, -80], [5, -80], [31, 250]], 'sub': {'dyna': [[1, 400], [1, 250]], 'acme': [[32, -80], [31, 100]]}, 'as_of': 31}, {'control': 10, 'subledger': 750, 'difference': -740, 'credit_balances': [], 'open_customers': 2}]], [['regression: open customer count', {'control': [[31, -80], [5, 100], [31, 100]], 'sub': {'crux': [[32, 250]], 'dyna': [[32, 250]], 'acme': [[1, -300], [32, 250]]}, 'as_of': 31}, {'control': 120, 'subledger': -300, 'difference': 420, 'credit_balances': ['acme'], 'open_customers': 1}], ['control 1', {'control': [[20, -80], [21, 100]], 'sub': {'dyna': [[1, -80], [20, 250]], 'bolt': [[1, -300], [20, 400], [21, -300]]}, 'as_of': 20}, {'control': -80, 'subledger': 270, 'difference': -350, 'credit_balances': [], 'open_customers': 2}], ['control 2', {'control': [[1, -80], [20, -80], [19, -80], [19, -80], [21, 400]], 'sub': {'acme': [[21, 250]]}, 'as_of': 20}, {'control': -320, 'subledger': 0, 'difference': -320, 'credit_balances': [], 'open_customers': 0}], ['control 3', {'control': [[5, 250], [5, 400], [1, -80], [31, 100], [30, 100]], 'sub': {'dyna': [[32, -300]], 'crux': [[5, 250], [1, 250]], 'acme': [[31, 400]]}, 'as_of': 31}, {'control': 770, 'subledger': 900, 'difference': -130, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[31, 250], [1, -80], [5, 100], [31, 250], [5, 100]], 'sub': {'crux': [[32, -300], [1, 250]]}, 'as_of': 31}, {'control': 620, 'subledger': 250, 'difference': 370, 'credit_balances': [], 'open_customers': 1}], ['control 5', {'control': [[31, 250], [5, -80], [1, 400], [32, 400], [1, 400]], 'sub': {'crux': [[5, 250], [1, 400]]}, 'as_of': 31}, {'control': 970, 'subledger': 650, 'difference': 320, 'credit_balances': [], 'open_customers': 1}], ['control 6', {'control': [[1, 100], [11, 100], [1, 100], [9, 400], [9, 100], [9, 100]], 'sub': {'dyna': [[1, 100], [5, 100]]}, 'as_of': 10}, {'control': 800, 'subledger': 200, 'difference': 600, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[5, 100], [5, 250], [19, -80], [21, 250], [21, 250]], 'sub': {'crux': [[20, -80], [20, -80]], 'acme': [[21, 100]]}, 'as_of': 20}, {'control': 270, 'subledger': -160, 'difference': 430, 'credit_balances': ['crux'], 'open_customers': 1}], ['control 1', {'control': [[1, -80], [5, 100], [20, 400], [19, 250], [1, 250]], 'sub': {'crux': [[20, 250], [20, -80], [20, 250]]}, 'as_of': 20}, {'control': 920, 'subledger': 420, 'difference': 500, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, -80], [11, 400]], 'sub': {'bolt': [[5, 100], [5, 250]], 'acme': [[11, 100], [11, -80], [10, 250]]}, 'as_of': 10}, {'control': -80, 'subledger': 600, 'difference': -680, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[1, 100], [1, 250], [5, 250], [1, 100], [1, 400], [5, -80]], 'sub': {'bolt': [[10, -80], [10, 400]], 'crux': [[1, 250], [10, 250]]}, 'as_of': 10}, {'control': 1020, 'subledger': 820, 'difference': 200, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[32, 250], [1, 100], [32, 100], [31, 100], [1, -80]], 'sub': {'dyna': [[5, 100]], 'acme': [[5, 400], [5, -80]], 'crux': [[32, -80]], 'bolt': [[32, -80]]}, 'as_of': 31}, {'control': 120, 'subledger': 420, 'difference': -300, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[5, 400], [11, 100]], 'sub': {'bolt': [[5, 400], [1, -80]], 'acme': [[5, 400], [1, 100], [5, -300]], 'dyna': [[1, 100]]}, 'as_of': 10}, {'control': 400, 'subledger': 620, 'difference': -220, 'credit_balances': [], 'open_customers': 3}], ['control 6', {'control': [[31, 400], [32, 400]], 'sub': {'acme': [[1, -80], [31, 400]]}, 'as_of': 31}, {'control': 400, 'subledger': 320, 'difference': 80, 'credit_balances': [], 'open_customers': 1}]]]\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":"ff21f3b05d3024413cda9e60fe85e992ac61a5dc70985e5f7ad84ed01c580b3e","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cut = x['as_of']\n    control = sum(a for d, a in x['control'] if d <= cut)\n    per = {}\n    for cust, rows in x['sub'].items():\n        per[cust] = sum(a for d, a in rows if d <= cut)\n    sub_total = sum(per.values())\n    credit = sorted(c for c, v in per.items() if v < 0)\n    return {'control': control, 'subledger': sub_total, 'difference': control - sub_total, 'credit_balances': credit, 'open_customers': sum(1 for v in per.values() if v > 0)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: open customer count', {'control': [[9, 250], [10, 100], [11, 400]], 'sub': {'dyna': [[1, 400], [11, 400]], 'acme': [[1, -300], [10, 250], [1, -80]], 'bolt': [[1, -80]]}, 'as_of': 10}, {'control': 350, 'subledger': 190, 'difference': 160, 'credit_balances': ['acme', 'bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 100], [19, -80], [21, -80]], 'sub': {'bolt': [[5, -80], [1, 250], [5, -80]], 'acme': [[21, 100]], 'dyna': [[20, 400], [1, 250], [20, 100]], 'crux': [[20, 400], [5, 100]]}, 'as_of': 20}, {'control': 20, 'subledger': 1340, 'difference': -1320, 'credit_balances': [], 'open_customers': 3}], ['control 1', {'control': [[21, 400], [5, 250], [19, 250], [20, 400], [19, -80]], 'sub': {'bolt': [[5, 250]]}, 'as_of': 20}, {'control': 820, 'subledger': 250, 'difference': 570, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 100], [10, 100], [9, 400], [10, 100], [1, 250], [9, 250]], 'sub': {'dyna': [[1, 400], [11, 400], [1, 400]]}, 'as_of': 10}, {'control': 1200, 'subledger': 800, 'difference': 400, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[10, 400], [10, 100], [9, 250], [11, 250], [1, 400]], 'sub': {'bolt': [[11, 400], [10, 400], [5, 100]]}, 'as_of': 10}, {'control': 1150, 'subledger': 500, 'difference': 650, 'credit_balances': [], 'open_customers': 1}], ['control 4', {'control': [[5, 400], [1, 250], [9, -80], [5, -80], [5, 250]], 'sub': {'acme': [[5, 250], [11, 100]], 'crux': [[5, 400]], 'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 5', {'control': [[11, 250], [1, -80], [11, 400], [1, -80]], 'sub': {'acme': [[1, 250], [1, -80], [11, 250]], 'bolt': [[11, 100]], 'dyna': [[11, -80]]}, 'as_of': 10}, {'control': -160, 'subledger': 170, 'difference': -330, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[31, 400], [30, 250]], 'sub': {'bolt': [[1, 400], [1, 400], [5, -300]], 'acme': [[32, 250]], 'crux': [[5, -300], [31, 400], [5, -300]]}, 'as_of': 31}, {'control': 650, 'subledger': 300, 'difference': 350, 'credit_balances': ['crux'], 'open_customers': 2}], ['control 1', {'control': [[1, 400], [11, 250]], 'sub': {'dyna': [[1, 250]], 'crux': [[1, 250], [1, 250], [1, 100]], 'acme': [[10, 250], [1, 250], [11, 250]], 'bolt': [[11, 250], [5, 400]]}, 'as_of': 10}, {'control': 400, 'subledger': 1750, 'difference': -1350, 'credit_balances': [], 'open_customers': 4}], ['control 2', {'control': [[20, 250], [19, 100], [5, 400]], 'sub': {'bolt': [[20, 250]], 'acme': [[1, -300], [1, 100], [1, 250]]}, 'as_of': 20}, {'control': 750, 'subledger': 300, 'difference': 450, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[5, 400], [20, -80], [19, 250]], 'sub': {'acme': [[21, 250]], 'bolt': [[20, 250], [1, -80], [1, -80]], 'dyna': [[21, -80], [20, 100]], 'crux': [[5, 400], [21, 400], [20, -300]]}, 'as_of': 20}, {'control': 570, 'subledger': 290, 'difference': 280, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[10, 250], [9, -80], [1, 250], [1, 100]], 'sub': {'dyna': [[1, 400], [10, 400]], 'acme': [[10, 250], [5, 400], [11, -300]], 'crux': [[11, 250], [1, 400], [5, -300]], 'bolt': [[5, 250]]}, 'as_of': 10}, {'control': 520, 'subledger': 1800, 'difference': -1280, 'credit_balances': [], 'open_customers': 4}], ['control 5', {'control': [[5, -80], [19, 400], [1, -80]], 'sub': {'crux': [[21, -300], [21, 400]], 'bolt': [[1, 250], [21, 250]], 'dyna': [[21, -300], [20, 250], [5, 250]]}, 'as_of': 20}, {'control': 240, 'subledger': 750, 'difference': -510, 'credit_balances': [], 'open_customers': 2}], ['control 6', {'control': [[10, 100], [5, 250], [5, 400], [11, -80], [1, 400], [9, 400]], 'sub': {'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 1550, 'subledger': 250, 'difference': 1300, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[9, 250], [11, 100], [11, -80], [11, 250]], 'sub': {'dyna': [[1, 250], [11, 400], [10, -80]], 'acme': [[11, -300], [1, 400], [1, 400]], 'bolt': [[1, -300]]}, 'as_of': 10}, {'control': 250, 'subledger': 670, 'difference': -420, 'credit_balances': ['bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 400], [1, 250], [5, -80], [5, 250], [11, -80], [1, 400]], 'sub': {'dyna': [[11, 100]], 'acme': [[5, 400], [1, 100]], 'crux': [[5, 400], [5, -300]]}, 'as_of': 10}, {'control': 1220, 'subledger': 600, 'difference': 620, 'credit_balances': [], 'open_customers': 2}], ['control 1', {'control': [[1, -80], [1, 100], [32, 400], [31, 250]], 'sub': {'bolt': [[1, 250]]}, 'as_of': 31}, {'control': 270, 'subledger': 250, 'difference': 20, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 250], [1, 400], [11, 100]], 'sub': {'crux': [[5, -80], [1, 250], [1, 250]]}, 'as_of': 10}, {'control': 650, 'subledger': 420, 'difference': 230, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[5, 250], [30, 400], [30, -80], [1, -80], [5, 250]], 'sub': {'bolt': [[5, 250]], 'acme': [[1, 250]], 'dyna': [[31, 400]]}, 'as_of': 31}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[19, 100], [21, 250], [20, -80], [20, -80], [19, 400], [21, 100]], 'sub': {'dyna': [[21, 100]], 'acme': [[21, 100], [21, 400], [20, 250]], 'crux': [[20, -80], [21, -80], [5, 250]]}, 'as_of': 20}, {'control': 340, 'subledger': 420, 'difference': -80, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[31, -80], [32, 400], [31, -80], [5, -80], [31, 250]], 'sub': {'dyna': [[1, 400], [1, 250]], 'acme': [[32, -80], [31, 100]]}, 'as_of': 31}, {'control': 10, 'subledger': 750, 'difference': -740, 'credit_balances': [], 'open_customers': 2}]], [['regression: open customer count', {'control': [[31, -80], [5, 100], [31, 100]], 'sub': {'crux': [[32, 250]], 'dyna': [[32, 250]], 'acme': [[1, -300], [32, 250]]}, 'as_of': 31}, {'control': 120, 'subledger': -300, 'difference': 420, 'credit_balances': ['acme'], 'open_customers': 1}], ['control 1', {'control': [[20, -80], [21, 100]], 'sub': {'dyna': [[1, -80], [20, 250]], 'bolt': [[1, -300], [20, 400], [21, -300]]}, 'as_of': 20}, {'control': -80, 'subledger': 270, 'difference': -350, 'credit_balances': [], 'open_customers': 2}], ['control 2', {'control': [[1, -80], [20, -80], [19, -80], [19, -80], [21, 400]], 'sub': {'acme': [[21, 250]]}, 'as_of': 20}, {'control': -320, 'subledger': 0, 'difference': -320, 'credit_balances': [], 'open_customers': 0}], ['control 3', {'control': [[5, 250], [5, 400], [1, -80], [31, 100], [30, 100]], 'sub': {'dyna': [[32, -300]], 'crux': [[5, 250], [1, 250]], 'acme': [[31, 400]]}, 'as_of': 31}, {'control': 770, 'subledger': 900, 'difference': -130, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[31, 250], [1, -80], [5, 100], [31, 250], [5, 100]], 'sub': {'crux': [[32, -300], [1, 250]]}, 'as_of': 31}, {'control': 620, 'subledger': 250, 'difference': 370, 'credit_balances': [], 'open_customers': 1}], ['control 5', {'control': [[31, 250], [5, -80], [1, 400], [32, 400], [1, 400]], 'sub': {'crux': [[5, 250], [1, 400]]}, 'as_of': 31}, {'control': 970, 'subledger': 650, 'difference': 320, 'credit_balances': [], 'open_customers': 1}], ['control 6', {'control': [[1, 100], [11, 100], [1, 100], [9, 400], [9, 100], [9, 100]], 'sub': {'dyna': [[1, 100], [5, 100]]}, 'as_of': 10}, {'control': 800, 'subledger': 200, 'difference': 600, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[5, 100], [5, 250], [19, -80], [21, 250], [21, 250]], 'sub': {'crux': [[20, -80], [20, -80]], 'acme': [[21, 100]]}, 'as_of': 20}, {'control': 270, 'subledger': -160, 'difference': 430, 'credit_balances': ['crux'], 'open_customers': 1}], ['control 1', {'control': [[1, -80], [5, 100], [20, 400], [19, 250], [1, 250]], 'sub': {'crux': [[20, 250], [20, -80], [20, 250]]}, 'as_of': 20}, {'control': 920, 'subledger': 420, 'difference': 500, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, -80], [11, 400]], 'sub': {'bolt': [[5, 100], [5, 250]], 'acme': [[11, 100], [11, -80], [10, 250]]}, 'as_of': 10}, {'control': -80, 'subledger': 600, 'difference': -680, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[1, 100], [1, 250], [5, 250], [1, 100], [1, 400], [5, -80]], 'sub': {'bolt': [[10, -80], [10, 400]], 'crux': [[1, 250], [10, 250]]}, 'as_of': 10}, {'control': 1020, 'subledger': 820, 'difference': 200, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[32, 250], [1, 100], [32, 100], [31, 100], [1, -80]], 'sub': {'dyna': [[5, 100]], 'acme': [[5, 400], [5, -80]], 'crux': [[32, -80]], 'bolt': [[32, -80]]}, 'as_of': 31}, {'control': 120, 'subledger': 420, 'difference': -300, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[5, 400], [11, 100]], 'sub': {'bolt': [[5, 400], [1, -80]], 'acme': [[5, 400], [1, 100], [5, -300]], 'dyna': [[1, 100]]}, 'as_of': 10}, {'control': 400, 'subledger': 620, 'difference': -220, 'credit_balances': [], 'open_customers': 3}], ['control 6', {'control': [[31, 400], [32, 400]], 'sub': {'acme': [[1, -80], [31, 400]]}, 'as_of': 31}, {'control': 400, 'subledger': 320, 'difference': 80, 'credit_balances': [], 'open_customers': 1}]]]\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":"ce5c48bb631d45b79dc8169ef7e09cce49f3a0651bab97ad918b396cf67f5daf","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    cut = x['as_of']\n    control = sum(a for d, a in x['control'] if d <= cut)\n    per = {}\n    for cust, rows in x['sub'].items():\n        per[cust] = sum(a for d, a in rows if d <= cut)\n    sub_total = sum(per.values())\n    credit = sorted(c for c, v in per.items() if v < 0)\n    return {'control': control, 'subledger': sub_total, 'difference': control - sub_total, 'credit_balances': credit, 'open_customers': sum(1 for v in per.values() if v != 0)}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: open customer count', {'control': [[9, 250], [10, 100], [11, 400]], 'sub': {'dyna': [[1, 400], [11, 400]], 'acme': [[1, -300], [10, 250], [1, -80]], 'bolt': [[1, -80]]}, 'as_of': 10}, {'control': 350, 'subledger': 190, 'difference': 160, 'credit_balances': ['acme', 'bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 100], [19, -80], [21, -80]], 'sub': {'bolt': [[5, -80], [1, 250], [5, -80]], 'acme': [[21, 100]], 'dyna': [[20, 400], [1, 250], [20, 100]], 'crux': [[20, 400], [5, 100]]}, 'as_of': 20}, {'control': 20, 'subledger': 1340, 'difference': -1320, 'credit_balances': [], 'open_customers': 3}], ['control 1', {'control': [[21, 400], [5, 250], [19, 250], [20, 400], [19, -80]], 'sub': {'bolt': [[5, 250]]}, 'as_of': 20}, {'control': 820, 'subledger': 250, 'difference': 570, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 100], [10, 100], [9, 400], [10, 100], [1, 250], [9, 250]], 'sub': {'dyna': [[1, 400], [11, 400], [1, 400]]}, 'as_of': 10}, {'control': 1200, 'subledger': 800, 'difference': 400, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[10, 400], [10, 100], [9, 250], [11, 250], [1, 400]], 'sub': {'bolt': [[11, 400], [10, 400], [5, 100]]}, 'as_of': 10}, {'control': 1150, 'subledger': 500, 'difference': 650, 'credit_balances': [], 'open_customers': 1}], ['control 4', {'control': [[5, 400], [1, 250], [9, -80], [5, -80], [5, 250]], 'sub': {'acme': [[5, 250], [11, 100]], 'crux': [[5, 400]], 'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 5', {'control': [[11, 250], [1, -80], [11, 400], [1, -80]], 'sub': {'acme': [[1, 250], [1, -80], [11, 250]], 'bolt': [[11, 100]], 'dyna': [[11, -80]]}, 'as_of': 10}, {'control': -160, 'subledger': 170, 'difference': -330, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[31, 400], [30, 250]], 'sub': {'bolt': [[1, 400], [1, 400], [5, -300]], 'acme': [[32, 250]], 'crux': [[5, -300], [31, 400], [5, -300]]}, 'as_of': 31}, {'control': 650, 'subledger': 300, 'difference': 350, 'credit_balances': ['crux'], 'open_customers': 2}], ['control 1', {'control': [[1, 400], [11, 250]], 'sub': {'dyna': [[1, 250]], 'crux': [[1, 250], [1, 250], [1, 100]], 'acme': [[10, 250], [1, 250], [11, 250]], 'bolt': [[11, 250], [5, 400]]}, 'as_of': 10}, {'control': 400, 'subledger': 1750, 'difference': -1350, 'credit_balances': [], 'open_customers': 4}], ['control 2', {'control': [[20, 250], [19, 100], [5, 400]], 'sub': {'bolt': [[20, 250]], 'acme': [[1, -300], [1, 100], [1, 250]]}, 'as_of': 20}, {'control': 750, 'subledger': 300, 'difference': 450, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[5, 400], [20, -80], [19, 250]], 'sub': {'acme': [[21, 250]], 'bolt': [[20, 250], [1, -80], [1, -80]], 'dyna': [[21, -80], [20, 100]], 'crux': [[5, 400], [21, 400], [20, -300]]}, 'as_of': 20}, {'control': 570, 'subledger': 290, 'difference': 280, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[10, 250], [9, -80], [1, 250], [1, 100]], 'sub': {'dyna': [[1, 400], [10, 400]], 'acme': [[10, 250], [5, 400], [11, -300]], 'crux': [[11, 250], [1, 400], [5, -300]], 'bolt': [[5, 250]]}, 'as_of': 10}, {'control': 520, 'subledger': 1800, 'difference': -1280, 'credit_balances': [], 'open_customers': 4}], ['control 5', {'control': [[5, -80], [19, 400], [1, -80]], 'sub': {'crux': [[21, -300], [21, 400]], 'bolt': [[1, 250], [21, 250]], 'dyna': [[21, -300], [20, 250], [5, 250]]}, 'as_of': 20}, {'control': 240, 'subledger': 750, 'difference': -510, 'credit_balances': [], 'open_customers': 2}], ['control 6', {'control': [[10, 100], [5, 250], [5, 400], [11, -80], [1, 400], [9, 400]], 'sub': {'dyna': [[5, 250]]}, 'as_of': 10}, {'control': 1550, 'subledger': 250, 'difference': 1300, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[9, 250], [11, 100], [11, -80], [11, 250]], 'sub': {'dyna': [[1, 250], [11, 400], [10, -80]], 'acme': [[11, -300], [1, 400], [1, 400]], 'bolt': [[1, -300]]}, 'as_of': 10}, {'control': 250, 'subledger': 670, 'difference': -420, 'credit_balances': ['bolt'], 'open_customers': 3}], ['regression: open customer count, partial-repair probe', {'control': [[5, 400], [1, 250], [5, -80], [5, 250], [11, -80], [1, 400]], 'sub': {'dyna': [[11, 100]], 'acme': [[5, 400], [1, 100]], 'crux': [[5, 400], [5, -300]]}, 'as_of': 10}, {'control': 1220, 'subledger': 600, 'difference': 620, 'credit_balances': [], 'open_customers': 2}], ['control 1', {'control': [[1, -80], [1, 100], [32, 400], [31, 250]], 'sub': {'bolt': [[1, 250]]}, 'as_of': 31}, {'control': 270, 'subledger': 250, 'difference': 20, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, 250], [1, 400], [11, 100]], 'sub': {'crux': [[5, -80], [1, 250], [1, 250]]}, 'as_of': 10}, {'control': 650, 'subledger': 420, 'difference': 230, 'credit_balances': [], 'open_customers': 1}], ['control 3', {'control': [[5, 250], [30, 400], [30, -80], [1, -80], [5, 250]], 'sub': {'bolt': [[5, 250]], 'acme': [[1, 250]], 'dyna': [[31, 400]]}, 'as_of': 31}, {'control': 740, 'subledger': 900, 'difference': -160, 'credit_balances': [], 'open_customers': 3}], ['control 4', {'control': [[19, 100], [21, 250], [20, -80], [20, -80], [19, 400], [21, 100]], 'sub': {'dyna': [[21, 100]], 'acme': [[21, 100], [21, 400], [20, 250]], 'crux': [[20, -80], [21, -80], [5, 250]]}, 'as_of': 20}, {'control': 340, 'subledger': 420, 'difference': -80, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[31, -80], [32, 400], [31, -80], [5, -80], [31, 250]], 'sub': {'dyna': [[1, 400], [1, 250]], 'acme': [[32, -80], [31, 100]]}, 'as_of': 31}, {'control': 10, 'subledger': 750, 'difference': -740, 'credit_balances': [], 'open_customers': 2}]], [['regression: open customer count', {'control': [[31, -80], [5, 100], [31, 100]], 'sub': {'crux': [[32, 250]], 'dyna': [[32, 250]], 'acme': [[1, -300], [32, 250]]}, 'as_of': 31}, {'control': 120, 'subledger': -300, 'difference': 420, 'credit_balances': ['acme'], 'open_customers': 1}], ['control 1', {'control': [[20, -80], [21, 100]], 'sub': {'dyna': [[1, -80], [20, 250]], 'bolt': [[1, -300], [20, 400], [21, -300]]}, 'as_of': 20}, {'control': -80, 'subledger': 270, 'difference': -350, 'credit_balances': [], 'open_customers': 2}], ['control 2', {'control': [[1, -80], [20, -80], [19, -80], [19, -80], [21, 400]], 'sub': {'acme': [[21, 250]]}, 'as_of': 20}, {'control': -320, 'subledger': 0, 'difference': -320, 'credit_balances': [], 'open_customers': 0}], ['control 3', {'control': [[5, 250], [5, 400], [1, -80], [31, 100], [30, 100]], 'sub': {'dyna': [[32, -300]], 'crux': [[5, 250], [1, 250]], 'acme': [[31, 400]]}, 'as_of': 31}, {'control': 770, 'subledger': 900, 'difference': -130, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[31, 250], [1, -80], [5, 100], [31, 250], [5, 100]], 'sub': {'crux': [[32, -300], [1, 250]]}, 'as_of': 31}, {'control': 620, 'subledger': 250, 'difference': 370, 'credit_balances': [], 'open_customers': 1}], ['control 5', {'control': [[31, 250], [5, -80], [1, 400], [32, 400], [1, 400]], 'sub': {'crux': [[5, 250], [1, 400]]}, 'as_of': 31}, {'control': 970, 'subledger': 650, 'difference': 320, 'credit_balances': [], 'open_customers': 1}], ['control 6', {'control': [[1, 100], [11, 100], [1, 100], [9, 400], [9, 100], [9, 100]], 'sub': {'dyna': [[1, 100], [5, 100]]}, 'as_of': 10}, {'control': 800, 'subledger': 200, 'difference': 600, 'credit_balances': [], 'open_customers': 1}]], [['regression: open customer count', {'control': [[5, 100], [5, 250], [19, -80], [21, 250], [21, 250]], 'sub': {'crux': [[20, -80], [20, -80]], 'acme': [[21, 100]]}, 'as_of': 20}, {'control': 270, 'subledger': -160, 'difference': 430, 'credit_balances': ['crux'], 'open_customers': 1}], ['control 1', {'control': [[1, -80], [5, 100], [20, 400], [19, 250], [1, 250]], 'sub': {'crux': [[20, 250], [20, -80], [20, 250]]}, 'as_of': 20}, {'control': 920, 'subledger': 420, 'difference': 500, 'credit_balances': [], 'open_customers': 1}], ['control 2', {'control': [[9, -80], [11, 400]], 'sub': {'bolt': [[5, 100], [5, 250]], 'acme': [[11, 100], [11, -80], [10, 250]]}, 'as_of': 10}, {'control': -80, 'subledger': 600, 'difference': -680, 'credit_balances': [], 'open_customers': 2}], ['control 3', {'control': [[1, 100], [1, 250], [5, 250], [1, 100], [1, 400], [5, -80]], 'sub': {'bolt': [[10, -80], [10, 400]], 'crux': [[1, 250], [10, 250]]}, 'as_of': 10}, {'control': 1020, 'subledger': 820, 'difference': 200, 'credit_balances': [], 'open_customers': 2}], ['control 4', {'control': [[32, 250], [1, 100], [32, 100], [31, 100], [1, -80]], 'sub': {'dyna': [[5, 100]], 'acme': [[5, 400], [5, -80]], 'crux': [[32, -80]], 'bolt': [[32, -80]]}, 'as_of': 31}, {'control': 120, 'subledger': 420, 'difference': -300, 'credit_balances': [], 'open_customers': 2}], ['control 5', {'control': [[5, 400], [11, 100]], 'sub': {'bolt': [[5, 400], [1, -80]], 'acme': [[5, 400], [1, 100], [5, -300]], 'dyna': [[1, 100]]}, 'as_of': 10}, {'control': 400, 'subledger': 620, 'difference': -220, 'credit_balances': [], 'open_customers': 3}], ['control 6', {'control': [[31, 400], [32, 400]], 'sub': {'acme': [[1, -80], [31, 400]]}, 'as_of': 31}, {'control': 400, 'subledger': 320, 'difference': 80, 'credit_balances': [], 'open_customers': 1}]]]\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-subledger-control-tieout-open-customer-count","generated_at":"2026-09-29T14:46:25.118329+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":"Count every customer with a nonzero balance.","root_cause":"Only positive balances count as open accounts.","sha256":"2d1dcb0f1bd537f67c677739707a7e541144b503201577cf27dd34fd6f5be1cb","title":"Receivables subledger tie-out: open customer count · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.371,"exit_code":1,"observations":[{"actual":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":3,"subledger":190},"check":"regression: open customer count","expected":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":3,"subledger":190},"passed":true},{"actual":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":4,"subledger":1340},"check":"regression: open customer count, partial-repair probe","expected":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":3,"subledger":1340},"passed":false},{"actual":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"check":"control 1","expected":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"passed":true},{"actual":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"check":"control 2","expected":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"passed":true},{"actual":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"check":"control 3","expected":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"passed":true},{"actual":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"check":"control 4","expected":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"passed":true},{"actual":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":3,"subledger":170},"check":"control 5","expected":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":1,"subledger":170},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: open customer count\", \"actual\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 3}, \"expected\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"regression: open customer count, partial-repair probe\", \"actual\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 4}, \"expected\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": false}], \"passed\": false}\n"},"broken":{"elapsed_ms":41.496,"exit_code":1,"observations":[{"actual":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":1,"subledger":190},"check":"regression: open customer count","expected":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":3,"subledger":190},"passed":false},{"actual":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":3,"subledger":1340},"check":"regression: open customer count, partial-repair probe","expected":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":3,"subledger":1340},"passed":true},{"actual":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"check":"control 1","expected":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"passed":true},{"actual":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"check":"control 2","expected":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"passed":true},{"actual":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"check":"control 3","expected":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"passed":true},{"actual":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"check":"control 4","expected":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"passed":true},{"actual":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":1,"subledger":170},"check":"control 5","expected":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":1,"subledger":170},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: open customer count\", \"actual\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 1}, \"expected\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 3}, \"passed\": false}, {\"check\": \"regression: open customer count, partial-repair probe\", \"actual\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.666,"exit_code":0,"observations":[{"actual":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":3,"subledger":190},"check":"regression: open customer count","expected":{"control":350,"credit_balances":["acme","bolt"],"difference":160,"open_customers":3,"subledger":190},"passed":true},{"actual":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":3,"subledger":1340},"check":"regression: open customer count, partial-repair probe","expected":{"control":20,"credit_balances":[],"difference":-1320,"open_customers":3,"subledger":1340},"passed":true},{"actual":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"check":"control 1","expected":{"control":820,"credit_balances":[],"difference":570,"open_customers":1,"subledger":250},"passed":true},{"actual":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"check":"control 2","expected":{"control":1200,"credit_balances":[],"difference":400,"open_customers":1,"subledger":800},"passed":true},{"actual":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"check":"control 3","expected":{"control":1150,"credit_balances":[],"difference":650,"open_customers":1,"subledger":500},"passed":true},{"actual":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"check":"control 4","expected":{"control":740,"credit_balances":[],"difference":-160,"open_customers":3,"subledger":900},"passed":true},{"actual":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":1,"subledger":170},"check":"control 5","expected":{"control":-160,"credit_balances":[],"difference":-330,"open_customers":1,"subledger":170},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: open customer count\", \"actual\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 3}, \"expected\": {\"control\": 350, \"subledger\": 190, \"difference\": 160, \"credit_balances\": [\"acme\", \"bolt\"], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"regression: open customer count, partial-repair probe\", \"actual\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": 20, \"subledger\": 1340, \"difference\": -1320, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 820, \"subledger\": 250, \"difference\": 570, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1200, \"subledger\": 800, \"difference\": 400, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": 1150, \"subledger\": 500, \"difference\": 650, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"expected\": {\"control\": 740, \"subledger\": 900, \"difference\": -160, \"credit_balances\": [], \"open_customers\": 3}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 1}, \"expected\": {\"control\": -160, \"subledger\": 170, \"difference\": -330, \"credit_balances\": [], \"open_customers\": 1}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}