- 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
5.3 KiB
5.3 KiB
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
- Client va sur
/virements-salaires - Client coche les paies à payer
- Bouton "Export fichier bancaire" apparaît
- Client clique sur le bouton
- API génère le XML SEPA
- Si des salariés n'ont pas d'IBAN → Modal d'avertissement
- Fichier
virements_sepa_MSGXXX.xmlest téléchargé - Client importe le fichier dans son espace bancaire
- Client valide les virements dans sa banque
📝 Exemple de fichier généré
<?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