Methodology

The math behind
every number.

No black boxes. Every advanced widget in Wealth Prognosis is documented here with its exact formula, inputs and a worked example — so you can trust the output, audit it, and reproduce it.

Three scenarios, always

Every formula runs three times — pessimistic, realistic, optimistic — using different change rates. You see the full range of outcomes side by side.

Year-by-year, not averages

Taxes, expenses and returns are computed for each year individually. No smoothing, no single headline number hiding the truth.

Auditable by design

Every calculated row carries a SHA-256 checksum plus created/updated stamps. You can export the full workings to Excel or JSON at any time.

Advanced widgets

The widgets that do real mathematics — not just sums and group-bys. Each one lists its data inputs, the exact formula, a worked example, and the caveats we want you to know.

Net worth over time

The headline number. Market value of everything you own, minus everything you owe, charted year by year.

Inputs

  • asset_market_amount (per asset, per year)
  • mortgage_amount (per asset, per year)

Caveats

Uses your actual entered values up to the current year; future years come from the prognosis engine, not this widget.

Formula

\[ NW_y \;=\; \sum_{a \in A_y} M_{a,y} \;-\; \sum_{a \in A_y} L_{a,y} \]

\(NW_y\) net worth in year \(y\), \(M_{a,y}\) market value of asset \(a\), \(L_{a,y}\) mortgage balance, \(A_y\) all active assets for the chosen configuration.

Worked example

Year 2024 — assets total 8 450 000, mortgages total 3 200 000. \(NW_{2024} = 8\,450\,000 - 3\,200\,000 = 5\,250\,000\).

FIRE number & progress

How much wealth you need to retire — and how far you already are. The single most important number on the dashboard.

Inputs

  • expence_amount (all assets, current year)
  • asset_market_amount (liquid + preserved, current year)

Caveats

The 25× multiplier is the inverse of the 4% safe-withdrawal rule. For a more conservative plan, raise the multiplier (30× ⇒ 3.33% SWR).

Formula

\[ F \;=\; 25 \times E \qquad\quad p \;=\; \min\!\left(\tfrac{P}{F},\, 1\right) \]

\(F\) FIRE number, \(E\) annual expenses, \(P\) current portfolio value, \(p\) progress toward FIRE (0 to 1).

Worked example

Annual expenses 540 000, portfolio 7 200 000. \(F = 25 \times 540\,000 = 13\,500\,000\); \(p = 7\,200\,000 / 13\,500\,000 \approx 53.3\%\).

FIRE crossover point

The moment your portfolio can pay for your life from passive income alone. After this you are, in principle, free.

Inputs

  • asset_market_amount (current year)
  • expence_amount (current year)

Caveats

Binary indicator — not a sell-down simulation. For year-by-year withdrawal feasibility across three scenarios, the full prognosis engine runs a real liquidation against your actual assets and taxes.

Formula

\[ \text{crossover} \;\Longleftrightarrow\; 0.04 \cdot P \;\geq\; E \]

\(P\) current portfolio, \(E\) annual expenses. The 0.04 constant is the classic 4% safe-withdrawal rate.

Worked example

Portfolio 15 000 000, expenses 540 000. Passive income \(0.04 \times 15\,000\,000 = 600\,000 \geq 540\,000\) ⇒ crossover achieved.

FIRE metrics over 30 years

Projects net worth forward 30 years against an inflation-adjusted FIRE target, so you can see the year the two lines cross.

Inputs

  • current net worth
  • annual savings (\(I - E\))
  • growth rate \(r = 7\%\)
  • inflation \(\pi = 3\%\)

Caveats

Uses constant \(r\) and \(\pi\) for readability. The main prognosis engine runs the same projection per asset, per year, across three scenarios with configurable change rates.

Formula

\[ P_{t+1} \;=\; (P_t + S)(1 + r), \qquad F_t \;=\; F_0 \cdot (1 + \pi)^t \]

\(P_t\) projected portfolio in year \(t\), \(S\) annual savings (income minus expenses), \(r\) nominal growth rate, \(F_t\) FIRE number inflated from \(F_0\) by \(\pi\).

Worked example

Start \(P_0 = 5\,000\,000\), \(S = 300\,000\). After one year \(P_1 = (5\,000\,000 + 300\,000) \times 1.07 = 5\,671\,000\). After ten years \(P_{10} \approx 14\,020\,000\).

Savings rate over time

The single best predictor of your FIRE timeline. A 50% savings rate brings financial independence in roughly 17 years regardless of income.

Inputs

  • income_amount (per year, income assets)
  • expence_amount (per year, all assets)

Caveats

