ValidateFin
Torna al blog
·Aggiornato 11 mar 2026·Guida·Di Eliel Nicaise

Capire il formato SEPA pain.001: una guida completa

Il file pain.001 è il formato standard per i bonifici SEPA. In questa guida spieghiamo la sua struttura XML, i campi obbligatori e gli errori comuni da evitare.

Cos'è pain.001?

pain.001 (Payment Initiation) è il messaggio XML standardizzato dall'EPC (European Payments Council) per avviare i bonifici SEPA. È utilizzato dalle aziende per trasmettere gli ordini di pagamento alla propria banca.

Questo formato si basa sullo standard ISO 20022 e fa parte della famiglia di messaggi Customer Credit Transfer Initiation. È accettato da tutte le banche della zona SEPA, che comprende 36 paesi.

Il pain.001 ha in larga misura sostituito i vecchi formati di pagamento nazionali (come CFONB in Francia, DTA in Germania e CLIEOP nei Paesi Bassi). Un singolo file pain.001 può contenere migliaia di transazioni di pagamento individuali, rendendolo lo standard per l'elaborazione in batch di stipendi, pagamenti ai fornitori e operazioni di tesoreria. Il formato complementare pain.008 gestisce il flusso inverso — gli addebiti diretti SEPA (SDD) per riscuotere denaro dai debitori.

Struttura del file XML

Un file pain.001 è strutturato su tre livelli: GroupHeader (informazioni globali), PaymentInformation (informazioni di addebito) e CreditTransferTransactionInformation (dettagli di ogni bonifico):

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09">
  <CstmrCdtTrfInitn>
    <GrpHdr>
      <MsgId>MSG-20260210-001</MsgId>
      <CreDtTm>2026-02-10T10:00:00</CreDtTm>
      <NbOfTxs>3</NbOfTxs>
      <CtrlSum>4500.00</CtrlSum>
      <InitgPty><Nm>ACME SA</Nm></InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>PMT-001</PmtInfId>
      <PmtMtd>TRF</PmtMtd>
      <ReqdExctnDt><Dt>2026-02-12</Dt></ReqdExctnDt>
      <Dbtr><Nm>ACME SA</Nm></Dbtr>
      <DbtrAcct>
        <Id><IBAN>BE68539007547034</IBAN></Id>
      </DbtrAcct>
      <DbtrAgt>
        <FinInstnId><BIC>GEBABEBB</BIC></FinInstnId>
      </DbtrAgt>
      <CdtTrfTxInf>
        <PmtId>
          <EndToEndId>INV-2026-001</EndToEndId>
        </PmtId>
        <Amt><InstdAmt Ccy="EUR">1500.00</InstdAmt></Amt>
        <CdtrAgt>
          <FinInstnId><BIC>ABNANL2A</BIC></FinInstnId>
        </CdtrAgt>
        <Cdtr><Nm>Supplier NV</Nm></Cdtr>
        <CdtrAcct>
          <Id><IBAN>NL91ABNA0417164300</IBAN></Id>
        </CdtrAcct>
      </CdtTrfTxInf>
    </PmtInf>
  </CstmrCdtTrfInitn>
</Document>

L'elemento radice deve includere il corretto namespace XML (xmlns) corrispondente alla versione utilizzata. Il GroupHeader compare esattamente una volta e contiene l'ID del messaggio, il timestamp di creazione, il numero di transazioni e la somma di controllo. Ogni blocco PmtInf raggruppa le transazioni che condividono lo stesso conto debitore e data di esecuzione. All'interno di ogni PmtInf, uno o più elementi CdtTrfTxInf descrivono i singoli bonifici.

Campi obbligatori

Ecco i campi essenziali richiesti in qualsiasi file pain.001 valido:

  • MsgIdIdentificatore univoco del messaggio (max 35 caratteri, unico per invio)
  • CreDtTmData e ora di creazione in formato ISO 8601 (es. 2026-02-10T10:00:00)
  • NbOfTxsNumero totale di transazioni nel file
  • CtrlSumSomma di controllo: totale di tutti gli importi dei bonifici
  • IBANIBAN del debitore e di ogni creditore nel formato europeo standard
  • PmtInfIdIdentificatore informazioni di pagamento — unico all'interno del file. Identifica un gruppo di transazioni che condividono lo stesso debitore e data di esecuzione. Utilizzato per la riconciliazione.
  • PmtMtdMetodo di pagamento: 'TRF' per bonifico. Questo campo indica alla banca quale tipo di istruzione SEPA eseguire.
  • ReqdExctnDtData di esecuzione richiesta nel formato AAAA-MM-GG. Deve essere un giorno lavorativo bancario futuro. Le banche accettano generalmente date fino a 30 giorni nel futuro.
  • DbtrAcct / IBANIBAN del debitore — il conto da addebitare. Deve superare la validazione del checksum mod-97 e corrispondere a un conto registrato per SEPA presso la tua banca.
  • EndToEndIdIdentificatore end-to-end per ogni transazione (max 35 caratteri). Percorre l'intera catena di pagamento e compare sull'estratto conto del creditore. Fondamentale per la riconciliazione.

