Pain001

Risposte dirette per tesorieri, operazioni di pagamento, ingegneri e revisori. Le domande sono formulate come le persone le pongono davvero. Per maggiori dettagli tecnici, si veda il Riferimento tecnico.


Per i responsabili di tesoreria e finanza#

Che cos'è pain.001, in un paragrafo?

pain.001 è il messaggio ISO 20022 che un cliente invia alla propria banca per disporre bonifici — il successore XML di formati come SWIFT MT101 e i tracciati piatti nazionali. La banca lo valida rispetto a uno schema e a un rulebook di schema prima di accettarlo. Pain001 (il software) produce quei file dai dati già in vostro possesso e ne dimostra la validità prima dell'invio.

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

La direzione del flusso. pain.001 dispone bonifici — il denaro esce. pain.008 dispone addebiti diretti — si incassa denaro dovuto in forza di un mandato. Pain001 genera entrambi: dieci versioni di pain.001 (da .001.03 a .001.12) e pain.008.001.02.

Inviamo ancora file MT101. Quanto è urgente la migrazione?

Urgente. SWIFT ha ritirato i messaggi MT delle categorie 1, 2 e 9 per le istruzioni di pagamento interbancarie transfrontaliere a novembre 2025; i canali corporate che accettano ancora MT lo fanno a discrezione di ciascuna banca e a tempo determinato. Il loader MT101 converte i flussi MT101 esistenti in pain.001 validato senza dover ridigitare nulla.

Che cosa comporta per noi la scadenza degli indirizzi strutturati di novembre 2026?

Dalla fine di novembre 2026 gli indirizzi postali completamente non strutturati non saranno più accettati nei pagamenti transfrontalieri CBPR+; gli indirizzi dovranno essere strutturati o ibridi — elementi discreti come la località () e il paese () al posto di righe di testo libero. Se i vostri dati anagrafici conservano gli indirizzi come blocchi di testo, il lavoro è nei dati, non nella connessione bancaria. Partite da lì. Il briefing 2026 illustra la tempistica in dettaglio.

Quanto costa Pain001?

Nulla. Il core è a doppia licenza Apache-2.0 / MIT; i pacchetti complementari sono Apache-2.0. Uso commerciale, modifica e ridistribuzione sono tutti consentiti. Come riferimento di scala, il solo SDK di traduzione di SWIFT è listato a €10,000–30,000 l'anno.


Per le operazioni di pagamento#

Perché le banche rifiutano i file di pagamento?

Quattro cause ricorrenti: violazioni di schema (elemento errato, versione errata, namespace errato), identificativi non validi (checksum IBAN falliti, BIC malformati), totali di controllo errati (NbOfTxs / CtrlSum non coerenti con le transazioni) e caratteri fuori dal set latino ISO 20022. Pain001 verifica tutti e quattro i punti prima che il file esista: validazione JSON Schema per record, controlli mod-97 sugli IBAN e ISO 9362 sui BIC, totali di controllo ricalcolati, traslitterazione del set di caratteri e validazione XSD finale dell'XML generato.

Possiamo validare un file senza generare nulla?

Sì — pain001 --dry-run (oppure il sottocomando validate, o POST /api/v1/validate). Codice di uscita 0 significa valido; 1 significa validazione fallita con errori a livello di campo. Integratelo nella CI o in una checklist pre-invio.

Quali rulebook SEPA sono coperti?

Cinque rulebook di schema sono inclusi: SEPA Credit Transfer (sepa-sct), SEPA Instant (sepa-inst), SEPA Direct Debit Core (sepa-sdd), SEPA B2B (sepa-b2b) e bonifico transfrontaliero (xborder-ct). Usate --scheme --explain per vedere ogni regola superata o fallita.

I nostri dati vivono in Excel. Dov'è l'insidia?

Excel converte silenziosamente le stringhe simili a IBAN in numeri. Il loader Excel legge direttamente .xlsx/.xlsm e si arresta se le colonne IBAN contengono celle numeriche — la corruzione viene intercettata al caricamento, non in banca.

Come gestisce un batch da 500,000 righe?

--streaming elabora l'input in blocchi con memoria limitata (impostazione predefinita 1,000 transazioni), ciascuno emesso come file XML autonomo con totali di controllo correttamente ricalcolati. Per lo stesso motivo l'API REST offre POST /api/v1/generate/async con polling dei job.


Per ingegneri e architetti#

Come lo integriamo — libreria, CLI o API?

Tutte e tre le superfici sono di prima classe: un'API Python tipizzata, una CLI con codici di uscita adatti alla CI e un microservizio FastAPI (pain001 serve) con endpoint sincroni, di job asincroni, di health e di metriche Prometheus. Sotto c'è la stessa pipeline di validazione, quindi i risultati non divergono mai tra le superfici.

La generazione dell'XML è davvero al riparo dagli arrotondamenti float?

Gli importi sono decimal.Decimal dall'inizio alla fine nella generazione e nella validazione di schema — analizzati come decimali esatti, sommati come decimali esatti, resi senza rappresentazione float. I totali di controllo sono ricalcolati dai record validati, mai accettati dall'input.

Qual è la postura di sicurezza?

Tutto il parsing XML passa per defusedxml (bloccando attacchi XXE e di espansione delle entità); non c'è lxml nell'albero delle dipendenze. Gli input passano un validatore anti path traversal. L'immagine Docker gira come utente non root. Per le release del core viene generato un SBOM CycloneDX e la scoperta di plugin di terze parti può essere disattivata del tutto con PAIN001_DISABLE_PLUGINS=1.

Come viene imposta la qualità?

Copertura di riga e di ramo al 100% come gate CI vincolante sul core (in modo verificabile: 3,828 righe, 926 rami al 100%), mypy strict, copertura delle docstring al 100%, linting di sicurezza Bandit e pip-audit e scansione CodeQL. I pacchetti complementari mantengono la stessa disciplina di copertura al 100%.

Possiamo estenderlo per un formato proprietario?

Sì — quattro gruppi di entry point per plugin (pain001.loaders, pain001.validators, pain001.schemes, pain001.writers). Il loader Excel è esso stesso un plugin che usa il protocollo pubblico, quindi funge anche da implementazione di riferimento.


Per revisori e compliance#

Possiamo riprodurre un file generato lo scorso trimestre?

Sì. Fissate la versione del pacchetto, riproducete lo stesso input e l'output è deterministico. Poiché la toolchain è open source, la pista di controllo si estende fino al percorso del codice stesso — non solo a un'attestazione del fornitore.

I dati di pagamento lasciano il nostro ambiente?

No. Ogni componente — CLI, libreria, API REST, server MCP, LSP — viene eseguito localmente. Non c'è telemetria, nessuna chiamata SaaS, nessun servizio di validazione esterno. Il server MCP comunica solo via stdio e tutti i suoi 17 strumenti sono annotati come read-only e idempotenti.

Chi mantiene Pain001?

Sebastien Rousseau, leader di ingegneria fintech con base a Londra, con contributori della community. Lo sviluppo è pubblico su GitHub, le release sono pubblicate su PyPI e il changelog è versionato a ogni release.