Historic years only — the widget never projects into the future. Negative when expenses exceed income (drawing down).

Formula

\[ s_y \;=\; \frac{I_y - E_y}{I_y} \]

\(s_y\) savings rate in year \(y\), \(I_y\) total income, \(E_y\) total expenses. Expressed as a percentage. Benchmark line drawn at 20%.

Worked example

Income 900 000, expenses 540 000. \(s = (900\,000 - 540\,000) / 900\,000 = 40\%\).

Retirement readiness

Projects today's net worth to your planned retirement age against a capital-adequacy target, using your own expense baseline.

Inputs

  • current net worth
  • birth_year, pension_wish_year, death_year
  • annual income, annual expenses

Caveats

The 80% replacement ratio is a widely used rule of thumb, not a personal forecast. Pension payouts from tjenestepensjon/IPS/offentlig pensjon are modelled separately by the tax engine.

Formula

\[ T \;=\; 25 \times 0.80 \times E \qquad\quad NW_{t} \;=\; (NW_{t-1} + S)(1+r) \]

\(T\) retirement target (25× of 80% of current expenses — the classic 70–80% income-replacement rule), \(NW_t\) projected net worth at age \(t\), \(r\) assumed growth (default 7%).

Worked example

Expenses 540 000 ⇒ \(T = 25 \times 0.80 \times 540\,000 = 10\,800\,000\). Starting from 3 000 000 at age 40 with 300 000 annual savings, \(NW_{65} \approx 23\,100\,000\) — comfortably above target.

Capital Inversion point & wealth stage

The moment your money starts earning more than you do. Tracked as its own simulation-dashboard widget, alongside an income-rich benchmark and a three-stage classification.

Inputs

  • metrics_total_return_amount (liquid assets, per year)
  • income_amount (assets typed "salary" only, per year)
  • median_national_salary_nok (configurable reference figure)

Caveats

Labor salary only counts assets typed "salary" — pensions, government benefits and portfolio dividends are deliberately excluded so the comparison is job income vs. portfolio growth, not a mix of both.

Formula

\[ CI_y \;=\; \frac{R_y}{S_y} \times 100, \qquad I_{\text{rich}} \;\Longleftrightarrow\; S_y > 2 \times M \]

\(CI_y\) Capital Inversion ratio in year \(y\), \(R_y\) the liquid portfolio's own annual return that year, \(S_y\) gross annual labor salary that year, \(M\) the median national salary reference figure. Capital Inversion is achieved when \(CI_y \geq 100\).

Worked example

Labor salary 1 000 000, portfolio return that year 1 050 000. \(CI = 1\,050\,000 / 1\,000\,000 \times 100 = 105\%\) ⇒ inversion achieved. Below 50% the widget shows "High Earner" (if income-rich) or "Building"; 50–99% shows "Capital Accumulator"; 100%+ shows "Capital Inverted".

Dynamic withdrawal guardrails (Guyton-Klinger)

A fixed 4% withdrawal every year is inefficient. Guardrails cut spending after a bad year and allow more after a good one, without a rigid rule.

Inputs

  • original target withdrawal rate \(w_0\) (set at start of decumulation)
  • planned withdrawal (per year)
  • portfolio value (per year)

Caveats

This is a decision rule the AI advisor applies by walking your existing year-by-year simulation output, not a live conditional the engine runs automatically every year.

Formula

\[ w_y \;=\; \frac{D_y}{P_y}, \qquad \begin{cases} \text{cut } 10\% & w_y > 1.2\,w_0 \\ \text{raise } 10\% & w_y < 0.8\,w_0 \end{cases} \]

\(w_y\) withdrawal rate in year \(y\), \(D_y\) that year's planned withdrawal, \(P_y\) portfolio value that year, \(w_0\) the original target rate set when decumulation started.

Worked example

Original target 4%. A market drop pushes this year's rate to 5% — 25% above target, past the 20% guardrail — so the capital preservation rule cuts the planned withdrawal by 10%.

Actual effective tax rate

Your real tax burden — every tax the engine calculated, divided by taxable base. Not a headline rate, the rate you actually pay.

Inputs

  • income_tax
  • fortune_tax
  • property_tax
  • capital_gains_tax
  • taxable_income_base

Caveats

Fortune tax and property tax are wealth-based but are included in the numerator because they are a real cash outflow. The ratio is not directly comparable to a marginal income-tax rate.

Formula

\[ \tau_y \;=\; \frac{T^{\text{income}}_y + T^{\text{fortune}}_y + T^{\text{property}}_y + T^{\text{gains}}_y}{B_y} \]

