SEPA Payments
Pay multiple suppliers in one batch by uploading a SEPA XML file to your
bank's online portal — much faster than entering each transfer manually,
and the bank's checks happen client-side before money moves.
This module generates PAIN.001.001.03 XML (the current SEPA Credit
Transfer schema) from a Payment Order, validates IBANs, looks up BIC codes
for Dutch banks automatically, and attaches the resulting file to the
Payment Order for download.
When to use this
- Batch supplier payments — you have 10 Purchase Invoices due, you want
to pay all of them on Friday in one bank upload. - Salary runs if you're not on a payroll provider — single XML, one bank
upload, dozens of net-salary credits. - Refunds to Customers that don't go via Mollie / your payment provider.
What it does not do
- SEPA Direct Debit (SDD) — not yet implemented. You can still create a
Payment Order for direct debits but the XML generator will reject it.
Use your bank's own SDD portal for now. - Cross-currency — SEPA is EUR only. Non-EUR payments still go through
ERPNext's standard payment flow, just not through this XML. - Real-time / instant SEPA — this generates a batch file; your bank may
offer instant transfers separately.
Creating a SEPA batch
- Settle individual Payment Entries first. Each Purchase Invoice gets
its Payment Entry created and saved (but not submitted) — these reference
the supplier's bank details. - Create a Payment Order (Accounts → Payment Order → New). Pick the
company bank account that will be debited. - Add references — pick the saved Payment Entries that should be part
of this batch. - Save. The Payment Order form now shows a Generate SEPA XML
button (added by NL Localization when the country is Netherlands). - Click Generate SEPA XML. The module validates everything, then
attaches the file. You'll see the result either as an attachment or as
an error toast pointing at the offending field. - Download the file from the Attachments sidebar.
- Upload to your bank's portal — every Dutch bank's business portal
has a "SEPA batch upload" page. The bank validates the schema, shows you
the per-line totals, and asks you to confirm.
What gets validated
The generator refuses to produce an XML file unless every prerequisite is
met — the bank would reject it anyway, this just gives you the error first:
- Debtor IBAN (the company bank account) — present, mod-97 checksum valid.
- Debtor BIC — auto-filled from the IBAN if the bank is recognised
(ABN AMRO, ING, Rabobank, Triodos, Knab, bunq, Bunq, ASN, SNS, RegioBank,
Volksbank). If your bank isn't on the list, set BIC manually on the
Company bank account. - Creditor IBAN per Payment Entry — present, mod-97 checksum valid.
- Amounts — positive, EUR.
- End-to-end reference — each payment entry gets a unique reference so
the bank statement reconciliation links back later.
If you hit a validation error, fix the offending Supplier / Payment Entry
and click Generate SEPA XML again — the file regenerates from scratch.
Reconciling once paid
After uploading to the bank and the batch settles, the Bank Reconciliation
Tool (or the advanced_bank_reconciliation app if installed) will pick
up each line from the bank statement and match it to the corresponding
Payment Entry via the end-to-end reference baked into the XML.
File location
The XML attaches to the Payment Order document under Attachments in the
sidebar. It's also archived in the File List so you can re-download later
for audit purposes.