ISO 20022 expliqué

Qu'est-ce que pain.001 ? Le virement ISO 20022 expliqué

Le message ISO 20022 qu'une entreprise envoie à sa banque pour ordonner des virements : ce qu'il est, comment il est construit, quelle version utiliser, et un exemple complet validé par le schéma officiel.

pain.001 est le message ISO 20022 qu'une entreprise envoie à sa banque pour ordonner un ou plusieurs virements. Son nom complet est Customer Credit Transfer Initiation (initiation de virement client) : « pain » désigne la famille des messages d'initiation de paiement, .001 le numéro du message, et le suffixe, par exemple pain.001.001.09, la version. C'est un format XML, validé par un schéma officiel (XSD), qui remplace les formats CSV propres à chaque banque et le message texte SWIFT MT101.

pain.001 en une minute#

  • Qui l'envoie : une entreprise (le débiteur, ou un mandataire agissant pour son compte) l'envoie à sa propre banque (l'agent du débiteur).
  • Ce qu'il contient : un ou plusieurs lots de virements, chacun avec un compte débiteur, une date d'exécution demandée et un nombre quelconque de paiements aux créanciers.
  • Ce qui revient : la banque répond par un pain.002, le Customer Payment Status Report, qui accepte ou rejette le fichier ou certaines transactions avec des codes motifs ISO.
  • Ce qui suit : une fois l'ordre accepté, la banque transforme chaque instruction en messages interbancaires tels que le pacs.008, que l'entreprise ne voit jamais.
  • Où il est utilisé : les virements SEPA régis par les rulebooks de l'EPC, les paiements transfrontaliers sur Swift sous CBPR+ (pain.001.001.09) et de nombreux systèmes nationaux. Le corpus d'exemples de Pain001 couvre 42 scénarios sur 17 marchés.

Structure d'un message pain.001#

Toutes les versions partagent le même squelette à trois niveaux, dans un élément <CstmrCdtTrfInitn>.

Niveau Élément Contenu
1 <GrpHdr> En-tête de groupe Identifiant du message, horodatage de création, nombre de transactions (NbOfTxs), somme de contrôle (CtrlSum), partie initiatrice
2 <PmtInf> Informations de paiement Un lot : mode de paiement, date d'exécution demandée, débiteur, compte et agent du débiteur, répartition des frais
3 <CdtTrfTxInf> Transaction de virement Un paiement : référence de bout en bout, montant et devise, créancier, compte et agent du créancier, informations de remise

Un fichier peut contenir plusieurs lots <PmtInf>, et chaque lot de nombreux paiements <CdtTrfTxInf>. NbOfTxs et CtrlSum figurent au niveau du fichier comme du lot et doivent correspondre aux paiements qu'ils comptent : c'est l'un des motifs de rejet les plus fréquents.

Un exemple complet de pain.001#

Voici un virement SEPA unique en pain.001.001.09, repris tel quel du corpus d'exemples de Pain001. Il est validé par le XSD officiel ISO 20022. Les parties, IBAN et BIC sont fictifs.

<?xml version='1.0' encoding='UTF-8'?>
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>OML-SCT-20260921</MsgId>
      <CreDtTm>2026-09-21T12:00:00</CreDtTm>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <InitgPty>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>SCT-20260921-IT-01</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <BtchBookg>false</BtchBookg>
      <NbOfTxs>1</NbOfTxs>
      <CtrlSum>2200.00</CtrlSum>
      <PmtTpInf>
        <SvcLvl>
          <Cd>SEPA</Cd>
        </SvcLvl>
      </PmtTpInf>
      <ReqdExctnDt>
        <Dt>2026-09-22</Dt>
      </ReqdExctnDt>
      <Dbtr>
        <Nm>Officine Meccaniche Lombarde SpA</Nm>
        <PstlAdr>
          <PstCd>20123</PstCd>
          <TwnNm>Milano</TwnNm>
          <Ctry>IT</Ctry>
          <AdrLine>Via Torino 15</AdrLine>
        </PstlAdr>
      </Dbtr>
      <DbtrAcct>
        <Id>
          <IBAN>IT48T78971134594OGDKY5VXE41</IBAN>
        </Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId>
          <BICFI>TLAOIT60</BICFI>
        </FinInstnId>
      </DbtrAgt>
      <ChrgBr>SLEV</ChrgBr>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>OML-2026-0921-01</EndToEndId>
        </PmtId>
        <Amt>
          <InstdAmt Ccy="EUR">2200.00</InstdAmt>
        </Amt>
        <CdtrAgt>
          <FinInstnId>
            <BICFI>MHXHITI0</BICFI>
          </FinInstnId>
        </CdtrAgt>
        <Cdtr>
          <Nm>Fonderia Bresciana Srl</Nm>
          <PstlAdr>
            <PstCd>25121</PstCd>
            <TwnNm>Brescia</TwnNm>
            <Ctry>IT</Ctry>
          </PstlAdr>
        </Cdtr>
        <CdtrAcct>
          <Id>
            <IBAN>IT23J14887404856NF3794IGWXN</IBAN>
          </Id>
        </CdtrAcct>
        <RmtInf>
          <Ustrd>Fattura 117/2026</Ustrd>
        </RmtInf>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

Essayez vos propres données dans la démo en ligne : elle génère un fichier pain.001 à partir d'un CSV et le valide par le schéma officiel, sans que les données quittent votre machine.

Les versions de pain.001#

L'ISO publie une nouvelle version lorsque le modèle du message évolue. Chaque banque et chaque système n'acceptent que certaines versions : la version à envoyer est celle qu'indique la documentation du canal de votre banque.

Version Remarques
pain.001.001.03 Le pilier historique de SEPA et du CGI ; identifie les banques avec <BIC>
.04, .05, .06, .07, .08 Versions de maintenance utilisées par certains canaux
pain.001.001.09 La version de 2019 retenue par CBPR+ pour Swift ; identifie les banques avec <BICFI> et ajoute le LEI et l'UETR
.10, .11, .12 Améliorations postérieures à 2019
pain.001.001.13 Publiée par l'ISO le 19 mars 2026 ; ajoute un identifiant unique de transaction facultatif (UnqTxIdr)

La matrice de compatibilité indique les versions que Pain001 génère, valide et convertit.

Message Sens Objet
pain.001 De l'entreprise vers sa banque Ordonne des virements (envoie des fonds)
pain.002 De la banque vers l'entreprise Rend compte du statut d'un pain.001 ou d'un pain.008 : accepté, partiellement accepté ou rejeté, avec des codes motifs
pain.008 De l'entreprise vers sa banque Ordonne des prélèvements (encaisse des fonds en vertu d'un mandat)
pacs.008 De banque à banque Le virement interbancaire que devient une instruction pain.001
MT101 Entreprise ou banque, via Swift L'ancien message texte « Request for Transfer » que remplace pain.001. Swift a reporté en août 2026 le retrait du relais interbancaire MT101 (Swift) ; voir du MT101 au pain.001

