{% extends "base.html" %} {% block title %}ROI Dashboard — SupportCopilot{% endblock %} {% block content %}
Earned, not hard-coded

ROI dashboard

Every number is computed by replaying {{ report.total_tickets }} seeded support tickets through the live agent. Change the policies, catalog, or ticket set and the numbers move.

View JSON
Deflection rate
{{ '%.0f' % (report.deflection_rate * 100) }}%
{{ report.auto_resolved }} of {{ report.total_tickets }} auto-resolved
Tickets handled
{{ report.total_tickets }}
replayed through the agent
Handle-time saved
{{ '%.1f' % report.handle_time_saved_hours }}h
{{ '%.0f' % report.baseline_handle_time_min }} min baseline / ticket
Escalation rate
{{ '%.0f' % (report.escalation_rate * 100) }}%
{{ report.escalated }} to a human
Monthly savings
${{ '{:,.0f}'.format(report.monthly_cost_saved_projection) }}
at 3,000 tickets/mo · ${{ '%.0f' % report.agent_cost_per_hour }}/agent-hr

Resolution mix

{% set defl = (report.deflection_rate * 100) | round(1) %}
{{ '%.0f' % (report.deflection_rate * 100) }}%
resolved
Auto-resolved {{ report.auto_resolved }}
Escalated {{ report.escalated }}

Tickets by intent

{% set max_n = report.by_intent.values() | max %} {% for intent, n in report.by_intent.items() %}
{{ intent | replace('_', ' ') }} {{ n }}
{% endfor %}

How the savings are computed

Baseline / ticket
{{ '%.0f' % report.baseline_handle_time_min }} min
Auto-resolved
{{ report.auto_resolved }} tickets
Time saved (sample)
{{ '%.0f' % report.handle_time_saved_min }} min
Cost saved (sample)
${{ '%.2f' % report.cost_saved }}

{{ report.auto_resolved }} auto-resolved × {{ '%.0f' % report.baseline_handle_time_min }} min = {{ '%.0f' % report.handle_time_saved_min }} min saved, valued at ${{ '%.0f' % report.agent_cost_per_hour }}/hr → projected to ${{ '{:,.0f}'.format(report.monthly_cost_saved_projection) }}/mo at 3,000 tickets/month.

Per-ticket outcomes

Each seeded ticket replayed through the live agent.

{% for o in report.outcomes %} {% endfor %}
ID Channel Intent Outcome Conf. Message
{{ o.ticket_id }} {{ o.channel }} {{ o.intent | replace('_', ' ') }} {% if o.escalated %} escalated {% else %} auto {% endif %}
{{ '%.2f' % o.confidence }}
{{ o.message }}
{% endblock %}