docs(fire-planner): document FIRE countdown; flag stale playbook
README: add spend_model/geo/fire_target modules, the recompute-fire-targets command, and the fire_target table. PLAYBOOK_VIKTOR.md: add a superseded-notice header — it anchors on Cyprus/£1.5M/£60k, but the base case moved to Bulgaria, real NW is ~£1.13M, and the simulator now drains tax (so its regime-invariant claim is false). Point readers to the live FIRE Countdown dashboard. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
parent
edb4d11352
commit
6efe3b0c31
2 changed files with 25 additions and 2 deletions
|
|
@ -1,5 +1,17 @@
|
|||
# Viktor's UK-exit playbook — derived from fire-planner runs
|
||||
|
||||
> ⚠️ **Partially superseded (2026-06).** This 2026-04-26 run anchors on
|
||||
> Cyprus, NW £1.5M, and £60k spend. Later decisions moved the base case to
|
||||
> **Bulgaria**, the real measured NW is **~£1.13M** (not the aspirational
|
||||
> £1.5M), and the real spend floor is **~£40k** (the £60k was padding). Also,
|
||||
> the simulator now **drains tax from the portfolio** (since 2026-05), so the
|
||||
> old "success rate is regime-invariant" claim below is **no longer true** —
|
||||
> jurisdiction now moves the FIRE number. The live, current view is the
|
||||
> **"FIRE Countdown"** section of the wealth Grafana dashboard, backed by the
|
||||
> `fire_target` table (see `CONTEXT.md` + `docs/adr/0001`). Treat the tax-
|
||||
> optimisation playbook (§3) as still useful, but re-validate the headline
|
||||
> numbers against the dashboard.
|
||||
|
||||
**Run date**: 2026-04-26
|
||||
**Working anchor**: NW £1.5M today, £60k/yr real spending target,
|
||||
£40k floor, target departure 2027–2028 (year 1 or 2 from today),
|
||||
|
|
|
|||
15
README.md
15
README.md
|
|
@ -17,9 +17,14 @@ strategy, and "year you break UK tax residency".
|
|||
- `simulator.py` — vectorised NumPy MC engine
|
||||
- `scenarios.py` — Cartesian product over (jurisdiction × strategy ×
|
||||
leave-UK-year × glide)
|
||||
- `spend_model.py` — per-Case real-GBP spend, COL-scaled per country (the
|
||||
FIRE-countdown cases: Solo / Household / Family)
|
||||
- `geo.py` — COL city → tax jurisdiction
|
||||
- `fire_target.py` — solves each Case's "FIRE number" (smallest liquid NW
|
||||
where Guyton-Klinger hits the 99% bar); see `docs/adr/0001`
|
||||
- `app.py` — FastAPI on-demand `/recompute`
|
||||
- `__main__.py` — `click` CLI: `ingest`, `simulate`, `recompute-all`,
|
||||
`migrate`
|
||||
`recompute-fire-targets`, `migrate`
|
||||
|
||||
## Common commands
|
||||
|
||||
|
|
@ -37,11 +42,15 @@ DB_CONNECTION_STRING=postgresql+asyncpg://... alembic upgrade head
|
|||
DB_CONNECTION_STRING=... python -m fire_planner ingest
|
||||
DB_CONNECTION_STRING=... python -m fire_planner simulate --scenario=cyprus-vpw-leave-y3
|
||||
DB_CONNECTION_STRING=... python -m fire_planner recompute-all
|
||||
|
||||
# Solve the FIRE-countdown targets (per Case × country) for the wealth
|
||||
# Grafana dashboard's "FIRE Countdown" section:
|
||||
DB_CONNECTION_STRING=... python -m fire_planner recompute-fire-targets --countries all
|
||||
```
|
||||
|
||||
## Schema
|
||||
|
||||
Six tables in `fire_planner` schema on `pg-cluster-rw`:
|
||||
Core tables in `fire_planner` schema on `pg-cluster-rw`:
|
||||
|
||||
- `account_snapshot` — daily NW per account (Wealthfolio)
|
||||
- `scenario` — Cartesian-product scenario definition
|
||||
|
|
@ -49,3 +58,5 @@ Six tables in `fire_planner` schema on `pg-cluster-rw`:
|
|||
- `mc_path` — sparse storage (top decile, bottom decile, median)
|
||||
- `projection_yearly` — deterministic point projection per scenario
|
||||
- `scenario_summary` — denormalised fast-read for Grafana
|
||||
- `fire_target` — solved FIRE number per (Case × country × with-home) for the
|
||||
"FIRE Countdown" section of the wealth Grafana dashboard
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue