{% extends "base.html" %} {% block title %}{{ provider.name }}{% endblock %} {% block page_title %}{{ provider.name }}{% endblock %} {% block extra_css %} .util-chip { font-size: 10px; font-weight: 700; padding: 2px 7px; border-radius: 10px; text-transform: uppercase; letter-spacing: .05em; } .trend-up { color: #ef4444; } .trend-down { color: #10b981; } {% endblock %} {% block topbar_actions %} ← Utilities Edit Add Bill {% endblock %} {% block content %}
{{ provider.name }}
{{ provider.type_label }} {% if provider.account_number %} · Acct {{ provider.account_number }}{% endif %} {% if provider.default_account %} · Paid from {{ provider.default_account.name }}{% endif %} {% if provider.billing_day %} · Bills on day {{ provider.billing_day }}{% endif %}
{% if provider.notes %}
{{ provider.notes }}
{% endif %}
Latest Bill
{{ stats.latest.amount | currency if stats.latest else '—' }}
{% if stats.amount_change_pct is not none %} {{ stats.amount_change_pct | abs }}% vs prev {% endif %}
Average Bill
{{ stats.avg_amount | currency }}
Last 12 months
12-Month Total
{{ stats.total_12mo | currency }}
{{ stats.bill_count }} bill{{ '' if stats.bill_count == 1 else 's' }} on record
{% if provider.tracks_usage %}Avg Usage{% else %}Year over Year{% endif %}
{% if provider.tracks_usage %}
{{ '%.1f' | format(stats.avg_usage) if stats.avg_usage else '—' }} {{ provider.usage_unit }}
{% if stats.usage_change_pct is not none %} {{ stats.usage_change_pct | abs }}% latest vs prev {% endif %} {% else %}
{% if stats.yoy_change_pct is not none %}{{ '+' if stats.yoy_change_pct > 0 else '' }}{{ stats.yoy_change_pct }}%{% else %}—{% endif %}
Latest vs same period last year {% endif %}
{% if series.labels %}
Billing History
{% if series.has_usage %}
{% endif %}
{% endif %}
Bills
{% if bills %}
{% if provider.tracks_usage %} {% endif %} {% for b in bills %} {% if provider.tracks_usage %} {% endif %} {% endfor %}
Period Due AmountUsage RateStatus Actions
{{ b.period_label }} {% if b.notes %}
{{ b.notes | truncate(60) }}
{% endif %}
{{ b.due_date.strftime('%b %d, %Y') if b.due_date else '—' }} {{ b.amount | currency }} {% if b.usage %}{{ '%.1f' | format(b.usage | float) }} {{ b.usage_unit or provider.usage_unit }}{% else %}—{% endif %} {% if b.rate_per_unit %}{{ current_user.currency_symbol }}{{ '%.4f' | format(b.rate_per_unit) }}{% else %}—{% endif %} {% if b.status == 'paid' %} Paid {% if b.paid_date %}
{{ b.paid_date.strftime('%b %d') }}
{% endif %} {% elif b.status == 'overdue' %} {{ b.days_until_due | abs }}d late {% elif b.status == 'due_soon' %} Due in {{ b.days_until_due }}d {% else %} Unpaid {% endif %}
{% if pagination.pages > 1 %}
Page {{ pagination.page }} of {{ pagination.pages }}  ·  {{ pagination.total }} bills
{% if pagination.has_prev %} ← Prev {% endif %} {% if pagination.has_next %} Next → {% endif %}
{% endif %} {% else %}
No bills recorded

Add a bill to start tracking cost{% if provider.tracks_usage %} and usage{% endif %}.

Add First Bill
{% endif %}
{% endblock %} {% block extra_js %} {% if series.labels %} {% endif %} {% endblock %}