Le glossaire définit en langage clair le reste du vocabulaire ISO 20022.

Pourquoi les banques rejettent des fichiers pain.001#

Un fichier peut être un XML bien formé et être rejeté malgré tout. Les contrôles s'empilent en couches :

  1. Schéma : le fichier doit être validé par le XSD officiel de sa version.
  2. Qualité des données : les IBAN passent leur clé de contrôle, les BIC sont bien formés, les dates et montants sont valides, et NbOfTxs et CtrlSum correspondent aux paiements.
  3. Règles du système : SEPA, CBPR+ et les systèmes nationaux ajoutent leurs propres contraintes, comme le jeu de caractères autorisé ou une adresse postale structurée.
  4. Profil et canal de votre banque : chaque banque publie ses propres guides d'utilisation en plus de ceux du système.

Pain001 vérifie les trois premières couches avant que le fichier n'atteigne la banque, et indique clairement que la quatrième relève de la banque.

Comment créer un fichier pain.001#

  • À partir d'un tableur : Excel vers pain.001 transforme une liste de paiements Excel ou CSV en fichier validé.
  • Dans le navigateur : la démo génère et valide un fichier en local, sans aucun envoi.
  • Par le code ou la ligne de commande : installez la bibliothèque open source pain001 et exécutez :
pain001 -t pain.001.001.09 -d payments.csv -o out/

La référence technique couvre chaque option, et la FAQ répond aux questions que posent le plus souvent les équipes trésorerie, opérations et développement.

Sources#