Pain001

pain.001.001.06 is a stepping-stone version between the 2009 classic and the 2019 rework. Some treasury management systems export it natively, which is the main reason to generate it.

What to know about this version#

  • Supported end-to-end: JSON Schema, Jinja2 template, official XSD, scheme rulebooks.
  • Consider .09 for new integrations unless your channel says otherwise.

Element structure (all versions share this skeleton)#

  • <GrpHdr> Group Header — message id, creation timestamp, NbOfTxs, CtrlSum, initiating party. Pain001 recomputes the control totals from validated records.
  • <PmtInf> Payment Information — debtor, debtor account and agent, requested execution date, payment method, charge bearer; one block can carry many transactions.
  • <CdtTrfTxInf> 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.06 -o work/         # scaffold a starter CSV
pain001 inspect pain.001.001.06               # list required + optional fields
pain001 -t pain.001.001.06 -d payments.csv -o out/ --dry-run

Records can be reshaped between supported versions. The mapper renames and defaults fields to match the target version; elements the target does not model are not carried over, so re-validate after migrating:

from pain001.migration import VersionMapper
rows = VersionMapper().migrate_rows(
    rows, "pain.001.001.06", "pain.001.001.09"
)

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