Errori comuni

Questi errori sono frequentemente riscontrati durante la validazione:

CtrlSum errata

La somma di controllo non corrisponde alla somma degli importi singoli. Verificare l'arrotondamento (max 2 decimali).

IBAN non valido

Un IBAN malformato o con checksum errato. Utilizzare un validatore IBAN prima di integrare i dati.

Data di esecuzione nel passato

Il ReqdExctnDt (data di esecuzione richiesta) deve essere oggi o una data futura.

MsgId duplicato

Le banche rifiutano i file con un MsgId già elaborato. Utilizzare una combinazione di timestamp e numero di sequenza univoco. Non riutilizzare mai i MsgId, nemmeno per relazioni bancarie diverse.

Versione namespace errata

Il namespace XML deve corrispondere alla versione attesa dalla tua banca. Utilizzare il namespace pain.001.001.03 con una struttura pain.001.001.09 causerà un errore di validazione dello schema. Confermare con la propria banca quale versione supportano.

Caratteri speciali nei campi di testo

SEPA consente solo un set di caratteri limitato nei campi di testo: a-z, A-Z, 0-9 e alcuni caratteri speciali (/ - ? : ( ) . , ' + spazio). I caratteri accentati come ä, ö, ü, é, ñ devono essere traslitterati. Il simbolo dell'euro (€) non è consentito nei campi di testo.

Versioni di pain.001: quale usare?

Il formato pain.001 si è evoluto attraverso diverse versioni dalla sua introduzione. Ogni versione aggiunge nuovi campi e funzionalità mantenendo la compatibilità con le versioni precedenti. La tua banca potrebbe supportare una o più versioni — controlla sempre la loro guida di implementazione.

VersioneNamespaceAnnoModifiche principali
pain.001.001.03urn:iso:std:iso:20022:tech:xsd:pain.001.001.032009Versione SEPA originale, ancora ampiamente supportata. Campi base per bonifici.
pain.001.001.09urn:iso:std:iso:20022:tech:xsd:pain.001.001.092019Aggiunge informazioni di rimessa strutturate, reporting regolatorio e codici di scopo. Raccomandazione attuale EPC.
pain.001.001.11urn:iso:std:iso:20022:tech:xsd:pain.001.001.112023Ultima versione ISO. Supporto LEI migliorato, campi indirizzo aggiuntivi. L'adozione varia per banca.

ValidateFin supporta tutte e tre le versioni principali. Per le nuove implementazioni, si raccomanda pain.001.001.09 poiché offre il miglior equilibrio tra funzionalità e compatibilità bancaria. Testa sempre con la tua banca prima di cambiare versione in produzione.

Buone pratiche per generare file pain.001

Segui queste linee guida collaudate per ridurre al minimo i rifiuti e garantire un'elaborazione fluida dei pagamenti:

  • Valida prima di inviareValida sempre il tuo file pain.001 rispetto allo schema XSD prima di caricarlo sulla tua banca. ValidateFin rileva il 100% degli errori strutturali e la maggior parte delle violazioni delle regole di business in pochi secondi.
  • Usa identificatori univoci in modo coerenteMsgId, PmtInfId e EndToEndId dovrebbero seguire una convenzione di denominazione prevedibile (es. prefissi basati sulla data). Questo semplifica enormemente la riconciliazione e la risoluzione dei problemi.
  • Raggruppa le transazioni in modo intelligenteRaggruppa i pagamenti per data di esecuzione e valuta nello stesso blocco PmtInf. Questo riduce le commissioni di elaborazione presso alcune banche e rende la riconciliazione più pulita.
  • Gestisci correttamente la codifica dei caratteriGenera sempre i file in UTF-8. Traslittera i caratteri non SEPA (é→e, ß→ss, ü→ue) prima di costruire l'XML. I caratteri non traslitterati causano rifiuti silenziosi presso alcune banche.
  • Testa prima con piccoli batchQuando implementi un nuovo generatore pain.001 o cambi versione, inizia con un file contenente 2-3 transazioni di test. Verifica che la banca le accetti ed elabori correttamente prima di inviare volumi di produzione.

Per le operazioni di pagamento ad alto volume, considera di implementare la validazione automatizzata come parte della tua pipeline di pagamenti. Genera l'XML, valida con ValidateFin (o integra la validazione dello schema nel tuo codice) e invia alla banca solo se la validazione passa.

Valida il tuo file pain.001

Il nostro strumento di validazione SEPA controlla il tuo file rispetto allo schema XSD ufficiale EPC e mostra il dettaglio di ogni transazione. Nessun file viene inviato ai nostri server.

Valida il mio file SEPA

Domande frequenti

Cos'è un file SEPA pain.001?

Un file SEPA pain.001 è un documento XML conforme a ISO 20022 che avvia pagamenti di bonifico. Contiene informazioni sul debitore, dati del creditore, importi e riferimenti di pagamento. Le banche utilizzano questo formato standardizzato per elaborare pagamenti in batch nella zona SEPA di 36 paesi. Un singolo file può contenere migliaia di bonifici individuali.

Quali sono i campi obbligatori in un file pain.001?

I campi obbligatori includono MsgId (identificatore del messaggio, max 35 caratteri), CreDtTm (timestamp di creazione), NbOfTxs (numero di transazioni), CtrlSum (somma di tutti gli importi), InitgPty (parte iniziatrice), PmtInfId (ID informazioni di pagamento), PmtMtd (metodo di pagamento — TRF), ReqdExctnDt (data di esecuzione), Dbtr (nome del debitore), DbtrAcct (IBAN del debitore) e, per ogni transazione: CdtrAcct (IBAN del creditore), InstdAmt (importo con valuta) e EndToEndId (riferimento end-to-end).

Come posso validare il mio file SEPA pain.001 online?

Usa il validatore SEPA gratuito di ValidateFin per controllare il tuo file pain.001 rispetto agli schemi XSD ufficiali EPC. Carica il file XML — tutta la validazione avviene localmente nel browser senza trasmettere dati a nessun server, garantendo la piena conformità RGPD. Lo strumento valida struttura, IBAN, BIC, importi e somme di controllo.

Qual è la differenza tra pain.001 e pain.008?

Pain.001 (Customer Credit Transfer Initiation) è per i bonifici in uscita — si trasferisce denaro ai creditori. Pain.008 (Customer Direct Debit Initiation) è per riscuotere denaro dai debitori — si prelevano fondi dai loro conti tramite un mandato firmato. Entrambi sono formati XML ISO 20022 elaborati dalle banche nella zona SEPA, ma hanno campi obbligatori e regole di business diverse.

Quale versione di pain.001 dovrei usare?

Per le nuove implementazioni, si raccomanda pain.001.001.09 in quanto è la raccomandazione attuale dell'EPC e offre informazioni di rimessa strutturate, codici di scopo e campi di reporting regolatorio. Pain.001.001.03 è ancora ampiamente supportato per i sistemi legacy. Pain.001.001.11 è l'ultima versione ISO ma il supporto bancario varia. Controlla sempre con la tua banca quali versioni accettano.

Quali caratteri sono consentiti nei campi di testo SEPA pain.001?

I file di pagamento SEPA utilizzano un set di caratteri limitato definito dall'EPC: a-z, A-Z, 0-9 e i caratteri speciali / - ? : ( ) . , ' + e spazio. I caratteri nazionali con accenti (é, ü, ñ, ecc.) devono essere traslitterati. Il simbolo dell'euro (€) e altri simboli di valuta non sono consentiti nei campi di testo — gli importi usano l'elemento InstdAmt con l'attributo Ccy.

Come funziona il CtrlSum (somma di controllo) in pain.001?

Il CtrlSum è un checksum che deve essere uguale alla somma esatta di tutti i valori InstdAmt individuali di tutte le transazioni nel file, arrotondato a 2 decimali. Se esiste anche una differenza di €0,01 tra CtrlSum e la somma effettiva, l'intero file viene rifiutato. Calcolalo sommando gli importi pre-arrotondati, non arrotondando la somma totale a posteriori.

Un file pain.001 può contenere transazioni in più valute?

I bonifici SEPA standard (SCT) sono solo in EUR. Tuttavia, il formato pain.001 supporta più valute tramite l'attributo Ccy di InstdAmt. Alcune banche accettano transazioni non EUR in pain.001 per pagamenti internazionali, ma dipende dall'implementazione della tua banca.

Quante transazioni può contenere un singolo file pain.001?

Lo standard ISO 20022 non definisce un massimo, ma i limiti pratici dipendono dalla tua banca. La maggior parte delle banche accetta file con fino a 100.000 transazioni. I file molto grandi (>50.000 transazioni) possono richiedere più tempo per essere elaborati e alcune banche consigliano di dividerli.

Cosa succede se la mia banca rifiuta un file pain.001?

Quando una banca rifiuta un file pain.001, si riceve un pain.002 (Payment Status Report) che indica il motivo del rifiuto. I codici di rifiuto comuni includono AC01 (numero di conto errato), AM05 (pagamento duplicato), DT01 (data non valida) e FF01 (formato file non valido). Per prevenire i rifiuti, valida sempre il tuo file con ValidateFin prima della trasmissione.