pain.001.001.09 — valid, two payment batches with different execution dates
One pain.001 file, two PmtInf blocks: batch A is executed on 2026-03-10 with hybrid addresses (TwnNm + Ctry + one AdrLine), batch B on 2026-11-20 with fully structured ones. It shows the two things a multi-batch file teaches: the EPC address rule is evaluated per batch against the date that batch carries, and each PmtInf has its own NbOfTxs / CtrlSum on top of the GrpHdr totals (4 transfers, 3 350.00 EUR).
pain.001.001.09 — Valid
One pain.001 file, two PmtInf blocks: batch A is executed on 2026-03-10 with hybrid addresses (TwnNm + Ctry + one AdrLine), batch B on 2026-11-20 with fully structured ones. It shows the two things a multi-batch file teaches: the EPC address rule is evaluated per batch against the date that batch carries, and each PmtInf has its own NbOfTxs / CtrlSum on top of the GrpHdr totals (4 transfers, 3 350.00 EUR).
What this file shows
One pain.001 file, two PmtInf blocks: batch A is executed on 2026-03-10 with hybrid addresses (TwnNm + Ctry + one AdrLine), batch B on 2026-11-20 with fully structured ones. It shows the two things a multi-batch file teaches: the EPC address rule is evaluated per batch against the date that batch carries, and each PmtInf has its own NbOfTxs / CtrlSum on top of the GrpHdr totals (4 transfers, 3 350.00 EUR).
| Transactions | 4 |
|---|---|
| Total | €3,350.00 |
| Scheme | SEPA |
| Date in the file | 2026-03-10 |
Every party, IBAN and amount below is fictitious. The IBANs are structurally valid — they pass the mod-97 check — but they belong to no real account.
File content
<?xml version="1.0" encoding="UTF-8"?>
<!--
ValidateFin sample file — SEPA Credit Transfer, pain.001.001.09, TWO payment batches.
Expected validation result: VALID — 4 transfers, 3 350.00 EUR, 0 warnings.
One file, two <PmtInf> blocks, each with its own execution date, its own debtor
account and its own NbOfTxs / CtrlSum:
* batch A — ReqdExctnDt 2026-03-10, HYBRID addresses (TwnNm + Ctry + one AdrLine),
2 transfers, 1 549.50 EUR;
* batch B — ReqdExctnDt 2026-11-20, STRUCTURED addresses (no AdrLine at all),
2 transfers, 1 800.50 EUR.
The EPC structured-address rule is evaluated per batch, against the date the batch
itself carries: batch B is past the 2026-11-15 cut-off, batch A is not. The GrpHdr
totals cover the whole file (4 / 3 350.00) and each batch's own totals must add up
to it — a per-batch total that lies is caught even when the header total is right.
SEPA is a single-currency scheme: every amount is in EUR.
All parties and account numbers are fictitious.
Reference page: https://validatefin.com/en/resources/samples/sepa-pain001-multi-batch
License: CC-BY-4.0
-->
<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.001.001.09"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CstmrCdtTrfInitn>
<GrpHdr>
<MsgId>CT-MULTIBATCH-2026-0001</MsgId>
<CreDtTm>2026-03-02T11:20:00</CreDtTm>
<NbOfTxs>4</NbOfTxs>
<CtrlSum>3350.00</CtrlSum>
<InitgPty>
<Nm>Atlas Industries SA</Nm>
</InitgPty>
</GrpHdr>
<PmtInf>
<PmtInfId>PMT-BATCH-A-SUPPLIERS</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>2</NbOfTxs>
<CtrlSum>1549.50</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>
<Dt>2026-03-10</Dt>
</ReqdExctnDt>
<Dbtr>
<Nm>Atlas Industries SA</Nm>
<PstlAdr>
<TwnNm>Paris</TwnNm>
<Ctry>FR</Ctry>
<AdrLine>18 avenue des Ateliers</AdrLine>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>FR7610107001011234567890129</IBAN>
</Id>
<Ccy>EUR</Ccy>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BICFI>CCBPFRPP</BICFI>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>E2E-BATCH-A-001</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">1200.00</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BICFI>GEBABEBB</BICFI>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Bureau Verhoeven BVBA</Nm>
<PstlAdr>
<TwnNm>Gent</TwnNm>
<Ctry>BE</Ctry>
<AdrLine>Korenlei 12</AdrLine>
</PstlAdr>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>BE68539007547034</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>Facture BV-2026-0311 - maintenance</Ustrd>
</RmtInf>
</CdtTrfTxInf>
<CdtTrfTxInf>
<PmtId>
<EndToEndId>E2E-BATCH-A-002</EndToEndId>
</PmtId>
<Amt>
<InstdAmt Ccy="EUR">349.50</InstdAmt>
</Amt>
<CdtrAgt>
<FinInstnId>
<BICFI>BCITITMM</BICFI>
</FinInstnId>
</CdtrAgt>
<Cdtr>
<Nm>Rossi Forniture Srl</Nm>
<PstlAdr>
<TwnNm>Milano</TwnNm>
<Ctry>IT</Ctry>
<AdrLine>Via Torino 45</AdrLine>
</PstlAdr>
</Cdtr>
<CdtrAcct>
<Id>
<IBAN>IT60X0542811101000000123456</IBAN>
</Id>
</CdtrAcct>
<RmtInf>
<Ustrd>Fattura RF-2026-0088 - materiale</Ustrd>
</RmtInf>
</CdtTrfTxInf>
</PmtInf>
<PmtInf>
<PmtInfId>PMT-BATCH-B-NOVEMBER</PmtInfId>
<PmtMtd>TRF</PmtMtd>
<NbOfTxs>2</NbOfTxs>
<CtrlSum>1800.50</CtrlSum>
<PmtTpInf>
<SvcLvl>
<Cd>SEPA</Cd>
</SvcLvl>
</PmtTpInf>
<ReqdExctnDt>
<Dt>2026-11-20</Dt>
</ReqdExctnDt>
<Dbtr>
<Nm>Atlas Industries SA</Nm>
<PstlAdr>
<StrtNm>Avenue des Ateliers</StrtNm>
<BldgNb>18</BldgNb>
<PstCd>75011</PstCd>
<TwnNm>Paris</TwnNm>
<Ctry>FR</Ctry>
</PstlAdr>
</Dbtr>
<DbtrAcct>
<Id>
<IBAN>FR7630006000011234567890189</IBAN>
</Id>
<Ccy>EUR</Ccy>
</DbtrAcct>
<DbtrAgt>
<FinInstnId>
<BICFI>BNPAFRPP</BICFI>
</FinInstnId>
</DbtrAgt>
<ChrgBr>SLEV</ChrgBr>160 / 226 lines shown — the complete file is in the download above.
How we know these results hold
Every file in this library is run through the site's own validator on each build. The expected result stated above is asserted by an automated test — if a file stopped matching what this page claims, the build would fail. Two inherited fixtures were repaired this way before publication: three IBANs failed the mod-97 check and several names used characters outside the basic SEPA character set.
SEPA Credit Transfer (pain.001)
- pain.001.001.03 — valid credit transfer
- pain.001.001.09 — valid, hybrid address
- pain.001.001.03 — CtrlSum mismatch
- pain.001.001.03 — invalid IBAN
- pain.001.001.03 — NbOfTxs mismatch
- pain.001.001.03 — unstructured address after 2026-11-15
- pain.001.001.11 — valid, fully structured address, executed after 2026-11-15
- pain.001.001.03 — nine-character BIC
- pain.001.001.03 — accent and ampersand outside the SEPA character set
- pain.001.001.03 — 250 transfers, high-volume payroll run
- pain.001.001.03 — unstructured address, executed before 2026-11-15 (warning only)