5 erreurs fréquentes dans les fichiers XML SEPA (et comment les éviter)
Un fichier SEPA rejeté coûte du temps, de la trésorerie et de la confiance interne. Voici les causes de rejet les plus courantes pour les virements (pain.001) et prélèvements (pain.008), avec des exemples et des correctifs concrets.
1) Schéma/namespace incompatibles (pain.001/pain.008)
Le motif n°1 de rejet : le document ne correspond pas à la version attendue par la banque (éléments manquants, namespace erroné, ordre des nœuds incorrect).
Exemple correct (virement, pain.001.001.03)
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
...
</CstmrCdtTrfInitn>
</Document>
Exemple à corriger
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.003.03"> <!-- namespace invalide -->
<CustomerCreditTransferInitiation>...</CustomerCreditTransferInitiation> <!-- mauvais nom de balise -->
</Document>
xmlns et la structure, puis valider systématiquement votre XML contre le XSD avant envoi.2) Identifiants non uniques (MsgId, PmtInfId, EndToEndId)
Les identifiants servent à éviter les doublons et à tracer les opérations. Des valeurs réutilisées ou trop longues provoquent souvent un rejet.
GrpHdr/MsgId: identifiant unique du fichier.PmtInf/PmtInfId: identifiant du lot de paiement.EndToEndId(par transaction) : identifiant unique visible par le bénéficiaire.
Exemple correct
<GrpHdr>
<MsgId>EBF-2025-09-05-0001</MsgId>
<CreDtTm>2025-09-05T08:15:00</CreDtTm>
...
</GrpHdr>
<PmtInf>
<PmtInfId>BATCH-0925-A</PmtInfId>
...
<CdtTrfTxInf>
<PmtId><EndToEndId>INV-45821</EndToEndId></PmtId>
...
</CdtTrfTxInf>
</PmtInf>
3) IBAN/BIC invalides ou mal formatés
Un IBAN contenant des espaces parasites, une clé modulo 97 incorrecte ou un BIC de longueur invalide est un classique.
Exemple correct dans la transaction
<CdtTrfTxInf>
<Cdtr><Nm>ACME SARL</Nm></Cdtr>
<CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct>
<CdtrAgt><FinInstnId><BICFI>AGRIFRPPXXX</BICFI></FinInstnId></CdtrAgt> <!-- si exigé -->
...
</CdtTrfTxInf>
4) Montants/devise et décimales incorrects
Les montants doivent être positifs, avec deux décimales, le séparateur décimal “.” (point) et la devise en attribut.
Exemple correct
<InstdAmt Ccy="EUR">1250.50</InstdAmt>
Erreurs fréquentes
- Virgule au lieu du point :
1250,50❌ - Séparateur de milliers :
1 250.50ou1,250.50❌ - Devise manquante ou en minuscules :
Ccy="eur"❌ - Total lot ≠ somme des transactions (contrôle de cohérence manquant) ❌
5) Dates incohérentes (ReqdExctnDt / ReqdColltnDt)
Les banques rejettent les fichiers lorsque la date demandée est dans le passé ou en dehors des délais de traitement.
- Virements (pain.001) :
ReqdExctnDtau formatYYYY-MM-DD, non passée, et conforme aux cut-offs de la banque. - Prélèvements (pain.008) :
ReqdColltnDtdoit respecter le délai annoncé par votre banque selon le schéma (Core/B2B) et le type (premier, récurrent, one-off).
Exemples
<PmtInf>
<ReqdExctnDt>2025-09-06</ReqdExctnDt> <!-- virement -->
...
</PmtInf>
<PmtInf>
<ReqdColltnDt>2025-09-10</ReqdColltnDt> <!-- prélèvement -->
...
</PmtInf>
Bonus : encodage & caractères spéciaux
Utilisez toujours l’UTF-8 sans BOM, et respectez un jeu de caractères compatible SEPA (pas d’accents/émoticônes dans les libellés si votre banque est stricte). Échappez &, <, > dans les champs texte.
<?xml version="1.0" encoding="UTF-8"?>
<Ustrd>Facture 45821 - Mois 09/2025</Ustrd>
Checklist “anti-rejet” (copiable)
- Le namespace correspond exactement à la version exigée par la banque.
- MsgId, PmtInfId, EndToEndId sont uniques et ≤ 35 caractères si requis.
- IBAN validé (mod 97), BIC 8/11 caractères si requis, aucun espace parasite.
- Montants positifs, deux décimales, Ccy="EUR", total = somme détaillée.
- Date d’exécution/présentation non passée, respect des cut-offs & jours fériés.
- Encodage UTF-8, pas de caractères non autorisés dans les libellés.
- Validation XSD passée avant dépôt à la banque.
Extrait minimal (virement – pain.001.001.03)
<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.03">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>EBF-2025-09-05-0001</MsgId>
<CreDtTm>2025-09-05T08:15:00</CreDtTm>
<NbOfTxs>1</NbOfTxs>
<CtrlSum>1250.50</CtrlSum>
<InitgPty><Nm>Votre Société</Nm></InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>BATCH-0925-A</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<ReqdExctnDt>2025-09-06</ReqdExctnDt>
<Dbtr><Nm>Votre Société</Nm></Dbtr>
<DbtrAcct><Id><IBAN>FR7612345678901234567890189</IBAN></Id></DbtrAcct>
<DbtrAgt><FinInstnId><BICFI>PSSTFRPPXXX</BICFI></FinInstnId></DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId><EndToEndId>INV-45821</EndToEndId></PmtId>
<Amt><InstdAmt Ccy="EUR">1250.50</InstdAmt></Amt>
<CdtrAgt><FinInstnId><BICFI>AGRIFRPPXXX</BICFI></FinInstnId></CdtrAgt>
<Cdtr><Nm>ACME SARL</Nm></Cdtr>
<CdtrAcct><Id><IBAN>FR7630006000011234567890189</IBAN></Id></CdtrAcct>
<RmtInf><Ustrd>Facture 45821</Ustrd></RmtInf>
</CdtTrfTxInf>
</PmtInf>
</CstmrCdtTrfInitn>
</Document>
Générer un XML propre sans se battre avec le XSD
EasyBankFlow convertit vos CSV/Excel en XML SEPA conforme, avec validation automatique, contrôle IBAN/BIC et vérifs de cohérence. Idéal pour virements groupés et prélèvements récurrents.