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.