diff --git a/docs/development/DECISIONS_020_DEV3.md b/docs/development/DECISIONS_020_DEV3.md index 22d8b06..b4d9991 100644 --- a/docs/development/DECISIONS_020_DEV3.md +++ b/docs/development/DECISIONS_020_DEV3.md @@ -84,6 +84,27 @@ Les décisions sont ajoutées au fil des checkpoints. Les modèles existants son **DATE/COMMIT** : 2026-08-23 / checkpoint A en cours. +## D-018 — Intégration C2/C4 et estimation scolaire des photocopieurs + +Une référence contractuelle de début de période est exacte si le relevé est +daté du jour cible ou s'il est relié à l'occurrence C2 portant cette +`target_date`. Une date opérationnelle anticipée seule ne suffit pas. Le +calcul réutilise `MeterReadingOccurrence.meter_reading_id` et conserve les +dates cible/opérationnelle de C2, sans second calendrier. + +Les quotas utilisent exclusivement `Meter.contract_role` (`NONE`, +`COPIER_BW`, `COPIER_COLOR`). Un assistant ponctuel peut classer les anciens +compteurs dont le nom est non ambigu ; les compteurs ambigus restent `NONE`. +Le calcul contractuel ne réanalyse jamais les noms à l'exécution. + +Pour les photocopieurs, les intervalles historiques sont exprimés en +copies/jour scolaire comparable et l'estimation de la partie manquante utilise +ce taux multiplié par les jours scolaires manquants. Les intervalles sans jour +scolaire exploitable sont ignorés pour le taux. Les autres compteurs +conservent leur logique C3 calendaire. + +**DATE/COMMIT** : 2026-08-24 / C4-FINAL. + ## D-017 — Compléments C4 Le rôle contractuel d'un compteur est explicite (`COPIER_BW`, `COPIER_COLOR` ou `NONE`) : un compteur inconnu n'est jamais classé silencieusement N&B. Lorsqu'il manque l'index de début d'une période, la consommation manquante est estimée par moyenne journalière historique ; pour les équipements d'impression, les jours scolaires comparables sont privilégiés. Sans historique suffisant, la qualité est `PARTIAL`. L'agrégation globale suit `PARTIAL > ESTIMATED > EXACT`. diff --git a/docs/development/STATUS_020_DEV3.md b/docs/development/STATUS_020_DEV3.md index cc2d7a4..768f100 100644 --- a/docs/development/STATUS_020_DEV3.md +++ b/docs/development/STATUS_020_DEV3.md @@ -1,13 +1,23 @@ CURRENT VERSION: 0.2.0-dev.2 -CURRENT CHECKPOINT: C4 — finalisation contrats, quotas et consommables -CURRENT COMMIT: 254018d — test(c4): complete contract and consumable coverage +CURRENT CHECKPOINT: C4 — intégration C2/C4 finale +CURRENT COMMIT: C4-FINAL — intégration des relevés C2 et compatibilité des compteurs CURRENT MIGRATION: s4g5h6i7j8k9 (down_revision r3f4g5h6i7j8) DOCKER VERSION: gmao-college:0.2.0-dev.2 (reconstruite, healthy, MariaDB connectée) LAST FULL TEST: baseline précédente 202 passed, 1 failed, 1 error ; les deux anomalies historiques restent visibles -LAST TARGETED TEST: 46 passed (C1/C2/C3/C4) ; 7 tests C4, dont instrumentation performance +LAST TARGETED TEST: 20 passed (C4 + C4-FINAL) ; suite complète : 227 passed, 1 failed, 1 error historiques BLOCKERS: validation responsive visuelle et base vide non exécutées ; anomalies pytest historiques conservées NEXT ACTION: revue indépendante C4-COMPLETE ; ne pas bump la version +## C4-FINAL — intégration C2/C4 + +- [x] un relevé rattaché à une occurrence C2 dont `target_date` est le début de période est une référence contractuelle `EXACT`, même si sa date opérationnelle est anticipée ; +- [x] un relevé spontané anticipé sans occurrence C2 correspondante n'est pas classé exact par sa seule date ; +- [x] `Meter.contract_role` est configurable dans les formulaires de création/édition (`NONE`, `COPIER_BW`, `COPIER_COLOR`) ; +- [x] l'assistant de compatibilité classe prudemment les anciens compteurs N&B/couleur et laisse les noms ambigus à `NONE`, sans fallback runtime ; +- [x] l'estimation des photocopieurs utilise les copies par jour scolaire comparable, puis les jours scolaires manquants ; +- [ ] validation base vide et Playwright restent non exécutées ; +- [ ] revue indépendante finale C4 encore attendue. + ## C4 — contrats photocopieurs, quotas et consommables - [x] photocopieurs et imprimantes restent des `Equipment`, avec type d'appareil, S/N, IP, hostname et MAC facultatifs ;