feat: prepaid/deferred amortization schedules and recurring entries

Amortization schedules spread a prepaid expense or deferred revenue over
the months it covers, to the cent, posting on month ends; runs preview
first, are idempotent, honor closed periods, and are exempt from the
receipt policy like depreciation. Recurring entries generate drafts only,
never posts. Six new tools (59 total); four new journal events, replayed
and checked.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01MtYEaR6M6Ybdhm6X98BWNu
This commit is contained in:
swaitsandClaude Opus 5.5 committed 2026-10-11 21:09:43 -07:00
1 parent dbdc8e671f
commit ddb67a2ca2
14 files changed
+1691 -27

No files matched your search

+6 -1
View File
@@ -229,4 +229,9 @@ interface is MCP, not a cloned GUI. The first storage + MCP slice is done
and close into it. CloseTo became RetainedEarnings { sweep } / Account
{ into, sweep } / Members([MemberClose]); journals without a target, or
with the old plain "retained_earnings", still replay.
- 2026-10-11: Schedules. Prepaid expenses and deferred revenue amortize
monthly on month ends, to the cent; runs are previewed, idempotent, and
exempt from the receipt policy (the schedule is the evidence). Recurring
entries generate drafts, never posts. Journal events schedule.registered,
schedule.posted (with the full entry, checked on replay),
recurring.registered, recurring.generated. No schema change. 59 tools.