{% extends "base.html" %} {% from "_notes.html" import fine_print %} {% block title %}Goals · Networthy HQ{% endblock %} {% block main_class %}wide{% endblock %} {% block content %} {% set ed = (goals | selectattr('id','equalto',edit_id) | first) if edit_id else none %}

Goals

Set a target and a date — we work out the monthly investment needed to get there. Your Retirement (FIRE) goal is tracked automatically from your Expenses.

{% if has_goals or fire %}
Overall progress {{ "%.0f"|format(overall_pct) }}% ₹{{ "{:,.0f}".format(total_saved) }} of ₹{{ "{:,.0f}".format(total_target) }} across {{ goals|length }} goal{{ '' if goals|length == 1 else 's' }}
{% if total_monthly %}
Needed each month ₹{{ "{:,.0f}".format(total_monthly) }} to keep every dated goal on track
Or as a lump sum today ₹{{ "{:,.0f}".format(total_lumpsum) }} set aside now instead of the monthly SIPs
{% endif %}
{% endif %} {# --- Retirement (FIRE): read-only, mirrored from Expenses -------------------- #} {% if fire %}
Retirement (FIRE) auto · from Expenses
{{ "%.0f"|format(fire.multiple) }}× your annual expenses · a {{ "%g"|format(fire.swr_pct) }}% safe-withdrawal corpus
₹{{ "{:,.0f}".format(fire.saved) }} of ₹{{ "{:,.0f}".format(fire.target) }} · {{ "%.0f"|format(fire.progress_pct) }}% there Adjust on Expenses →
{% endif %} {# --- Your goals -------------------------------------------------------------- #} {% for g in goals %}
{{ g.category_icon }} {{ g.name }} {% if g.status == 'funded' %} Funded ✓ {% elif g.status == 'overdue' %} Overdue {% elif g.status == 'undated' %} No date {% else %} {{ g.months_left }} mo left {% endif %}
{{ g.category_label }} {% if g.target_fmt %} · by {{ g.target_fmt }}{% endif %} · {{ "%g"|format(g.return_pct_display) }}%/yr assumed {% if g.notes %} · {{ g.notes }}{% endif %}
₹{{ "{:,.0f}".format(g.saved_amount) }} of ₹{{ "{:,.0f}".format(g.target_amount) }} · {{ "%.0f"|format(g.progress_pct) }}% {% if g.status == 'active' %} Invest ₹{{ "{:,.0f}".format(g.required_monthly) }}/mo{% if g.target_fmt %} to reach it by {{ g.target_fmt }}{% endif %} or set aside ₹{{ "{:,.0f}".format(g.required_lumpsum) }} as a lump sum today {% elif g.status == 'funded' %} On track — projected to reach the target with no new investment {% elif g.status == 'overdue' %} Target date has passed — update the date or amount {% else %} Add a target date to see the monthly plan {% endif %}
edit
{% endfor %} {# --- Add / edit -------------------------------------------------------------- #}

{{ "Edit goal" if ed else "Add a goal" }}

{% if ed %}{% endif %}
We assume {{ default_return }}%/yr if you leave return blank. Saved-so-far compounds at that rate toward the target. {% if ed %}Cancel{% endif %}
{{ fine_print("Required SIP and lump-sum figures are arithmetic on the return you enter, compounded evenly. Real returns are not even — markets fall, inflation moves, and a plan that works on paper can miss. Treat these as a planning aid, not a forecast.") }} {% endblock %}