Guida rapida per la composizione di una distinta di Bonifico SCT-XML CBI SEPA pain 00.04.00
Introduzione
ATTENZIONE, dal 19 novembre 2023 sarà attiva una nuova versione denominata pain 00.04.01.
Se non avete interesse a capire come si compone la struttura di un Flusso XML, ma necessitate per le vostre elaborazioni dei software che generino detti flussi, potete dare uno sguardo ai programmi BBS.
Questo documento non è altro che un adattamento semplificato di varie informazioni che sono presenti sulla rete internet e lo scopo di questo documento è quello di fornire le indicazioni pratiche per poter generare distinte di Bonifico XML SEPA compatibili con quanto previsto dagli standard CBI e che possano, quindi, essere importate e spedite, senza problemi, utilizzando qualsiasi remote banking CBI.
Al fine di rendere il più semplice possibile la questione, di seguito illustriamo come costruire passo passo una distinta contente solo i dati strettamente necessari all’effettuazione di normali disposizioni di bonifico (o stipendio).
Eventualmente la documentazione completa è disponibile sul sito del Consorzio CBI (cfr. http://www.cbi-org.eu > Standard > Area Pagamenti).
Da un punto di vista concreto, un file XML è un normalissimo file di testo, che contiene dei dati strutturati secondo delle regole ben definite; di conseguenza possiamo creare una distinta di prova aprendo semplicemente un nuovo documento di testo con il Blocco Note (Notepad) o con un altro editor di testo semplice (NON WORD per esempio, che inserisce nel testo anche istruzioni di formattazione).
STRUTTURA
La struttura di una distinta di Bonifico XML SEPA, basata sullo standard ISO20022 di Payment Initiation, è abbastanza semplice; in maniera schematica possiamo dire che è formata dai seguenti blocchi di dati, inseriti uno dopo l’altro:
- Una testata, con i riferimenti alla regole di composizione del file (schema xml, busta, body, ..)
- Un blocco <GrpHdr>, contenente le informazioni generali del flusso (mittente, numero e importo totale delle disposizioni,…)
- Un blocco <PmtInf>, con informazioni contabili comuni a tutta la distinta (data esecuzione, conto di addebito,…)
- Tanti blocchi <CdtTrfTxInf> tante quante sono le singole disposizioni da inserire nella distinta;
- Una coda, con la chiusura dei marcatori (<tag>) aperti in precedenza.
La distinta deve essere omogenea per data esecuzione e per conto di addebito, mentre può contenere contemporaneamente disposizioni di bonifico e di stipendio, dirette sia verso l’Italia che verso gli altri paesi dell’area SEPA.
In un flusso possono coesistere più distinte (vari blocchi <PmtInf>).
Procediamo come costruire passo passo una distinta.
Inizio struttura:
Testata xml
Questo blocco ha lo scopo di dichiarare le regole a cui ci si attiene per la composizione del file; si tratta di dati fissi che devono essere variati solo se cambia la versione dello standard CBI, dal 1 febbraio 2014 caratterizzata dal numero “00.04.00”; in questo caso dovremmo sostituirlo, sia qui che in tutte le altre righe del file XML dove compare, con il numero corrispondente alla nuova versione.
Per iniziare a costruire la nostra distinta di prova, copiamo e incolliamo il seguente testo nel nostro file di testo, ancora vuoto.
La presente versione è la più semplice disponibile, possono essere utilizzate anche strutture più complesse che si differenziano da questa, ma che otterranno lo stesso scopo
- <?xml version=”1.0″ encoding=”utf-8″?>
- <CBIPaymentRequest xmlns=”urn:CBI:xsd:CBIPaymentRequest.00.04.00″>
Blocco <GrpHdr> … </GrpHdr>
Contiene informazioni generali sulla distinta; al suo interno è necessario valorizzare i seguenti campi:
- Identificativo univoco messaggio <MsgId> [Max35Text]
Riferimento assegnato dal Mittente per identificare univocamente la distinta (Messaggio logico); dev’essere univoco a parità di data creazione e Mittente.
Poiché NON è possibile riutilizzare lo stesso identificativo per più distinte, si consiglia di utilizzare valori dinamici calcolati, ad esempio, sulla base di data e ora che ne garantiscono l’univocità, come ad esempio “DistintaXml-050214-18.19”; evitare invece di inserire un valore statico come potrebbe essere il nome dell’azienda o più banalmente “Stipendi”.
- Data e Ora di Creazione <CreDtTm> [ISO DateTime, es. “2014-02-05T18:19:00+01:00”]
- Numero transazioni incluse nella distinta <NbOfTxs> [Max15NumericText]
- Totale importi delle transazioni incluse nelle distinta <CtrlSum> [DecimalNumber es “180.51”].
L’importo deve essere compreso tra 0.01 e 999999999999999.99; la parte decimale deve essere max di 2 cifre ma può essere anche assente; come separatore decimale deve essere utilizzato il punto.
- Nome azienda mittente <InitgPty><Nm> [Max70Text]
- Codice CUC azienda mittente <OrgId><Othr><Id> [8Text]
Codice Unico CBI, già assegnato a ciascuna azienda; sostituisce il codice SIA e può essere richiesto alla vostra filiale.
Per indicare che la distinta verrà spedita dall’azienda “PIPPO PLUTO SPA” avente CUC pari a “0123456Z” e che comprende 2 disposizioni per un totale di 910,25 euro, andremo ad aggiungere le seguenti righe in coda al nostro documento aperto con il Blocco Note, tramite copia/incolla:
In rosso sono evidenziati i campi variabili.
……….
-
- <GrpHdr >
- <MsgId>DistintaXml-050214-18.19</MsgId>
- <CreDtTm>2014-02-05T18:19:00+01:00</CreDtTm>
- <NbOfTxs>2</NbOfTxs>
- <CtrlSum>910.25</CtrlSum>
- <InitgPty>
- <Nm>PIPPO PLUTO SPA</Nm>
- <Id>
- <OrgId>
- <Othr>
- <Id>0123456Z</Id>
- <Issr>CBI</Issr>
- </Othr>
- <Othr>
- </OrgId>
- <OrgId>
- </Id>
- </InitgPty>
- </GrpHdr>
………..
Blocco <PmtInf>
Contiene informazioni contabili comuni a tutta la distinta e relative al debitore; al suo interno è necessario valorizzare i seguenti campi:
- Identificativo informazioni di addebito <PmtInfId> [Max35Text]
- Richiesta esito <PmtMtd> con TRA sì esito, con TRF no esito;
- Modalità di Esecuzione <BtchBookg>true</BtchBookg>
con “true” esecuzione multipla (1 addebito e tanti accrediti) oppure “false” (tanti addebiti e tanti accrediti)
- Modalità di Esecuzione <InstrPrty> con NORM avviene l’esecuzione normale, con HIGH abbiamo il bonifico urgente eseguito con la stessa data contabile e valuta dell’addebito
- Data di esecuzione richiesta <ReqdExctnDt> [ISODate, es. “2014-02-14”]
- Nome azienda ordinante <Dbtr> <Nm> [Max70Text]
- IBAN conto di addebito <DbtrAcct> <Id> <IBAN> [IBAN2007Identifier]
- Abi Banca debitore <DbtrAgt> <FinInstnId> <ClrSysMmbId> <MmbId> [Max5Text]
Per indicare che la data di esecuzione richiesta per tutte le disposizioni sia ad esempio il 13/01/2017, che richiediamo l’esito, con addebito in unica soluzione e che il debitore sia “PIPPO PLUTO SPA” con relativi IBAN, che la banca di addebito è caratterizzata per esempio dall’ABI della BNL corrispondente al codice 01005, andremo ad aggiungere, tramite copia/incolla, le seguenti righe al nostro documento:
……….
-
- <PmtInf>
- <PmtInfId>DistintaXml-050214-18.19</PmtInfId>
- <PmtMtd>TRA</PmtMtd>
- <BtchBookg>true</BtchBookg>
- <PmtTpInf>
- <InstrPrty>NORM</InstrPrty>
- <SvcLvl>
- <Cd>SEPA</Cd>
- </SvcLvl>
- </PmtTpInf>
- <ReqdExctnDt>2017-01-13</ReqdExctnDt>
- <Dbtr>
- <Nm> PIPPO PLUTO SPA </Nm>
- </Dbtr>
- <DbtrAcct>
- <Id>
- <IBAN>IT99X0100510999000012345678</IBAN>
- </Id>
- <Id>
- </DbtrAcct>
- <DbtrAgt>
- <FinInstnId>
- <ClrSysMmbId>
- <MmbId>01005</MmbId>
- </ClrSysMmbId>
- <ClrSysMmbId>
- </FinInstnId>
- <FinInstnId>
- </DbtrAgt>
- <ChrgBr>SLEV</ChrgBr>
- <PmtInf>
………
Blocco < CdtTrfTxInf > … </ CdtTrfTxInf >
Contiene il dettaglio delle singole disposizioni facenti parte della distinta; nella prima disposizione di esempio analizziamo la composizione di un bonifico verso l’Italia; al suo interno è necessario valorizzare i seguenti campi:
- Progressivo disposizione <InstrId> [Max35Text]
Identificativo univoco, a livello di distinta, assegnato all’istruzione dal Mittente nei confronti della sua Banca; si consiglia di utilizzare una numerazione sequenziale (1,2,3,…): la prima disposizione sarà quindi caratterizzata dal valore 1, la seconda dal valore 2, la terza dal valore 3, …
- Identificativo end-to-end <EndToEndId> [Max35Text]
Identificativo URI assegnato dal Mittente e che identifica la singola disposizione di pagamento per tutta la catena di pagamento fino al beneficiario.
- Causale bancaria (category purpose) <PmtTpInf> <CtgyPurp> <Cd> [4Text]
Identifica la causale interbancaria, basata su un set predefinito di categorie; obbligatorio se IBAN c/c di accredito riferito ad IT.
Utilizzare “SUPP” per bonifici generici, “SALA” per stipendi, “INTC” per giroconti/girofondi;
La lista completa dei codici è disponibile all’indirizzo:
http://www.iso20022.org/external_code_list.page (“External Code Lists spreadsheet” foglio “4 CategoryPurpose”).
- Divisa e importo <Amt> <InstdAmt> [ActiveOrHistoricCurrencyAndAmount]
E’ consentito indicare come divisa solo EUR, l’importo deve essere compreso tra 0.01 e 999999999.99; la parte decimale deve essere max di 2 cifre ma può essere anche assente; come separatore decimale deve essere utilizzato il punto.
- Nome del beneficiario <Cdtr> <Nm> [Max35Text]
Nome del titolare del conto corrente di accredito.
- IBAN conto del creditore <CdtrAcct> <Id> <IBAN> [IBAN2007Identifier]
- Informazioni/Causale <RmtInf> <Ustrd> [Max140Text]
Informazioni sul pagamento comunicate dall’ordinante al beneficiario (Remittance Information); ad esempio “Pagamento fattura 10 del 13/03/12”, “Stipendio mese di gennaio”.
Queste sono le righe che andremo ad aggiungere nella distinta in fase di costruzione per un bonifico generico di 760 euro indirizzato a Paperino Srl da accreditare sul codice IBAN di sua pertinenza:
PRIMA DISPOSIZIONE
………….
-
-
- <CdtTrfTxInfZ>
- <PmtId>
- <InstrId>1</InstrId>
- <EndToEndId>DistintaXml-050214-18.19-0001</EndToEndId>
- </PmtId>
- <PmtTpInf>
- <CtgyPurp>
- <Cd>SUPP</Cd>
- </CtgyPurp>
- <CtgyPurp>
- </PmtTpInf>
- <Amt>
- <InstdAmt Ccy=”EUR”>760,00</InstdAmt>
- </Amt>
- <Cdtr>
- <Nm>PAPERINO SRL</Nm>
- </Cdtr>
- <CdtrAcct>
- <Id>
- <IBAN>IT88X0989812345000350264912</IBAN>
- </Id>
- <Id>
- </CdtrAcct>
- <RmtInf>
- <Ustrd>PAGAMENTO FATTURA 123 DEL 01/02/2016</Ustrd>
- </RmtInf>
- <PmtId>
- </CdtTrfTxInf>
- <CdtTrfTxInfZ>
-
………….
La seconda disposizione che andiamo a inserire riguarda un bonifico verso un paese dell’area SEPA diverso dall’Italia: i campi in più che dovremo valorizzare sono i seguenti:
- BIC banca titolare CC di accredito <CdtrAgt> <FinInstnId> <BIC> [BICIdentifier, 8 o 11 Text]
Istituto finanziario/ Banca che gestisce il c/c del soggetto Creditore; Il dato non è obbligatorio perché tutte le Banche inseriscono in automatico il codice BIC giusto. Importante da sapere che in caso di presenza la Banca esecutrice mantiene il codice BIC inserito dal Cliente anche se errato, pena la mancata esecuzione della disposizione.
- Comunicazioni valutarie <RgltryRptg>
Comunicazione a carico del debitore, obbligatoria se IBAN c/c di accredito diverso da IT.
- Indirizzo postale <PstlAdr><TwnNm>
In caso di IBAN diverso da IT, deve essere presente almeno l’indicazione della città.
SECONDA DISPOSIZIONE
………..
-
-
- <CdtTrfTxInf >
- <PmtId>
- <InstrId>2</InstrId>
- <EndToEndId>DistintaXml-050214-18.19-0002</EndToEndId>
- </PmtId>
- <Amt>
- <InstdAmt Ccy=”EUR”>150.25</InstdAmt>
- </Amt>
- <CdtrAgt>
- <FinInstnId>
- <BIC>NDEASESS</BIC>
- </FinInstnId>
- <FinInstnId>
- </CdtrAgt>
- <Cdtr>
- <Nm>AB HILMER ANDERSON</Nm>
- <PstlAdr>
- <AdrTp>ADDR</AdrTp>
- <StrtNm>BERGERSTASSE</StrtNm>
- <PstCd>00912</PstCd>
- <TwnNm>STOCKOLM</TwnNm>
- <CtrySubDvsn>STK</CtrySubDvsn>
- <Ctry>SE</Ctry>
- </PstlAdr>
- </Cdtr>
- <CdtrAcct>
- <Id>
- <IBAN>SE1130000000039687767480</IBAN>
- </Id>
- <Id>
- </CdtrAcct>
- <RgltryRptg>
- <DbtCdtRptgInd>DEBT</DbtCdtRptgInd>
- </RgltryRptg>
- <RmtInf>
- <Ustrd>INVOICE N. 124</Ustrd>
- </RmtInf>
- <PmtId>
- </CdtTrfTxInf>
- <CdtTrfTxInf >
-
………….
Chiusura struttura
Alla fine del flusso, dopo aver inserito tutte le disposizioni, si chiude il blocco della distinta <PmtInf> e dopo il tag di apertura flusso.
…………
-
- </PmtInf>
- </CBIPaymentRequest>
Fine del flusso
Ricordo che nel flusso non possono essere utilizzati né caratteri speciali quali °#@^”!£$%&()=?’^ etc.. né lettere accentate àèéìùò etc.
Alla pagina Tracciato SCT potete trovare le specifiche complete CBI.