every model spec’d & versioned · Concordance-tested changelog →

The household engine

One document. Projected, simulated, coordinated.

A household — members, accounts by tax wrapper, incomes, liabilities, expenses — as a single versioned document, and every computation the platform runs on it: a deterministic year-by-year projection, a seeded longevity-aware Monte Carlo, and 7 coordination strategies that answer together. This page is the engine described whole; the planning and household-management pages are what products build from it.

The document, and what runs on it

A versioned record with optimistic concurrency

Create it whole, then evolve it with PATCH deltas; every write is versioned, so concurrent updates conflict loudly instead of silently overwriting. The document is the single source the projections, simulations, and strategies all read.

POST /api/v1/households · PATCH …/{id}

Deterministic projection, honest simulation

The projection is exact arithmetic, year by year, per wrapper. The Monte Carlo is seeded — the same inputs reproduce the same bands — and longevity-aware, drawing horizons from SSA life tables rather than a fixed age. Assumptions are the caller's, or labeled illustrative defaults.

POST …/{id}/project

Migration with a dry run

Batches of up to 200 households, a dry-run mode that returns the complete per-row, per-field error worklist with zero writes, and idempotent re-runs keyed by your own import key. Aggregator adapters (Plaid, Akoya, MX shapes) feed live account data.

POST /api/v1/households/import

Signed webhooks, drift included

computed, updated, archived, decision — and drift, which fires when a stored plan's numbers move because a rate, rule, or balance did. Payloads are signed so your systems can trust the sender.

household.computed · .updated · .decision · .drift

The 7 strategies

Decisions across accounts, not within one.

Each strategy returns ranked alternatives with a computed dollar delta against the baseline — every option shown, never just a winner — and each decision carries its own evidence record.

Withdrawal sequencing

Taxable, traditional, and Roth ordering with bracket management — which account to draw first, and what the ordering is worth in dollars.

Roth conversion ladders

Multi-year conversion schedules against bracket boundaries and IRMAA cliffs — how much to convert, when, and when to stop.

Social Security claiming

Claiming ages evaluated on the household's own projection, spousal coordination included.

Asset location

Wrapper-aware placement across taxable, traditional, and Roth accounts, with the annual tax-drag delta and constraints for locked accounts.

Tax-loss harvesting

Policy-level harvesting rules that emit policies and intents — the engine never trades.

Annual gifting

Gifting schedules under the annual exclusion, computed against the household's projection — the shipped seed of the estate & legacy roadmap.

Pension elections

Single-life vs. joint-and-survivor vs. lump sum, ranked on joint outcomes rather than sticker amounts.

POST /api/v1/households/{id}/decisions
  {"strategy": "withdrawal-sequencing"}

The engine is running right now, on a household you can inspect.