BOM PRE → PEA : héritage et synchronisation

Le Bill of Material d’une opération est défini en premier dans le PRE (Plan Recommandé d’Entretien, référentiel constructeur). Quand un PEA dérive de ce PRE, il hérite des matériels à l’instanciation, et peut surcharger localement. Quand le PRE évolue (le constructeur publie une révision, on corrige une quantité), le PEA peut être synchronisé par l’utilisateur sur décision explicite.

C’est l’architecture mise en place en vague L5-A’ (mai 2026).

Pourquoi cette hiérarchie

Initialement le BOM avait été placé au PEA (vague L5-A). Erreur de cadrage : le BOM est une information constructeur — c’est lui qui dit « pour étalonner cette clé dynamométrique il faut tel scellant, tel joint ». Le PEA est l’instance client qui peut adapter à ses contraintes (tel atelier, telle référence interchangeable).

Donc : PRE = source canonique, PEA = instance avec capacité de surcharge.

Le modèle d’héritage

Sur une ligne de matériel côté PEA, il existe un champ caché sourceMaterialId :

Valeur Sens Comportement à la sync
non-null Ligne héritée du PRE — son sourceMaterialId pointe vers la ligne PRE source Écrasée par les valeurs du PRE
null Ligne locale au PEA — ajout manuel OU détachée par l’utilisateur Préservée intacte

Visuellement dans le panneau Matériels PEA, les héritées portent un badge « PRE » discret à côté du PN. Les locales n’en ont pas.

Saisir la BOM au PRE

Définir les matériels d'une opération PRE

  1. 1. Ouvrir la tâche du PRE

    RéférentielPRE → cliquer le PRE → cliquer une tâche.

  2. 2. Déplier une opération

    Dans la section Opérations, chevron > à gauche de chaque ligne d’opération. Au clic, un panneau « Matériels requis pour l’opération XXX » s’ouvre avec un bouton « + Ajouter ».

  3. 3. Ajouter une ligne

    Sélectionner le rôle (Rechange / Consommable / Outillage), choisir l’article via le picker filtré, saisir la quantité, cocher « obligatoire ». Le picker filtre automatiquement sur le PartType.isTool selon le rôle.

Copie initiale PRE → PEA

À la création d’une MaintenancePlanTask depuis une MaintenanceTask PRE (mécanisme déjà existant qui copie task + triggers + opérations), le système copie aussi les matériels :

  • Chaque MaintenanceOperationMaterial actif est copié en MaintenancePlanOperationMaterial avec sourceMaterialId = ULID source du PRE
  • Les valeurs (quantité, mandatory, notes) sont identiques au moment T de la copie
  • À ce stade, le PEA est aligné parfaitement sur le PRE

Synchroniser après une évolution du PRE

Si vous modifiez le PRE (ajout d’une opération, d’un déclencheur ou d’un matériel, modification d’un champ d’opération — titre, description, ordre, durée standard, code —, changement de quantité, suppression), les PEA dérivés ne se mettent pas à jour automatiquement. Une action utilisateur explicite est nécessaire — décision volontaire pour qu’aucune modification PRE ne casse silencieusement un PEA en production.

Bien que le nom historique soit « BOM », la synchronisation au niveau d’une tâche couvre désormais tout le contenu hérité : opérations, déclencheurs et matériels. Une opération ajoutée au PRE après le rattachement est donc reportée par cette même action.

Où le badge « Synchro disponible » apparaît

Le badge orange « Synchronisation disponible » est calculé à la volée et remonte sur trois écrans, pour qu’on n’ait jamais à ouvrir chaque tâche pour savoir si une synchro est en attente :

  • Liste des plans d’entretien (/maintenance-plans) : à côté du nom du PEA, si au moins une de ses tâches a divergé de son PRE, ou si un PRE rattaché a une tâche entièrement nouvelle pas encore copiée au PEA.
  • Fiche du PEA (section « Tâches du PEA ») : sur chaque ligne de tâche concernée.
  • Fiche de la tâche PEA : à côté du titre, avec le bouton « Synchroniser depuis PRE » actif.

Une tâche entièrement nouvelle ajoutée au PRE n’a encore aucune copie dans le PEA : elle ne peut donc pas porter de badge « par tâche ». Elle est signalée au niveau du PEA (liste des plans et fiche du PEA), et listée dans l’infobulle sous « Nouvelles tâches PRE ».

Voir le détail des divergences sans ouvrir la tâche

