FinPlanTools

Trust   ·   Methodology

Every assumption, on the table.

This is the inspection hatch for the projection engine. It is written for people who read prospectuses — DIY investors doing their own diligence, and the advisors they check with. The most important thing to know is this: the AI is the interface, not the calculator. The assistant reads your situation and calls typed tools; a deterministic engine does the math. The rule of this page is simple — no claim without a number or a source — and where the engine stops, we say so, in the Limitations section at the end.

How it works

The AI is the interface. The engine is code.

The assistant never does the arithmetic. It reads your situation, calls typed tools, and reports what they return. Every number on your screen comes out of a deterministic engine — the same inputs always produce the same outputs.

Your plan is one portable document

The whole household — people, accounts (401(k), IRA, Roth, HSA, 529, taxable, and more), income streams, expenses, goals, and liabilities — is a single plain-JSON state document that you own and can export at any time. Facts live there; the engine reads them.

Assumptions come back with the answer

Every projection echoes the assumptions it used — returns, volatility, inflation, tax year, marginal rates — in the same response as the result. Any number can be traced back to the inputs that produced it, and a follow-up question is one changed parameter away.

Nothing computed is stored

Projected numbers are always re-derived from inputs, never cached and served back. The state document holds facts, snapshots are immutable point-in-time records, and scenarios hold hypothetical deltas — none of them store a computed outcome that could go stale.

The return model

Analytical by default. Monte Carlo when you ask.

The default engine is closed-form — an analytical solution that reads percentiles straight off a lognormal return distribution, no simulation required. Monte Carlo is available for cases the analytical path can't express.

Return distribution

Returns are lognormal in both engines. The closed-form path uses the Kan & Zhou methodology to compute analytical percentiles directly — fully deterministic, with no randomness to seed. The Monte Carlo path draws monthly return factors from a lognormal distribution using a seeded pseudorandom generator, so a given seed reproduces the same set of simulated paths exactly. It runs 1,000 paths by default and reports the 10th / 25th / 50th / 75th / 90th percentiles; selection is nearest-path, so every reported value is an actually-simulated outcome, not an interpolation.

Inflation: nominal and real

Inflation defaults to 2.5%, and every result is reported in both nominal (face-value future dollars) and real (constant purchasing power) terms. Real values are deflated with the Fisher relation, and the same inflation assumption is applied consistently across returns, contributions, and fees — so a real projection is internally coherent, not a nominal number with a rough haircut.

After-tax spendable values

A balance is not what you get to spend. Projections can be converted to after-tax spendable values by account type: a pre-tax 401(k)/IRA is reduced by your marginal ordinary rate; Roth, HSA, and 529 balances pass through untaxed; a taxable brokerage is reduced by long-term capital-gains tax on its gain only — and because cost basis is fixed while the balance grows, the taxed gain fraction rises over time, exactly as it does in reality.

Whole-plan projection

A full plan projects each account under its own allocation — a 401(k) and a cash savings account grow differently — and feeds the household's net monthly surplus (income minus expenses) back in as contributions. Accounts are then aggregated by summing matching percentiles: a perfectly-correlated (comonotonic) assumption that is deliberately conservative on the downside, and is stated in every response rather than buried.

Projection tools reference →

Taxes

The whole federal return. Not a bracket lookup.

The federal engine is built from the IRS source tables for the current tax year and computes the whole return, not just a marginal rate. State tax is a deliberate, single-state depth-first choice — one state correctly rather than fifty approximately.

The federal return, end to end

