ISO 20022 spiegato

Che cos'è pain.001? Il messaggio ISO 20022 di bonifico

Il messaggio ISO 20022 che un’azienda invia alla propria banca per disporre bonifici: che cos’è, com’è strutturato, quale versione usare e un esempio completo che supera la validazione con lo schema ufficiale.

pain.001 è il messaggio ISO 20022 che un'azienda invia alla propria banca per disporre uno o più bonifici. Il nome completo è Customer Credit Transfer Initiation: "pain" indica la famiglia di messaggi di disposizione di pagamento, .001 è il numero del messaggio e il suffisso, per esempio pain.001.001.09, è la versione. È in formato XML, viene validato rispetto a uno schema ufficiale (XSD) e sostituisce i formati CSV specifici di ciascuna banca e il messaggio di testo SWIFT MT101.

pain.001 in un minuto#

  • Chi lo invia: un'azienda (il debitore, o un soggetto che agisce per suo conto) lo invia alla propria banca (la banca del debitore).
  • Che cosa contiene: uno o più lotti di bonifici, ciascuno con un conto di addebito, una data di esecuzione richiesta e un numero qualsiasi di pagamenti a favore dei beneficiari.
  • Che cosa torna indietro: la banca risponde con pain.002, il Customer Payment Status Report, che accetta o respinge il file o le singole operazioni con codici motivo ISO.
  • Che cosa succede dopo: una volta accettata, la banca trasforma ogni istruzione in messaggi interbancari come pacs.008, che l'azienda non vede mai.
  • Dove si usa: bonifici SEPA secondo i rulebook EPC, pagamenti transfrontalieri su Swift secondo CBPR+ (pain.001.001.09) e molti schemi nazionali. Il corpus di esempi di Pain001 copre 42 scenari in 17 mercati.

Com'è strutturato un messaggio pain.001#

Tutte le versioni condividono lo stesso scheletro a tre livelli all'interno di un elemento <CstmrCdtTrfInitn>.

Livello Elemento Che cosa contiene
1 <GrpHdr> Intestazione di gruppo ID del messaggio, data e ora di creazione, numero di operazioni (NbOfTxs), somma di controllo (CtrlSum), parte ordinante
2 <PmtInf> Informazioni di pagamento Un lotto: metodo di pagamento, data di esecuzione richiesta, debitore, conto e banca del debitore, ripartizione delle spese
3 <CdtTrfTxInf> Operazione di bonifico Un pagamento: riferimento end-to-end, importo e valuta, beneficiario, conto e banca del beneficiario, informazioni di rimessa

Un file può contenere più lotti <PmtInf> e ogni lotto molti pagamenti <CdtTrfTxInf>. NbOfTxs e CtrlSum compaiono sia a livello di file sia a livello di lotto e devono corrispondere ai pagamenti che contano: è uno dei motivi più comuni per cui una banca respinge un file.

Un esempio completo di pain.001#

Si tratta di un singolo bonifico SEPA in pain.001.001.09, preso invariato dal corpus di esempi di Pain001. Supera la validazione rispetto all'XSD ufficiale ISO 20022. Le parti, gli IBAN e i BIC sono fittizi.

<?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>

Prova i tuoi dati nella demo nel browser: costruisce un file pain.001 a partire da un CSV e lo valida rispetto allo schema ufficiale senza che i dati lascino il tuo computer.

Le versioni di pain.001#

ISO pubblica una nuova versione quando il modello del messaggio cambia. Banche e schemi accettano ciascuno versioni specifiche, quindi la versione da inviare è quella indicata nella documentazione del canale della tua banca.

Versione Note
pain.001.001.03 Lo storico cavallo di battaglia di SEPA e CGI; identifica le banche con <BIC>
.04, .05, .06, .07, .08 Versioni di manutenzione usate da canali specifici
pain.001.001.09 La versione 2019 scelta da CBPR+ per Swift; identifica le banche con <BICFI>, aggiunge il trasporto di LEI e UETR
.10, .11, .12 Affinamenti successivi al 2019
pain.001.001.13 Pubblicata da ISO il 19 marzo 2026; aggiunge un identificativo univoco dell'operazione opzionale (UnqTxIdr)

La matrice di compatibilità mostra quali versioni Pain001 genera, valida e converte tra loro.

Messaggio Direzione Scopo
pain.001 Dall'azienda alla propria banca Dispone bonifici (invia denaro in uscita)
pain.002 Dalla banca all'azienda Comunica lo stato di un pain.001 o pain.008: accettato, parzialmente accettato o respinto, con codici motivo
pain.008 Dall'azienda alla propria banca Dispone addebiti diretti (incassa denaro in base a un mandato)
pacs.008 Da banca a banca Il bonifico interbancario in cui si trasforma un'istruzione pain.001
MT101 Azienda o banca, tramite Swift Il vecchio messaggio di testo "Request for Transfer" che pain.001 sostituisce. Ad agosto 2026 Swift ha rinviato la dismissione dell'inoltro interbancario MT101 (Swift); vedi da MT101 a pain.001

Il glossario definisce in linguaggio semplice il resto del vocabolario ISO 20022.

Perché le banche respingono i file pain.001#

Un file può essere XML ben formato ed essere comunque respinto. I controlli si sovrappongono per livelli:

  1. Schema: il file deve superare la validazione rispetto all'XSD ufficiale della sua versione.
  2. Qualità dei dati: gli IBAN superano il controllo delle cifre di verifica, i BIC sono ben formati, date e importi sono validi, e NbOfTxs e CtrlSum corrispondono ai pagamenti.
  3. Regole dello schema: SEPA, CBPR+ e gli schemi nazionali aggiungono vincoli propri, come il set di caratteri consentito o un indirizzo postale strutturato.
  4. Profilo e canale della tua banca: ogni banca pubblica le proprie linee guida d'uso in aggiunta allo schema.

Pain001 verifica i primi tre livelli prima che il file raggiunga la banca e dichiara chiaramente che il quarto spetta alla banca confermarlo.

Come creare un file pain.001#

  • Da un foglio di calcolo: Da Excel a pain.001 trasforma un elenco di pagamenti Excel o CSV in un file validato.
  • Nel browser: la demo genera e valida un file in locale, senza caricamenti.
  • Da codice o da riga di comando: installa la libreria pain001 open source ed esegui:
pain001 -t pain.001.001.09 -d payments.csv -o out/

Il riferimento tecnico copre ogni opzione e le FAQ rispondono alle domande più frequenti dei team di tesoreria, operations e sviluppo.

Fonti#