{% extends 'base.html.twig' %} {% block title %}Coûts réels par outil - Admin{% endblock %} {% block body %}
{# Header #}
{% include '_molecules/page-header/page-header.html.twig' with { title: 'Coûts réels par outil', subtitle: 'Statistiques basées sur toutes les générations effectuées par les utilisateurs. La médiane est l\'indicateur de référence pour calibrer les limites des forfaits.', icon: 'bar-chart', backHref: path('admin_plan_list'), backLabel: 'Retour aux offres' } only %}
{% if toolStats is empty %}
{% include '_molecules/empty-state/empty-state.html.twig' with { title: 'Aucune donnée disponible', description: 'Les statistiques apparaîtront dès que des utilisateurs auront effectué des générations.', icon: 'bar-chart', variant: 'minimal' } only %}
{% else %} {# Tableau des statistiques par outil #}

Coût médian par génération

Toutes les générations avec tokens > 0, tous utilisateurs confondus

{% for code, stats in toolStats %} {% endfor %}
Outil Générations Médiane Moyenne P25 P75 Min Max
{{ code|upper|slice(0, 1) }}

{{ stats.name }}

{{ code }}

{{ stats.count|number_format(0, ',', ' ') }} {{ stats.median|number_format(0, ',', ' ') }} tokens {{ stats.avg|number_format(0, ',', ' ') }} {{ stats.p25|number_format(0, ',', ' ') }} {{ stats.p75|number_format(0, ',', ' ') }} {{ stats.min|number_format(0, ',', ' ') }} {{ stats.max|number_format(0, ',', ' ') }}
{# Limites suggérées par forfait #} {% if plans is not empty and suggestedLimits is not empty %}

Limites suggérées par forfait

Calculées automatiquement : floor(tokens_mensuels / médiane) — utilisez ces valeurs pour mettre à jour les limites dans chaque offre.

{% for code, stats in toolStats %} {% endfor %} {% for plan in plans %} {% for code, stats in toolStats %} {% set suggested = suggestedLimits[plan.id][code] ?? -1 %} {% endfor %} {% endfor %}
Forfait Tokens/mois{{ stats.name }}

{{ plan.name }}

{{ plan.monthlyTokens|number_format(0, ',', ' ') }} {% if suggested > 0 %}{{ suggested }}{% else %}∞{% endif %}

Ces valeurs sont indicatives — elles correspondent au nombre de générations possibles par mois avec la médiane observée.

{% endif %} {% endif %}
{% endblock %}