[ERP-78] Refonte taxonomie Catégories : type unique CLIENT + Category.code + RG-1.03/1.29 par code #42
Reference in New Issue
Block a user
Delete Branch "feature/ERP-78-refonte-taxonomie-categories"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Refonte de la taxonomie Catégories (décision produit 01/06) : le modèle est inversé.
Modèle
category_type: CLIENT.Distributeur/Courtier/Secteur/Autre(+ catégories métier) deviennent desCategoryrattachées à CLIENT.codestable porté parCategory(NOT NULL, unique partieluq_category_code), slug MAJUSCULE auto-généré du nom (CategoryCodeGenerator), figé à la création, exposé en lecture seule.Contenu
Category.code(entité + migration correctiveVersion20260602100000au namespace racine +COMMENT ON COLUMN+ catalogue + lignetest-db-setup). RetrofitVersion20260528120000rendu conscient des colonnes.Distributeur→DISTRIBUTEUR, etc.), anciens types supprimés. FixturesCategoryType/Category/Clientalignées.ClientProcessor::hasCategoryCode— un distributor/broker doit porter laCategoryde codeDISTRIBUTEUR/COURTIER. Filtre liste/exportcategoryType→categoryCode.ClientAddress::validateCategoryCodes— denylist des codesDISTRIBUTEUR/COURTIERsur une adresse (toute autre catégorie autorisée).Tests
make php-cs-fixer-allow-riskyOK ;make db-resetOK (type unique CLIENT + 11 catégories codées, idempotent) ;make test443 vert. Ajouts : RG-1.03 courtier, génération/unicité/lecture-seule du code (CategoryCodeTest).Coordination
code(?categoryCode=), plus le type.Décisions actées avec le PO :
codeNOT NULL auto-généré (slug) ; périmètre complet (réécriture RG + fixtures déjà mergées).Review
Aucun bug bloquant. PR coherente et mergeable. Regles ABSOLUES n°1 (couplage inter-modules via
CategoryInterface::getCode(), pas d'import de la classe concreteCategory) et n°12 (COMMENT ON COLUMNsurcategory.codedans la migration ETColumnCommentsCatalog) respectees. Suites Catalog + Commercial au vert.2 points mineurs (non bloquants) :
1. Divergence de slug entre le backfill SQL de la migration et le slugger applicatif sur les noms accentues. Le backfill
REGEXP_REPLACE(name, '[^A-Za-z0-9]+', '_', 'g')produitIND_PENDANTla ou l'AsciiSluggertranslittere enINDEPENDANT. Sans impact en flux normal (tablecategoryvide en prod ; purger Doctrine en dev/test ; les 4 categories systeme de l'etape 4 ont des codes hardcodes sans slug), mais casse l'idempotence deCategoryFixtures(lookup parcode) lors d'undown+upsur une base dev deja peuplee.Backfill :
Slugger applicatif (reference) :
2. Suivi front (hors perimetre de cette PR back-only). Le CRUD admin Categorie expose encore un select
categoryTypea une seule option (CLIENT), et le<MalioSelectCheckbox>Categorie de l'onglet Adresse n'exclut pas encore les codesDISTRIBUTEUR/COURTIER. A traiter dans un ticket dedie (cree separement).Suivi review — point #1 traite (commit
f3c6db2).La divergence de slug SQL vs applicatif est corrigee : le backfill de
Version20260602100000utilise desormaisCategoryCodeSql::slugExpression(), miroir fidele deCategoryCodeGenerator::slugify(translitteration des accents Latin-1). « Independant » produitINDEPENDANTcote SQL comme cote PHP.Un garde-fou
CategoryCodeSqlSlugTestverrouille l'egalite SQL = PHP sur le domaine accentue pour empecher toute derive future (la cause racine du bug). Verifie : suites Catalog + Commercial vertes,make db-resetOK, codes en base coherents.Point #2 (adaptation front catalog/adresse) suivi hors de cette PR back-only.