Onglet Comptabilite : on ne saute une amorce RIB neuve vide QUE s'il reste un autre
RIB soumettable (garde hasSubmittableRib, miroir de l'onglet Contacts). Sinon — ex.
unique RIB existant supprime puis remplace par un bloc vide en LCR — le bloc vide est
soumis et le back renvoie une 422 NotBlank mappee en rouge sous label/bic/iban, au lieu
de laisser le DELETE echouer en « dernier RIB d'une LCR » (message plat sans propertyPath).
L'ancien RIB est preserve (arret avant le DELETE). Applique creation + edition, fournisseur + client.
La poubelle de suppression d'un bloc RIB n'apparait que s'il y a plusieurs RIB
(visibleRibs.length > 1) ; elle s'affiche alors sur chaque bloc. Avec un RIB unique
(minimum requis pour une LCR), pas de poubelle. Aligne sur les blocs contact/adresse.
Applique aux ecrans creation + modification, fournisseur et client (M1).
Port du fix fournisseur (blankEmptyRequired + flag forUpdate) a l'edition client :
en PATCH d'une ligne existante, un champ requis vide (companyName / postalCode /
city / street / label / bic / iban) est envoye en '' au lieu d'etre omis, sinon le
merge-patch garde l'ancienne valeur (faux 200). Creation (POST) inchangee (omit).
En edition (PATCH merge), omettre la cle d'un champ requis vide laissait la valeur
serveur inchangee -> faux 200 (l'ancien code postal etait conserve). Nouveau helper
blankEmptyRequired + flag forUpdate sur les builders : a la creation (POST) on omet
toujours la cle (NotBlank), en edition d'une ligne existante on envoie '' (chaine
valide, pas de 400 de type) pour declencher NotBlank 422 inline sous le champ.
Applique au bloc principal, aux adresses et aux RIB (selon id !== null).
- page edit.vue : champs pre-remplis depuis GET /suppliers/{id}, PATCH partiel
INDEPENDANT par onglet (mode strict RG-2.16 : un seul groupe de serialisation
par appel), pas de formulaire principal masque mais editable via son propre PATCH
- pas de contact inline (ERP-106) ; onglets metier readonly sans manage, Comptabilite
visible/editable selon accounting.view / accounting.manage (resolveTabEditability)
- collections contacts/adresses/RIB : POST/PATCH par ligne + DELETE differe des
retraits ; erreurs 422 mappees inline par champ (propertyPath) via useSupplierFormErrors
- supplierEdit : mappers d'hydratation (mapMainDraft/mapInformationDraft/
mapAccountingFormDraft, + volumeForecast) et resolveTabEditability
- tests Vitest : mappers d'hydratation + gating par role (matrice 2.7)
- miroir de l'ecran Modification client (M1), adapte M2 (addressType/bennes/
triageProvider/volumeForecast, pas de relation Distributeur/Courtier)