pain.001.001.04 is the first maintenance update of the 2009 baseline. It saw limited standalone adoption — most implementations either stayed on version 3 or jumped ahead — but it appears in some bank channels and archives, and Pain001 supports it fully for exactly that reason.

What to know about this version#

  • Functionally close to version 3; the differences are element-cardinality refinements rather than headline features.
  • If you are choosing a version today, prefer .03 (bank compatibility) or .09 (CBPR+); use .04 only when a channel mandates it.

Element structure (all versions share this skeleton)#

  • Group Header — message id, creation timestamp, NbOfTxs, CtrlSum, initiating party. Pain001 recomputes the control totals from validated records.
  • Payment Information — debtor, debtor account and agent, requested execution date, payment method, charge bearer; one block can carry many transactions.
  • Credit Transfer Transaction — amount and currency, creditor, creditor account and agent, remittance information, end-to-end reference.

Generate and inspect#

pain001 init pain.001.001.04 -o work/         # scaffold a starter CSV
pain001 inspect pain.001.001.04               # list required + optional fields
pain001 -t pain.001.001.04 -d payments.csv -o out/ --dry-run

Records migrate losslessly between supported versions:

from pain001.migration import VersionMapper
records_v9 = VersionMapper("pain.001.001.04", "pain.001.001.09").migrate(records)

See the full version catalogue, or the glossary for the vocabulary used here.