# Audit du catalogue préventif historique Date : 2026-08-23 Source de référence : `/opt/gmao/dump_sql_base_remplie.sql` (lecture seule) ## Tables analysées | Table | Lignes dans le dump | Utilité | |---|---:|---| | `equipment_categories` | 36 | catégories patrimoniales | | `lots` | 92 | lots, catégorie par `category_id`, présence | | `lot_tasks` | 330 | référentiel historique des actions par `lot_id` | | `preventive_tasks` | 0 | ancienne table, structure présente mais aucune donnée | | `scheduled_tasks` | 516 | échéances historiques, pas le catalogue initial | Le modèle actuel utilise `LotTask`, et non `preventive_tasks`, pour les règles préventives. Le dump contient 36 catégories et 92 lots, déjà représentés dans `setup_catalog.py`; il manquait les 330 lignes de `lot_tasks`. ## Durée et périodicité - 330 tâches ont été extraites sans modification des valeurs historiques ; - 5 tâches ont une `duree_minutes` renseignée ; 325 ont une durée inconnue ; - 327 ont une périodicité textuelle ; 3 ont une périodicité vide ; - les valeurs `jours_entre_interventions`, type, contrat, gestionnaire, déclenchement et politiques ont été conservées lorsqu'elles existent. La valeur historique de 60 minutes n'est pas présente dans le dump : c'était un fallback du code, pas une donnée métier. Il est maintenant supprimé : une tâche sans durée retourne 0 et doit être renseignée avant planification automatique. ## Catalogue embarqué `app_new/core/preventive_catalog.py` contient une extraction compressée et figée des 330 tâches. Le dump n'est jamais ouvert par l'application. Le module expose `LOT_TASKS`, utilisé par le setup wizard et les tests. Le wizard crée les catégories, les lots sélectionnés et leurs tâches. La clé fonctionnelle de tâche est `(lot, tache)` ; une ligne déjà existante n'est pas écrasée, afin de préserver une personnalisation locale. Les éléments manquants sont ajoutés. La seconde exécution est donc idempotente. ## Relation équipement `Equipment.lot_id -> Lot.id`, avec héritage par `parent.effective_lot_id`. Les tâches sont donc visibles via le lot effectif et peuvent générer des `ScheduledTask` pour les équipements actifs. Un équipement rebuté ou supprimé ne doit pas produire de nouvelle échéance. ## Première échéance Le mécanisme actuel `generate_due_tasks()` calcule la première échéance à partir de la date de génération et de `jours_entre_interventions`/périodicité. Le dump ne fournit pas une date de première échéance catalogue. Une règle métier explicite (date d'association, prochaine échéance saisie ou campagne) reste à valider avant une automatisation plus ambitieuse. ## Écarts et limites - le catalogue est maintenant complet pour les tables historiques validées ; - les tâches sans durée restent à renseigner pour une planification fiable ; - la validation bout en bout par interface (installation, association d'un équipement, génération, Ma journée) reste à exécuter avec un compte UI ; - `preventive_tasks` est documentée mais vide et n'est pas importée.