Files
Inventory/docs/CUSTOM_FIELDS_AUDIT_RECOVERY.md
Matthieu 476060cf7d WIP
2026-03-31 17:57:59 +02:00

6.8 KiB

Champs Personnalises - Diagnostic Et Recuperation

Date : 2026-03-23


Contexte

Un bug sur la sauvegarde des categories (ModelType) pouvait recreer des definitions de champs personnalises avec de nouveaux IDs.

Effet de bord :

  • les CustomFieldValue existants restaient lies aux anciens CustomField
  • puis etaient supprimes en cascade
  • resultat visible : apres modification d'une categorie, certaines valeurs de champs perso disparaissaient

Le correctif preventif a ete fait :

  • conservation des id/customFieldId cote frontend pour PIECE/PRODUCT
  • matching backend plus robuste sur id, puis orderIndex, puis nom

Ce document couvre uniquement :

  • comment detecter ce qui manque
  • comment lire le listing
  • comment identifier ce qui est recuperable depuis l'audit
  • comment restaurer proprement

Commandes Disponibles

1. Lister tous les champs perso manquants ou vides

Dans le conteneur :

php bin/console app:check-missing-custom-field-values

Variantes utiles :

php bin/console app:check-missing-custom-field-values --entity=piece
php bin/console app:check-missing-custom-field-values --entity=composant
php bin/console app:check-missing-custom-field-values --max-rows=1000
php bin/console app:check-missing-custom-field-values --limit=500 --max-rows=1000

2. Afficher uniquement les cas recuperables depuis l'audit

php bin/console app:check-missing-custom-field-values --recoverable-only

Variantes :

php bin/console app:check-missing-custom-field-values --entity=piece --recoverable-only
php bin/console app:check-missing-custom-field-values --entity=composant --recoverable-only
php bin/console app:check-missing-custom-field-values --recoverable-only --max-rows=1000

3. Dry-run de restauration pour une piece

php bin/console app:restore-piece-custom-field-values <pieceId>

Exemple :

php bin/console app:restore-piece-custom-field-values cl731386df55fcb9e6a01e0a63

4. Appliquer la restauration pour une piece

php bin/console app:restore-piece-custom-field-values <pieceId> --apply

Colonnes Du Listing

La commande app:check-missing-custom-field-values affiche :

  • Entity : piece ou composant
  • ID : identifiant de l'entite
  • Name : nom de l'entite
  • Reference : reference metier si presente
  • Category : nom de la categorie (ModelType)
  • Field : nom du champ personnalise attendu par la categorie
  • Issue : missing ou empty
  • Recoverable : yes ou no
  • Audit value : derniere valeur non vide retrouvee dans l'audit si disponible

Signification Des Statuts

missing

Il n'existe actuellement aucune ligne CustomFieldValue pour ce champ sur l'entite.

Cela peut vouloir dire :

  • la valeur n'a jamais ete saisie
  • la valeur a ete perdue lors du bug
  • le champ a ete ajoute plus tard sur la categorie sans initialisation des anciennes entites

empty

La ligne CustomFieldValue existe, mais sa valeur est vide.

Cela est plus suspect qu'un missing, mais ne prouve pas a lui seul une perte.

Recoverable = yes

L'audit contient au moins une ancienne valeur non vide pour ce champ.

En pratique :

  • c'est le signal le plus utile
  • ce sont les cas a traiter en priorite
  • ces cas sont potentiellement restaurables automatiquement

Recoverable = no

L'audit de cette entite ne contient pas de valeur non vide exploitable pour ce champ.

Cela ne veut pas forcement dire qu'il n'y a jamais eu de valeur. Cela veut simplement dire :

  • rien de recuperable n'a ete trouve dans les logs d'audit consultes

Lecture Des Cas Typiques

Cas 1

piece ... Roulement ... Diametre ... missing ... no

Interpretation :

  • le champ Diametre est attendu sur cette piece
  • aucune valeur n'existe actuellement
  • l'audit ne permet pas de retrouver une ancienne valeur

Conclusion :

  • non recuperable automatiquement
  • a verifier metierement si la valeur a deja existe ou non

Cas 2

piece ... Arbre ... Diametre ... empty ... yes ... 35 mm

Interpretation :

  • une ligne de valeur existe mais elle est vide
  • l'audit montre qu'une ancienne valeur 35 mm existait

Conclusion :

  • cas typique de restauration automatique possible

Cas 3

piece ... Joint ... Matiere ... missing ... yes ... NBR

Interpretation :

  • la valeur n'existe plus du tout
  • l'audit permet de retrouver NBR

Conclusion :

  • forte probabilite de perte historique
  • recuperable automatiquement

Priorisation Recommandee

Ordre de traitement conseille :

  1. empty + yes
  2. missing + yes
  3. empty + no
  4. missing + no

Pourquoi :

  • les yes sont les seuls cas recuperables automatiquement
  • les empty indiquent souvent une valeur ecrasee
  • les missing no sont nombreux mais souvent ambigus

Procedure Recommandee

Etape 1 - Scanner globalement

php bin/console app:check-missing-custom-field-values --recoverable-only --max-rows=1000

Etape 2 - Identifier les pieces prioritaires

Chercher :

  • les pieces les plus critiques metierement
  • les categories fortement touchees (Roulement, Joint, Arbre, etc.)
  • les cas avec valeur d'audit explicite

Etape 3 - Faire un dry-run piece par piece

php bin/console app:restore-piece-custom-field-values <pieceId>

Etape 4 - Appliquer uniquement apres verification

php bin/console app:restore-piece-custom-field-values <pieceId> --apply

Limites Actuelles

Ce qui est pris en charge

  • diagnostic global sur les pieces
  • diagnostic global sur les composants
  • restauration automatique ciblee sur les pieces

Ce qui n'est pas encore automatise

  • restauration automatique en masse
  • restauration automatique des composants
  • reconstitution si l'audit ne contient aucune ancienne valeur exploitable

Interpretation Metier

Le listing global ne doit pas etre lu comme :

"866 valeurs ont ete perdues"

Il doit etre lu comme :

"866 couples entite/champ sont actuellement manquants ou vides par rapport aux definitions de categories"

Parmi eux :

  • certains n'ont jamais ete renseignes
  • certains ont probablement ete perdus
  • seuls les cas Recoverable = yes sont candidates a une recuperation automatique fiable

Commandes Resumees

# Tout lister
php bin/console app:check-missing-custom-field-values

# Afficher uniquement les cas recuperables
php bin/console app:check-missing-custom-field-values --recoverable-only

# Scanner seulement les pieces
php bin/console app:check-missing-custom-field-values --entity=piece --recoverable-only

# Scanner seulement les composants
php bin/console app:check-missing-custom-field-values --entity=composant --recoverable-only

# Dry-run de restauration d'une piece
php bin/console app:restore-piece-custom-field-values <pieceId>

# Application reelle
php bin/console app:restore-piece-custom-field-values <pieceId> --apply