309 lines
8.8 KiB
Markdown
309 lines
8.8 KiB
Markdown
# Audit : Système d'Export SEPA ISO 20022
|
||
|
||
**Date de création** : 3 novembre 2025
|
||
**Statut actuel** : EN TEST (désactivé en production)
|
||
**Version** : 1.0
|
||
**Norme** : ISO 20022 pain.001.001.03
|
||
|
||
---
|
||
|
||
## 📊 Résumé Exécutif
|
||
|
||
Le système d'export SEPA permet aux clients gérant eux-mêmes leurs virements de salaires de générer un fichier XML standardisé pour effectuer des virements groupés depuis leur banque.
|
||
|
||
**Statut** : ✅ Fonctionnel mais désactivé en production
|
||
**Raison** : Tests en conditions réelles incomplets (1 seule banque testée)
|
||
|
||
---
|
||
|
||
## ✅ Tests Réussis
|
||
|
||
### Test Banque Qonto (3 novembre 2025)
|
||
- ✅ Fichier XML accepté sans erreur
|
||
- ✅ Salariés correctement identifiés
|
||
- ✅ IBAN des salariés validés
|
||
- ✅ Montants corrects (incluant regroupement par employé)
|
||
- ✅ BIC optionnel (non requis par Qonto)
|
||
- ✅ Format SEPA conforme
|
||
|
||
**Verdict Qonto** : 100% fonctionnel ✓
|
||
|
||
---
|
||
|
||
## 🔧 Implémentation Technique
|
||
|
||
### Fichiers concernés
|
||
1. **`app/api/virements-salaires/export-sepa/route.ts`** (378 lignes)
|
||
- Génération XML ISO 20022 pain.001.001.03
|
||
- Validation IBAN avec checksum modulo 97
|
||
- Regroupement des paiements par employé
|
||
- Sanitization XML (caractères spéciaux, limites de longueur)
|
||
|
||
2. **`app/(app)/virements-salaires/page.tsx`** (modifié)
|
||
- Interface de sélection multiple (checkboxes)
|
||
- Bouton d'export (actuellement désactivé)
|
||
- Modal de succès/avertissements
|
||
- Gestion des salariés sans IBAN
|
||
|
||
3. **`app/api/virements-salaires/[id]/route.ts`** (nouveau)
|
||
- Route PATCH pour marquage individuel/groupé
|
||
- Mise à jour `transfer_done` et `transfer_done_at`
|
||
|
||
### Fonctionnalités implémentées
|
||
- ✅ Sélection multiple via checkboxes
|
||
- ✅ Export XML SEPA conforme
|
||
- ✅ Validation IBAN (checksum modulo 97)
|
||
- ✅ Regroupement automatique par employé
|
||
- ✅ Gestion des salariés sans IBAN (exclusion + avertissement)
|
||
- ✅ Référence de virement : "Nom organisation - Période"
|
||
- ✅ Montant : `net_after_withholding` (net à payer après PAS)
|
||
- ✅ Limites SEPA respectées (70 char noms, 140 char libellés)
|
||
- ✅ Modal de confirmation/résultats
|
||
- ✅ Marquage groupé des paies comme payées
|
||
|
||
---
|
||
|
||
## 🎯 Validations Techniques
|
||
|
||
### Format XML
|
||
- ✅ Namespace correct : `urn:iso:std:iso:20022:tech:xsd:pain.001.001.03`
|
||
- ✅ Structure conforme : GrpHdr + PmtInf + CdtTrfTxInf
|
||
- ✅ Montants : format `0.00` (2 décimales)
|
||
- ✅ Dates : format ISO 8601
|
||
- ✅ Message ID unique : `MSG{timestamp}{random}`
|
||
- ✅ Currency : EUR
|
||
- ✅ Payment method : TRF (Transfer)
|
||
- ✅ Service level : SEPA
|
||
- ✅ Charge bearer : SLEV (Service Level)
|
||
|
||
### Validation des données
|
||
- ✅ IBAN : validation avec checksum modulo 97
|
||
- ✅ IBAN : longueur 15-34 caractères
|
||
- ✅ IBAN : format `AA11XXXX...`
|
||
- ✅ BIC : optionnel (laissé vide si absent)
|
||
- ✅ Montants : agrégation par employé si plusieurs paies
|
||
- ✅ Sanitization : suppression caractères XML dangereux
|
||
- ✅ Troncature : limites SEPA respectées
|
||
|
||
### Sécurité
|
||
- ✅ Authentification Supabase requise
|
||
- ✅ Vérification organization_id
|
||
- ✅ Isolation des données par organisation
|
||
- ✅ Pas d'exposition de données sensibles côté client
|
||
- ✅ Validation des paramètres d'entrée
|
||
|
||
---
|
||
|
||
## ⚠️ Limitations Connues
|
||
|
||
### 1. Support contrats
|
||
- ✅ **Tous types de contrats supportés** : CDDU et RG
|
||
- ℹ️ **Note technique** : La table `cddu_contracts` contient en réalité tous les types de contrats (nom historique)
|
||
- ✅ **Payslips** : Toutes les fiches de paie non payées sont incluses
|
||
|
||
### 2. Tests bancaires
|
||
- ✅ **Qonto** : Testé et validé
|
||
- ❓ **Autres banques** : Non testées
|
||
- BNP Paribas
|
||
- Société Générale
|
||
- Crédit Agricole
|
||
- LCL
|
||
- Banque Postale
|
||
- etc.
|
||
|
||
### 3. Validation XML
|
||
- ⚠️ Pas de validation contre le schéma XSD officiel
|
||
- ✅ Structure conforme au standard
|
||
- ✅ Accepté par Qonto (premier test réel)
|
||
|
||
### 4. BIC
|
||
- ⚠️ BIC optionnel (peut être requis par certaines banques)
|
||
- ✅ Qonto n'en a pas besoin
|
||
- ❓ Autres banques : à vérifier
|
||
|
||
---
|
||
|
||
## 📋 Plan de Déploiement
|
||
|
||
### Phase 1 : Tests Élargis (EN COURS)
|
||
**Objectif** : Tester avec 3-5 banques différentes
|
||
- [ ] BNP Paribas
|
||
- [ ] Crédit Agricole
|
||
- [ ] LCL
|
||
- [x] Qonto ✓
|
||
- [ ] Banque Postale
|
||
|
||
**Critères de validation** :
|
||
- Fichier accepté sans erreur
|
||
- Virements exécutés correctement
|
||
- Montants corrects
|
||
- Bénéficiaires corrects
|
||
|
||
### Phase 2 : Tests Élargis Supplémentaires (OPTIONNEL)
|
||
**Objectif** : Valider avec d'autres banques
|
||
|
||
**Banques à tester** :
|
||
- [ ] BNP Paribas
|
||
- [ ] Crédit Agricole
|
||
- [ ] LCL
|
||
- [ ] Banque Postale
|
||
|
||
**Note** : Test Qonto réussi suffit pour activation prudente. Tests supplémentaires recommandés mais non bloquants.
|
||
|
||
### Phase 3 : Validation XSD (OPTIONNEL)
|
||
**Objectif** : Valider le XML contre le schéma officiel
|
||
|
||
**Avantages** :
|
||
- Garantie de conformité totale
|
||
- Détection d'erreurs avant envoi à la banque
|
||
|
||
**Inconvénients** :
|
||
- Complexité accrue
|
||
- Dépendance externe (bibliothèque XSD)
|
||
|
||
**Décision** : À évaluer selon retours Phase 1
|
||
|
||
### Phase 4 : Activation Production
|
||
**Pré-requis** :
|
||
- ✅ Tests réussis sur Qonto
|
||
- ✅ Support CDDU + RG (déjà fonctionnel)
|
||
- ⏳ Documentation utilisateur complète
|
||
- ⏳ Support client prêt
|
||
|
||
**Actions** :
|
||
1. Réactiver le bouton d'export
|
||
2. Ajouter la card informative
|
||
3. Communiquer la nouveauté aux clients
|
||
4. Monitorer les premiers exports
|
||
|
||
**Estimation activation** : Peut être fait rapidement, en attente de décision stratégique
|
||
|
||
---
|
||
|
||
## 🐛 Problèmes Connus
|
||
|
||
### Aucun problème critique identifié
|
||
|
||
Les fonctionnalités testées fonctionnent correctement. Les limitations sont documentées ci-dessus.
|
||
|
||
---
|
||
|
||
## 📝 Recommandations
|
||
|
||
### Avant activation en production
|
||
|
||
1. **Documentation utilisateur** (priorité haute)
|
||
- Guide pas-à-pas
|
||
- FAQ
|
||
- Captures d'écran
|
||
|
||
2. **Tester avec plus de banques** (priorité moyenne)
|
||
- Demander à 1-2 clients volontaires de tester
|
||
- Vérifier compatibilité BNP, CA, SG
|
||
- Documenter les retours
|
||
|
||
3. **Améliorer les messages d'erreur** (priorité basse)
|
||
- Erreurs plus explicites côté client
|
||
- Guide de résolution des problèmes
|
||
|
||
4. **Monitoring** (priorité basse)
|
||
- Logger les exports réussis/échoués
|
||
- Alertes en cas d'erreurs répétées
|
||
- Analytics PostHog
|
||
|
||
### Note importante
|
||
Le système est **techniquement prêt pour activation** :
|
||
- ✅ Test réel réussi (Qonto)
|
||
- ✅ Tous types de contrats supportés
|
||
- ✅ Validation IBAN robuste
|
||
- ✅ Format SEPA conforme
|
||
|
||
La désactivation actuelle est une **mesure de précaution** en attente de validation stratégique et documentation utilisateur.
|
||
|
||
### Après activation
|
||
|
||
1. **Collecte de feedback**
|
||
- Enquête satisfaction
|
||
- Taux d'utilisation
|
||
- Problèmes rencontrés
|
||
|
||
2. **Amélioration continue**
|
||
- Optimiser l'UX selon retours
|
||
- Ajouter fonctionnalités demandées
|
||
- Corriger bugs éventuels
|
||
|
||
---
|
||
|
||
## 📊 Métriques de Succès
|
||
|
||
### KPIs à suivre (après activation)
|
||
- Nombre d'exports par mois
|
||
- Taux de succès (exports acceptés par les banques)
|
||
- Nombre d'organisations utilisatrices
|
||
- Temps moyen de traitement
|
||
- Taux de satisfaction client
|
||
|
||
### Objectifs (6 mois après activation)
|
||
- 30% des organisations non-Odentas utilisent l'export SEPA
|
||
- 95%+ de taux de succès
|
||
- Satisfaction client > 4/5
|
||
|
||
---
|
||
|
||
## 🔐 Sécurité et Conformité
|
||
|
||
### RGPD
|
||
- ✅ Pas de stockage des fichiers SEPA générés
|
||
- ✅ Données uniquement en mémoire pendant génération
|
||
- ✅ Téléchargement direct côté client
|
||
- ✅ Pas de logs contenant des IBAN
|
||
|
||
### Sécurité bancaire
|
||
- ✅ Pas de stockage de coordonnées bancaires sensibles (déjà en base)
|
||
- ✅ Validation stricte des montants
|
||
- ✅ Impossibilité de modifier les montants (lecture seule depuis base)
|
||
- ✅ Authentification requise
|
||
|
||
---
|
||
|
||
## 📅 Historique des Versions
|
||
|
||
### Version 1.0 (3 novembre 2025)
|
||
- Implémentation initiale
|
||
- Test réussi avec Qonto
|
||
- Support de tous les types de contrats (CDDU + RG via table cddu_contracts)
|
||
- Validation IBAN avec checksum modulo 97
|
||
- Interface de sélection multiple
|
||
- Marquage groupé des paies
|
||
- **Statut** : Désactivé en production par précaution
|
||
- **Raison désactivation** : En attente documentation utilisateur et validation stratégique
|
||
- **Prêt techniquement** : Oui ✓
|
||
|
||
---
|
||
|
||
## 🎓 Ressources
|
||
|
||
### Documentation de référence
|
||
- [ISO 20022 pain.001.001.03](https://www.iso20022.org/)
|
||
- [SEPA Credit Transfer](https://www.europeanpaymentscouncil.eu/what-we-do/sepa-credit-transfer)
|
||
- [Format IBAN](https://fr.iban.com/structure)
|
||
|
||
### Tests internes
|
||
- Organisation test : Atelier Moz
|
||
- Banque test : Qonto
|
||
- Date test : 3 novembre 2025
|
||
- Résultat : ✅ Succès
|
||
|
||
---
|
||
|
||
## 📞 Contact
|
||
|
||
Pour questions ou retours sur le système SEPA :
|
||
- Équipe Tech Odentas
|
||
- Documentation : `/SEPA_EXPORT_FEATURE.md`
|
||
- Code : `/app/api/virements-salaires/export-sepa/`
|
||
|
||
---
|
||
|
||
**Dernière mise à jour** : 3 novembre 2025
|
||
**Prochaine révision** : Après tests banques supplémentaires
|