Spec-front § Adresse : la categorie est obligatoire sur une adresse, mais
n'etait enforced ni au back ni au front.
- Back : ClientAddress::$categories porte desormais Assert\Count(min: 1)
(POST/PATCH sans categorie -> 422). Test testAddressRequiresAtLeastOneCategory ;
deux tests existants qui creaient une adresse sans categorie recoivent une
categorie SECTEUR.
- Front : canValidateAddresses (creation + modification) exige >= 1 categorie
par adresse -> bouton Enregistrer desactive tant qu'aucune categorie n'est
choisie (meme gating que les sites).
En consultation, le bloc adresse n'affichait que les sites rattaches a l'adresse
(donc rien si l'adresse est vide). On affiche desormais TOUS les sites de
l'utilisateur (issus de /api/me, groupe me:read — pas de 403 pour les roles
metier), libelle = numero de departement ; les sites rattaches restent coches.
- Onglet Comptabilite : grille alignee sur les autres onglets
(grid-cols-4 gap-x-[44px] gap-y-4) en creation / modification / consultation.
- Bloc RIB toujours visible (au moins un bloc, meme vide) en creation,
modification et consultation ; un bloc vide n'est jamais persiste.
- Blocs Contact / Adresse / RIB toujours affiches meme vides en consultation
et modification ; suppression des messages « Aucun ... enregistre ».
- Onglets a venir (Transport, Statistiques, Rapports, Echanges) : nouveau
composant partage ComingSoonPlaceholder (shared/components/ui) « En cours de
dev » + gif, reutilisable par tous les modules ; remplace TabPlaceholderBlank.
- ClientAddressBlock : la rue courante est toujours reinjectee dans les
options de MalioInputAutocomplete (computed, miroir de cityOptions).
Sinon, des que la liste de suggestions BAN est vide (remontage apres
validation, edition d'une adresse existante), le composant ne resolvait
plus la valeur liee et affichait un champ vide alors que la donnee etait
bien persistee. Test de montage ajoute.
- useClientReferentials : le libelle des sites = numero de departement
(2 premiers chiffres du code postal, deja expose par /sites) au lieu du
nom.
- httpExternal : client dedie aux API publiques externes (URL absolue,
sans cookie de session, timeout), seul point d'entree autorise pour un
$fetch externe (regle frontend n°4).
- useAddressAutocomplete : implementation BAN (api-adresse.data.gouv.fr),
recherche ville (type=municipality) et adresse, mapping GeoJSON, throw
en cas d'erreur/timeout (mode degrade cote composant). La recherche
d'adresse n'impose pas type=housenumber (sinon 0 resultat tant qu'aucun
numero n'est saisi) — spec-front mise a jour en consequence.
- Tests Vitest : httpExternal, useAddressAutocomplete, et cas limites
supplementaires pour formatPhoneFR.