FA-58031 / Double-entry ledger accounting / Open access
Auto-reversing accruals: zero balance accounts · case 01
Accounts whose accrual was reversed vanish from the balance list.
ROOT CAUSE
Accounts netting to zero are filtered out of the report.
VERIFIED REPAIR
Report every account that has a row on or before the as-of day.
Unsuccessful approach: Keeping only reversed accounts still drops other accounts that net to zero.
Case 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}}.
Why this case matters
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.
1 / The failure
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
end = x['period_end']
rev = []
for eid, day, kind, acct, amt in x['entries']:
if kind == 'accrual' and day <= end:
rev.append(['R-' + eid, end + 1, kind, acct, -amt])
bal = {}
for eid, day, kind, acct, amt in x['entries'] + rev:
if day <= x['as_of']:
bal[acct] = bal.get(acct, 0) + amt
return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': {a: v for a, v in bal.items() if v}}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'accrued_wages', -40], ['E1', 31, 'accrual', 'rent', 250], ['E2', 31, 'accrual', 'cash', -100], ['E3', 32, 'deferral', 'accrued_wages', 250]], 'as_of': 32}, {'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_wages': 250}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'accrued_wages', 100], ['E1', 5, 'regular', 'accrued_interest', -100], ['E2', 28, 'accrual', 'accrued_wages', 700], ['E3', 32, 'accrual', 'cash', -100], ['E4', 28, 'deferral', 'accrued_interest', 100], ['E5', 31, 'accrual', 'cash', 100]], 'as_of': 32}, {'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]], 'balances': {'accrued_wages': 0, 'accrued_interest': 0, 'cash': -100}}], ['control 1', {'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 2', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'rent', 700], ['E1', 31, 'deferral', 'rent', -40], ['E2', 32, 'deferral', 'rent', 100]], 'as_of': 32}, {'reversals': [], 'balances': {'rent': 60}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'cash', 700], ['E1', 32, 'accrual', 'cash', 700], ['E2', 5, 'accrual', 'cash', 100], ['E3', 30, 'deferral', 'rent', 700], ['E4', 30, 'accrual', 'rent', 100], ['E5', 5, 'regular', 'accrued_wages', 250]], 'as_of': 29}, {'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]], 'balances': {'cash': 800, 'accrued_wages': 250}}], ['control 4', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_interest', 100], ['E1', 5, 'accrual', 'cash', 250], ['E2', 33, 'regular', 'accrued_interest', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 31, 'regular', 'accrued_interest', 250], ['E5', 31, 'regular', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]], 'balances': {'accrued_interest': 350, 'cash': 150, 'accrued_wages': 100}}], ['control 5', {'period_end': 31, 'entries': [['E0', 30, 'regular', 'accrued_interest', 100], ['E1', 31, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'accrued_interest', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700]], 'balances': {'accrued_interest': 900}}]], [['regression: zero balance accounts', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'accrued_wages', 100], ['E2', 30, 'accrual', 'cash', -100], ['E3', 29, 'accrual', 'rent', -40], ['E4', 28, 'accrual', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100], ['R-E4', 29, -250]], 'balances': {'accrued_wages': 0, 'rent': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'deferral', 'rent', 250], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 29, 'regular', 'accrued_wages', 100], ['E3', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E1', 31, -700]], 'balances': {'rent': 250, 'accrued_interest': 700, 'accrued_wages': 0}}], ['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': 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 4', {'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 5', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'cash', -40], ['E1', 29, 'accrual', 'rent', -40], ['E2', 25, 'regular', 'rent', 250], ['E3', 29, 'accrual', 'accrued_wages', -100], ['E4', 29, 'accrual', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 27, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E6', 29, 40]], 'balances': {'cash': -40, 'rent': 250, 'accrued_wages': -40}}]], [['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 5, 'regular', 'rent', 250], ['E1', 32, 'regular', 'accrued_interest', -40], ['E2', 31, 'accrual', 'cash', -40], ['E3', 33, 'accrual', 'accrued_wages', 100]], 'as_of': 32}, {'reversals': [['R-E2', 32, 40]], 'balances': {'rent': 250, 'accrued_interest': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_wages', -100], ['E2', 31, 'regular', 'accrued_interest', 700], ['E3', 31, 'deferral', 'rent', -40], ['E4', 32, 'accrual', 'accrued_wages', 100]], 'as_of': 33}, {'reversals': [['R-E0', 32, 100]], 'balances': {'cash': 0, 'accrued_wages': 0, 'accrued_interest': 700, 'rent': -40}}], ['control 1', {'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}}], ['control 2', {'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 3', {'period_end': 28, 'entries': [['E0', 28, 'deferral', 'rent', 100], ['E1', 28, 'deferral', 'cash', 250], ['E2', 28, 'regular', 'cash', 250], ['E3', 27, 'deferral', 'cash', 100], ['E4', 28, 'regular', 'rent', 100], ['E5', 28, 'regular', 'cash', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'rent': 200, 'cash': 1300}}], ['control 4', {'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 5', {'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': {}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'cash', -40], ['E1', 27, 'regular', 'rent', 100], ['E2', 29, 'deferral', 'accrued_wages', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 5, 'deferral', 'accrued_wages', -100], ['E5', 29, 'deferral', 'cash', -40], ['E6', 30, 'accrual', 'rent', -40]], 'as_of': 27}, {'reversals': [['R-E0', 29, 40]], 'balances': {'cash': -40, 'rent': 100, 'accrued_wages': 0}}], ['control 1', {'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 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'accrued_wages', 100], ['E1', 30, 'deferral', 'accrued_wages', -40], ['E2', 5, 'deferral', 'rent', 700], ['E3', 28, 'regular', 'accrued_wages', -100], ['E4', 28, 'regular', 'cash', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -100]], 'balances': {'accrued_wages': -100, 'rent': 700, 'cash': 100}}], ['control 3', {'period_end': 31, 'entries': [['E0', 31, 'regular', 'accrued_wages', 250], ['E1', 31, 'accrual', 'accrued_wages', 700], ['E2', 31, 'regular', 'rent', -40], ['E3', 31, 'accrual', 'rent', -100], ['E4', 28, 'accrual', 'accrued_wages', 100], ['E5', 31, 'accrual', 'accrued_interest', 700], ['E6', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700], ['R-E3', 32, 100], ['R-E4', 32, -100], ['R-E5', 32, -700]], 'balances': {'accrued_wages': 1010, 'rent': -140, 'accrued_interest': 700}}], ['control 4', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', 250], ['E1', 32, 'accrual', 'rent', 700], ['E2', 29, 'deferral', 'cash', -100], ['E3', 30, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'rent', 700], ['E5', 30, 'regular', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E4', 31, -700]], 'balances': {'cash': 750, 'rent': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'rent', 100], ['E1', 28, 'regular', 'accrued_wages', 250], ['E2', 27, 'accrual', 'rent', 700], ['E3', 5, 'deferral', 'accrued_wages', 100], ['E4', 29, 'deferral', 'rent', -100], ['E5', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 28}, {'reversals': [['R-E2', 29, -700]], 'balances': {'rent': 800, 'accrued_wages': 350}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'accrued_interest', 100], ['E1', 30, 'accrual', 'cash', 100], ['E2', 31, 'accrual', 'rent', 100], ['E3', 5, 'deferral', 'accrued_interest', -100], ['E4', 32, 'regular', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100]], 'balances': {'accrued_interest': 0, 'cash': 0, 'rent': 100, 'accrued_wages': 700}}], ['control 1', {'period_end': 31, 'entries': [['E0', 32, 'deferral', 'cash', 250], ['E1', 28, 'regular', 'rent', 250], ['E2', 33, 'deferral', 'cash', 700]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 250, 'rent': 250}}], ['control 2', {'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 3', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'rent', 250], ['E1', 30, 'deferral', 'accrued_interest', -40], ['E2', 32, 'accrual', 'cash', 100], ['E3', 29, 'regular', 'cash', -40], ['E4', 27, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E4', 31, -100]], 'balances': {'accrued_interest': -40, 'cash': -40, 'accrued_wages': 100}}], ['control 4', {'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 5', {'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}}]]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'raised ' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: zero balance accounts | {'balances': {'accrued_wages': 250}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | {'balances': {'accrued_wages': 250, 'cash': 0, 'rent': 0}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | Failed |
| regression: zero balance accounts, partial-repair probe | {'balances': {'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | {'balances': {'accrued_interest': 0, 'accrued_wages': 0, 'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | Failed |
| control 1 | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | Passed |
| control 2 | {'balances': {'rent': 60}, 'reversals': []} | {'balances': {'rent': 60}, 'reversals': []} | Passed |
| control 3 | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | Passed |
| control 4 | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | Passed |
| control 5 | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | Passed |
SHA-256 / 0aca1dd0ca84af33e5fdaef7aa05f5e63db34084c1395b52fa643c65e30044e6
2 / The unsuccessful fix
Exit 1"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
end = x['period_end']
rev = []
for eid, day, kind, acct, amt in x['entries']:
if kind == 'accrual' and day <= end:
rev.append(['R-' + eid, end + 1, kind, acct, -amt])
bal = {}
for eid, day, kind, acct, amt in x['entries'] + rev:
if day <= x['as_of']:
bal[acct] = bal.get(acct, 0) + amt
return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': {a: v for a, v in bal.items() if v or a in {r[3] for r in rev}}}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'accrued_wages', -40], ['E1', 31, 'accrual', 'rent', 250], ['E2', 31, 'accrual', 'cash', -100], ['E3', 32, 'deferral', 'accrued_wages', 250]], 'as_of': 32}, {'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_wages': 250}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'accrued_wages', 100], ['E1', 5, 'regular', 'accrued_interest', -100], ['E2', 28, 'accrual', 'accrued_wages', 700], ['E3', 32, 'accrual', 'cash', -100], ['E4', 28, 'deferral', 'accrued_interest', 100], ['E5', 31, 'accrual', 'cash', 100]], 'as_of': 32}, {'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]], 'balances': {'accrued_wages': 0, 'accrued_interest': 0, 'cash': -100}}], ['control 1', {'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 2', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'rent', 700], ['E1', 31, 'deferral', 'rent', -40], ['E2', 32, 'deferral', 'rent', 100]], 'as_of': 32}, {'reversals': [], 'balances': {'rent': 60}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'cash', 700], ['E1', 32, 'accrual', 'cash', 700], ['E2', 5, 'accrual', 'cash', 100], ['E3', 30, 'deferral', 'rent', 700], ['E4', 30, 'accrual', 'rent', 100], ['E5', 5, 'regular', 'accrued_wages', 250]], 'as_of': 29}, {'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]], 'balances': {'cash': 800, 'accrued_wages': 250}}], ['control 4', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_interest', 100], ['E1', 5, 'accrual', 'cash', 250], ['E2', 33, 'regular', 'accrued_interest', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 31, 'regular', 'accrued_interest', 250], ['E5', 31, 'regular', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]], 'balances': {'accrued_interest': 350, 'cash': 150, 'accrued_wages': 100}}], ['control 5', {'period_end': 31, 'entries': [['E0', 30, 'regular', 'accrued_interest', 100], ['E1', 31, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'accrued_interest', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700]], 'balances': {'accrued_interest': 900}}]], [['regression: zero balance accounts', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'accrued_wages', 100], ['E2', 30, 'accrual', 'cash', -100], ['E3', 29, 'accrual', 'rent', -40], ['E4', 28, 'accrual', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100], ['R-E4', 29, -250]], 'balances': {'accrued_wages': 0, 'rent': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'deferral', 'rent', 250], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 29, 'regular', 'accrued_wages', 100], ['E3', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E1', 31, -700]], 'balances': {'rent': 250, 'accrued_interest': 700, 'accrued_wages': 0}}], ['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': 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 4', {'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 5', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'cash', -40], ['E1', 29, 'accrual', 'rent', -40], ['E2', 25, 'regular', 'rent', 250], ['E3', 29, 'accrual', 'accrued_wages', -100], ['E4', 29, 'accrual', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 27, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E6', 29, 40]], 'balances': {'cash': -40, 'rent': 250, 'accrued_wages': -40}}]], [['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 5, 'regular', 'rent', 250], ['E1', 32, 'regular', 'accrued_interest', -40], ['E2', 31, 'accrual', 'cash', -40], ['E3', 33, 'accrual', 'accrued_wages', 100]], 'as_of': 32}, {'reversals': [['R-E2', 32, 40]], 'balances': {'rent': 250, 'accrued_interest': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_wages', -100], ['E2', 31, 'regular', 'accrued_interest', 700], ['E3', 31, 'deferral', 'rent', -40], ['E4', 32, 'accrual', 'accrued_wages', 100]], 'as_of': 33}, {'reversals': [['R-E0', 32, 100]], 'balances': {'cash': 0, 'accrued_wages': 0, 'accrued_interest': 700, 'rent': -40}}], ['control 1', {'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}}], ['control 2', {'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 3', {'period_end': 28, 'entries': [['E0', 28, 'deferral', 'rent', 100], ['E1', 28, 'deferral', 'cash', 250], ['E2', 28, 'regular', 'cash', 250], ['E3', 27, 'deferral', 'cash', 100], ['E4', 28, 'regular', 'rent', 100], ['E5', 28, 'regular', 'cash', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'rent': 200, 'cash': 1300}}], ['control 4', {'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 5', {'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': {}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'cash', -40], ['E1', 27, 'regular', 'rent', 100], ['E2', 29, 'deferral', 'accrued_wages', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 5, 'deferral', 'accrued_wages', -100], ['E5', 29, 'deferral', 'cash', -40], ['E6', 30, 'accrual', 'rent', -40]], 'as_of': 27}, {'reversals': [['R-E0', 29, 40]], 'balances': {'cash': -40, 'rent': 100, 'accrued_wages': 0}}], ['control 1', {'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 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'accrued_wages', 100], ['E1', 30, 'deferral', 'accrued_wages', -40], ['E2', 5, 'deferral', 'rent', 700], ['E3', 28, 'regular', 'accrued_wages', -100], ['E4', 28, 'regular', 'cash', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -100]], 'balances': {'accrued_wages': -100, 'rent': 700, 'cash': 100}}], ['control 3', {'period_end': 31, 'entries': [['E0', 31, 'regular', 'accrued_wages', 250], ['E1', 31, 'accrual', 'accrued_wages', 700], ['E2', 31, 'regular', 'rent', -40], ['E3', 31, 'accrual', 'rent', -100], ['E4', 28, 'accrual', 'accrued_wages', 100], ['E5', 31, 'accrual', 'accrued_interest', 700], ['E6', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700], ['R-E3', 32, 100], ['R-E4', 32, -100], ['R-E5', 32, -700]], 'balances': {'accrued_wages': 1010, 'rent': -140, 'accrued_interest': 700}}], ['control 4', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', 250], ['E1', 32, 'accrual', 'rent', 700], ['E2', 29, 'deferral', 'cash', -100], ['E3', 30, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'rent', 700], ['E5', 30, 'regular', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E4', 31, -700]], 'balances': {'cash': 750, 'rent': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'rent', 100], ['E1', 28, 'regular', 'accrued_wages', 250], ['E2', 27, 'accrual', 'rent', 700], ['E3', 5, 'deferral', 'accrued_wages', 100], ['E4', 29, 'deferral', 'rent', -100], ['E5', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 28}, {'reversals': [['R-E2', 29, -700]], 'balances': {'rent': 800, 'accrued_wages': 350}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'accrued_interest', 100], ['E1', 30, 'accrual', 'cash', 100], ['E2', 31, 'accrual', 'rent', 100], ['E3', 5, 'deferral', 'accrued_interest', -100], ['E4', 32, 'regular', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100]], 'balances': {'accrued_interest': 0, 'cash': 0, 'rent': 100, 'accrued_wages': 700}}], ['control 1', {'period_end': 31, 'entries': [['E0', 32, 'deferral', 'cash', 250], ['E1', 28, 'regular', 'rent', 250], ['E2', 33, 'deferral', 'cash', 700]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 250, 'rent': 250}}], ['control 2', {'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 3', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'rent', 250], ['E1', 30, 'deferral', 'accrued_interest', -40], ['E2', 32, 'accrual', 'cash', 100], ['E3', 29, 'regular', 'cash', -40], ['E4', 27, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E4', 31, -100]], 'balances': {'accrued_interest': -40, 'cash': -40, 'accrued_wages': 100}}], ['control 4', {'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 5', {'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}}]]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'raised ' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: zero balance accounts | {'balances': {'accrued_wages': 250, 'cash': 0, 'rent': 0}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | {'balances': {'accrued_wages': 250, 'cash': 0, 'rent': 0}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | Passed |
| regression: zero balance accounts, partial-repair probe | {'balances': {'accrued_wages': 0, 'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | {'balances': {'accrued_interest': 0, 'accrued_wages': 0, 'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | Failed |
| control 1 | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | Passed |
| control 2 | {'balances': {'rent': 60}, 'reversals': []} | {'balances': {'rent': 60}, 'reversals': []} | Passed |
| control 3 | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | Passed |
| control 4 | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | Passed |
| control 5 | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | Passed |
SHA-256 / a588dfe9414f94860d3762fb50c5606fc7640525425ddb449ce545fa9aee8470
3 / The verified repair
Exit 0"""Failure Map reference implementation. Python standard library only."""
import json
N = 1
observations = []
def solve(x):
end = x['period_end']
rev = []
for eid, day, kind, acct, amt in x['entries']:
if kind == 'accrual' and day <= end:
rev.append(['R-' + eid, end + 1, kind, acct, -amt])
bal = {}
for eid, day, kind, acct, amt in x['entries'] + rev:
if day <= x['as_of']:
bal[acct] = bal.get(acct, 0) + amt
return {'reversals': [[r[0], r[1], r[4]] for r in rev], 'balances': bal}
def check(label, actual, expected):
observations.append({"check": label, "actual": actual, "expected": expected, "passed": actual == expected})
fixtures = [[['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'accrued_wages', -40], ['E1', 31, 'accrual', 'rent', 250], ['E2', 31, 'accrual', 'cash', -100], ['E3', 32, 'deferral', 'accrued_wages', 250]], 'as_of': 32}, {'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]], 'balances': {'rent': 0, 'cash': 0, 'accrued_wages': 250}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 5, 'accrual', 'accrued_wages', 100], ['E1', 5, 'regular', 'accrued_interest', -100], ['E2', 28, 'accrual', 'accrued_wages', 700], ['E3', 32, 'accrual', 'cash', -100], ['E4', 28, 'deferral', 'accrued_interest', 100], ['E5', 31, 'accrual', 'cash', 100]], 'as_of': 32}, {'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]], 'balances': {'accrued_wages': 0, 'accrued_interest': 0, 'cash': -100}}], ['control 1', {'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 2', {'period_end': 31, 'entries': [['E0', 33, 'accrual', 'rent', 700], ['E1', 31, 'deferral', 'rent', -40], ['E2', 32, 'deferral', 'rent', 100]], 'as_of': 32}, {'reversals': [], 'balances': {'rent': 60}}], ['control 3', {'period_end': 30, 'entries': [['E0', 29, 'regular', 'cash', 700], ['E1', 32, 'accrual', 'cash', 700], ['E2', 5, 'accrual', 'cash', 100], ['E3', 30, 'deferral', 'rent', 700], ['E4', 30, 'accrual', 'rent', 100], ['E5', 5, 'regular', 'accrued_wages', 250]], 'as_of': 29}, {'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]], 'balances': {'cash': 800, 'accrued_wages': 250}}], ['control 4', {'period_end': 31, 'entries': [['E0', 31, 'deferral', 'accrued_interest', 100], ['E1', 5, 'accrual', 'cash', 250], ['E2', 33, 'regular', 'accrued_interest', 700], ['E3', 30, 'accrual', 'cash', -100], ['E4', 31, 'regular', 'accrued_interest', 250], ['E5', 31, 'regular', 'accrued_wages', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]], 'balances': {'accrued_interest': 350, 'cash': 150, 'accrued_wages': 100}}], ['control 5', {'period_end': 31, 'entries': [['E0', 30, 'regular', 'accrued_interest', 100], ['E1', 31, 'accrual', 'accrued_interest', 700], ['E2', 28, 'deferral', 'accrued_interest', 100]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700]], 'balances': {'accrued_interest': 900}}]], [['regression: zero balance accounts', {'period_end': 28, 'entries': [['E0', 30, 'accrual', 'cash', 100], ['E1', 5, 'accrual', 'accrued_wages', 100], ['E2', 30, 'accrual', 'cash', -100], ['E3', 29, 'accrual', 'rent', -40], ['E4', 28, 'accrual', 'cash', 250]], 'as_of': 29}, {'reversals': [['R-E1', 29, -100], ['R-E4', 29, -250]], 'balances': {'accrued_wages': 0, 'rent': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 27, 'deferral', 'rent', 250], ['E1', 27, 'accrual', 'accrued_interest', 700], ['E2', 29, 'regular', 'accrued_wages', 100], ['E3', 27, 'deferral', 'accrued_wages', -100]], 'as_of': 29}, {'reversals': [['R-E1', 31, -700]], 'balances': {'rent': 250, 'accrued_interest': 700, 'accrued_wages': 0}}], ['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': 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 4', {'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 5', {'period_end': 28, 'entries': [['E0', 27, 'regular', 'cash', -40], ['E1', 29, 'accrual', 'rent', -40], ['E2', 25, 'regular', 'rent', 250], ['E3', 29, 'accrual', 'accrued_wages', -100], ['E4', 29, 'accrual', 'rent', 250], ['E5', 28, 'regular', 'rent', -40], ['E6', 27, 'accrual', 'accrued_wages', -40]], 'as_of': 27}, {'reversals': [['R-E6', 29, 40]], 'balances': {'cash': -40, 'rent': 250, 'accrued_wages': -40}}]], [['regression: zero balance accounts', {'period_end': 31, 'entries': [['E0', 5, 'regular', 'rent', 250], ['E1', 32, 'regular', 'accrued_interest', -40], ['E2', 31, 'accrual', 'cash', -40], ['E3', 33, 'accrual', 'accrued_wages', 100]], 'as_of': 32}, {'reversals': [['R-E2', 32, 40]], 'balances': {'rent': 250, 'accrued_interest': -40, 'cash': 0}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 31, 'entries': [['E0', 28, 'accrual', 'cash', -100], ['E1', 31, 'deferral', 'accrued_wages', -100], ['E2', 31, 'regular', 'accrued_interest', 700], ['E3', 31, 'deferral', 'rent', -40], ['E4', 32, 'accrual', 'accrued_wages', 100]], 'as_of': 33}, {'reversals': [['R-E0', 32, 100]], 'balances': {'cash': 0, 'accrued_wages': 0, 'accrued_interest': 700, 'rent': -40}}], ['control 1', {'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}}], ['control 2', {'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 3', {'period_end': 28, 'entries': [['E0', 28, 'deferral', 'rent', 100], ['E1', 28, 'deferral', 'cash', 250], ['E2', 28, 'regular', 'cash', 250], ['E3', 27, 'deferral', 'cash', 100], ['E4', 28, 'regular', 'rent', 100], ['E5', 28, 'regular', 'cash', 700]], 'as_of': 28}, {'reversals': [], 'balances': {'rent': 200, 'cash': 1300}}], ['control 4', {'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 5', {'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': {}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 28, 'entries': [['E0', 5, 'accrual', 'cash', -40], ['E1', 27, 'regular', 'rent', 100], ['E2', 29, 'deferral', 'accrued_wages', 100], ['E3', 5, 'regular', 'accrued_wages', 100], ['E4', 5, 'deferral', 'accrued_wages', -100], ['E5', 29, 'deferral', 'cash', -40], ['E6', 30, 'accrual', 'rent', -40]], 'as_of': 27}, {'reversals': [['R-E0', 29, 40]], 'balances': {'cash': -40, 'rent': 100, 'accrued_wages': 0}}], ['control 1', {'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 2', {'period_end': 28, 'entries': [['E0', 27, 'accrual', 'accrued_wages', 100], ['E1', 30, 'deferral', 'accrued_wages', -40], ['E2', 5, 'deferral', 'rent', 700], ['E3', 28, 'regular', 'accrued_wages', -100], ['E4', 28, 'regular', 'cash', 100]], 'as_of': 29}, {'reversals': [['R-E0', 29, -100]], 'balances': {'accrued_wages': -100, 'rent': 700, 'cash': 100}}], ['control 3', {'period_end': 31, 'entries': [['E0', 31, 'regular', 'accrued_wages', 250], ['E1', 31, 'accrual', 'accrued_wages', 700], ['E2', 31, 'regular', 'rent', -40], ['E3', 31, 'accrual', 'rent', -100], ['E4', 28, 'accrual', 'accrued_wages', 100], ['E5', 31, 'accrual', 'accrued_interest', 700], ['E6', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 31}, {'reversals': [['R-E1', 32, -700], ['R-E3', 32, 100], ['R-E4', 32, -100], ['R-E5', 32, -700]], 'balances': {'accrued_wages': 1010, 'rent': -140, 'accrued_interest': 700}}], ['control 4', {'period_end': 30, 'entries': [['E0', 30, 'regular', 'cash', 250], ['E1', 32, 'accrual', 'rent', 700], ['E2', 29, 'deferral', 'cash', -100], ['E3', 30, 'regular', 'cash', 700], ['E4', 29, 'accrual', 'rent', 700], ['E5', 30, 'regular', 'cash', -100]], 'as_of': 32}, {'reversals': [['R-E4', 31, -700]], 'balances': {'cash': 750, 'rent': 700}}], ['control 5', {'period_end': 28, 'entries': [['E0', 25, 'deferral', 'rent', 100], ['E1', 28, 'regular', 'accrued_wages', 250], ['E2', 27, 'accrual', 'rent', 700], ['E3', 5, 'deferral', 'accrued_wages', 100], ['E4', 29, 'deferral', 'rent', -100], ['E5', 30, 'deferral', 'accrued_wages', -40]], 'as_of': 28}, {'reversals': [['R-E2', 29, -700]], 'balances': {'rent': 800, 'accrued_wages': 350}}]], [['regression: zero balance accounts', {'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}}], ['regression: zero balance accounts, partial-repair probe', {'period_end': 30, 'entries': [['E0', 31, 'accrual', 'accrued_interest', 100], ['E1', 30, 'accrual', 'cash', 100], ['E2', 31, 'accrual', 'rent', 100], ['E3', 5, 'deferral', 'accrued_interest', -100], ['E4', 32, 'regular', 'accrued_wages', 700]], 'as_of': 32}, {'reversals': [['R-E1', 31, -100]], 'balances': {'accrued_interest': 0, 'cash': 0, 'rent': 100, 'accrued_wages': 700}}], ['control 1', {'period_end': 31, 'entries': [['E0', 32, 'deferral', 'cash', 250], ['E1', 28, 'regular', 'rent', 250], ['E2', 33, 'deferral', 'cash', 700]], 'as_of': 32}, {'reversals': [], 'balances': {'cash': 250, 'rent': 250}}], ['control 2', {'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 3', {'period_end': 30, 'entries': [['E0', 32, 'accrual', 'rent', 250], ['E1', 30, 'deferral', 'accrued_interest', -40], ['E2', 32, 'accrual', 'cash', 100], ['E3', 29, 'regular', 'cash', -40], ['E4', 27, 'accrual', 'accrued_wages', 100]], 'as_of': 30}, {'reversals': [['R-E4', 31, -100]], 'balances': {'accrued_interest': -40, 'cash': -40, 'accrued_wages': 100}}], ['control 4', {'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 5', {'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}}]]]
for label, args, expected in fixtures[N-1]:
try:
actual = solve(args)
except Exception as exc:
actual = 'raised ' + type(exc).__name__
check(label, actual, expected)
print(json.dumps({"observations": observations, "passed": all(x["passed"] for x in observations)}, ensure_ascii=False))
raise SystemExit(0 if all(x["passed"] for x in observations) else 1)
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: zero balance accounts | {'balances': {'accrued_wages': 250, 'cash': 0, 'rent': 0}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | {'balances': {'accrued_wages': 250, 'cash': 0, 'rent': 0}, 'reversals': [['R-E1', 32, -250], ['R-E2', 32, 100]]} | Passed |
| regression: zero balance accounts, partial-repair probe | {'balances': {'accrued_interest': 0, 'accrued_wages': 0, 'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | {'balances': {'accrued_interest': 0, 'accrued_wages': 0, 'cash': -100}, 'reversals': [['R-E0', 32, -100], ['R-E2', 32, -700], ['R-E5', 32, -100]]} | Passed |
| control 1 | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | {'balances': {'rent': 250}, 'reversals': [['R-E0', 29, -250]]} | Passed |
| control 2 | {'balances': {'rent': 60}, 'reversals': []} | {'balances': {'rent': 60}, 'reversals': []} | Passed |
| control 3 | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | {'balances': {'accrued_wages': 250, 'cash': 800}, 'reversals': [['R-E2', 31, -100], ['R-E4', 31, -100]]} | Passed |
| control 4 | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | {'balances': {'accrued_interest': 350, 'accrued_wages': 100, 'cash': 150}, 'reversals': [['R-E1', 32, -250], ['R-E3', 32, 100]]} | Passed |
| control 5 | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | {'balances': {'accrued_interest': 900}, 'reversals': [['R-E1', 32, -700]]} | Passed |
SHA-256 / adc6725768c214e3e60bf66017af2a5f2019448aa4a54d48273ea44ca59cac37
Verification & scope
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.
Observations recorded using Python 3.12.14 at 2026-09-29T14:46:22.795931+00:00.
Case digest / 315c680e4f69ecd3068d35e1e1511c48e95d81e974295fe58f37ff58374ce09e