Fix contribution compounding: monthly contributions are now added to
asset values before each GBM step so they grow with market returns,
rather than being summed as a static lump at each period.
Add year-by-year milestone table below the fan chart showing P10/P50/P90
portfolio values at each annual checkpoint up to the selected horizon.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
asyncpg infers :days as an integer, causing a 'date >= integer' type
error in PostgreSQL. Compute the cutoff date in Python and bind it as
a date parameter instead.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Replaces unused Prophet dependency (unrunnable without cmdstan) with
SARIMA (statsmodels SARIMAX) as the primary spending forecast algorithm.
Strategy: SARIMA(1,1,1)(1,0,1,12) for 12+ months of data, ARIMA(1,1,1)
for 6-11 months, Holt-Winters for 3-5 months, simple average below that.
Adds 95% confidence bands (1.96σ) alongside existing 80% (1.28σ).
Extends forecast horizon from 3 to 6 months and actuals display from
6 to 12 months. Each category now carries an algorithm field surfaced
as a badge in the UI. Frontend chart shows both confidence tiers as
stacked bar overlays with a 3-month summary grid below.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>