- Optimistic: no crash or correction through 2031 (5 years from today), earning the
9.5% average; cycle resumes after (correction 2035, crash 2040). Salary plateau
grows 2%/yr real so pay never stalls.
- Realistic keeps its single -30% crash in 2029; pessimistic unchanged.
- Projected lines are now thin, slightly lighter solid lines in every view; legend updated.
- Explanation text lists the crash/correction years and recovery time.
The wealth forecast now runs per day instead of per month, so it shows the
same sawtooth as the actual history:
- recurring items hit on the day the bank history shows (most common day of
the last four months, clamped to month end), else their start date
- "every N weeks" items (Basic-Fit, haircut) run on an exact N-day cadence
from the last charge; yearly items on their renewal date
- salary and its extras (holiday pay in May, 13th month in November, bonus,
settlement) land on the payday from history (contract 25th as fallback),
moved to the Friday before a weekend; toeslagen move to the Monday after
- variable budgets are spread per day, the vacation budget over Jul-Aug
- excess above the buffer is invested the day after payday; returns
compound daily
- long horizons stay fast (~35 ms for 100 years): the chart thins each
pixel bucket to its low and high
Adds money.accounts.include_in_total (default true). Excluded accounts keep their own balance and line, but are left out of net worth, invested, this month, the projection and the total/All accounts lines.
- Knab statement exports: per-account ids (knab:<account>:<Referentie>), routed by IBAN,
transfers between own accounts merged into one tracker account are dropped (interest kept)
- Import: multiple files, hand-entered twins get the import id, hand entries equal to the
sum of 2-3 payments within a day are replaced by them
- bank-link --bank revolut|abn|knab with per-bank default account; ASPSP notes printed
- bank-sync: longest history on an account first sync (--full to force), sum reconcile,
per-session status so one bank failing does not mark the others
- Timeline: 1 year / 3 years / All history range
- lists read/write real lists.* tables via meta.tables/meta.columns and the
SECURITY DEFINER meta functions; typed extra columns in the item forms
- old numeric list URLs 308-redirect to the slug
- include_recurring is boolean, osu accuracy/pp/rate numeric
- raw SQL qualified with the new schemas