Scope & compatibility
At a glance
Section titled “At a glance”What you can do today, what is planned, and what is deliberately out of scope. This library produces, reads, and validates ISO 20022 SEPA XML. It does not talk to banks.
| Use case | Standard / format | Status |
|---|---|---|
| Write credit transfers to SEPA XML | pain.001.001.09 | ✅ Supported |
| Write direct debits to SEPA XML | pain.008.001.08 | ✅ Supported |
| Write German DK credit transfers | pain.001.003.03 | ✅ Supported |
| Write German DK direct debits | pain.008.003.02 | ✅ Supported |
| Write legacy ISO credit transfers | pain.001.001.03 | ✅ Supported |
| Parse SEPA XML back to a typed model (auto-detects message type) | pain.001 / pain.008 | ✅ Supported |
| Read older coexistence direct debits | pain.008.001.02 | ✅ Supported (read-only) |
| Validate business rules (IBAN mod-97, EPC charset, exact CtrlSum, dates) | all | ✅ Supported |
| Validate XML against the official ISO 20022 / EPC XSD | all 6 schemas | ✅ Supported |
| SEPA Creditor Identifier check digits (ISO 7064 MOD 97-10) | direct debit | ✅ Supported |
Bank profiles: extra rules plus minor output tweaks (e.g. requireBic, batchBooking) | overlay | ✅ Supported |
| pain.008 B2B specifics and sequence-type cross-field checks (R1/R2/R3) | pain.008 | ✅ Supported |
Further national write variants (e.g. Swiss .ch) | national pain.001 / pain.008 | 🟡 On request |
| Additional named bank profiles | overlay | 🟡 On request |
| Payment status reports | pain.002 | ⛔ Out of scope |
| Account statements and reports | camt.05x | ⛔ Out of scope |
| Bank connectivity and file transmission | EBICS, FinTS/HBCI, Peppol | ⛔ Out of scope |
| Legacy pre-SEPA and SWIFT formats | DTAUS, SWIFT MT (MT103, MT940) | ⛔ Out of scope (deprecated) |
| Non-EUR or non-SEPA payment schemes | ⛔ Out of scope |
Legend: ✅ available now, 🟡 planned or available on request, ⛔ not covered. Roadmap items are demand-driven: a national variant only ships alongside that schema’s official XSD and golden samples, because a wrong flavor is worse than none.
Supported message types
Section titled “Supported message types”Full support (write + parse + XSD validate)
Section titled “Full support (write + parse + XSD validate)”| Schema | Description |
|---|---|
pain.001.001.09 | SEPA Credit Transfer Initiation (modern ISO 20022) |
pain.001.001.03 | Legacy ISO 20022 Credit Transfer (pre-2014 EPC format) |
pain.001.003.03 | German DK Credit Transfer variant (DFU agreement Anlage 3) |
pain.008.001.08 | SEPA Direct Debit Initiation (modern ISO 20022) |
pain.008.003.02 | German DK Direct Debit variant (DFU agreement Anlage 3) |
pain.001.001.03 is a write target via writeCreditTransfer(model, { variant: 'pain.001.001.03' }),
for systems that still require the older wire format. By default writeCreditTransfer emits the
modern pain.001.001.09.
Read-only coexistence (parse + XSD validate only)
Section titled “Read-only coexistence (parse + XSD validate only)”| Schema | Description |
|---|---|
pain.008.001.02 | Older ISO 20022 Direct Debit (pre-2014 EPC format) |
Parsing pain.001.001.03 returns a CreditTransferDocument (type 'pain.001').
Parsing pain.008.001.02 returns a DirectDebitDocument (type 'pain.008').
pain.008.001.02 is supported for reading files from legacy systems only. The library does not
write it: new direct-debit output always targets the modern pain.008.001.08 or the DK variant.
XSD coverage
Section titled “XSD coverage”validateXsd (from sepa-xml-ts/xsd) covers all six schemas listed above. It auto-detects
the namespace from the XML and selects the correct XSD.
The official XSDs are vendored inside the package at schemas/:
schemas/iso20022/for the ISO base schemasschemas/dk/for the German DK variants
Out of scope
Section titled “Out of scope”The following are explicitly out of scope for this library:
Bank connectivity and transmission: EBICS, FinTS, Peppol, and any other bank connectivity protocol. This is a file generation and parsing library only.
Status reports and notifications: pain.002 payment status reports and camt.* cash management messages are not supported.
Non-SEPA payment messages: SWIFT MT messages, CHAPS, ACH, and other non-SEPA payment formats.
Other currencies: Only EUR is supported. SEPA is a Euro-denominated payment system.
Swagger 2.0 / YAML: Not applicable. This library handles ISO 20022 XML, not API specifications.
Runtime requirements
Section titled “Runtime requirements”- Node.js 18 or later
- ESM module system (
"type": "module"in package.json, or.mjsfiles) - TypeScript 5.x (for type declarations; the compiled output is plain JavaScript)
Package versioning
Section titled “Package versioning”This library follows semantic versioning with conventional commits:
feat:commits trigger a minor version bumpfix:commits trigger a patch version bump- Pre-1.0: breaking model changes may appear in minor versions
The current version is 0.x. The public API may still change before 1.0.