- Ajout export fichier SEPA XML (norme ISO 20022 pain.001.001.03) * Sélection multiple via checkboxes * Génération XML pour virements bancaires groupés * Validation IBAN et gestion des salariés sans RIB * Modal de succès/avertissements * Référence: Nom organisation - Période - Ajout marquage groupé des paies comme payées * Sélection multiple des paies * Modal de confirmation * Actualisation automatique sans refresh - Nouvelle route API /api/virements-salaires/[id] (PATCH) * Mise à jour transfer_done et transfer_done_at - Amélioration UX * Card informative pour clients non-Odentas * Modal informatif dans 'En savoir plus' * Messages clairs et cohérents
141 lines
5.3 KiB
Markdown
141 lines
5.3 KiB
Markdown
# Export SEPA XML pour Virements Salaires
|
|
|
|
**Date** : 2 novembre 2025
|
|
**Contexte** : Faciliter les virements de salaires pour les clients
|
|
|
|
## 🎯 Fonctionnalité
|
|
|
|
Permet aux clients d'exporter un fichier XML au format **SEPA ISO 20022 "pain.001.001.03"** pour lancer facilement les virements de salaires depuis leur banque.
|
|
|
|
## ✨ Caractéristiques
|
|
|
|
### 1. Sélection des paies
|
|
- ✅ Checkbox sur chaque ligne de paie non payée
|
|
- ✅ Checkbox "Tout sélectionner" dans le header du tableau
|
|
- ✅ Bouton "Export fichier bancaire (SEPA)" apparaît quand des paies sont cochées
|
|
- ✅ Compteur de paies sélectionnées affiché
|
|
|
|
### 2. Regroupement automatique
|
|
- ✅ Si un salarié a plusieurs paies sélectionnées → **un seul virement** avec montant total
|
|
- ✅ Les références de contrats sont combinées dans le libellé du virement
|
|
|
|
### 3. Gestion des IBAN manquants
|
|
- ⚠️ Si un salarié n'a pas d'IBAN/BIC → il est **automatiquement exclu** de l'export
|
|
- ⚠️ Un modal d'avertissement liste les salariés exclus
|
|
- ✅ L'export se fait quand même pour les autres salariés
|
|
|
|
### 4. Format SEPA XML
|
|
Le fichier généré respecte la norme **ISO 20022 pain.001.001.03** :
|
|
- **Donneur d'ordre** : L'entreprise (IBAN depuis `organization_details`)
|
|
- **Bénéficiaires** : Les salariés (IBAN/BIC depuis la table `salaries`)
|
|
- **Montants** : Net à payer (`net_after_withholding`)
|
|
- **Libellés** : **"Nom organisation - Période"** (ex: "Atelier Moz - Octobre 2025")
|
|
- Le nom de l'organisation est automatiquement tronqué si trop long (limite SEPA : 140 caractères)
|
|
- La période est formatée au format "Mois Année" (ex: "Octobre 2025")
|
|
- **Date d'exécution** : Date du jour (modifiable par la banque)
|
|
|
|
## 📁 Fichiers modifiés
|
|
|
|
### 1. API Route
|
|
**`app/api/virements-salaires/export-sepa/route.ts`**
|
|
- Récupère les payslips sélectionnés
|
|
- Valide les IBAN (format basique)
|
|
- Regroupe les paiements par salarié
|
|
- Génère le XML SEPA
|
|
- Retourne le fichier + métadonnées
|
|
|
|
### 2. Page Client
|
|
**`app/(app)/virements-salaires/page.tsx`**
|
|
- Ajout d'états : `selectedPayslips`, `showExportModal`, `exportWarnings`, `isExporting`
|
|
- Ajout de fonctions :
|
|
- `togglePayslipSelection()`
|
|
- `toggleSelectAll()`
|
|
- `handleExportSepa()`
|
|
- Ajout de la colonne checkbox dans le tableau
|
|
- Ajout du bouton d'export
|
|
- Ajout du modal d'avertissement pour salariés sans IBAN
|
|
|
|
## 🗄️ Données requises
|
|
|
|
### Dans `organization_details`
|
|
- ✅ `iban` (IBAN de l'entreprise) - **REQUIS**
|
|
- ⚠️ `bic` (BIC de la banque) - Optionnel mais recommandé
|
|
|
|
### Dans `salaries`
|
|
- ✅ `iban` (IBAN du salarié) - **REQUIS pour inclusion**
|
|
- ⚠️ `bic` (BIC de la banque du salarié) - Optionnel
|
|
|
|
Si l'entreprise n'a pas d'IBAN → Erreur bloquante
|
|
Si un salarié n'a pas d'IBAN → Exclusion automatique avec avertissement
|
|
|
|
## 🔄 Workflow utilisateur
|
|
|
|
1. Client va sur `/virements-salaires`
|
|
2. Client coche les paies à payer
|
|
3. Bouton "Export fichier bancaire" apparaît
|
|
4. Client clique sur le bouton
|
|
5. API génère le XML SEPA
|
|
6. Si des salariés n'ont pas d'IBAN → Modal d'avertissement
|
|
7. Fichier `virements_sepa_MSGXXX.xml` est téléchargé
|
|
8. Client importe le fichier dans son espace bancaire
|
|
9. Client valide les virements dans sa banque
|
|
|
|
## 📝 Exemple de fichier généré
|
|
|
|
```xml
|
|
<?xml version="1.0" encoding="UTF-8"?>
|
|
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
|
|
<CstmrCdtTrfInitn>
|
|
<GrpHdr>
|
|
<MsgId>MSG20251102143025ABC123</MsgId>
|
|
<CreDtTm>2025-11-02T14:30:25Z</CreDtTm>
|
|
<NbOfTxs>3</NbOfTxs>
|
|
<CtrlSum>4250.50</CtrlSum>
|
|
<InitgPty>
|
|
<Nm>MA STRUCTURE</Nm>
|
|
</InitgPty>
|
|
</GrpHdr>
|
|
<PmtInf>
|
|
<PmtInfId>MSG20251102143025ABC123-001</PmtInfId>
|
|
<PmtMtd>TRF</PmtMtd>
|
|
<NbOfTxs>3</NbOfTxs>
|
|
<CtrlSum>4250.50</CtrlSum>
|
|
<PmtTpInf>
|
|
<SvcLvl><Cd>SEPA</Cd></SvcLvl>
|
|
</PmtTpInf>
|
|
<ReqdExctnDt>2025-11-02</ReqdExctnDt>
|
|
<Dbtr><Nm>MA STRUCTURE</Nm></Dbtr>
|
|
<DbtrAcct><Id><IBAN>FR7630001007941234567890185</IBAN></Id></DbtrAcct>
|
|
<DbtrAgt><FinInstnId><BIC>BNPAFRPP</BIC></FinInstnId></DbtrAgt>
|
|
<ChrgBr>SLEV</ChrgBr>
|
|
|
|
<CdtTrfTxInf>
|
|
<PmtId><EndToEndId>MSG20251102143025ABC123-001</EndToEndId></PmtId>
|
|
<Amt><InstdAmt Ccy="EUR">1500.00</InstdAmt></Amt>
|
|
<CdtrAgt><FinInstnId><BIC>CEPAFRPP</BIC></FinInstnId></CdtrAgt>
|
|
<Cdtr><Nm>DUPONT Jean</Nm></Cdtr>
|
|
<CdtrAcct><Id><IBAN>FR7612345678901234567890123</IBAN></Id></CdtrAcct>
|
|
<RmtInf><Ustrd>Atelier Moz - Octobre 2025</Ustrd></RmtInf>
|
|
</CdtTrfTxInf>
|
|
|
|
<!-- Autres virements... -->
|
|
</PmtInf>
|
|
</CstmrCdtTrfInitn>
|
|
</Document>
|
|
```
|
|
|
|
## 🚀 Prochaines améliorations possibles
|
|
|
|
- [ ] Permettre de choisir la date d'exécution
|
|
- [ ] Enregistrer l'historique des exports SEPA
|
|
- [ ] Marquer automatiquement les paies comme "payées" après export
|
|
- [ ] Support du format pain.001.001.09 (version plus récente)
|
|
- [ ] Validation IBAN plus stricte avec module de contrôle
|
|
- [ ] Récupération automatique du BIC depuis l'IBAN (API externe)
|
|
|
|
## 📊 Impact
|
|
|
|
- **UX** : Les clients gagnent du temps sur la saisie manuelle des virements
|
|
- **Sécurité** : Moins d'erreurs de saisie d'IBAN
|
|
- **Traçabilité** : Libellés standardisés avec références de contrats
|
|
- **Conformité** : Format SEPA standard accepté par toutes les banques européennes
|