Au survol (ou au focus clavier) du badge, une infobulle affiche le détail précis des divergences PRE → PEA — exactement le même différentiel que le dialog de synchronisation, mais en lecture seule : opérations ajoutées, opérations modifiées (champs scalaires « avant → après »), déclencheurs ajoutés, matériels ajoutés / modifiés / supprimés, avec leurs articles et quantités.

  • Sur la fiche du PEA et la fiche de la tâche, l’infobulle détaille la tâche survolée.
  • Sur la liste des plans d’entretien, le badge couvre tout le PEA : l’infobulle regroupe par tâche (code + titre) toutes les tâches divergentes du plan, et liste à part les tâches PRE entièrement nouvelles (avec leur nombre d’opérations et de déclencheurs).

Le différentiel est chargé à la demande (au survol uniquement), pour ne pas ralentir l’affichage des listes.

Synchroniser un PEA depuis son PRE source

  1. 1. Repérer le badge

    Le badge « Synchronisation disponible » signale qu’un contenu PRE (tâche entièrement nouvelle, opération, déclencheur ou matériel) n’est pas encore reporté. Depuis la liste ou la fiche du PEA, ouvrez la tâche signalée — ou, pour une tâche neuve, utilisez « Synchroniser » sur le PRE rattaché (section « PRE rattachés » de la fiche PEA).

  2. 2. Cliquer « Synchroniser depuis PRE »

    Un dialog s’ouvre avec un preview du diff, additif et non destructif : - Opérations ajoutées (N) : opérations PRE absentes du PEA — créées avec leurs matériels. - Opérations modifiées (M) : opérations héritées dont un champ scalaire (titre, description, ordre, durée standard, code) a changé au PRE — réécrites avec la valeur PRE, « avant → après ». - Déclencheurs ajoutés (N) : déclencheurs PRE absents du PEA — créés. - Matériels ajoutés (N) : nouveaux matériels du PRE — créés au PEA en hérités. - Matériels modifiés (M) : matériels hérités dont la valeur PRE a changé — « avant → après ». - Supprimés (R) : matériels dont la source PRE a disparu — conservés avec annotation « obsolète » (rétention Part-145).

  3. 3. Appliquer

    Bouton « Appliquer la synchronisation ». L’opération est transactionnelle : tout réussit ou tout échoue. Un message récapitule ce qui a été reporté (« Synchro OK — 1 opération, 2 matériels ajoutés »). Un audit maintenance_plan_task.material_sync_applied est enregistré avec le détail (Part-145 §145.A.30).

Détacher une ligne pour personnaliser

Vous voulez modifier la quantité d’une ligne héritée sans subir l’écrasement à la prochaine sync ? Détachez la ligne :

  • Sur la ligne héritée du panneau PEA, cliquez l’icône de chaîne brisée (« Détacher »)
  • Le sourceMaterialId passe à null, le badge « PRE » disparaît
  • La ligne devient locale, plus jamais écrasée par la sync
  • Vous pouvez maintenant modifier sa quantité comme un ajout local

C’est explicite : si vous sortez du contrat constructeur, vous l’assumez. Pour réintégrer plus tard la valeur constructeur, supprimez la ligne locale et lancez une sync — la ligne PRE sera re-créée comme héritée.

Statuts possibles

Statut au PEA Quand
up_to_date Tout le contenu hérité (opérations, déclencheurs, matériels) correspond au PRE actuel
pre_evolved Une opération ou un déclencheur PRE n’est pas encore copié, OU un champ scalaire d’une opération héritée (titre, description, ordre, durée, code) diffère du PRE, OU une héritée matériel diffère du PRE, OU un nouveau matériel PRE n’est pas copié
no_source La plan-task n’a pas de PRE-source (tâche créée manuellement au PEA) — sync indisponible

Limites V1

  • Pas de merge 3-way : si vous modifiez une héritée (matériel) sans la détacher, la sync écrase votre modification. Pour préserver, détachez avant de modifier. De même, les champs scalaires d’une opération héritée (titre, description, ordre, durée, code) sont réécrits depuis le PRE à la sync — toute édition locale d’une opération héritée est écrasée (le PRE reste la source de vérité).
  • Suppression PRE : actuellement le PEA conserve les hérités obsolètes avec annotation, pas de suppression automatique. À débrayer manuellement.
  • Pas de ré-attachement arbitraire : le PATCH n’accepte que sourceMaterialId: null (détachement). Pour reconnecter une ligne au PRE, il faut passer par la sync officielle.

Voir aussi