Câble les permissions du module Technique dans toutes les sources RBAC (règle
ABSOLUE n°8, dans le même commit) :
- RbacSeeder::MATRIX : bureau/compta/commerciale reçoivent technique.providers.*
selon la matrice § 2.9 + sites.bypass_scope (visibilité multi-site, § 2.13) ;
usine = technique.providers.view seul, SANS bypass (cloisonnée à son site).
- config/sidebar.php : nouvelle section Technique + item Répertoire prestataires
(/providers, module technique, permission technique.providers.view).
- personas.ts + SeedE2ECommand.php : 5 perms technique.providers.* sur le persona
user-full (porte déjà sites.bypass_scope) — pas de nouveau persona (règle n°7).
- i18n fr.json : clés sidebar.technique.section / sidebar.technique.providers.
Test : ProviderRBACMatrixTest (miroir SupplierRBACMatrixTest) valide la matrice
rôle×verbe via app:seed-rbac, dont le cloisonnement par site de l'Usine
(détail hors site → 404). 8 tests, 65 assertions.
- Provider::validatePaymentTypeConsistency (Assert\Callback, miroir Supplier ERP-89) :
RG-3.07 VIREMENT impose une banque (violation sur bank),
RG-3.08 LCR impose au moins un RIB (violation sur paymentType).
- ProviderProcessor : docblock realigne (RG-3.07/3.08 portees par l'entite).
- AbstractProviderApiTestCase::bank() helper referentiel.
- ProviderAccountingValidationTest : 4 cas (negatif 422 / positif 200) par RG.
Les RG-3.03/3.05/3.09 (contraintes d'entite) et l'ecriture cloisonnee (gardes
processors, RG-3.17/2.13) etaient deja posees en ERP-133/134/135 et restent couvertes.
Coeur API du repertoire prestataires (M3), jumeau du M2 fournisseurs :
- ProviderProvider : liste paginee (Paginator ORM), filtres
search/categoryCode/siteId/includeArchived, tri companyName ASC,
exclusion archives + soft-deletes (RG-3.16). Cloisonnement par site
pilote par l'utilisateur (RG-3.17 / § 2.13) : liste restreinte au
currentSite avant pagination (totalItems = perimetre), detail hors
perimetre -> 404, bypass via sites.bypass_scope.
- ProviderProcessor : normalisation companyName (RG-3.11), POST formulaire
principal (companyName + categories + sites), PATCH partiels par groupe
en mode strict (RG-3.15, 403 sur tout le payload), archivage
(RG-3.13/3.14), 409 doublon de nom (RG-3.10), garde d'ecriture cloisonnee
des sites (RG-3.03/3.17, 422 sur sites pour les users sites.read_ref).
- ProviderReadGroupContextBuilder : gating comptabilite par AJOUT du groupe
provider:read:accounting si accounting.view (jamais par retrait).
- ProviderFieldNormalizer : miroir SupplierFieldNormalizer.
- ApiResource cable (provider + processor) sur l'entite Provider.
Tests : ProviderApiTest, ProviderListTest, ProviderRbacGatingTest,
ProviderSiteScopeTest (26 tests). Suite complete verte (612 tests).