Retrait des cumuls « Consommation globale » et « Reste à affecter » du tableau de bord

Ces deux cartes additionnaient les heures de tous les agents suivis, quotités
confondues : le pourcentage et le solde obtenus ne décrivaient la situation
d'aucun agent réel et n'appelaient aucune action. Le bloc « Suivi des quotas
annuels » conserve les indicateurs actionnables (agents suivis, agents sans
aucune heure) et le tableau agent par agent.

Les agrégats correspondants sont retirés du payload de api/dashboard_summary.php
et de leur calcul dans DashboardController : plus aucun consommateur ne les lit.
La tuile « Quotas dépassés » et son compteur de dépassements sont inchangés.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
PTA
2026-08-11 15:09:15 +02:00
parent b13b52b22b
commit 935cc3ea1c
6 changed files with 9 additions and 36 deletions

View File

@@ -186,28 +186,24 @@ final class DashboardController
}
/**
* Suivi des quotas : combien d'agents dépassent leur quota annuel, combien
* n'ont encore aucune heure planifiée, et le volume restant à affecter.
* Suivi des quotas : combien d'agents dépassent leur quota annuel et combien
* n'ont encore aucune heure planifiée. Les cumuls tous agents confondus
* (consommation globale, reste à affecter) ne sont volontairement pas exposés :
* une somme d'agents aux quotités différentes ne décrit aucune situation réelle.
*/
private function quotaPayload(int $year): array
{
$tracking = $this->dashboardModel->quotaTracking($year);
$overCount = 0;
$emptyCount = 0;
$remainingMinutes = 0;
$targetMinutes = 0;
$allocatedMinutes = 0;
foreach ($tracking as $agent) {
$targetMinutes += $agent['quota_cible_minutes'];
$allocatedMinutes += $agent['minutes_affectees'];
if ($agent['minutes_restantes'] < 0) {
$overCount++;
}
if ($agent['minutes_affectees'] === 0) {
$emptyCount++;
}
$remainingMinutes += max(0, $agent['minutes_restantes']);
}
// Tri décroissant sur le taux : les dépassements remontent en tête,
@@ -221,10 +217,6 @@ final class DashboardController
'agent_count' => count($tracking),
'depassement_count' => $overCount,
'sans_heure_count' => $emptyCount,
'minutes_restantes' => $remainingMinutes,
'minutes_cible' => $targetMinutes,
'minutes_affectees' => $allocatedMinutes,
'taux_global' => $targetMinutes > 0 ? round(($allocatedMinutes / $targetMinutes) * 100, 1) : 0.0,
'apercu' => array_slice($tracking, 0, self::QUOTA_APERCU_MAX),
];
}