\(\tau_y\) effective tax rate in year \(y\), \(T^{\star}_y\) the tax paid of each kind, \(B_y\) the taxable base (gross income + realised gains).

Worked example

Gross base 950 000, total taxes 278 400. \(\tau = 278\,400 / 950\,000 \approx 29.3\%\).

Financial metrics heatmap

For every income-producing asset, every year: return, leverage risk and yield side by side, colour-coded against sensible thresholds instead of buried in a spreadsheet.

Inputs

  • asset_market_amount, acquisition_amount, paid_amount (per asset, per year)
  • income_amount, expence_amount, property_tax_amount (per asset, per year)
  • mortgage_balance_amount, mortgage_term_amount, equity_amount (per asset, per year)
  • cashflow_after_tax_amount (per asset, per year)

Caveats

The same year-by-year data also feeds Gross Rental Yield, Gross Rent Multiplier, Debt-to-Equity, Return on Assets, Price-to-Book and an EV/EBITDA proxy (enterprise value over NOI) and a liquidity current-ratio proxy — computed for every asset every year but not yet surfaced in their own widget. DSCR and LTV colour-coding: DSCR \(\geq 1.25\) good, \(\geq 1.0\) caution, below danger; LTV \(\leq 70\%\) good, \(\leq 85\%\) caution, above danger.

Formula

\[ \begin{aligned} \text{ROI} &= \frac{(M - C) + CF}{C} & \text{DSCR} &= \frac{NOI}{D_{\text{term}}} \\[4pt] \text{ROE} &= \frac{CF}{Eq} & \text{CoC} &= \frac{CF}{C_{\text{paid}}} \\[4pt] \text{LTV} &= \frac{L}{M} & \text{Cap Rate} &= \frac{I - Ex - T_{\text{prop}}}{C} \\[4pt] \text{Net Yield} &= \frac{I - (Ex + T_{\text{prop}} + D_{\text{term}})}{C} & NOI &= I - Ex - T_{\text{prop}} \end{aligned} \]

\(M\) market value, \(C\) acquisition cost (falls back to market value if not set), \(CF\) cash flow after tax, \(NOI\) net operating income, \(D_{\text{term}}\) annual mortgage payment, \(Eq\) equity, \(C_{\text{paid}}\) cash actually paid in (down payment plus contributions), \(L\) mortgage balance, \(I\) rental income, \(Ex\) operating expenses, \(T_{\text{prop}}\) property tax.

Worked example

A rental bought for 3 000 000, now worth 3 450 000, with 200 000 rental income, 40 000 expenses, 15 000 property tax, a 90 000 mortgage payment, 1 800 000 mortgage balance and 1 650 000 equity: \(NOI = 200\,000 - 40\,000 - 15\,000 = 145\,000\); \(\text{DSCR} = 145\,000/90\,000 \approx 1.61\); \(\text{LTV} = 1\,800\,000/3\,450\,000 \approx 52.2\%\); \(\text{Cap Rate} = 145\,000/3\,000\,000 \approx 4.8\%\).

Real (inflation-adjusted) net worth

A bigger nominal number isn't automatically real progress. This deflates each year's projected net worth to today's purchasing power, so you can see the line that actually matters: what your money can buy, not just what it's labelled.

