A calculator must be trustworthy, so this page shows the calculation in the open: every figure below is computed in two independent ways — by hand with a closed-form compound interest formula and with Varallisuuspolku's calculation engine (laskenta.js). The results agree to floating-point precision (a difference below a millionth of a cent). The same checks run automatically as unit tests with every change, and anyone can repeat them — instructions at the end of the page.
Assumptions and versioning
| Tax rules | Finnish capital income taxation, tax year 2026 parameters: 30 % of annual gains up to 30 000 €, 34 % above that. Deemed acquisition cost 40 % (ownership ≥ 10 y) / 20 %. |
| Transfer tax | On buying a home 1.5 % (housing company share) and a cottage 3 % (real property) of the price, paid from own funds at the time of purchase; an event-specific percentage overrides the default (detached house 3 %). Already-owned assets have no purchase moment. |
| Return assumptions | Stocks 7 %, bonds 3 %, cash 1.5 % per year (nominal). Editable in Pro mode. |
| Inflation assumption | 2 %/yr (editable). Inflation adjustment with the exact Fisher formula (1+r)/(1+i). All amounts you enter (savings, events, purchase prices, income need, earnings-related pension) are in today's money, and by default the results are shown in today's money too. Switching "Inflation-adjusted" off only changes the presentation: wealth is shown in future euros (today's money × (1+i)t), but the success probability, sustainable monthly income and solutions are the same in both positions. Loans are nominal contracts in both. |
| Monte Carlo | 5 000 paths, fixed per-path seeds (CRN) — the same result on every run, deltas comparable. |
| Verified | 24 Sep 2026 — tax rules and assumptions are reviewed at least once per tax year. Engine version 2026-09-24. Change 24 Sep 2026: nominal mode is a presentation option — previously, with the switch off, the income need and the earnings-related pension stayed fixed in euros alongside nominal returns, so their purchasing power halved in 35 years and the result looked too good (example: 35-year-old, 30 000 €, 500 €/mo, income need 3 300 €/mo, pension 1 800 €/mo: 86.6 % in nominal vs 45.5 % in real terms). All entered amounts are now in today's money in both positions, and new plans default to today's money. Old share links keep their switch position; the success % and sustainable income of nominal links become the same as in real terms (review memo 23 Sep 2026 K1). Change 24 Sep 2026: the earnings-related pension starts at the lowest statutory retirement age at the earliest, by year of birth — previously any start age was accepted, and an impossible early start improved the result (same example, retiring and pension at 58: 11.9 % → 1.4 % when the pension starts at 67 y 8 mo). An earlier age is raised to the limit in every channel (app, share link, Tulkki, MCP), and the user is told. Together the changes lowered the example's success % from 45.5 % to 29.2 % (review memo K2). The default retirement age of a new plan is now 67 y (previously 65 y), and the example plans' pension ages have been moved to the statutory minimum. Earlier 5 Sep 2026: Change 5 Sep 2026: the gain on selling an asset is computed in nominal terms also in inflation-adjusted mode — previously in real mode the nominal purchase price was subtracted from the sale value in today's money, so an increase in value equal to inflation looked tax-free and, for example, a cottage appreciating 2 %/y paid 0 € tax; the tax now equals the nominal-mode tax deflated to the time of sale (external audit 5 Sep 2026). Change 5 Sep 2026: asset sales and retirement withdrawals share the same annual ledger for the 30,000 € capital income tax threshold — previously each sale started the bracket from zero (two 30,000 € gains in the same year: 18,000 € → 19,200 €). Change 4 Sep 2026: the main line is the median path — the chart's main line and the figures solved on the expected path (savings, sustainable income, retirement age without a confidence level) now follow the median approximation of returns (1+μ)·e−σ²/2, which matches the middle path of the Monte Carlo distribution; the earlier arithmetic expected-value path overestimated typical final wealth by 20–150 % (volatility drag). Success probability, the fan and figures solved at a confidence level did not change. Change 4 Sep 2026: the statutory pension follows the retirement age — the pension field is the estimate at pension age assuming work continues until then; if you retire earlier, the calculation reduces the pension by the accrual that ends (P × (retirement age − 23) / (pension age − 23)). Previously the pension was constant regardless of retirement age, which overestimated an early retiree's pension by up to 40 %. The option "Pension does not depend on retirement age" bypasses the adjustment. Earlier 2 Sep 2026: Change 2 Sep 2026: one-off expenses funded from investments and loan service exceeding savings realise capital gains tax under the same rule as retirement withdrawals (previously untaxed — same portfolio, same sale, same rule). Change 2 Sep 2026: transfer tax on buying a home (1.5 %) and a cottage (3 %). Change 2 Sep 2026: an optional purchase price in the taxable sale of an already owned asset — tax on the actual gain, not always on the deemed share. Change 2 Sep 2026: the pension field asks for the take-home (net) estimate — the pension record shows gross. Earlier 29 Aug 2026: Change 29 Aug 2026: the 30/34 % capital income tax threshold is now a threshold also in monthly withdrawals — only the part above the threshold is taxed at the higher rate, and gains already realised during the year consume the lower-rate room (previously the whole withdrawal was taxed at one rate; asset sales already computed the bracket correctly). Change 29 Aug 2026: in inflation-adjusted mode loan instalments, the debt balance and loan payoff are deflated from the time of purchase (previously they stayed nominal, so a loan 25 years out looked clearly more expensive than it was), and capital gains tax is computed on the nominal gain also in this mode — tax law is nominal. Earlier 25 Jul 2026: Change 25 Jul 2026: when the Pro-mode deemed acquisition cost caps a monthly withdrawal, the taxable gain is recorded from the deemed share (previously from the actual gain — the reported tax and the 34 % bracket's annual ledger were exaggerated; the wealth curve was correct). Change 25 Jul 2026: already owned assets (current value + remaining loan) included in the calculation; taxable sale with the deemed acquisition cost. Change 24 Jul 2026: loan service exceeding savings is funded from investments (previously the model assumed the difference came from outside the model, which underestimated the cost of a large loan). |
| Source code | laskenta.js (the engine) · testit/ (automated checks) |
Compound interest checks closed-form formula vs. the engine
Notation: k = 1.071/12 (the monthly factor at a 7 % annual return), n = number of months. All examples use a 100 % equity weight with no taxes or costs, so that a closed-form formula exists.
| Check | Formula | By hand | Engine |
|---|---|---|---|
| Lump sum of 50 000 €, 10 y | S·k120 | 86 540,24 € | 86 540,24 € |
| Monthly savings of 500 €/mo, 10 y | C·(k120−1)/(k−1) | 79 747,02 € | 79 747,02 € |
| Growing savings, +1.5 %/yr wage growth | C·Σ 1,015(j−1)/12·k120−j | 85 355,26 € | 85 355,26 € |
| Withdrawal phase: 1 M€, withdrawing 2 000 €/mo, 10 y | S·k120 − W·(k120−1)/(k−1) | 1 411 816,71 € | 1 411 816,71 € |
| Inflation adjustment (Fisher), 50 000 €, 10 y | S·((1,07/1,02)1/12·d)120 | 70 993,14 € | 70 993,14 € |
| Asset of 220 000 €, +2 %/yr, 10 y | P·1,0210 | 268 178,77 € | 268 178,77 € |
| Annuity loan of 187 000 €, 3.5 %, 25 y | P·r/(1−(1+r)−300) | 936,17 €/kk | 936,17 €/kk |
Monthly factor k = 1.071/12·d, where d = e−σ²/24 is the median path's volatility correction (100 % stocks: σ = 16 %, d ≈ 0.99893) — the main line follows the typical, i.e. median, development rather than the arithmetic expected value (see simplifications). Without the correction (d = 1) the lump sum would give 98,357.57 €. The annuity formula is the same one that banks' loan calculators use — you can verify the monthly instalment with any bank's calculator or the spreadsheet PMT function: PMT(3.5 %/12; 300; −187000) = 936.17 €. The savings and withdrawal phase formulas correspond to the spreadsheet FV function with monthly rates.
Worked tax examples computed step by step
Capital gains tax and deemed acquisition cost (asset sales)
A home is bought for 220,000 € and sold 10 years later, appreciation 2 %/y. Not marked as a tax-exempt own home.
| Sale price | 220 000 € · 1,0210 = 268 178,77 € |
| Actual gain | 268 178,77 − 220 000 = 48 178,77 € |
| Deemed acquisition cost (ownership ≥ 10 y) | taxable at most 60 % of the sale price = 160 907.26 € → the actual gain is smaller, so 48 178.77 € is taxed |
| Tax by bracket | 30 000 · 30 % + 18 178,77 · 34 % = 9 000,00 + 6 180,78 = 15 180,78 € |
| Engine result | 15 180,78 € — matches |
Retirement withdrawal: gross → net (profit-share tax)
Only the gain share of a withdrawal is taxed. Example: a portfolio worth 500,000 € with an acquisition cost of 250,000 € (gain share 50 %), and the retiree needs 2,000 € net.
| Gross sale | need / (1 − profit share · tax) = 2 000 / (1 − 0.5 · 0.30) = 2 352,94 € |
| Tax | profit share · gross · 30 % = 0.5 · 2 352.94 · 0.30 = 352,94 € |
| In hand | 2 352.94 − 352.94 = 2 000.00 € — exactly the need |
The engine tracks the portfolio's acquisition cost month by month: savings increase it, sales reduce it proportionally, and returns only increase the value. Realised gains within a year are summed for the 30,000 € tax threshold, and the calculator resets them each calendar year.
The dividend tax drag in a book-entry account
85 % of dividends from directly held shares is taxable capital income. With a dividend yield of 3.5 %/y, the annual return on a book-entry account drops by 3.5 % · 85 % · 30 % ≈ 0.89 percentage points for the equity share. In an equity savings account and an insurance wrapper dividends accumulate untaxed — this difference is the core of the account comparison.
Monte Carlo: repeatability and properties
The success probability is computed from thousands of random market paths. The randomness is seeded (path i always gets the same shock sequence), so the same plan gives exactly the same result on every run and comparisons between plans are fair — both experience the same market histories. Automated tests also verify that the fan's lower bound (P10) never exceeds the upper bound (P90), that the fan starts from the initial capital and that the final value of the depletion curve is exactly 1 − success probability.
Example: the default plan's success probability is 99.0 % — bit-identical on every run and every device.
Known simplifications what the model does NOT account for
Every model simplifies. These are the known deviations from reality — the calculation is an indicative illustration, not a tax return:
| Equity savings account deposit cap | The 100 000 € cap isn't modelled in the calculation: the whole portfolio is treated as an equity savings account, although the part above the cap would in reality sit in a book-entry account (dividends taxable). The interface warns when the cap is exceeded, and the MCP interface's notes give the age at which it happens. |
| Rebalancing in a book-entry account | Maintaining a fixed allocation and the age-based allocation do not realise capital gains tax. In reality, selling funds or shares to rebalance in a book-entry account is taxed, whereas in an equity savings account or an insurance wrapper it is not. The model therefore favours the book-entry account in the account comparison. The effect depends on how you rebalance: directing new savings into the underweight asset class realises no gain, but reallocating in retirement does. |
| Annual tax ledger | Retirement withdrawals, one-off expenses funded from investments and asset sales are recorded in the same annual ledger (30/34 % threshold), per person. The tax year is counted from the plan's months, not the calendar. Deductions, loss offsetting and an annual ledger for dividends are not modelled (dividend tax is deducted from the expected return, see Investment account). The initial portfolio's acquisition cost is assumed to equal its current value — if the portfolio already holds large unrealised gains, the tax on withdrawals is lower than in reality. |
| Loss deduction | Not modelled — only gains are taxed; deductions for loss years aren't credited. |
| Deemed acquisition cost on withdrawals | Pro mode's deemed-cost rule for monthly retirement withdrawals estimates the holding period from the start of the plan, not per lot. |
| Holdings (current state) | An already-owned home or cottage is entered as its current value and remaining loan — the purchase price is optional: without it, the taxable share of a taxable sale is computed with the deemed acquisition cost (20 % / 40 % depending on holding period; an optional purchase year extends the holding period, otherwise it counts from now), with it from the actual gain (the deemed cost still caps it). A primary home is tax-free on sale by default. |
| Main line = median path | The chart's main line follows the median approximation of returns: monthly return (1+μ)1/12·e−σ²/24, where σ is the portfolio's annual volatility. It matches the middle path (P50) of the Monte Carlo distribution to within about ±10 %. An arithmetic expected-value path would overestimate the typical outcome, because volatility eats geometric growth (volatility drag ≈ σ²/2 ≈ 1–2 percentage points per year at a high stock weight). The deterministic solvers (savings, sustainable income, retirement age without a confidence level) use the same path. Monte Carlo simulates with the arithmetic expected return plus random shocks, so the drag is fully present there — the fan (P10–P90), the success probability and the confidence levels do not depend on the choice of main line. Change 4 Sep 2026 (previously the main line was the arithmetic expected-value path). |
| Earnings-related pension | The user's own estimate as take-home monthly income at pension age (the Finnish Centre for Pensions' estimate assumes work continues until then) — not an official calculation. If you retire before the pension age, the pension is reduced by the accrual that ends using the accrual approximation P × (retirement age − 23) / (pension age − 23), which needs no salary data (career start at 23 is a constant; actual accrual depends on earnings). No deferral increase (0.4 %/month) is added and the life expectancy coefficient is assumed to be included in the estimate. Income tax on the pension, the national pension and the guarantee pension are not modelled. Start age: the pension starts at the lowest statutory retirement age at the earliest, inferred from age (year of birth ≈ 2026 − age, so the estimate can be a year off). Ages for those born in 1964 or earlier are confirmed (1962–1964: 65 y). For later cohorts the age is tied to life expectancy and confirmed only at 62, so the calculation uses the earnings-related pension insurers' estimates (1975: 66 y 2 mo, 1985: 67 y 1 mo, 1995: 68 y, 2005: 68 y 9 mo; years in between interpolated). The partial early old-age pension (25 or 50 %, permanent reduction 0.4 %/month) and occupational retirement ages are not modelled. |
| Asset class correlation | The basic version's uncertainty fan assumes full correlation (a conservative simplification — the real diversification benefit is larger). In Pro mode you can set the correlations yourself. The effect is small: with a realistic stock–bond correlation (0.1) the success probability changes by at most 3–5 percentage points, and only for balanced portfolios whose result is near 50 % (measured 4 Sep 2026 with the example plans) — which is why the basic version keeps the conservative assumption. |
| Return distribution | Monthly returns from a normal distribution with no autocorrelation (Pro: fat-tailed Student's t). Real markets can deviate from this. |
| Inflation | A constant assumption for the whole plan — real inflation varies. |
| Changes to tax rules | The calculation applies today's rules across the whole lifecycle — future law changes aren't predicted. |
Check it yourself
All the checks on this page — and dozens more — run automatically with every code change. You can repeat them yourself:
- Get the source code: github.com/olavikurola/varallisuuspolku
- Run the unit tests:
node testit/laskenta.test.js— no dependencies, plain Node.js is enough. - Compare for yourself: the app's annual table (below the chart) shows the numbers year by year and exports them as CSV to a spreadsheet, where you can build your own comparison.
The tests cover, among other things, compound interest identities, tax calculation, annuity loans, Monte Carlo determinism, the inverse solvers (bisection), goal points, confidence levels, the coherence of family calculation and the bit-level equality of Pro-mode defaults with the basic mode.
The calculation is an indicative illustration, not investment advice nor tax advice. Past returns are no guarantee of future returns. Back to the planning tool · Accessibility