Skip to content

Scope & compatibility

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 caseStandard / formatStatus
Write credit transfers to SEPA XMLpain.001.001.09✅ Supported
Write direct debits to SEPA XMLpain.008.001.08✅ Supported
Write German DK credit transferspain.001.003.03✅ Supported
Write German DK direct debitspain.008.003.02✅ Supported
Write legacy ISO credit transferspain.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 debitspain.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 XSDall 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 profilesoverlay🟡 On request
Payment status reportspain.002⛔ Out of scope
Account statements and reportscamt.05x⛔ Out of scope
Bank connectivity and file transmissionEBICS, FinTS/HBCI, Peppol⛔ Out of scope
Legacy pre-SEPA and SWIFT formatsDTAUS, 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.

Full support (write + parse + XSD validate)

Section titled “Full support (write + parse + XSD validate)”
SchemaDescription
pain.001.001.09SEPA Credit Transfer Initiation (modern ISO 20022)
pain.001.001.03Legacy ISO 20022 Credit Transfer (pre-2014 EPC format)
pain.001.003.03German DK Credit Transfer variant (DFU agreement Anlage 3)
pain.008.001.08SEPA Direct Debit Initiation (modern ISO 20022)
pain.008.003.02German 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)”
SchemaDescription
pain.008.001.02Older 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.

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 schemas
  • schemas/dk/ for the German DK variants

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.

  • Node.js 18 or later
  • ESM module system ("type": "module" in package.json, or .mjs files)
  • TypeScript 5.x (for type declarations; the compiled output is plain JavaScript)

This library follows semantic versioning with conventional commits:

  • feat: commits trigger a minor version bump
  • fix: 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.