Skip to content
WealthJot.ai

Methodology

The exact math behind three numbers WealthJot shows you — published here as an owned, citable reference. No formula on this page is illustrative; each mirrors the actual calculation code WealthJot runs.

Budget tracking (envelope method)

WealthJot does not carry unused budget forward between months — each month is a fresh envelope. For a given category and month, WealthJot sums every ledger entry marked kind: "expense"whose date falls in that month, and compares the total to the category's configured monthly limit:

actual = Σ |amount| for expense entries in category, in month
pct_used = actual / monthly_limit × 100 (null when the limit is 0, to avoid a divide-by-zero)

Expenses whose category isn't configured in the budget spec roll into a synthetic uncategorized line with a limit of 0, so spend is tracked but never silently dropped. WealthJot also derives a savings rate from income and expense totals: savings_rate = (income − expense) / income × 100 (null when income is 0 or negative).

Net worth aggregation

Net worth rolls up every manually-tracked asset and liability alongside the live portfolio ("holdings") total, as of a given date:

net_worth = Σ non-liability asset values + holdings_total − Σ liability values

An asset counts as a liability when it is explicitly flagged as one, or its class is a loan or credit card. Each asset is valued as of that date by its own connector:

  • ManualThe value you enter, or cost basis if none is set.
  • Fixed depositP × (1 + r/4)^(4t) — quarterly compounding, the Indian FD convention; accrual stops at maturity.
  • PPF / EPF / NPSP × (1 + r)^t — annual compounding at the notified/blended rate (defaults 7.1% / 8.25% / 9%).
  • Loan (EMI)Reducing-balance amortization — the outstanding principal shrinks as EMIs are paid, so the liability's value declines over time.

The breakdown by asset class ("by_class") sums signed values per class — liabilities negative — plus a synthetic HOLDINGS class for the live portfolio, sorted by absolute value descending.

FIRE / retirement number

The FIRE number is the corpus that funds your annual expenses indefinitely at a chosen safe withdrawal rate, in today's money:

fire_number = annual_expenses / (withdrawal_rate / 100)
A 4% withdrawal rate implies 25× annual expenses; 2.5% implies 40×.

The full retirement plan grows that FIRE number to your retirement age in nominal terms (expenses inflate over the horizon), then projects your corpus at retirement as your current corpus compounded forward plus your monthly savings as an annuity-due:

corpus_at_retirement = FV(current_corpus, return, years) + FV_annuity(monthly_savings, return, years)

You're "on track" when the projected corpus meets or exceeds the inflated FIRE number; otherwise WealthJot solves for the extra monthly saving that exactly closes the gap. A companion Monte-Carlo simulation (seeded, reproducible — never Math.random) draws a random real return each year from now to life expectancy, applies your chosen withdrawal strategy (fixed real / variable / guardrails), and reports the percentage of simulated paths that stay solvent — plus the 10th/25th/ 50th/75th/90th percentile of the terminal corpus.