{"abstract":"Balances as of a date omit entries dated that day.","category":"Double-entry ledger accounting","checks":7,"contract":"x = {'period_end': day, 'as_of': day, 'entries': [[id, day, kind, account, signed amount]]}. Every entry of kind 'accrual' dated on or before period_end is reversed by a generated entry 'R-'+id dated period_end + 1 with the negated amount; regular and deferral entries and later accruals are not reversed. Balances include every original and generated row dated on or before as_of; an account with rows in range appears even if its balance is zero. Return {'reversals': [[id, day, amount]], 'balances': {account: amount}}.","evaluation_group":"w2-double-entry-ledger-accounting-auto-reversing-accruals","failed_approach":"Making only regular rows inclusive still drops same-day accruals and reversals.","family":"w2-double-entry-ledger-accounting-auto-reversing-accruals-as-of-inclusivity","id":"FA-58026","implementations":{"attempt":{"sha256":"91a69f1de450739e08a8a51adc573d201a4ab426a9a9d3f22defc13fca7d278a","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    end = x['period_end']\n    rev = []\n    for eid, day, kind, acct, amt in x['entries']:\n        if kind == 'accrual' and day <= end:\n            rev.append(['R-' + eid, end + 1, kind, acct, -amt])\n    bal = {}\n    for eid, day, kind, acct, amt in x['entries'] + rev:\n        if day < x['as_of'] + (1 if kind == 'regular' else 0):\n            bal[acct] = bal.get(acct, 0) + amt\n    return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': bal}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', 250], ['E1', 27, 'regular', 'rent', 250], ['E2', 30, 'accrual', 'cash', -100], ['E3', 30, 'deferral', 'accrued_interest', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -250]], 'balances': {'rent': 250}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'accrued_wages', 250], ['E1', 32, 'regular', 'cash', 100], ['E2', 27, 'accrual', 'rent', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 31, 'regular', 'accrued_interest', -40], ['E5', 32, 'regular', 'cash', -40]], 'as_of': 30}, {'reversals': [['R-E2', 31, -100]], 'balances': {'rent': 100, 'accrued_wages': 100}}], ['control 2', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'accrued_interest', 700], ['E1', 5, 'deferral', 'accrued_interest', -100], ['E2', 5, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [], 'balances': {'accrued_interest': -100, 'cash': -40}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100]], 'balances': {'rent': 700, 'accrued_interest': 0}}], ['control 4', {'period_end': 31, 'entries': [['E0', 5, 'deferral', 'accrued_interest', -40], ['E1', 28, 'deferral', 'accrued_wages', -100], ['E2', 33, 'deferral', 'cash', 100], ['E3', 5, 'accrual', 'accrued_interest', -40], ['E4', 5, 'accrual', 'accrued_interest', 250], ['E5', 31, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E3', 32, 40], ['R-E4', 32, -250], ['R-E5', 32, -100]], 'balances': {'accrued_interest': 170, 'accrued_wages': -100}}], ['control 5', {'period_end': 30, 'entries': [['E0', 30, 'deferral', 'accrued_wages', -40], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 30, 'accrual', 'accrued_wages', -100], ['E3', 30, 'deferral', 'cash', 100], ['E4', 30, 'accrual', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100], ['R-E4', 31, 100]], 'balances': {'accrued_wages': -40, 'accrued_interest': 0, 'cash': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 27, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 27, 'regular', 'accrued_interest', -100], ['E3', 30, 'deferral', 'cash', -40], ['E4', 30, 'deferral', 'rent', 100], ['E5', 30, 'accrual', 'accrued_wages', -40]], 'as_of': 29}, {'reversals': [['R-E0', 31, 40], ['R-E1', 31, -700], ['R-E5', 31, 40]], 'balances': {'rent': -40, 'accrued_interest': 600}}]], [['regression: as-of inclusivity', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_wages', 250], ['E1', 28, 'accrual', 'cash', 100], ['E2', 5, 'accrual', 'accrued_wages', -40], ['E3', 31, 'regular', 'cash', 100], ['E4', 5, 'accrual', 'cash', -40], ['E5', 31, 'accrual', 'accrued_interest', 250], ['E6', 33, 'accrual', 'accrued_interest', -100]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E2', 32, 40], ['R-E4', 32, 40], ['R-E5', 32, -250]], 'balances': {'accrued_wages': 250, 'cash': 100, 'accrued_interest': -100}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'deferral', 'accrued_wages', 100], ['E1', 29, 'regular', 'accrued_wages', 100], ['E2', 32, 'deferral', 'accrued_wages', 700], ['E3', 27, 'deferral', 'rent', -40]], 'as_of': 30}, {'reversals': [], 'balances': {'accrued_wages': 100, 'rent': -40}}], ['control 2', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'accrued_interest', -40], ['E1', 30, 'accrual', 'accrued_interest', 250], ['E2', 29, 'regular', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 27, 'deferral', 'rent', 250], ['E5', 29, 'accrual', 'accrued_interest', -100], ['E6', 27, 'deferral', 'rent', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'accrued_interest': -40, 'rent': 950}}], ['control 3', {'period_end': 28, 'entries': [['E0', 25, 'regular', 'accrued_interest', 100], ['E1', 29, 'accrual', 'cash', 100], ['E2', 30, 'accrual', 'rent', 100], ['E3', 29, 'regular', 'cash', 700], ['E4', 25, 'accrual', 'rent', 700]], 'as_of': 28}, {'reversals': [['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'rent': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'deferral', 'cash', -40], ['E1', 5, 'accrual', 'accrued_interest', -100], ['E2', 25, 'deferral', 'accrued_interest', 250], ['E3', 25, 'accrual', 'accrued_wages', 700], ['E4', 28, 'accrual', 'rent', -100]], 'as_of': 27}, {'reversals': [['R-E1', 29, 100], ['R-E3', 29, -700], ['R-E4', 29, 100]], 'balances': {'accrued_interest': 150, 'accrued_wages': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'rent', 100], ['E1', 29, 'deferral', 'accrued_interest', 700], ['E2', 25, 'regular', 'accrued_wages', -40], ['E3', 28, 'accrual', 'accrued_wages', -100], ['E4', 25, 'accrual', 'accrued_interest', 100], ['E5', 28, 'deferral', 'accrued_wages', 100], ['E6', 30, 'regular', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E3', 29, 100], ['R-E4', 29, -100]], 'balances': {'rent': 100, 'accrued_wages': -40, 'accrued_interest': 100}}], ['control 6', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'cash', 700], ['E1', 32, 'deferral', 'cash', -40], ['E2', 5, 'accrual', 'accrued_wages', -40]], 'as_of': 33}, {'reversals': [['R-E0', 32, -700], ['R-E2', 32, 40]], 'balances': {'cash': -40, 'accrued_wages': 0}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'accrued_interest', 100], ['E1', 30, 'deferral', 'accrued_interest', 250], ['E2', 28, 'accrual', 'rent', -40], ['E3', 28, 'accrual', 'accrued_interest', 100], ['E4', 5, 'accrual', 'accrued_wages', 700]], 'as_of': 27}, {'reversals': [['R-E2', 29, 40], ['R-E3', 29, -100], ['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'accrued_wages': 700}}], ['regression: as-of inclusivity, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'regular', 'cash', 250], ['E1', 29, 'regular', 'rent', 100], ['E2', 29, 'accrual', 'accrued_wages', 250], ['E3', 30, 'accrual', 'rent', 100], ['E4', 5, 'accrual', 'cash', 250], ['E5', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, -250], ['R-E3', 31, -100], ['R-E4', 31, -250]], 'balances': {'cash': 500, 'rent': 100, 'accrued_wages': 150}}], ['control 1', {'period_end': 30, 'entries': [['E0', 5, 'deferral', 'rent', -40], ['E1', 30, 'accrual', 'accrued_wages', 250], ['E2', 30, 'deferral', 'accrued_interest', -40], ['E3', 27, 'accrual', 'accrued_interest', 100], ['E4', 32, 'regular', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 31, -250], ['R-E3', 31, -100]], 'balances': {'rent': -40, 'accrued_interest': 100}}], ['control 2', {'period_end': 30, 'entries': [['E0', 30, 'accrual', 'rent', -100], ['E1', 31, 'regular', 'rent', 700], ['E2', 32, 'deferral', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E0', 31, 100]], 'balances': {}}], ['control 3', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'accrued_interest', 100], ['E1', 31, 'deferral', 'cash', 250], ['E2', 30, 'regular', 'cash', -100]], 'as_of': 33}, {'reversals': [['R-E0', 32, -100]], 'balances': {'accrued_interest': 0, 'cash': 150}}], ['control 4', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'accrued_interest', -40], ['E1', 29, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -40], ['E3', 28, 'accrual', 'accrued_wages', -40], ['E4', 28, 'accrual', 'cash', 100], ['E5', 5, 'accrual', 'rent', 250]], 'as_of': 27}, {'reversals': [['R-E3', 29, 40], ['R-E4', 29, -100], ['R-E5', 29, -250]], 'balances': {'accrued_interest': -40, 'rent': 250}}], ['control 5', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_interest', 700], ['E2', 30, 'accrual', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, 100]], 'balances': {}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'deferral', 'accrued_wages', 700], ['E1', 28, 'accrual', 'cash', 250], ['E2', 28, 'regular', 'cash', 100]], 'as_of': 27}, {'reversals': [['R-E1', 29, -250]], 'balances': {'accrued_wages': 700}}], ['control 1', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'cash', -100], ['E2', 5, 'accrual', 'cash', 100], ['E3', 27, 'regular', 'accrued_interest', 700]], 'as_of': 30}, {'reversals': [['R-E0', 29, 40], ['R-E1', 29, 100], ['R-E2', 29, -100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_interest': 700}}], ['control 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 29, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'rent', 250], ['E3', 29, 'regular', 'accrued_interest', 250]], 'as_of': 30}, {'reversals': [['R-E0', 29, -100]], 'balances': {'cash': 0, 'accrued_interest': 950, 'rent': 250}}], ['control 3', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', -40], ['E1', 30, 'accrual', 'cash', 700], ['E2', 30, 'deferral', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -700]], 'balances': {'cash': -40, 'accrued_wages': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'cash', 100], ['E1', 25, 'accrual', 'cash', 250], ['E2', 27, 'deferral', 'rent', -100], ['E3', 28, 'regular', 'cash', 100], ['E4', 28, 'regular', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 28, 'accrual', 'rent', 250]], 'as_of': 30}, {'reversals': [['R-E1', 29, -250], ['R-E6', 29, -250]], 'balances': {'cash': 200, 'rent': 110}}], ['control 5', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 33, 'accrual', 'accrued_wages', 100], ['E2', 5, 'deferral', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 30, 'accrual', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E3', 32, -700], ['R-E4', 32, -100]], 'balances': {'cash': 1500, 'accrued_wages': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 31, 'deferral', 'cash', 100], ['E1', 31, 'accrual', 'accrued_wages', 100], ['E2', 30, 'deferral', 'accrued_interest', -100], ['E3', 5, 'deferral', 'accrued_interest', 250]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 100, 'accrued_wages': 100, 'accrued_interest': 150}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'cash', -40], ['E1', 27, 'accrual', 'accrued_interest', 100], ['E2', 30, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100]], 'balances': {'cash': -40, 'accrued_interest': 0}}], ['control 1', {'period_end': 28, 'entries': [['E0', 28, 'accrual', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', -100], ['E2', 29, 'deferral', 'cash', 100], ['E3', 28, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'cash', -40], ['E5', 30, 'regular', 'cash', 250]], 'as_of': 27}, {'reversals': [['R-E0', 29, -700]], 'balances': {}}], ['control 2', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'cash', -100], ['E1', 31, 'deferral', 'cash', -100], ['E2', 32, 'regular', 'cash', 700], ['E3', 32, 'accrual', 'rent', 100], ['E4', 31, 'deferral', 'accrued_wages', 700]], 'as_of': 30}, {'reversals': [], 'balances': {}}], ['control 3', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'rent', 100], ['E2', 30, 'accrual', 'rent', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 30, 'deferral', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E0', 29, -100], ['R-E1', 29, -100]], 'balances': {'cash': 100, 'rent': 100}}], ['control 4', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 28, 'deferral', 'accrued_wages', -100], ['E3', 31, 'accrual', 'cash', 250], ['E4', 30, 'deferral', 'accrued_wages', 250]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E3', 32, -250]], 'balances': {'cash': 100, 'accrued_interest': 0, 'accrued_wages': 150}}], ['control 5', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'accrued_interest', 100], ['E1', 28, 'deferral', 'rent', -40], ['E2', 29, 'regular', 'rent', 100], ['E3', 29, 'accrual', 'cash', 250], ['E4', 25, 'accrual', 'accrued_interest', 250], ['E5', 25, 'regular', 'accrued_interest', -100], ['E6', 5, 'accrual', 'accrued_interest', 100]], 'as_of': 30}, {'reversals': [['R-E4', 29, -250], ['R-E6', 29, -100]], 'balances': {'accrued_interest': 0, 'rent': 60, 'cash': 250}}], ['control 6', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'accrued_interest', 100], ['E1', 28, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'rent', 100], ['E3', 29, 'deferral', 'accrued_interest', -40], ['E4', 28, 'deferral', 'cash', 100], ['E5', 28, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E1', 29, -100], ['R-E5', 29, 40]], 'balances': {}}]]]\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":"59323ef2009d26ea834982c71dcdd1d7ce0e1ac0441767d44f5ff52c6090459b","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    end = x['period_end']\n    rev = []\n    for eid, day, kind, acct, amt in x['entries']:\n        if kind == 'accrual' and day <= end:\n            rev.append(['R-' + eid, end + 1, kind, acct, -amt])\n    bal = {}\n    for eid, day, kind, acct, amt in x['entries'] + rev:\n        if day < x['as_of']:\n            bal[acct] = bal.get(acct, 0) + amt\n    return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': bal}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', 250], ['E1', 27, 'regular', 'rent', 250], ['E2', 30, 'accrual', 'cash', -100], ['E3', 30, 'deferral', 'accrued_interest', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -250]], 'balances': {'rent': 250}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'accrued_wages', 250], ['E1', 32, 'regular', 'cash', 100], ['E2', 27, 'accrual', 'rent', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 31, 'regular', 'accrued_interest', -40], ['E5', 32, 'regular', 'cash', -40]], 'as_of': 30}, {'reversals': [['R-E2', 31, -100]], 'balances': {'rent': 100, 'accrued_wages': 100}}], ['control 2', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'accrued_interest', 700], ['E1', 5, 'deferral', 'accrued_interest', -100], ['E2', 5, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [], 'balances': {'accrued_interest': -100, 'cash': -40}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100]], 'balances': {'rent': 700, 'accrued_interest': 0}}], ['control 4', {'period_end': 31, 'entries': [['E0', 5, 'deferral', 'accrued_interest', -40], ['E1', 28, 'deferral', 'accrued_wages', -100], ['E2', 33, 'deferral', 'cash', 100], ['E3', 5, 'accrual', 'accrued_interest', -40], ['E4', 5, 'accrual', 'accrued_interest', 250], ['E5', 31, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E3', 32, 40], ['R-E4', 32, -250], ['R-E5', 32, -100]], 'balances': {'accrued_interest': 170, 'accrued_wages': -100}}], ['control 5', {'period_end': 30, 'entries': [['E0', 30, 'deferral', 'accrued_wages', -40], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 30, 'accrual', 'accrued_wages', -100], ['E3', 30, 'deferral', 'cash', 100], ['E4', 30, 'accrual', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100], ['R-E4', 31, 100]], 'balances': {'accrued_wages': -40, 'accrued_interest': 0, 'cash': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 27, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 27, 'regular', 'accrued_interest', -100], ['E3', 30, 'deferral', 'cash', -40], ['E4', 30, 'deferral', 'rent', 100], ['E5', 30, 'accrual', 'accrued_wages', -40]], 'as_of': 29}, {'reversals': [['R-E0', 31, 40], ['R-E1', 31, -700], ['R-E5', 31, 40]], 'balances': {'rent': -40, 'accrued_interest': 600}}]], [['regression: as-of inclusivity', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_wages', 250], ['E1', 28, 'accrual', 'cash', 100], ['E2', 5, 'accrual', 'accrued_wages', -40], ['E3', 31, 'regular', 'cash', 100], ['E4', 5, 'accrual', 'cash', -40], ['E5', 31, 'accrual', 'accrued_interest', 250], ['E6', 33, 'accrual', 'accrued_interest', -100]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E2', 32, 40], ['R-E4', 32, 40], ['R-E5', 32, -250]], 'balances': {'accrued_wages': 250, 'cash': 100, 'accrued_interest': -100}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'deferral', 'accrued_wages', 100], ['E1', 29, 'regular', 'accrued_wages', 100], ['E2', 32, 'deferral', 'accrued_wages', 700], ['E3', 27, 'deferral', 'rent', -40]], 'as_of': 30}, {'reversals': [], 'balances': {'accrued_wages': 100, 'rent': -40}}], ['control 2', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'accrued_interest', -40], ['E1', 30, 'accrual', 'accrued_interest', 250], ['E2', 29, 'regular', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 27, 'deferral', 'rent', 250], ['E5', 29, 'accrual', 'accrued_interest', -100], ['E6', 27, 'deferral', 'rent', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'accrued_interest': -40, 'rent': 950}}], ['control 3', {'period_end': 28, 'entries': [['E0', 25, 'regular', 'accrued_interest', 100], ['E1', 29, 'accrual', 'cash', 100], ['E2', 30, 'accrual', 'rent', 100], ['E3', 29, 'regular', 'cash', 700], ['E4', 25, 'accrual', 'rent', 700]], 'as_of': 28}, {'reversals': [['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'rent': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'deferral', 'cash', -40], ['E1', 5, 'accrual', 'accrued_interest', -100], ['E2', 25, 'deferral', 'accrued_interest', 250], ['E3', 25, 'accrual', 'accrued_wages', 700], ['E4', 28, 'accrual', 'rent', -100]], 'as_of': 27}, {'reversals': [['R-E1', 29, 100], ['R-E3', 29, -700], ['R-E4', 29, 100]], 'balances': {'accrued_interest': 150, 'accrued_wages': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'rent', 100], ['E1', 29, 'deferral', 'accrued_interest', 700], ['E2', 25, 'regular', 'accrued_wages', -40], ['E3', 28, 'accrual', 'accrued_wages', -100], ['E4', 25, 'accrual', 'accrued_interest', 100], ['E5', 28, 'deferral', 'accrued_wages', 100], ['E6', 30, 'regular', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E3', 29, 100], ['R-E4', 29, -100]], 'balances': {'rent': 100, 'accrued_wages': -40, 'accrued_interest': 100}}], ['control 6', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'cash', 700], ['E1', 32, 'deferral', 'cash', -40], ['E2', 5, 'accrual', 'accrued_wages', -40]], 'as_of': 33}, {'reversals': [['R-E0', 32, -700], ['R-E2', 32, 40]], 'balances': {'cash': -40, 'accrued_wages': 0}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'accrued_interest', 100], ['E1', 30, 'deferral', 'accrued_interest', 250], ['E2', 28, 'accrual', 'rent', -40], ['E3', 28, 'accrual', 'accrued_interest', 100], ['E4', 5, 'accrual', 'accrued_wages', 700]], 'as_of': 27}, {'reversals': [['R-E2', 29, 40], ['R-E3', 29, -100], ['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'accrued_wages': 700}}], ['regression: as-of inclusivity, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'regular', 'cash', 250], ['E1', 29, 'regular', 'rent', 100], ['E2', 29, 'accrual', 'accrued_wages', 250], ['E3', 30, 'accrual', 'rent', 100], ['E4', 5, 'accrual', 'cash', 250], ['E5', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, -250], ['R-E3', 31, -100], ['R-E4', 31, -250]], 'balances': {'cash': 500, 'rent': 100, 'accrued_wages': 150}}], ['control 1', {'period_end': 30, 'entries': [['E0', 5, 'deferral', 'rent', -40], ['E1', 30, 'accrual', 'accrued_wages', 250], ['E2', 30, 'deferral', 'accrued_interest', -40], ['E3', 27, 'accrual', 'accrued_interest', 100], ['E4', 32, 'regular', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 31, -250], ['R-E3', 31, -100]], 'balances': {'rent': -40, 'accrued_interest': 100}}], ['control 2', {'period_end': 30, 'entries': [['E0', 30, 'accrual', 'rent', -100], ['E1', 31, 'regular', 'rent', 700], ['E2', 32, 'deferral', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E0', 31, 100]], 'balances': {}}], ['control 3', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'accrued_interest', 100], ['E1', 31, 'deferral', 'cash', 250], ['E2', 30, 'regular', 'cash', -100]], 'as_of': 33}, {'reversals': [['R-E0', 32, -100]], 'balances': {'accrued_interest': 0, 'cash': 150}}], ['control 4', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'accrued_interest', -40], ['E1', 29, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -40], ['E3', 28, 'accrual', 'accrued_wages', -40], ['E4', 28, 'accrual', 'cash', 100], ['E5', 5, 'accrual', 'rent', 250]], 'as_of': 27}, {'reversals': [['R-E3', 29, 40], ['R-E4', 29, -100], ['R-E5', 29, -250]], 'balances': {'accrued_interest': -40, 'rent': 250}}], ['control 5', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_interest', 700], ['E2', 30, 'accrual', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, 100]], 'balances': {}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'deferral', 'accrued_wages', 700], ['E1', 28, 'accrual', 'cash', 250], ['E2', 28, 'regular', 'cash', 100]], 'as_of': 27}, {'reversals': [['R-E1', 29, -250]], 'balances': {'accrued_wages': 700}}], ['control 1', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'cash', -100], ['E2', 5, 'accrual', 'cash', 100], ['E3', 27, 'regular', 'accrued_interest', 700]], 'as_of': 30}, {'reversals': [['R-E0', 29, 40], ['R-E1', 29, 100], ['R-E2', 29, -100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_interest': 700}}], ['control 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 29, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'rent', 250], ['E3', 29, 'regular', 'accrued_interest', 250]], 'as_of': 30}, {'reversals': [['R-E0', 29, -100]], 'balances': {'cash': 0, 'accrued_interest': 950, 'rent': 250}}], ['control 3', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', -40], ['E1', 30, 'accrual', 'cash', 700], ['E2', 30, 'deferral', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -700]], 'balances': {'cash': -40, 'accrued_wages': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'cash', 100], ['E1', 25, 'accrual', 'cash', 250], ['E2', 27, 'deferral', 'rent', -100], ['E3', 28, 'regular', 'cash', 100], ['E4', 28, 'regular', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 28, 'accrual', 'rent', 250]], 'as_of': 30}, {'reversals': [['R-E1', 29, -250], ['R-E6', 29, -250]], 'balances': {'cash': 200, 'rent': 110}}], ['control 5', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 33, 'accrual', 'accrued_wages', 100], ['E2', 5, 'deferral', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 30, 'accrual', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E3', 32, -700], ['R-E4', 32, -100]], 'balances': {'cash': 1500, 'accrued_wages': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 31, 'deferral', 'cash', 100], ['E1', 31, 'accrual', 'accrued_wages', 100], ['E2', 30, 'deferral', 'accrued_interest', -100], ['E3', 5, 'deferral', 'accrued_interest', 250]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 100, 'accrued_wages': 100, 'accrued_interest': 150}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'cash', -40], ['E1', 27, 'accrual', 'accrued_interest', 100], ['E2', 30, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100]], 'balances': {'cash': -40, 'accrued_interest': 0}}], ['control 1', {'period_end': 28, 'entries': [['E0', 28, 'accrual', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', -100], ['E2', 29, 'deferral', 'cash', 100], ['E3', 28, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'cash', -40], ['E5', 30, 'regular', 'cash', 250]], 'as_of': 27}, {'reversals': [['R-E0', 29, -700]], 'balances': {}}], ['control 2', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'cash', -100], ['E1', 31, 'deferral', 'cash', -100], ['E2', 32, 'regular', 'cash', 700], ['E3', 32, 'accrual', 'rent', 100], ['E4', 31, 'deferral', 'accrued_wages', 700]], 'as_of': 30}, {'reversals': [], 'balances': {}}], ['control 3', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'rent', 100], ['E2', 30, 'accrual', 'rent', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 30, 'deferral', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E0', 29, -100], ['R-E1', 29, -100]], 'balances': {'cash': 100, 'rent': 100}}], ['control 4', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 28, 'deferral', 'accrued_wages', -100], ['E3', 31, 'accrual', 'cash', 250], ['E4', 30, 'deferral', 'accrued_wages', 250]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E3', 32, -250]], 'balances': {'cash': 100, 'accrued_interest': 0, 'accrued_wages': 150}}], ['control 5', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'accrued_interest', 100], ['E1', 28, 'deferral', 'rent', -40], ['E2', 29, 'regular', 'rent', 100], ['E3', 29, 'accrual', 'cash', 250], ['E4', 25, 'accrual', 'accrued_interest', 250], ['E5', 25, 'regular', 'accrued_interest', -100], ['E6', 5, 'accrual', 'accrued_interest', 100]], 'as_of': 30}, {'reversals': [['R-E4', 29, -250], ['R-E6', 29, -100]], 'balances': {'accrued_interest': 0, 'rent': 60, 'cash': 250}}], ['control 6', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'accrued_interest', 100], ['E1', 28, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'rent', 100], ['E3', 29, 'deferral', 'accrued_interest', -40], ['E4', 28, 'deferral', 'cash', 100], ['E5', 28, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E1', 29, -100], ['R-E5', 29, 40]], 'balances': {}}]]]\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":"75879f983df79537d9cd578e0a2db20cb57bad9da7dd50fdb4840007ada1f5e8","source":"\"\"\"Failure Map reference implementation. Python standard library only.\"\"\"\nimport json\n\nN = 1\nobservations = []\ndef solve(x):\n    end = x['period_end']\n    rev = []\n    for eid, day, kind, acct, amt in x['entries']:\n        if kind == 'accrual' and day <= end:\n            rev.append(['R-' + eid, end + 1, kind, acct, -amt])\n    bal = {}\n    for eid, day, kind, acct, amt in x['entries'] + rev:\n        if day <= x['as_of']:\n            bal[acct] = bal.get(acct, 0) + amt\n    return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': bal}\ndef check(label, actual, expected):\n    observations.append({\"check\": label, \"actual\": actual, \"expected\": expected, \"passed\": actual == expected})\nfixtures = [[['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', 250], ['E1', 27, 'regular', 'rent', 250], ['E2', 30, 'accrual', 'cash', -100], ['E3', 30, 'deferral', 'accrued_interest', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -250]], 'balances': {'rent': 250}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'accrued_wages', 250], ['E1', 32, 'regular', 'cash', 100], ['E2', 27, 'accrual', 'rent', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 31, 'regular', 'accrued_interest', -40], ['E5', 32, 'regular', 'cash', -40]], 'as_of': 30}, {'reversals': [['R-E2', 31, -100]], 'balances': {'rent': 100, 'accrued_wages': 100}}], ['control 2', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'accrued_interest', 700], ['E1', 5, 'deferral', 'accrued_interest', -100], ['E2', 5, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [], 'balances': {'accrued_interest': -100, 'cash': -40}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100]], 'balances': {'rent': 700, 'accrued_interest': 0}}], ['control 4', {'period_end': 31, 'entries': [['E0', 5, 'deferral', 'accrued_interest', -40], ['E1', 28, 'deferral', 'accrued_wages', -100], ['E2', 33, 'deferral', 'cash', 100], ['E3', 5, 'accrual', 'accrued_interest', -40], ['E4', 5, 'accrual', 'accrued_interest', 250], ['E5', 31, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E3', 32, 40], ['R-E4', 32, -250], ['R-E5', 32, -100]], 'balances': {'accrued_interest': 170, 'accrued_wages': -100}}], ['control 5', {'period_end': 30, 'entries': [['E0', 30, 'deferral', 'accrued_wages', -40], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 30, 'accrual', 'accrued_wages', -100], ['E3', 30, 'deferral', 'cash', 100], ['E4', 30, 'accrual', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100], ['R-E2', 31, 100], ['R-E4', 31, 100]], 'balances': {'accrued_wages': -40, 'accrued_interest': 0, 'cash': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 27, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 27, 'regular', 'accrued_interest', -100], ['E3', 30, 'deferral', 'cash', -40], ['E4', 30, 'deferral', 'rent', 100], ['E5', 30, 'accrual', 'accrued_wages', -40]], 'as_of': 29}, {'reversals': [['R-E0', 31, 40], ['R-E1', 31, -700], ['R-E5', 31, 40]], 'balances': {'rent': -40, 'accrued_interest': 600}}]], [['regression: as-of inclusivity', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_wages', 250], ['E1', 28, 'accrual', 'cash', 100], ['E2', 5, 'accrual', 'accrued_wages', -40], ['E3', 31, 'regular', 'cash', 100], ['E4', 5, 'accrual', 'cash', -40], ['E5', 31, 'accrual', 'accrued_interest', 250], ['E6', 33, 'accrual', 'accrued_interest', -100]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E2', 32, 40], ['R-E4', 32, 40], ['R-E5', 32, -250]], 'balances': {'accrued_wages': 250, 'cash': 100, 'accrued_interest': -100}}], ['control 1', {'period_end': 30, 'entries': [['E0', 32, 'deferral', 'accrued_wages', 100], ['E1', 29, 'regular', 'accrued_wages', 100], ['E2', 32, 'deferral', 'accrued_wages', 700], ['E3', 27, 'deferral', 'rent', -40]], 'as_of': 30}, {'reversals': [], 'balances': {'accrued_wages': 100, 'rent': -40}}], ['control 2', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'accrued_interest', -40], ['E1', 30, 'accrual', 'accrued_interest', 250], ['E2', 29, 'regular', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 27, 'deferral', 'rent', 250], ['E5', 29, 'accrual', 'accrued_interest', -100], ['E6', 27, 'deferral', 'rent', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'accrued_interest': -40, 'rent': 950}}], ['control 3', {'period_end': 28, 'entries': [['E0', 25, 'regular', 'accrued_interest', 100], ['E1', 29, 'accrual', 'cash', 100], ['E2', 30, 'accrual', 'rent', 100], ['E3', 29, 'regular', 'cash', 700], ['E4', 25, 'accrual', 'rent', 700]], 'as_of': 28}, {'reversals': [['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'rent': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'deferral', 'cash', -40], ['E1', 5, 'accrual', 'accrued_interest', -100], ['E2', 25, 'deferral', 'accrued_interest', 250], ['E3', 25, 'accrual', 'accrued_wages', 700], ['E4', 28, 'accrual', 'rent', -100]], 'as_of': 27}, {'reversals': [['R-E1', 29, 100], ['R-E3', 29, -700], ['R-E4', 29, 100]], 'balances': {'accrued_interest': 150, 'accrued_wages': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 5, 'regular', 'rent', 100], ['E1', 29, 'deferral', 'accrued_interest', 700], ['E2', 25, 'regular', 'accrued_wages', -40], ['E3', 28, 'accrual', 'accrued_wages', -100], ['E4', 25, 'accrual', 'accrued_interest', 100], ['E5', 28, 'deferral', 'accrued_wages', 100], ['E6', 30, 'regular', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E3', 29, 100], ['R-E4', 29, -100]], 'balances': {'rent': 100, 'accrued_wages': -40, 'accrued_interest': 100}}], ['control 6', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'cash', 700], ['E1', 32, 'deferral', 'cash', -40], ['E2', 5, 'accrual', 'accrued_wages', -40]], 'as_of': 33}, {'reversals': [['R-E0', 32, -700], ['R-E2', 32, 40]], 'balances': {'cash': -40, 'accrued_wages': 0}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'accrued_interest', 100], ['E1', 30, 'deferral', 'accrued_interest', 250], ['E2', 28, 'accrual', 'rent', -40], ['E3', 28, 'accrual', 'accrued_interest', 100], ['E4', 5, 'accrual', 'accrued_wages', 700]], 'as_of': 27}, {'reversals': [['R-E2', 29, 40], ['R-E3', 29, -100], ['R-E4', 29, -700]], 'balances': {'accrued_interest': 100, 'accrued_wages': 700}}], ['regression: as-of inclusivity, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'regular', 'cash', 250], ['E1', 29, 'regular', 'rent', 100], ['E2', 29, 'accrual', 'accrued_wages', 250], ['E3', 30, 'accrual', 'rent', 100], ['E4', 5, 'accrual', 'cash', 250], ['E5', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, -250], ['R-E3', 31, -100], ['R-E4', 31, -250]], 'balances': {'cash': 500, 'rent': 100, 'accrued_wages': 150}}], ['control 1', {'period_end': 30, 'entries': [['E0', 5, 'deferral', 'rent', -40], ['E1', 30, 'accrual', 'accrued_wages', 250], ['E2', 30, 'deferral', 'accrued_interest', -40], ['E3', 27, 'accrual', 'accrued_interest', 100], ['E4', 32, 'regular', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 31, -250], ['R-E3', 31, -100]], 'balances': {'rent': -40, 'accrued_interest': 100}}], ['control 2', {'period_end': 30, 'entries': [['E0', 30, 'accrual', 'rent', -100], ['E1', 31, 'regular', 'rent', 700], ['E2', 32, 'deferral', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E0', 31, 100]], 'balances': {}}], ['control 3', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'accrued_interest', 100], ['E1', 31, 'deferral', 'cash', 250], ['E2', 30, 'regular', 'cash', -100]], 'as_of': 33}, {'reversals': [['R-E0', 32, -100]], 'balances': {'accrued_interest': 0, 'cash': 150}}], ['control 4', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'accrued_interest', -40], ['E1', 29, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'accrued_interest', -40], ['E3', 28, 'accrual', 'accrued_wages', -40], ['E4', 28, 'accrual', 'cash', 100], ['E5', 5, 'accrual', 'rent', 250]], 'as_of': 27}, {'reversals': [['R-E3', 29, 40], ['R-E4', 29, -100], ['R-E5', 29, -250]], 'balances': {'accrued_interest': -40, 'rent': 250}}], ['control 5', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_interest', 700], ['E2', 30, 'accrual', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E2', 31, 100]], 'balances': {}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 27, 'deferral', 'accrued_wages', 700], ['E1', 28, 'accrual', 'cash', 250], ['E2', 28, 'regular', 'cash', 100]], 'as_of': 27}, {'reversals': [['R-E1', 29, -250]], 'balances': {'accrued_wages': 700}}], ['control 1', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'rent', -40], ['E1', 27, 'accrual', 'cash', -100], ['E2', 5, 'accrual', 'cash', 100], ['E3', 27, 'regular', 'accrued_interest', 700]], 'as_of': 30}, {'reversals': [['R-E0', 29, 40], ['R-E1', 29, 100], ['R-E2', 29, -100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_interest': 700}}], ['control 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 29, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'rent', 250], ['E3', 29, 'regular', 'accrued_interest', 250]], 'as_of': 30}, {'reversals': [['R-E0', 29, -100]], 'balances': {'cash': 0, 'accrued_interest': 950, 'rent': 250}}], ['control 3', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', -40], ['E1', 30, 'accrual', 'cash', 700], ['E2', 30, 'deferral', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -700]], 'balances': {'cash': -40, 'accrued_wages': 700}}], ['control 4', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'cash', 100], ['E1', 25, 'accrual', 'cash', 250], ['E2', 27, 'deferral', 'rent', -100], ['E3', 28, 'regular', 'cash', 100], ['E4', 28, 'regular', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 28, 'accrual', 'rent', 250]], 'as_of': 30}, {'reversals': [['R-E1', 29, -250], ['R-E6', 29, -250]], 'balances': {'cash': 200, 'rent': 110}}], ['control 5', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 33, 'accrual', 'accrued_wages', 100], ['E2', 5, 'deferral', 'cash', 700], ['E3', 30, 'accrual', 'cash', 700], ['E4', 30, 'accrual', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E3', 32, -700], ['R-E4', 32, -100]], 'balances': {'cash': 1500, 'accrued_wages': 100}}], ['control 6', {'period_end': 30, 'entries': [['E0', 31, 'deferral', 'cash', 100], ['E1', 31, 'accrual', 'accrued_wages', 100], ['E2', 30, 'deferral', 'accrued_interest', -100], ['E3', 5, 'deferral', 'accrued_interest', 250]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 100, 'accrued_wages': 100, 'accrued_interest': 150}}]], [['regression: as-of inclusivity', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'cash', -40], ['E1', 27, 'accrual', 'accrued_interest', 100], ['E2', 30, 'regular', 'cash', -40]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100]], 'balances': {'cash': -40, 'accrued_interest': 0}}], ['control 1', {'period_end': 28, 'entries': [['E0', 28, 'accrual', 'rent', 700], ['E1', 30, 'accrual', 'accrued_interest', -100], ['E2', 29, 'deferral', 'cash', 100], ['E3', 28, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'cash', -40], ['E5', 30, 'regular', 'cash', 250]], 'as_of': 27}, {'reversals': [['R-E0', 29, -700]], 'balances': {}}], ['control 2', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'cash', -100], ['E1', 31, 'deferral', 'cash', -100], ['E2', 32, 'regular', 'cash', 700], ['E3', 32, 'accrual', 'rent', 100], ['E4', 31, 'deferral', 'accrued_wages', 700]], 'as_of': 30}, {'reversals': [], 'balances': {}}], ['control 3', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'rent', 100], ['E2', 30, 'accrual', 'rent', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 30, 'deferral', 'rent', -40]], 'as_of': 28}, {'reversals': [['R-E0', 29, -100], ['R-E1', 29, -100]], 'balances': {'cash': 100, 'rent': 100}}], ['control 4', {'period_end': 31, 'entries': [['E0', 28, 'regular', 'cash', 100], ['E1', 30, 'accrual', 'accrued_interest', 100], ['E2', 28, 'deferral', 'accrued_wages', -100], ['E3', 31, 'accrual', 'cash', 250], ['E4', 30, 'deferral', 'accrued_wages', 250]], 'as_of': 33}, {'reversals': [['R-E1', 32, -100], ['R-E3', 32, -250]], 'balances': {'cash': 100, 'accrued_interest': 0, 'accrued_wages': 150}}], ['control 5', {'period_end': 28, 'entries': [['E0', 29, 'regular', 'accrued_interest', 100], ['E1', 28, 'deferral', 'rent', -40], ['E2', 29, 'regular', 'rent', 100], ['E3', 29, 'accrual', 'cash', 250], ['E4', 25, 'accrual', 'accrued_interest', 250], ['E5', 25, 'regular', 'accrued_interest', -100], ['E6', 5, 'accrual', 'accrued_interest', 100]], 'as_of': 30}, {'reversals': [['R-E4', 29, -250], ['R-E6', 29, -100]], 'balances': {'accrued_interest': 0, 'rent': 60, 'cash': 250}}], ['control 6', {'period_end': 28, 'entries': [['E0', 28, 'regular', 'accrued_interest', 100], ['E1', 28, 'accrual', 'accrued_interest', 100], ['E2', 29, 'accrual', 'rent', 100], ['E3', 29, 'deferral', 'accrued_interest', -40], ['E4', 28, 'deferral', 'cash', 100], ['E5', 28, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E1', 29, -100], ['R-E5', 29, 40]], 'balances': {}}]]]\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-auto-reversing-accruals-as-of-inclusivity","generated_at":"2026-09-29T14:46:22.779790+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":"Include rows dated on the as-of day.","root_cause":"The as-of filter is exclusive.","sha256":"be46d82135ba37f0bf8a5312e6fcf65bd616d00688d338a70937f9fe382fdfb5","title":"Auto-reversing accruals: as-of inclusivity · case 01","variant":1,"variant_policy":"Five numbered records share a model and may reuse boundary fixtures.","verification":{"attempt":{"elapsed_ms":44.209,"exit_code":1,"observations":[{"actual":{"balances":{"rent":500},"reversals":[["R-E0",29,-250]]},"check":"regression: as-of inclusivity","expected":{"balances":{"rent":250},"reversals":[["R-E0",29,-250]]},"passed":false},{"actual":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"check":"control 1","expected":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"check":"control 2","expected":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"check":"control 3","expected":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"check":"control 4","expected":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"check":"control 5","expected":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"check":"control 6","expected":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: as-of inclusivity\", \"actual\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 500}}, \"expected\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 250}}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"expected\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"expected\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"expected\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"expected\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"passed\": true}], \"passed\": false}\n"},"broken":{"elapsed_ms":43.077,"exit_code":1,"observations":[{"actual":{"balances":{"rent":500},"reversals":[["R-E0",29,-250]]},"check":"regression: as-of inclusivity","expected":{"balances":{"rent":250},"reversals":[["R-E0",29,-250]]},"passed":false},{"actual":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"check":"control 1","expected":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"check":"control 2","expected":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"check":"control 3","expected":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"check":"control 4","expected":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"check":"control 5","expected":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"check":"control 6","expected":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"passed":true}],"passed":false,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: as-of inclusivity\", \"actual\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 500}}, \"expected\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 250}}, \"passed\": false}, {\"check\": \"control 1\", \"actual\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"expected\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"expected\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"expected\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"expected\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"passed\": true}], \"passed\": false}\n"},"fixed":{"elapsed_ms":43.161,"exit_code":0,"observations":[{"actual":{"balances":{"rent":250},"reversals":[["R-E0",29,-250]]},"check":"regression: as-of inclusivity","expected":{"balances":{"rent":250},"reversals":[["R-E0",29,-250]]},"passed":true},{"actual":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"check":"control 1","expected":{"balances":{"accrued_wages":100,"rent":100},"reversals":[["R-E2",31,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"check":"control 2","expected":{"balances":{"accrued_interest":-100,"cash":-40},"reversals":[]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"check":"control 3","expected":{"balances":{"accrued_interest":0,"rent":700},"reversals":[["R-E1",31,-100],["R-E2",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"check":"control 4","expected":{"balances":{"accrued_interest":170,"accrued_wages":-100},"reversals":[["R-E3",32,40],["R-E4",32,-250],["R-E5",32,-100]]},"passed":true},{"actual":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"check":"control 5","expected":{"balances":{"accrued_interest":0,"accrued_wages":-40,"cash":100},"reversals":[["R-E1",31,-100],["R-E2",31,100],["R-E4",31,100]]},"passed":true},{"actual":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"check":"control 6","expected":{"balances":{"accrued_interest":600,"rent":-40},"reversals":[["R-E0",31,40],["R-E1",31,-700],["R-E5",31,40]]},"passed":true}],"passed":true,"stderr":"","stdout":"{\"observations\": [{\"check\": \"regression: as-of inclusivity\", \"actual\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 250}}, \"expected\": {\"reversals\": [[\"R-E0\", 29, -250]], \"balances\": {\"rent\": 250}}, \"passed\": true}, {\"check\": \"control 1\", \"actual\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"expected\": {\"reversals\": [[\"R-E2\", 31, -100]], \"balances\": {\"rent\": 100, \"accrued_wages\": 100}}, \"passed\": true}, {\"check\": \"control 2\", \"actual\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"expected\": {\"reversals\": [], \"balances\": {\"accrued_interest\": -100, \"cash\": -40}}, \"passed\": true}, {\"check\": \"control 3\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100]], \"balances\": {\"rent\": 700, \"accrued_interest\": 0}}, \"passed\": true}, {\"check\": \"control 4\", \"actual\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"expected\": {\"reversals\": [[\"R-E3\", 32, 40], [\"R-E4\", 32, -250], [\"R-E5\", 32, -100]], \"balances\": {\"accrued_interest\": 170, \"accrued_wages\": -100}}, \"passed\": true}, {\"check\": \"control 5\", \"actual\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"expected\": {\"reversals\": [[\"R-E1\", 31, -100], [\"R-E2\", 31, 100], [\"R-E4\", 31, 100]], \"balances\": {\"accrued_wages\": -40, \"accrued_interest\": 0, \"cash\": 100}}, \"passed\": true}, {\"check\": \"control 6\", \"actual\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"expected\": {\"reversals\": [[\"R-E0\", 31, 40], [\"R-E1\", 31, -700], [\"R-E5\", 31, 40]], \"balances\": {\"rent\": -40, \"accrued_interest\": 600}}, \"passed\": true}], \"passed\": true}\n"}},"verified":true,"visibility":"public"}