Everything on this page is verified against the shipped code of pain001 v0.0.70 and its companions, held to the same discipline as the technical reference. If a cell says no, that is a statement, not an omission.
01. Message definitions#
| Message definition | Generate | XSD-validate | Migrate to/from | Notes |
|---|---|---|---|---|
| pain.001.001.03 | Yes | Yes | Yes | SEPA/CGI workhorse; <BIC> element naming |
| pain.001.001.04 – .08 | Yes | Yes | Yes | Channel-specific maintenance versions |
| pain.001.001.09 | Yes | Yes | Yes | CBPR+ version; MT101-relay successor; <BICFI> |
| pain.001.001.10 – .12 | Yes | Yes | Yes | Post-2019 refinements |
| pain.001.001.13 | Yes | Yes | Yes | Published by ISO 19 Mar 2026. Adds optional UnqTxIdr (UETR) and DbtCdtRptgInd. Generated and XSD-validated; no bank channel we track accepts it yet |
| pain.008.001.02 | Yes | Yes | n/a | The only pain.008 version supported (others are not) |
| pain.002 (responses) | No | n/a | n/a | Parsed, not generated-for-submission: status/reason extraction |
| camt.053 (statements) | No | n/a | n/a | Parsed for reconciliation |
02. Input formats#
| Format | Support | Gate |
|---|---|---|
| CSV | Built-in | Field-alias normalisation, JSON Schema per record |
| JSON / JSONL | Built-in | Same pipeline |
SQLite (.db/.sqlite) | Built-in | Table pain001 by default |
| Parquet | pain001[parquet] extra | PyArrow |
PGP-encrypted (.gpg/.asc) | pain001[gpg] extra | Decrypted in-process |
Excel .xlsx/.xlsm | pain001-loader-xlsx | IBAN safety guard; formulas resolve, macros never execute; .xls (legacy BIFF) not supported |
| SWIFT MT101 | pain001-loader-mt101 | Sequence A/B field map published; out-of-scope tags refuse rather than guess |
03. Scheme rulebooks#
sepa-sct (SEPA Credit Transfer) · sepa-inst (SEPA Instant) · sepa-sdd (SEPA Direct Debit Core) · sepa-b2b (SEPA B2B) · xborder-ct (cross-border credit transfer). Each supports --explain rule-by-rule output. Bank-specific profile packs beyond these five do not exist yet. That is the roadmap's rule-pack architecture, not a shipped feature.
04. Address models#
Structured and hybrid postal address elements are generated today, meeting the CBPR+ structured-address requirement, whose November 2026 date Swift has deferred. Unstructured AdrLine output remains available for channels that still accept it.
05. Known limitations#
- No bank connectivity: Pain001 stops at the validated file; submission is your channel (by design, as explained under scope).
- pain.008 is one version:
.001.02only. - MT101 loader excludes
:23E:,:25:,:28D:,:33B:,:36:,:21F:,:56a:,:51A:,:77B:,:25A:, because instruction codes and FX routing need human judgement. - Streaming semantics:
--streamingemits one independently valid file per chunk with recomputed totals, not a single monolithic document. - Python 3.10–3.12: nothing newer is CI-tested yet.
- The browser demo implements the fail-fast layer plus the official XSD gate for v09; the full JSON-Schema/rulebook pipeline is CLI-side.
Corrections are welcome. This page follows the corrections policy.
