{% extends "base.html" %} {% block title %}{{ _("Retirement") }} · Wealth Dashboard{% endblock %} {% block heading %}{{ _("Retirement plan") }}{% endblock %} {% block lede %}

{{ _("Will the money last — and if not, until when. What goes in until you stop, what you will spend each month from then on, what will still come in, a return before and after, fees, inflation, tax on what is withdrawn: walked a year at a time to a horizon. The Forecast page's outlook is the first answer; this is the one with the retirement in it.") }}

{% endblock %} {% block content %} {% if no_people %}

{{ _("Add the people in your household under Settings → People, each with a birthday, and this page will say where each of them stands for retirement.") }}

{% elif not blocks and without_birthday %}

{{ _f("No birthday on file for {names}. Add one under Settings → People and the outlook appears here.", names=without_birthday | join(", ")) }}

{% endif %} {% for b in blocks %} {% set o = b.out %} {% set p = b.plan %} {% set key = 'end_real' if real else 'end' %} {% set rkey = 'required_real' if real else 'required' %}
{{ b.person.name }} · {{ _f("age {age}", age=b.age_now | round(0) | int) }}
{% if o.retired_already %}{{ _("Retired already") }} {% elif o.enough %}{{ _f("Lasts to {age}", age=p.horizon_age) }} {% else %}{{ _f("Runs out at {age}", age=o.runs_out_age) }}{% endif %}
{% if o.enough %}{{ _f("On these assumptions the pile is {value} when {name} retires at {retire} in {year}, against {required} needed, and {left} is still there at {horizon}.", value=money(o.at_retirement_real if real else o.at_retirement, base_currency), name=b.person.name, retire=p.retire_age, year=o.retire_year, required=money(o.required_real if real else o.required, base_currency), left=money(o.left_at_horizon / ((1 + p.inflation / 100) ** (p.horizon_age - (b.age_now | int))) if real else o.left_at_horizon, base_currency), horizon=p.horizon_age) }} {% else %}{{ _f("On these assumptions the pile is {value} when {name} retires at {retire} in {year}, against {required} needed — the money runs out at {age}, {years} years before the horizon.", value=money(o.at_retirement_real if real else o.at_retirement, base_currency), name=b.person.name, retire=p.retire_age, year=o.retire_year, required=money(o.required_real if real else o.required, base_currency), age=o.runs_out_age, years=p.horizon_age - o.runs_out_age) }}{% endif %}
{{ _("Funded") }}
{% if o.funded is not none %}{{ '%.0f' | format(100 * o.funded) }} %{% else %}—{% endif %}
{{ _f("{monthly} a month needed at retirement, in the money of that day", monthly=money(o.monthly_needs_at_retirement, base_currency)) }}
{{ _f("from {value} today across {n} accounts, {monthly} a month{plan}", value=money(b.net_worth, base_currency), n=b.accounts, monthly=money(b.monthly, base_currency), plan=(" — " ~ _("from the Forecast plan")) if b.from_plan else "") }}

{{ _("The plan") }}

{{ _("every rate is yours; the page predicts nothing") }}

{{ _("Spending in retirement, a month, in today's money") }}

{% for it in p.expenses + [none] %} {% set i = loop.index0 %}
{% endfor %}

{{ _("Income in retirement, a month, in today's money") }}

{% for it in p.incomes + [none] %} {% set i = loop.index0 %}
{% endfor %}

{{ _("An item with no ages runs from retirement to the horizon; clear its name to remove it. Amounts are in today's money and inflate with the rate above; what the pile has to cover is spending minus income, grossed up for the tax on withdrawals.") }}

{{ _("Year by year") }}

{{ _("in today's money") if real else _("nominal") }}
{% for r in o.rows %} {% set deflate = ((1 + p.inflation / 100) ** (r.age - (b.age_now | int))) if real else 1 %} {% endfor %}
{{ _("Age") }}{{ _("Year") }}{{ _("Put in") }}{{ _("Spending") }}{{ _("Income") }}{{ _("Withdrawn") }}{{ _("End of year") }}{{ _("Required") }}
{{ r.age }}{{ r.year }} {{ _("saving") if r.phase == 'saving' else _("retired") }} {{ money(r.contribution / deflate, base_currency) if r.contribution else '—' }} {{ money(r.expenses / deflate, base_currency) if r.expenses else '—' }} {{ money(r.income / deflate, base_currency) if r.income else '—' }} {{ money(r.withdrawal / deflate, base_currency) if r.withdrawal else '—' }} {{ money(r[key], base_currency) }} {{ money(r[rkey], base_currency) if r[rkey] is not none else '—' }}

{{ _("Required is, from retirement on, the capital that funds the rest of the plan from that year at the return after retirement; before it, the path that would reach the required capital exactly with the same contributions — the projection above it means ahead of plan. Projections rest on your assumptions; outcomes will differ. Not financial advice.") }}

{% endfor %} {% endblock %} {% block scripts %} {% endblock %}