feat(technique) : entités + repositories Provider* (ERP-133)

- 4 entités Provider / ProviderContact / ProviderAddress / ProviderRib
  (#[Auditable] + Timestampable/Blamable), miroir Supplier* amputé de
  l'onglet Information et augmenté de provider.sites (M2M direct, RG-3.03).
- Contrat de sérialisation à 3 maillons (groupes liste/détail, getter
  isArchived + SerializedName) ; référentiels comptables consommés en
  relation ORM partagée, Site/Category via contrats Shared.
- DoctrineProviderRepository : createListQueryBuilder (filtres + tri) +
  hydratation anti-N+1 categories puis sites (relation directe) en requêtes
  IN bornées séparées.
- Mapping ORM du module Technique (doctrine.yaml), catalogue COMMENT des
  tables provider*, index partiel uq_provider_company_name_active
  (test-db-setup), libellés audit i18n technique_*, whitelist Length du CP
  ProviderAddress.

ApiResource posé en squelette : ProviderProvider / ProviderProcessor
(hydratation effective, gating accounting, cloisonnement site, normalisation,
409, RG-3.07/3.08) relèvent d'ERP-134.
This commit is contained in:
Matthieu
2026-06-12 10:31:33 +02:00
parent 779d5be04e
commit 58474404b4
11 changed files with 1656 additions and 8 deletions
@@ -54,6 +54,8 @@ final class EntityConstraintsHaveFrenchMessageTest extends TestCase
'ClientAddress::postalCode' => 'Regex {4,5} borne deja la longueur.',
// Idem cote fournisseur (meme Regex CP).
'SupplierAddress::postalCode' => 'Regex {4,5} borne deja la longueur.',
// Idem cote prestataire (meme Regex CP — M3 Technique).
'ProviderAddress::postalCode' => 'Regex {4,5} borne deja la longueur.',
// Le Choice {PROSPECT,DEPART,RENDU} borne les valeurs (<= 8 < 20).
'SupplierAddress::addressType' => 'Choice {PROSPECT,DEPART,RENDU} borne deja les valeurs.',
// Le Regex /^#[0-9A-Fa-f]{6}$/ borne la longueur a exactement 7 caracteres.