Inputs

  • asset_market_amount (per asset, per year)
  • kpi change rate (per year, per simulation's own rate track)
  • current calendar year (the anchor)

Caveats

The anchor is always the current calendar year, not a fixed date — revisiting this chart next year shifts every real figure slightly, because the reference point for "today's money" has itself moved forward. That's intentional, not a bug. Currently shown for total asset market value only, on the Simulation dashboard's Trends tab; income and expenses are deliberately not deflated the same way yet, because most income types already assume KPI-linked nominal growth, so a blended real-income figure would mostly show the structural effect of retirement (salary stopping, pension starting) rather than genuine inflation erosion.

Formula

\[ P(\text{anchor}) = 1, \quad P(y) = P(y-1)(1+\pi_y) \;\text{for } y > \text{anchor}, \quad P(y) = \frac{P(y+1)}{1+\pi_{y+1}} \;\text{for } y < \text{anchor} \]\[ \text{Real}(y) \;=\; \frac{\text{Nominal}(y)}{P(y)} \]

\(P(y)\) the cumulative price index for year \(y\) relative to the anchor year (today), \(\pi_y\) that year's KPI/inflation rate on the simulation's own rate track. \(P>1\) for future years discounts them down to today's purchasing power; \(P<1\) for past years grosses their smaller nominal figures back up to be comparable.

Worked example

Anchor year 2026, 5% annual inflation. A projected net worth of 525 000 in 2027 is \(P(2027) = 1.05\), so \(\text{Real}(2027) = 525\,000 / 1.05 = 500\,000\) in 2026 kroner — the portfolio grew 5% nominally but stood still in real terms.

Taxation

The tax engine models the real brackets, thresholds and shielding rules — not rough percentages. Rates, bands and municipal rules are loaded per year from the tax configuration tables.

Fortune tax (formueskatt)

\[ T^{\text{fortune}} \;=\; \max\!\bigl(0,\; W_{\text{net}} - W_{\text{threshold}}\bigr) \cdot \bigl(r_{\text{state}} + r_{\text{muni}}\bigr) \]

\(W_{\text{net}}\) valued net wealth (primary residence, shares, business assets each get their own valuation discount), \(W_{\text{threshold}}\) annual threshold, \(r_{\text{state}}\) and \(r_{\text{muni}}\) state and municipal rates.

Bracket tax (trinnskatt)

\[ T^{\text{bracket}} \;=\; \sum_{k=1}^{K} r_k \cdot \max\!\bigl(0,\; \min(Y, b_{k+1}) - b_k\bigr) \]

\(Y\) gross ordinary income, \(b_k\) lower bound of bracket \(k\), \(r_k\) marginal rate for that bracket. Brackets are loaded per year from the tax configuration.

Tax shield (skjermingsfradrag)

\[ S_t \;=\; C_t \cdot r^{\text{skjerm}}_t, \qquad T^{\text{dividend}} \;=\; \max\!\bigl(0,\; D_t - S_t\bigr) \cdot g \cdot r^{\text{cap}} \]

\(C_t\) cost basis, \(r^{\text{skjerm}}_t\) annual risk-free shielding rate, \(S_t\) shielding deduction, \(D_t\) dividend received, \(g\) gross-up factor (currently 1.72), \(r^{\text{cap}}\) capital tax rate.

Property tax (eiendomsskatt)

\[ T^{\text{property}} \;=\; \max\!\bigl(0,\; V \cdot d - V_{\text{threshold}}\bigr) \cdot r_{\text{muni}} \]

\(V\) property market value, \(d\) municipal valuation discount (often 0.70), \(V_{\text{threshold}}\) municipal bottom deduction, \(r_{\text{muni}}\) municipal rate. 327 municipalities ship configured.

Prognosis math

The primitives that roll every asset forward, year after year, across three scenarios.

Yearly compound roll-forward

\[ V_{y+1} \;=\; V_y \cdot \bigl(1 + c_{y,s}\bigr) \;+\; \Delta_{y,s} \]

Each asset evolves year by year. \(V_y\) value in year \(y\), \(c_{y,s}\) percentage change rate for year \(y\) under scenario \(s\), \(\Delta_{y,s}\) fixed-amount adjustments (top-ups, transfers, rule-engine mutations).

Compound Annual Growth Rate (CAGR)

\[ \text{CAGR} \;=\; \left(\frac{V_{\text{end}}}{V_{\text{start}}}\right)^{\!1/n} - 1 \]

Smoothed annualised growth between two points in time. \(n\) is the number of years. Used in simulation summaries and the asset overview card.

Real vs. nominal return

\[ r_{\text{real}} \;=\; \frac{1 + r_{\text{nominal}}}{1 + \pi} - 1 \]

Converts a nominal return into real (inflation-adjusted) return using CPI \(\pi\). The engine shows both; expenses and tax thresholds are inflated using the same \(\pi\).

Mortgage payment - annuitetslån & serielån

\[ \text{Annuitetslån: } A \;=\; L \cdot \frac{r\,(1+r)^{n}}{(1+r)^{n} - 1}, \qquad \text{Serielån: } P_{\text{fixed}} \;=\; \frac{L}{n} \]

\(A\) the fixed total annual payment on an annuity loan, \(P_{\text{fixed}}\) the fixed annual principal on a serial loan, \(L\) the original loan amount, \(r\) periodic interest rate, \(n\) original term in years. Annuitetslån keeps the total payment flat and lets the interest/principal split shift over time; serielån keeps the principal flat and lets the total payment (interest + principal) decline every year as the balance shrinks. Either schedule is frozen at origination and only re-derived if the interest rate itself changes - never because of an extra payment. Extra payments (whether typed directly onto a year, or transferred in from another asset) are pure additional principal: they shrink the balance faster and shorten the loan, without changing the scheduled payment for any other year - so more extra payment always means fewer years, never a smaller regular payment along the way.

Now run the numbers on your own life.

Every formula on this page runs live against your own assets, income, taxes and scenarios the moment you sign in. No spreadsheet, no guesswork.