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>
La pile de test de la branche ne démarrait pas : « Connexion à la base
impossible ». Trois causes cumulées, toutes corrigées.
1. PTA_DB_PORT et DB_PORT étaient passés à 9306. Ces variables désignent le
port joint À L'INTÉRIEUR du réseau Docker, où MariaDB écoute sur 3306, et
non un port publié sur l'hôte : la connexion était refusée. Elles reviennent
à 3306, et le port hôte 9306 est désormais réellement publié par le service
db (sur la boucle locale), pour un client SQL externe.
2. Le service db-migrate manquait sur la branche. Le schéma d'initialisation ne
contient aucune des tables et vues d'accès V7.8 : sur un volume neuf,
l'application refusait de démarrer. db-migrate applique maintenant tous les
database/migration_*.sql, dont celle du tableau de bord V7.9 — plus aucune
étape SQL manuelle.
3. Le défaut de PTA_DB_PASS (change_me) différait de celui de MARIADB_PASSWORD
(pta). Sans fichier .env — et ce répertoire n'en a pas, il est ignoré par
git — l'authentification échouait. Les deux défauts sont alignés.
Le bandeau du tableau de bord ne prétend plus que « tous les lieux ont des
horaires attendus » quand aucun lieu n'est enregistré.
Vérifié : volume détruit puis « docker compose up -d --build » seul suffit à
obtenir les onze pages en 200, l'atterrissage sur le tableau de bord et les deux
migrations appliquées ; un second up les ignore ; la base répond sur
127.0.0.1:9306 ; la pile principale sur 8080 est restée intacte.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Le Service Enfance ouvrait onze onglets à plat et atterrissait sur l'écran de
saisie, alors que son travail commence par le contrôle. Les chiffres qui
déclenchent une action vivaient sur trois écrans distincts.
- Nouvelle page dashboard.php, réservée au Service Enfance et devenue sa page
d'atterrissage : quatre tuiles d'action, les brouillons les plus anciens avec
ouverture directe sur la bonne semaine, les plages de couverture les plus
déficitaires, et le suivi des quotas annuels par agent.
- Navigation regroupée par intention (Piloter / Planifier / Consulter /
Paramétrer). Les rôles à quelques pages gardent la barre simple.
- Sous-titre propre à chaque page : le bandeau générique n'apprenait rien.
- Pastille « À valider » alimentée depuis toutes les pages, et non plus
seulement depuis la page qu'elle annonce.
Aucune règle métier n'est modifiée : le tableau de bord relit ce que
PlanningModel, CoverageModel et QuotaModel calculent déjà, et son endpoint est
gardé par requireService(). Le droit d'accès à la page vient de la migration
V7.9 ; sans elle, l'onglet n'apparaît pas et homeUrl() se replie sur planning.
Vérifié sur la base réelle : les chiffres de quota du tableau de bord sont
identiques à ceux de api/annual_overview.php, les trois rôles rendent leurs
écrans sans erreur, le rendu JS a été exécuté dans un DOM avec la réponse réelle
de l'API, et la page ne produit aucun attribut style inline (CSP).
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>