00bd02858c
Auto Tag Develop / tag (push) Successful in 8s
Refonte de la taxonomie Catégories (décision produit 01/06) : le modèle est inversé. ## Modèle - **UN SEUL `category_type` : CLIENT**. `Distributeur` / `Courtier` / `Secteur` / `Autre` (+ catégories métier) deviennent des `Category` rattachées à CLIENT. - Filtrage métier sur un **`code` stable porté par `Category`** (NOT NULL, unique partiel `uq_category_code`), slug MAJUSCULE auto-généré du nom (`CategoryCodeGenerator`), figé à la création, exposé en **lecture seule**. ## Contenu - **M0** : `Category.code` (entité + migration corrective `Version20260602100000` au namespace racine + `COMMENT ON COLUMN` + catalogue + ligne `test-db-setup`). Retrofit `Version20260528120000` rendu conscient des colonnes. - **Seed** : type unique CLIENT, catégories codées (`Distributeur→DISTRIBUTEUR`, etc.), anciens types supprimés. Fixtures `CategoryType`/`Category`/`Client` alignées. - **RG-1.03** : `ClientProcessor::hasCategoryCode` — un distributor/broker doit porter la `Category` de code `DISTRIBUTEUR`/`COURTIER`. Filtre liste/export `categoryType` → `categoryCode`. - **RG-1.29** : `ClientAddress::validateCategoryCodes` — denylist des codes `DISTRIBUTEUR`/`COURTIER` sur une adresse (toute autre catégorie autorisée). - **Specs** M0/M1 (back + front) amendées. ## Tests `make php-cs-fixer-allow-risky` OK ; `make db-reset` OK (type unique CLIENT + 11 catégories codées, idempotent) ; `make test` **443 vert**. Ajouts : RG-1.03 courtier, génération/unicité/lecture-seule du code (`CategoryCodeTest`). ## Coordination - #76 (#500) : RG-1.29 réécrite ici sur le nouveau modèle ; #76 ne garde que le gap 2 (mapping CHECK adresse → 422), indépendant de la taxonomie. - ERP-68 (#486) : fixtures démo (déjà mergées via #41) adaptées ici au type unique CLIENT + codes. - Front #480–483 : selects Catégorie / distributeur / courtier basés sur le `code` (`?categoryCode=`), plus le type. Décisions actées avec le PO : `code` NOT NULL auto-généré (slug) ; périmètre complet (réécriture RG + fixtures déjà mergées). --------- Co-authored-by: Matthieu <contact@malio.fr> Reviewed-on: #42 Co-authored-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr> Co-committed-by: THOLOT DECHENE Matthieu <matthieu@yuno.malio.fr>
45 lines
1.8 KiB
PHP
45 lines
1.8 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace App\Shared\Domain\Contract;
|
|
|
|
/**
|
|
* Interface minimale exposant ce qu'un module tiers (Commercial...) doit
|
|
* connaitre d'une Category, sans creer de couplage direct vers le module
|
|
* Catalog (regle ABSOLUE n°1 : pas d'import inter-modules).
|
|
*
|
|
* Implementee par App\Module\Catalog\Domain\Entity\Category.
|
|
* Utilisee comme cible des ManyToMany Client.categories et
|
|
* ClientAddress.categories via resolve_target_entities (cf. doctrine.yaml),
|
|
* sur le meme modele que SiteInterface / UserInterface.
|
|
*/
|
|
interface CategoryInterface
|
|
{
|
|
public function getId(): ?int;
|
|
|
|
public function getName(): ?string;
|
|
|
|
/**
|
|
* Code technique stable de la categorie (Category::code), ou null si non
|
|
* encore renseigne. Slug MAJUSCULE derive du nom a la creation, fige ensuite.
|
|
* Expose pour permettre a un module tiers de filtrer/valider par categorie
|
|
* metier sans dependre du libelle (`name`) ni de l'`id` (non deterministe
|
|
* entre environnements) ni importer la classe concrete Category (regle
|
|
* ABSOLUE n°1). Pilote, cote M1 Commercial :
|
|
* - RG-1.03 : un distributor doit referencer un client portant la categorie
|
|
* de code DISTRIBUTEUR (resp. COURTIER pour broker) ;
|
|
* - RG-1.29 : une adresse interdit les categories de code DISTRIBUTEUR /
|
|
* COURTIER (relations entre clients, pas des attributs d'adresse).
|
|
*/
|
|
public function getCode(): ?string;
|
|
|
|
/**
|
|
* Code du type de categorie rattache (CategoryType::code), ou null si la
|
|
* categorie n'a pas de type. Depuis ERP-78, le modele n'a plus qu'un seul
|
|
* type (CLIENT) : le filtrage metier passe desormais par getCode() ci-dessus.
|
|
* Conserve pour l'affichage / la retrocompatibilite.
|
|
*/
|
|
public function getCategoryTypeCode(): ?string;
|
|
}
|