{"abstract":"Net receivables use the pre-adjustment allowance.","category":"Double-entry ledger accounting","checks":7,"contract":"x = {'as_of': day, 'invoices': [[id, due_day, open cents]], 'rates': [[max_days_past_due or None, basis points]] ascending, 'allowance': existing credit balance (negative = debit balance), 'writeoffs': ids}. Written-off invoices leave receivables and reduce the allowance by their amount. Days past due = max(0, as_of - due); an invoice goes in the first bucket whose limit is None or >= days. Required allowance = sum over buckets of bucket total * bp / 10000 rounded half-up per bucket. Return {'buckets', 'required', 'adjustment': required - allowance after write-offs, 'net_ar'}.","evaluation_group":"w2-double-entry-ledger-accounting-aging-allowance","failed_approach":"Summing all invoices includes the written-off receivables.","family":"w2-double-entry-ledger-accounting-aging-allowance-net-receivable-base","id":"FA-58146","implementations":{"attempt":{"sha256":"b638d291fe88f9ec01eb92fde4c2cd868317d6f7ac84c0195c17912222427fb5","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    wo = set(x['writeoffs'])\n    allowance = x['allowance']\n    buckets = [0] * len(x['rates'])\n    for iid, due, amt in x['invoices']:\n        if iid in wo:\n            allowance -= amt\n            continue\n        past = max(0, x['as_of'] - due)\n        for k, (limit, bp) in enumerate(x['rates']):\n            if limit is None or past <= limit:\n                buckets[k] += amt\n                break\n    required = 0\n    for total, (limit, bp) in zip(buckets, x['rates']):\n        q, r = divmod(total * bp, 10000)\n        required += q + (1 if 2 * r >= 10000 else 0)\n    ar = sum(buckets)\n    return {'buckets': buckets, 'required': required, 'adjustment': required - allowance, 'net_ar': sum(amt for _, _, amt in x['invoices']) - required}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', -100, 5], ['I1', 39, 333], ['I2', 9, 2500], ['I3', -100, 4000], ['I4', 69, 150], ['I5', 70, 2500], ['I6', 55, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [0, 0, 150, 333, 6505], 'required': 5035, 'adjustment': 11535, 'net_ar': 1953}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 4000], ['I1', 55, 150], ['I2', -100, 333], ['I3', 100, 150], ['I4', 100, 5], ['I5', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I5']}, {'buckets': [155, 4000, 150, 0, 333], 'required': 475, 'adjustment': 4275, 'net_ar': 4163}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 39, 4000], ['I1', 10, 150], ['I2', 110, 5], ['I3', 40, 5], ['I4', 99, 150], ['I5', 54, 4000], ['I6', 54, 1000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I6']}, {'buckets': [5, 150, 4005, 4150, 0], 'required': 2269, 'adjustment': 2769, 'net_ar': 6041}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 110, 150], ['I2', 100, 4000], ['I3', 40, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': []}, {'buckets': [4150, 0, 8000], 'required': 4083, 'adjustment': 4083, 'net_ar': 8067}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 99, 5], ['I2', 99, 5], ['I3', 110, 5], ['I4', -100, 333], ['I5', -100, 1000], ['I6', 54, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0', 'I1', 'I4']}, {'buckets': [5, 5, 4000, 0, 1000], 'required': 1350, 'adjustment': 2838, 'net_ar': 3660}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 55, 2500], ['I1', 99, 4000], ['I2', 99, 150], ['I3', 55, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0']}, {'buckets': [0, 4150, 5, 0, 0], 'required': 209, 'adjustment': 2509, 'net_ar': 3946}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 4000], ['I1', 100, 333], ['I2', 100, 150], ['I3', 54, 5], ['I4', 39, 333]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': []}, {'buckets': [483, 4000, 338], 'required': 679, 'adjustment': 829, 'net_ar': 4142}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 99, 2500], ['I1', 69, 1000], ['I2', 55, 333], ['I3', 39, 1000], ['I4', 39, 333], ['I5', 40, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1', 'I4', 'I5']}, {'buckets': [0, 2500, 333, 1000, 0], 'required': 575, 'adjustment': 5708, 'net_ar': 3258}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 5], ['I1', 39, 5], ['I2', 10, 150], ['I3', -100, 333], ['I4', 39, 1000], ['I5', 39, 4000], ['I6', 100, 2500]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I3']}, {'buckets': [2500, 5, 5005], 'required': 2554, 'adjustment': 3187, 'net_ar': 4956}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 54, 2500], ['I1', 55, 5], ['I2', 10, 1000], ['I3', 71, 333], ['I4', 71, 1000], ['I5', 100, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 1338, 2500], 'required': 1417, 'adjustment': 2572, 'net_ar': 2421}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 55, 4000], ['I1', 40, 4000], ['I2', 40, 5], ['I3', 39, 4000], ['I4', 55, 1000], ['I5', 110, 150], ['I6', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I1']}, {'buckets': [4150, 0, 5005, 4000, 0], 'required': 2393, 'adjustment': 5893, 'net_ar': 10762}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 5], ['I1', 69, 5], ['I2', 71, 333], ['I3', -100, 5], ['I4', 54, 333], ['I5', 100, 150], ['I6', 71, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0', 'I5']}, {'buckets': [0, 483, 338, 0, 5], 'required': 79, 'adjustment': 34, 'net_ar': 747}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 40, 1000], ['I2', 40, 5], ['I3', 39, 1000], ['I4', 9, 150], ['I5', 10, 1000], ['I6', 10, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 0, 2450], 'required': 1225, 'adjustment': 2030, 'net_ar': 1225}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 69, 333], ['I2', 55, 150], ['I3', 70, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [0, 633, 1000], 'required': 579, 'adjustment': 379, 'net_ar': 1054}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 54, 150], ['I1', 71, 4000], ['I2', 70, 2500], ['I3', 110, 150], ['I4', 99, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 6505, 150, 0, 0], 'required': 348, 'adjustment': -2, 'net_ar': 6307}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 69, 4000], ['I1', 110, 4000], ['I2', 55, 1000], ['I3', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 0, 5000, 0, 0], 'required': 790, 'adjustment': 4790, 'net_ar': 8210}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 100, 4000], ['I1', 69, 1000], ['I2', 55, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [4000, 5000, 0], 'required': 705, 'adjustment': 505, 'net_ar': 8295}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 69, 5], ['I2', 110, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [150, 0, 5, 4000, 0], 'required': 1603, 'adjustment': 1753, 'net_ar': 2552}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 100, 1000], ['I1', 54, 333], ['I2', 69, 1000], ['I3', 40, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [1000, 1000, 483], 'required': 387, 'adjustment': 187, 'net_ar': 2096}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 39, 2500], ['I1', 69, 150], ['I2', 55, 333]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1']}, {'buckets': [0, 0, 333, 2500, 0], 'required': 1050, 'adjustment': 1000, 'net_ar': 1783}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 100, 150], ['I1', 55, 150], ['I2', 40, 1000], ['I3', 10, 1000], ['I4', 10, 4000], ['I5', 10, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I1']}, {'buckets': [150, 0, 1000, 5150, 0], 'required': 2212, 'adjustment': 2512, 'net_ar': 4088}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 110, 150], ['I1', 10, 1000], ['I2', 70, 150], ['I3', 99, 1000], ['I4', 100, 2500], ['I5', 55, 333], ['I6', 54, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [2650, 1150, 0, 1000, 0], 'required': 485, 'adjustment': 968, 'net_ar': 4315}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 10, 5], ['I2', 39, 150], ['I3', 54, 5], ['I4', 70, 2500], ['I5', 40, 150], ['I6', 39, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I4']}, {'buckets': [0, 1000, 165], 'required': 208, 'adjustment': 2658, 'net_ar': 957}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 69, 150], ['I1', 71, 150], ['I2', 70, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [0, 150, 150, 0, 0], 'required': 31, 'adjustment': -319, 'net_ar': 269}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 40, 1000], ['I1', 40, 333], ['I2', 70, 1000], ['I3', 70, 4000], ['I4', 69, 333], ['I5', 10, 4000], ['I6', 9, 2500]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 5000, 1666, 4000, 2500], 'required': 3975, 'adjustment': 4125, 'net_ar': 9191}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 100, 5], ['I2', 70, 150], ['I3', 110, 150], ['I4', 100, 2500], ['I5', -100, 333], ['I6', 100, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [2805, 150, 1000, 0, 333], 'required': 436, 'adjustment': 436, 'net_ar': 3852}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 54, 5], ['I1', 100, 333], ['I2', -100, 4000], ['I3', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [333, 0, 5, 0, 8000], 'required': 6004, 'adjustment': 6154, 'net_ar': 2334}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 333], ['I1', 39, 150], ['I2', 71, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [0, 4333, 0, 150, 0], 'required': 277, 'adjustment': 277, 'net_ar': 4206}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 70, 4000], ['I1', 70, 2500], ['I2', 100, 4000], ['I3', 71, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 4005, 0], 'required': 581, 'adjustment': 3081, 'net_ar': 7424}], ['control 1', {'as_of': 100, 'invoices': [['I0', 99, 1000], ['I1', 9, 333], ['I2', 70, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': []}, {'buckets': [0, 5000, 0, 0, 333], 'required': 500, 'adjustment': 0, 'net_ar': 4833}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 70, 2500], ['I1', 110, 4000], ['I2', -100, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [4000, 2500, 0], 'required': 393, 'adjustment': 43, 'net_ar': 6107}], ['sample 3', {'as_of': 100, 'invoices': [['I0', -100, 4000], ['I1', 9, 4000], ['I2', 110, 1000], ['I3', 100, 333], ['I4', 9, 5], ['I5', 99, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I5']}, {'buckets': [1333, 0, 0, 0, 8005], 'required': 6017, 'adjustment': 6317, 'net_ar': 3321}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 9, 150], ['I1', 9, 1000], ['I2', 54, 1000], ['I3', 99, 2500], ['I4', 69, 333], ['I5', 71, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 2505, 1333, 0, 1150], 'required': 1188, 'adjustment': 1338, 'net_ar': 3800}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 110, 150], ['I2', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0']}, {'buckets': [4150, 0, 0, 0, 0], 'required': 42, 'adjustment': 342, 'net_ar': 4108}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 40, 4000], ['I1', 39, 1000], ['I2', -100, 5], ['I3', 99, 5], ['I4', -100, 333], ['I5', 10, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 0, 4000, 5000, 338], 'required': 2854, 'adjustment': 2359, 'net_ar': 6484}]]]\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":"d5e562c36eb103d53d00eb0db3825ccc5162793b3f98879e3a3d0d647e0c7b89","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    wo = set(x['writeoffs'])\n    allowance = x['allowance']\n    buckets = [0] * len(x['rates'])\n    for iid, due, amt in x['invoices']:\n        if iid in wo:\n            allowance -= amt\n            continue\n        past = max(0, x['as_of'] - due)\n        for k, (limit, bp) in enumerate(x['rates']):\n            if limit is None or past <= limit:\n                buckets[k] += amt\n                break\n    required = 0\n    for total, (limit, bp) in zip(buckets, x['rates']):\n        q, r = divmod(total * bp, 10000)\n        required += q + (1 if 2 * r >= 10000 else 0)\n    ar = sum(buckets)\n    return {'buckets': buckets, 'required': required, 'adjustment': required - allowance, 'net_ar': ar - allowance}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', -100, 5], ['I1', 39, 333], ['I2', 9, 2500], ['I3', -100, 4000], ['I4', 69, 150], ['I5', 70, 2500], ['I6', 55, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [0, 0, 150, 333, 6505], 'required': 5035, 'adjustment': 11535, 'net_ar': 1953}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 4000], ['I1', 55, 150], ['I2', -100, 333], ['I3', 100, 150], ['I4', 100, 5], ['I5', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I5']}, {'buckets': [155, 4000, 150, 0, 333], 'required': 475, 'adjustment': 4275, 'net_ar': 4163}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 39, 4000], ['I1', 10, 150], ['I2', 110, 5], ['I3', 40, 5], ['I4', 99, 150], ['I5', 54, 4000], ['I6', 54, 1000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I6']}, {'buckets': [5, 150, 4005, 4150, 0], 'required': 2269, 'adjustment': 2769, 'net_ar': 6041}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 110, 150], ['I2', 100, 4000], ['I3', 40, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': []}, {'buckets': [4150, 0, 8000], 'required': 4083, 'adjustment': 4083, 'net_ar': 8067}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 99, 5], ['I2', 99, 5], ['I3', 110, 5], ['I4', -100, 333], ['I5', -100, 1000], ['I6', 54, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0', 'I1', 'I4']}, {'buckets': [5, 5, 4000, 0, 1000], 'required': 1350, 'adjustment': 2838, 'net_ar': 3660}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 55, 2500], ['I1', 99, 4000], ['I2', 99, 150], ['I3', 55, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0']}, {'buckets': [0, 4150, 5, 0, 0], 'required': 209, 'adjustment': 2509, 'net_ar': 3946}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 4000], ['I1', 100, 333], ['I2', 100, 150], ['I3', 54, 5], ['I4', 39, 333]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': []}, {'buckets': [483, 4000, 338], 'required': 679, 'adjustment': 829, 'net_ar': 4142}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 99, 2500], ['I1', 69, 1000], ['I2', 55, 333], ['I3', 39, 1000], ['I4', 39, 333], ['I5', 40, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1', 'I4', 'I5']}, {'buckets': [0, 2500, 333, 1000, 0], 'required': 575, 'adjustment': 5708, 'net_ar': 3258}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 5], ['I1', 39, 5], ['I2', 10, 150], ['I3', -100, 333], ['I4', 39, 1000], ['I5', 39, 4000], ['I6', 100, 2500]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I3']}, {'buckets': [2500, 5, 5005], 'required': 2554, 'adjustment': 3187, 'net_ar': 4956}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 54, 2500], ['I1', 55, 5], ['I2', 10, 1000], ['I3', 71, 333], ['I4', 71, 1000], ['I5', 100, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 1338, 2500], 'required': 1417, 'adjustment': 2572, 'net_ar': 2421}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 55, 4000], ['I1', 40, 4000], ['I2', 40, 5], ['I3', 39, 4000], ['I4', 55, 1000], ['I5', 110, 150], ['I6', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I1']}, {'buckets': [4150, 0, 5005, 4000, 0], 'required': 2393, 'adjustment': 5893, 'net_ar': 10762}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 5], ['I1', 69, 5], ['I2', 71, 333], ['I3', -100, 5], ['I4', 54, 333], ['I5', 100, 150], ['I6', 71, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0', 'I5']}, {'buckets': [0, 483, 338, 0, 5], 'required': 79, 'adjustment': 34, 'net_ar': 747}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 40, 1000], ['I2', 40, 5], ['I3', 39, 1000], ['I4', 9, 150], ['I5', 10, 1000], ['I6', 10, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 0, 2450], 'required': 1225, 'adjustment': 2030, 'net_ar': 1225}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 69, 333], ['I2', 55, 150], ['I3', 70, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [0, 633, 1000], 'required': 579, 'adjustment': 379, 'net_ar': 1054}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 54, 150], ['I1', 71, 4000], ['I2', 70, 2500], ['I3', 110, 150], ['I4', 99, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 6505, 150, 0, 0], 'required': 348, 'adjustment': -2, 'net_ar': 6307}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 69, 4000], ['I1', 110, 4000], ['I2', 55, 1000], ['I3', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 0, 5000, 0, 0], 'required': 790, 'adjustment': 4790, 'net_ar': 8210}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 100, 4000], ['I1', 69, 1000], ['I2', 55, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [4000, 5000, 0], 'required': 705, 'adjustment': 505, 'net_ar': 8295}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 69, 5], ['I2', 110, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [150, 0, 5, 4000, 0], 'required': 1603, 'adjustment': 1753, 'net_ar': 2552}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 100, 1000], ['I1', 54, 333], ['I2', 69, 1000], ['I3', 40, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [1000, 1000, 483], 'required': 387, 'adjustment': 187, 'net_ar': 2096}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 39, 2500], ['I1', 69, 150], ['I2', 55, 333]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1']}, {'buckets': [0, 0, 333, 2500, 0], 'required': 1050, 'adjustment': 1000, 'net_ar': 1783}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 100, 150], ['I1', 55, 150], ['I2', 40, 1000], ['I3', 10, 1000], ['I4', 10, 4000], ['I5', 10, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I1']}, {'buckets': [150, 0, 1000, 5150, 0], 'required': 2212, 'adjustment': 2512, 'net_ar': 4088}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 110, 150], ['I1', 10, 1000], ['I2', 70, 150], ['I3', 99, 1000], ['I4', 100, 2500], ['I5', 55, 333], ['I6', 54, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [2650, 1150, 0, 1000, 0], 'required': 485, 'adjustment': 968, 'net_ar': 4315}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 10, 5], ['I2', 39, 150], ['I3', 54, 5], ['I4', 70, 2500], ['I5', 40, 150], ['I6', 39, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I4']}, {'buckets': [0, 1000, 165], 'required': 208, 'adjustment': 2658, 'net_ar': 957}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 69, 150], ['I1', 71, 150], ['I2', 70, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [0, 150, 150, 0, 0], 'required': 31, 'adjustment': -319, 'net_ar': 269}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 40, 1000], ['I1', 40, 333], ['I2', 70, 1000], ['I3', 70, 4000], ['I4', 69, 333], ['I5', 10, 4000], ['I6', 9, 2500]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 5000, 1666, 4000, 2500], 'required': 3975, 'adjustment': 4125, 'net_ar': 9191}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 100, 5], ['I2', 70, 150], ['I3', 110, 150], ['I4', 100, 2500], ['I5', -100, 333], ['I6', 100, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [2805, 150, 1000, 0, 333], 'required': 436, 'adjustment': 436, 'net_ar': 3852}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 54, 5], ['I1', 100, 333], ['I2', -100, 4000], ['I3', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [333, 0, 5, 0, 8000], 'required': 6004, 'adjustment': 6154, 'net_ar': 2334}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 333], ['I1', 39, 150], ['I2', 71, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [0, 4333, 0, 150, 0], 'required': 277, 'adjustment': 277, 'net_ar': 4206}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 70, 4000], ['I1', 70, 2500], ['I2', 100, 4000], ['I3', 71, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 4005, 0], 'required': 581, 'adjustment': 3081, 'net_ar': 7424}], ['control 1', {'as_of': 100, 'invoices': [['I0', 99, 1000], ['I1', 9, 333], ['I2', 70, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': []}, {'buckets': [0, 5000, 0, 0, 333], 'required': 500, 'adjustment': 0, 'net_ar': 4833}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 70, 2500], ['I1', 110, 4000], ['I2', -100, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [4000, 2500, 0], 'required': 393, 'adjustment': 43, 'net_ar': 6107}], ['sample 3', {'as_of': 100, 'invoices': [['I0', -100, 4000], ['I1', 9, 4000], ['I2', 110, 1000], ['I3', 100, 333], ['I4', 9, 5], ['I5', 99, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I5']}, {'buckets': [1333, 0, 0, 0, 8005], 'required': 6017, 'adjustment': 6317, 'net_ar': 3321}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 9, 150], ['I1', 9, 1000], ['I2', 54, 1000], ['I3', 99, 2500], ['I4', 69, 333], ['I5', 71, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 2505, 1333, 0, 1150], 'required': 1188, 'adjustment': 1338, 'net_ar': 3800}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 110, 150], ['I2', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0']}, {'buckets': [4150, 0, 0, 0, 0], 'required': 42, 'adjustment': 342, 'net_ar': 4108}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 40, 4000], ['I1', 39, 1000], ['I2', -100, 5], ['I3', 99, 5], ['I4', -100, 333], ['I5', 10, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 0, 4000, 5000, 338], 'required': 2854, 'adjustment': 2359, 'net_ar': 6484}]]]\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":"87babad1f68b17f3288ebd3b6ec8b6e271454602d882c25e0c46631a67009802","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    wo = set(x['writeoffs'])\n    allowance = x['allowance']\n    buckets = [0] * len(x['rates'])\n    for iid, due, amt in x['invoices']:\n        if iid in wo:\n            allowance -= amt\n            continue\n        past = max(0, x['as_of'] - due)\n        for k, (limit, bp) in enumerate(x['rates']):\n            if limit is None or past <= limit:\n                buckets[k] += amt\n                break\n    required = 0\n    for total, (limit, bp) in zip(buckets, x['rates']):\n        q, r = divmod(total * bp, 10000)\n        required += q + (1 if 2 * r >= 10000 else 0)\n    ar = sum(buckets)\n    return {'buckets': buckets, 'required': required, 'adjustment': required - allowance, 'net_ar': ar - required}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', -100, 5], ['I1', 39, 333], ['I2', 9, 2500], ['I3', -100, 4000], ['I4', 69, 150], ['I5', 70, 2500], ['I6', 55, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [0, 0, 150, 333, 6505], 'required': 5035, 'adjustment': 11535, 'net_ar': 1953}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 4000], ['I1', 55, 150], ['I2', -100, 333], ['I3', 100, 150], ['I4', 100, 5], ['I5', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I5']}, {'buckets': [155, 4000, 150, 0, 333], 'required': 475, 'adjustment': 4275, 'net_ar': 4163}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 39, 4000], ['I1', 10, 150], ['I2', 110, 5], ['I3', 40, 5], ['I4', 99, 150], ['I5', 54, 4000], ['I6', 54, 1000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I6']}, {'buckets': [5, 150, 4005, 4150, 0], 'required': 2269, 'adjustment': 2769, 'net_ar': 6041}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 110, 150], ['I2', 100, 4000], ['I3', 40, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': []}, {'buckets': [4150, 0, 8000], 'required': 4083, 'adjustment': 4083, 'net_ar': 8067}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 99, 5], ['I2', 99, 5], ['I3', 110, 5], ['I4', -100, 333], ['I5', -100, 1000], ['I6', 54, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0', 'I1', 'I4']}, {'buckets': [5, 5, 4000, 0, 1000], 'required': 1350, 'adjustment': 2838, 'net_ar': 3660}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 55, 2500], ['I1', 99, 4000], ['I2', 99, 150], ['I3', 55, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0']}, {'buckets': [0, 4150, 5, 0, 0], 'required': 209, 'adjustment': 2509, 'net_ar': 3946}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 4000], ['I1', 100, 333], ['I2', 100, 150], ['I3', 54, 5], ['I4', 39, 333]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': []}, {'buckets': [483, 4000, 338], 'required': 679, 'adjustment': 829, 'net_ar': 4142}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 99, 2500], ['I1', 69, 1000], ['I2', 55, 333], ['I3', 39, 1000], ['I4', 39, 333], ['I5', 40, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1', 'I4', 'I5']}, {'buckets': [0, 2500, 333, 1000, 0], 'required': 575, 'adjustment': 5708, 'net_ar': 3258}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 99, 5], ['I1', 39, 5], ['I2', 10, 150], ['I3', -100, 333], ['I4', 39, 1000], ['I5', 39, 4000], ['I6', 100, 2500]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I3']}, {'buckets': [2500, 5, 5005], 'required': 2554, 'adjustment': 3187, 'net_ar': 4956}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 54, 2500], ['I1', 55, 5], ['I2', 10, 1000], ['I3', 71, 333], ['I4', 71, 1000], ['I5', 100, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': -150, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 1338, 2500], 'required': 1417, 'adjustment': 2572, 'net_ar': 2421}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 55, 4000], ['I1', 40, 4000], ['I2', 40, 5], ['I3', 39, 4000], ['I4', 55, 1000], ['I5', 110, 150], ['I6', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I1']}, {'buckets': [4150, 0, 5005, 4000, 0], 'required': 2393, 'adjustment': 5893, 'net_ar': 10762}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 70, 5], ['I1', 69, 5], ['I2', 71, 333], ['I3', -100, 5], ['I4', 54, 333], ['I5', 100, 150], ['I6', 71, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I0', 'I5']}, {'buckets': [0, 483, 338, 0, 5], 'required': 79, 'adjustment': 34, 'net_ar': 747}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 40, 1000], ['I2', 40, 5], ['I3', 39, 1000], ['I4', 9, 150], ['I5', 10, 1000], ['I6', 10, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I5']}, {'buckets': [0, 0, 2450], 'required': 1225, 'adjustment': 2030, 'net_ar': 1225}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 69, 333], ['I2', 55, 150], ['I3', 70, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [0, 633, 1000], 'required': 579, 'adjustment': 379, 'net_ar': 1054}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 54, 150], ['I1', 71, 4000], ['I2', 70, 2500], ['I3', 110, 150], ['I4', 99, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 6505, 150, 0, 0], 'required': 348, 'adjustment': -2, 'net_ar': 6307}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 69, 4000], ['I1', 110, 4000], ['I2', 55, 1000], ['I3', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 0, 5000, 0, 0], 'required': 790, 'adjustment': 4790, 'net_ar': 8210}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 100, 4000], ['I1', 69, 1000], ['I2', 55, 4000]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [4000, 5000, 0], 'required': 705, 'adjustment': 505, 'net_ar': 8295}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 10, 4000], ['I1', 69, 5], ['I2', 110, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [150, 0, 5, 4000, 0], 'required': 1603, 'adjustment': 1753, 'net_ar': 2552}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 100, 1000], ['I1', 54, 333], ['I2', 69, 1000], ['I3', 40, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': []}, {'buckets': [1000, 1000, 483], 'required': 387, 'adjustment': 187, 'net_ar': 2096}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 39, 2500], ['I1', 69, 150], ['I2', 55, 333]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 200, 'writeoffs': ['I1']}, {'buckets': [0, 0, 333, 2500, 0], 'required': 1050, 'adjustment': 1000, 'net_ar': 1783}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 100, 150], ['I1', 55, 150], ['I2', 40, 1000], ['I3', 10, 1000], ['I4', 10, 4000], ['I5', 10, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I1']}, {'buckets': [150, 0, 1000, 5150, 0], 'required': 2212, 'adjustment': 2512, 'net_ar': 4088}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 110, 150], ['I1', 10, 1000], ['I2', 70, 150], ['I3', 99, 1000], ['I4', 100, 2500], ['I5', 55, 333], ['I6', 54, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': ['I5', 'I6']}, {'buckets': [2650, 1150, 0, 1000, 0], 'required': 485, 'adjustment': 968, 'net_ar': 4315}], ['sample 1', {'as_of': 100, 'invoices': [['I0', 70, 1000], ['I1', 10, 5], ['I2', 39, 150], ['I3', 54, 5], ['I4', 70, 2500], ['I5', 40, 150], ['I6', 39, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 200, 'writeoffs': ['I2', 'I4']}, {'buckets': [0, 1000, 165], 'required': 208, 'adjustment': 2658, 'net_ar': 957}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 69, 150], ['I1', 71, 150], ['I2', 70, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [0, 150, 150, 0, 0], 'required': 31, 'adjustment': -319, 'net_ar': 269}], ['sample 3', {'as_of': 100, 'invoices': [['I0', 40, 1000], ['I1', 40, 333], ['I2', 70, 1000], ['I3', 70, 4000], ['I4', 69, 333], ['I5', 10, 4000], ['I6', 9, 2500]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 5000, 1666, 4000, 2500], 'required': 3975, 'adjustment': 4125, 'net_ar': 9191}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 54, 1000], ['I1', 100, 5], ['I2', 70, 150], ['I3', 110, 150], ['I4', 100, 2500], ['I5', -100, 333], ['I6', 100, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [2805, 150, 1000, 0, 333], 'required': 436, 'adjustment': 436, 'net_ar': 3852}], ['sample 5', {'as_of': 100, 'invoices': [['I0', 54, 5], ['I1', 100, 333], ['I2', -100, 4000], ['I3', 9, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [333, 0, 5, 0, 8000], 'required': 6004, 'adjustment': 6154, 'net_ar': 2334}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 71, 333], ['I1', 39, 150], ['I2', 71, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 0, 'writeoffs': []}, {'buckets': [0, 4333, 0, 150, 0], 'required': 277, 'adjustment': 277, 'net_ar': 4206}]], [['regression: net receivable base', {'as_of': 100, 'invoices': [['I0', 70, 4000], ['I1', 70, 2500], ['I2', 100, 4000], ['I3', 71, 5]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 0, 'writeoffs': ['I1']}, {'buckets': [4000, 4005, 0], 'required': 581, 'adjustment': 3081, 'net_ar': 7424}], ['control 1', {'as_of': 100, 'invoices': [['I0', 99, 1000], ['I1', 9, 333], ['I2', 70, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': []}, {'buckets': [0, 5000, 0, 0, 333], 'required': 500, 'adjustment': 0, 'net_ar': 4833}], ['sample 2', {'as_of': 100, 'invoices': [['I0', 70, 2500], ['I1', 110, 4000], ['I2', -100, 150]], 'rates': [[0, 200], [45, 1250], [None, 5000]], 'allowance': 500, 'writeoffs': ['I2']}, {'buckets': [4000, 2500, 0], 'required': 393, 'adjustment': 43, 'net_ar': 6107}], ['sample 3', {'as_of': 100, 'invoices': [['I0', -100, 4000], ['I1', 9, 4000], ['I2', 110, 1000], ['I3', 100, 333], ['I4', 9, 5], ['I5', 99, 150]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I5']}, {'buckets': [1333, 0, 0, 0, 8005], 'required': 6017, 'adjustment': 6317, 'net_ar': 3321}], ['sample 4', {'as_of': 100, 'invoices': [['I0', 9, 150], ['I1', 9, 1000], ['I2', 54, 1000], ['I3', 99, 2500], ['I4', 69, 333], ['I5', 71, 5]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': []}, {'buckets': [0, 2505, 1333, 0, 1150], 'required': 1188, 'adjustment': 1338, 'net_ar': 3800}], ['sample 5', {'as_of': 100, 'invoices': [['I0', -100, 150], ['I1', 110, 150], ['I2', 100, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': -150, 'writeoffs': ['I0']}, {'buckets': [4150, 0, 0, 0, 0], 'required': 42, 'adjustment': 342, 'net_ar': 4108}], ['sample 6', {'as_of': 100, 'invoices': [['I0', 40, 4000], ['I1', 39, 1000], ['I2', -100, 5], ['I3', 99, 5], ['I4', -100, 333], ['I5', 10, 4000]], 'rates': [[0, 100], [30, 500], [60, 1500], [90, 4000], [None, 7500]], 'allowance': 500, 'writeoffs': ['I3']}, {'buckets': [0, 0, 4000, 5000, 338], 'required': 2854, 'adjustment': 2359, 'net_ar': 6484}]]]\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-aging-allowance-net-receivable-base","generated_at":"2026-09-29T14:46:23.983918+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":"Report receivables net of the required allowance.","root_cause":"Net AR subtracts the old allowance instead of the required allowance.","sha256":"9488f8aed9df6c1dec31008c748785b84ceaaab54577934f2f746bdef07d5247","title":"Aging-based allowance adjustment: net receivable base · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":41.289,"exit_code":1,"observations":[{"actual":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":8453,"required":5035},"check":"regression: net receivable base","expected":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":1953,"required":5035},"passed":false},{"actual":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":8163,"required":475},"check":"sample 1","expected":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":4163,"required":475},"passed":false},{"actual":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":7041,"required":2269},"check":"sample 2","expected":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":6041,"required":2269},"passed":false},{"actual":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":8067,"required":4083},"check":"sample 3","expected":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":8067,"required":4083},"passed":true},{"actual":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":4998,"required":1350},"check":"sample 4","expected":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":3660,"required":1350},"passed":false},{"actual":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":6446,"required":209},"check":"sample 5","expected":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":3946,"required":209},"passed":false},{"actual":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4142,"required":679},"check":"sample 6","expected":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4142,"required":679},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: net receivable base\", \"actual\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 8453}, \"expected\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 1953}, \"passed\": false}, {\"check\": \"sample 1\", \"actual\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 8163}, \"expected\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 4163}, \"passed\": false}, {\"check\": \"sample 2\", \"actual\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 7041}, \"expected\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 6041}, \"passed\": false}, {\"check\": \"sample 3\", \"actual\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 8067}, \"expected\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 8067}, \"passed\": true}, {\"check\": \"sample 4\", \"actual\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 4998}, \"expected\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 3660}, \"passed\": false}, {\"check\": \"sample 5\", \"actual\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 6446}, \"expected\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 3946}, \"passed\": false}, {\"check\": \"sample 6\", \"actual\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4142}, \"expected\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4142}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":42.797,"exit_code":1,"observations":[{"actual":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":13488,"required":5035},"check":"regression: net receivable base","expected":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":1953,"required":5035},"passed":false},{"actual":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":8438,"required":475},"check":"sample 1","expected":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":4163,"required":475},"passed":false},{"actual":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":8810,"required":2269},"check":"sample 2","expected":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":6041,"required":2269},"passed":false},{"actual":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":12150,"required":4083},"check":"sample 3","expected":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":8067,"required":4083},"passed":false},{"actual":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":6498,"required":1350},"check":"sample 4","expected":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":3660,"required":1350},"passed":false},{"actual":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":6455,"required":209},"check":"sample 5","expected":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":3946,"required":209},"passed":false},{"actual":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4971,"required":679},"check":"sample 6","expected":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4142,"required":679},"passed":false}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: net receivable base\", \"actual\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 13488}, \"expected\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 1953}, \"passed\": false}, {\"check\": \"sample 1\", \"actual\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 8438}, \"expected\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 4163}, \"passed\": false}, {\"check\": \"sample 2\", \"actual\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 8810}, \"expected\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 6041}, \"passed\": false}, {\"check\": \"sample 3\", \"actual\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 12150}, \"expected\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 8067}, \"passed\": false}, {\"check\": \"sample 4\", \"actual\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 6498}, \"expected\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 3660}, \"passed\": false}, {\"check\": \"sample 5\", \"actual\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 6455}, \"expected\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 3946}, \"passed\": false}, {\"check\": \"sample 6\", \"actual\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4971}, \"expected\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4142}, \"passed\": false}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.001,"exit_code":0,"observations":[{"actual":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":1953,"required":5035},"check":"regression: net receivable base","expected":{"adjustment":11535,"buckets":[0,0,150,333,6505],"net_ar":1953,"required":5035},"passed":true},{"actual":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":4163,"required":475},"check":"sample 1","expected":{"adjustment":4275,"buckets":[155,4000,150,0,333],"net_ar":4163,"required":475},"passed":true},{"actual":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":6041,"required":2269},"check":"sample 2","expected":{"adjustment":2769,"buckets":[5,150,4005,4150,0],"net_ar":6041,"required":2269},"passed":true},{"actual":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":8067,"required":4083},"check":"sample 3","expected":{"adjustment":4083,"buckets":[4150,0,8000],"net_ar":8067,"required":4083},"passed":true},{"actual":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":3660,"required":1350},"check":"sample 4","expected":{"adjustment":2838,"buckets":[5,5,4000,0,1000],"net_ar":3660,"required":1350},"passed":true},{"actual":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":3946,"required":209},"check":"sample 5","expected":{"adjustment":2509,"buckets":[0,4150,5,0,0],"net_ar":3946,"required":209},"passed":true},{"actual":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4142,"required":679},"check":"sample 6","expected":{"adjustment":829,"buckets":[483,4000,338],"net_ar":4142,"required":679},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: net receivable base\", \"actual\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 1953}, \"expected\": {\"buckets\": [0, 0, 150, 333, 6505], \"required\": 5035, \"adjustment\": 11535, \"net_ar\": 1953}, \"passed\": true}, {\"check\": \"sample 1\", \"actual\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 4163}, \"expected\": {\"buckets\": [155, 4000, 150, 0, 333], \"required\": 475, \"adjustment\": 4275, \"net_ar\": 4163}, \"passed\": true}, {\"check\": \"sample 2\", \"actual\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 6041}, \"expected\": {\"buckets\": [5, 150, 4005, 4150, 0], \"required\": 2269, \"adjustment\": 2769, \"net_ar\": 6041}, \"passed\": true}, {\"check\": \"sample 3\", \"actual\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 8067}, \"expected\": {\"buckets\": [4150, 0, 8000], \"required\": 4083, \"adjustment\": 4083, \"net_ar\": 8067}, \"passed\": true}, {\"check\": \"sample 4\", \"actual\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 3660}, \"expected\": {\"buckets\": [5, 5, 4000, 0, 1000], \"required\": 1350, \"adjustment\": 2838, \"net_ar\": 3660}, \"passed\": true}, {\"check\": \"sample 5\", \"actual\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 3946}, \"expected\": {\"buckets\": [0, 4150, 5, 0, 0], \"required\": 209, \"adjustment\": 2509, \"net_ar\": 3946}, \"passed\": true}, {\"check\": \"sample 6\", \"actual\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4142}, \"expected\": {\"buckets\": [483, 4000, 338], \"required\": 679, \"adjustment\": 829, \"net_ar\": 4142}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}