AGI, then deductions (standard, or itemized: SALT with its cap and phase-down, mortgage interest under the acquisition-debt cap for the loan's origination year, charitable, medical, casualty), then ordinary brackets, then preferential-rate stacking for long-term gains and qualified dividends, then NIIT, Additional Medicare, and AMT. Every component comes back — marginal rate, effective rate, and each line — not a single total. All five filing statuses. FICA is modeled too: Social Security 6.2% on the wage base, Medicare 1.45%, the 0.9% Additional Medicare Tax, and the 3.8% Net Investment Income Tax.

Equity compensation

ISO exercises (the bargain element as an AMT preference when exercised and held, ordinary income on a disqualifying disposition), NQSO exercises, and RSU vests (FICA-subject supplemental W-2 income) are modeled explicitly — the cases that quietly break generic calculators.

Planning moves, not just liability

Roth conversion analysis (the marginal cost of the converted slice, filling to a target bracket, the resulting RMD reduction, and a convert-now vs leave-in break-even), safe-harbor and underpayment estimation with suggested quarterly payments, and withdrawal tax by account type.

Required minimum distributions

SECURE 2.0 start ages by birth year, the Uniform Lifetime and single-life tables, multi-IRA aggregation, the shortfall penalty, and multi-year projected RMD schedules.

State

New York only — New York State, New York City, and Yonkers, on full progressive brackets. For any other state the engine returns an explicit unsupported result rather than a silent zero. (See Limitations.)

Tax tools reference →

Social Security

The full benefit formula, not a rule of thumb.

Benefits are computed from the actual PIA formula, with the claiming-age adjustments and household benefit types the SSA applies.

  • PIA from Average Indexed Monthly Earnings via the 90% / 32% / 15% bend-point formula.
  • Claiming ages 62 through 70, with the early-claim reduction and delayed-retirement credit applied by month.
  • Spousal (up to 50% of PIA) and survivor (up to 100%) benefits, and the retirement earnings test for claims before full retirement age.
  • Claiming-strategy analysis in one call: pairwise breakeven ages, life-expectancy sensitivity, and combined household and survivor figures for a couple.

Social Security tools reference →

Scenarios

What-if, as a first-class object.

A scenario is a named, validated set of typed overrides against a base plan — retire at 60, save $500 more a month, assume different returns — not a re-typed spreadsheet.

Typed, validated overrides

The change you make is one of a fixed set of typed deltas — retirement age, monthly contribution, return or inflation assumption, tax rate, income or expense change, account balance, goal target — validated against the base plan. A change that points at nothing, or does nothing, surfaces as a warning rather than being silently dropped.

The whole plan is re-projected

Comparing scenarios re-projects each entire plan server-side — never arithmetic on stale outputs. You get back an input diff (exactly what changed), an outcome diff (the percentile deltas against the base), and per-goal outcome deltas.

Anchored to the base it was built on

Each scenario carries a content hash of the base plan it was authored against, so a comparison run after the underlying plan has changed is caught and flagged — not reported as if it were still current.

Scenario tools reference →

Capital-market
assumptions

Here are the defaults. Override any of them.

These are the built-in per-asset-class return and volatility assumptions. They are starting points — long-run historical averages, not a house forecast — and every one is a parameter you can replace with your own capital-market assumptions per projection.

Asset class
Return (nom.)
Volatility
Basis
Stocks
7.0%
15%
Long-run historical average
Bonds
4.0%
6%
Long-run historical average
Cash
2.0%
1%
Long-run historical average
Crypto
2.0%
18%
Conservative placeholder
Real estate
2.0%
6%
Conservative placeholder
Other
2.0%
6%
Conservative placeholder
Returns are annual, nominal, total-return. Conservative placeholders (crypto, real estate, other) are intentionally cautious defaults pending better assumptions — the point is that you supply your own. Two preset bundles ship as well: a conservative set (stocks 5% / 18%) and an optimistic set (stocks 10% / 15%).

Portfolio tools reference →

Goals & the
household

The rest of the household.

A plan is more than a return curve. These pieces model the parts that decide whether the curve actually reaches the things you're saving for.

  • Goals — a target amount and date with an importance level (the probability of success you're aiming for), projected as a balance and progress band with a success probability at the target date.
  • Employer match — tiered and safe-harbor match formulas, with cliff and graded vesting schedules.
  • Mortgages & liabilities — full amortization and payoff schedules.
  • Budget — income and expense modeling and savings-rate analysis, feeding the household surplus into the projection.
  • Snapshots — immutable, diffable point-in-time records, so you can track how a plan changes over time.

Validation

Checked against the source documents.

Tax figures are not typed from a blog post. Each year's brackets carry the IRS Revenue Procedure they came from, with the date they were verified against it — and the tests assert those citations are present.

  • Over 4,000 tests run in the suite, the majority in the core financial engine.
  • Federal ordinary and LTCG brackets cite their IRS Revenue Procedure; the AMT parameters cite the same Procedure and the IRS release for the year.
  • FICA wage bases cite the SSA fact sheets, cross-checked against IRS Topic 751.
  • Money is carried as integer cents end to end, never as a float, so amounts don't accumulate rounding error.
  • Results are reproducible: the closed-form engine is deterministic, and Monte Carlo reproduces exactly under a fixed seed.
  • Unsupported inputs fail loudly rather than approximating — an unmodeled state returns a refusal, not a plausible-looking zero.

Limitations

Where the engine stops.

A projection tool that hides its edges is worse than useless. Here is what FinPlan does not model, or models with a known caveat. Read this section as carefully as the rest.

State tax is New York only

The only state module is New York — state, New York City, and Yonkers, for the current tax year. For any other state the engine returns an explicit "unsupported" result rather than a fake zero: the state line comes back unmodeled, not silently wrong. The federal numbers still hold.

AMT can overstate in gain-heavy years

The AMT engine (Form 6251, 26%/28% tiers, phased-out exemption, Form 8801 credit carryforward) folds long-term capital gains into the AMT base at ordinary rates rather than preserving their preferential treatment (Form 6251 Part III). In years with large long-term gains this overstates AMT — treat AMT output on gain-heavy years as an upper bound.

Deficit drawdowns are untaxed and proportional

When household spending exceeds income, the engine funds the deficit as a proportional drawdown across accounts by balance, and does not tax that drawdown or apply a tax-aware withdrawal order (e.g. taxable before pre-tax before Roth). Contributions and terminal balances are taxed correctly; the deficit-funding path is the one place withdrawal tax is not yet applied.

No estate, gift, or generation-skipping tax

The engine models income, payroll, and capital-gains tax during your lifetime. It does not model estate tax, gift tax, the step-up in basis at death, or any wealth-transfer planning.

Current law, held fixed as it projects forward

The engine is built for the current tax year and its published tables. Projections that run past the last legislated year hold that year's law fixed in real terms — they do not predict future legislation. Social Security's forward bend points are the SSA's projected values, not yet-final figures.