FA-58338 / Double-entry ledger accounting / Member archive
Straight-line depreciation journal: through month inclusivity · case 03
The depreciation run omits the charge for the month it is run through.
Case contract
x = {'cost', 'salvage', 'life_months', 'start_month', 'convention': 'full_month'|'mid_month'|'next_month', 'through': last month to post}. Depreciable base = cost - salvage. The first charge month is start_month (start_month + 1 for next_month). Charges use cumulative rounding: target accumulated after the j-th charge month is round(base*j/life) or, for mid_month, round(base*(2j-1)/(2*life)), half-up and capped at base; each month posts target - accumulated. Posting stops after 'through' or once accumulated reaches base. Return {'schedule': [[month, amount]], 'accumulated', 'book_value': cost - accumulated}.
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.
One recorded failure
Sample boundary fixtureThis sample comes from the broken implementation of a controlled reproducer.
| Boundary fixture | Actual | Expected | Outcome |
|---|---|---|---|
| regression: through month inclusivity | {"accumulated": 66667, "book_value": 33333, "schedule": [[4, 8333], [5, 8334], [6, 8333], [7, 8333], [8, 8334], [9, 8333], [10, 8333], [11, 8334]]} | {"accumulated": 75000, "book_value": 25000, "schedule": [[4, 8333], [5, 8334], [6, 8333], [7, 8333], [8, 8334], [9, 8333], [10, 8333], [11, 8334], [12, 8333]]} | Failed |
MEMBER ARCHIVE
The complete case is available to members.
This record includes three runnable implementations, regression fixtures, execution results, and source hashes.
Member access is invitation-based. Sign in with your invited account to inspect the sources.
Sign in to the archive ↗