feat(VSN-2757): module Avance — gestion des avances clients sur BDC
Contexte
Implémentation du module Avance pour la gestion des avances versées par les clients dans le cadre d'un BDC ou d'un marché : enregistrement, suivi du restant à récupérer, déduction lors de la facturation et historique complet des actions.
Lié à VSN-2757.
Périmètre fonctionnel livré
Création d'une avance
-
Création automatique depuis un BDC : la section Avance du BDC
permet d'activer la gestion d'avance. À l'enregistrement, une avance
liée est créée dans le module dédié (
origin: auto_from_bdc). -
Création directe : depuis
/dashboard/facturation-paiement/avances, bouton Nouvelle avance avec sélecteurs cascadés Client → Département → BDC. Type d'avance fixe ou pourcentage (calcul auto sur la base du montant BDC).
Fiche avance
Trois onglets :
- Détail avance : informations générales, paramètres financiers (type, montant ou pourcentage avec calcul automatique), mode de récupération (progressive / totale 1ère facture / montant fixe par facture), conditions de retenue et suivi initial / récupéré / restant. Bouton Enregistrer les modifications qui persiste via le store et historise l'action.
- Historique des déductions : référence, n° facture, date, montant facture, montant déduit, restant après déduction, total cumulé.
- Historique des actions : création (auto/manuelle), modification, déduction et clôture — tout est tracé date / utilisateur / action / détail.
Clôture
Bouton Clôturer l'avance dans l'en-tête de la fiche, visible uniquement quand le statut est Active. Passe l'avance en Soldée et historise.
Synchronisation BDC ↔ Avance
La section Avance du BDC affiche en temps réel les montants déclarée /
récupérée / restante issus du module Avance via getAvanceByBdc.
Améliorations BDC
- Champs Informations générales (Client, Département, N° Accord-cadre, N° Bon de commande, Marché, Lot, Année scolaire) maintenant éditables.
- Début / Fin utilisent
DatePillFieldpour la cohérence avec la section administrative. - Tous les inputs des cartes BDC et Avance utilisent un nouveau composant
partagé
<NeoInput>(fond blanc, neo-shadow, hover) — cohérence visuelle avecDatePillField.
Couverture de la spec
| Exigence ticket | Statut |
|---|---|
| Création auto depuis un BDC |
|
| Création manuelle (Client → Dept → BDC) |
|
| Modification de l'avance |
|
| Clôture |
|
| Suivi initial / récupéré / restant | |
| Sync BDC |
|
| Historique des déductions (réf, facture, date, montants) | |
| Historique des actions | |
| Déduction lors de la facturation |
|
La déduction lors de la facturation reste hors périmètre de ce MR car
elle dépend du module Facture (à venir). Toute la mécanique côté Avance
est prête : les évènements deduction sont déjà gérés par le data
source.
Architecture
-
Store Zustand
useAvanceStoreavec compteur de requêtes pour le loading. -
Data source abstrait (
AvanceDataSource) avec implémentation mockée + stubapiDataSourcequi jettenot implemented yet— branchement backend en un seul flagisMock. -
Ledger d'historique mutable côté mock : pousse automatiquement les
évènements
creation_auto,creation_manuelle,modification(avec résumé des champs modifiés) etcloture. -
NeoInput dans
src/shared/components/shadcn/— réutilisable hors Facturation pour les futurs formulaires "neo".
Closes VSN-2757