Incassobestand: het SEPA XML-formaat (pain.008) in de praktijk

2026-04-30

Je administratie exporteert een keurige Excel-lijst, en de bank weigert het bestand. Of je boekhoudpakket maakt iets wat “bijna” SEPA is, maar niet goed genoeg voor de validatie van de bank. Of je hebt een incassoproces geërfd dat draait op CSV’s, handmatige correcties en die ene collega die weet welke kolom je moet aanpassen voor de upload.

Dat is heel normaal. Een incassobestand voelt technischer dan nodig. Aan jouw kant heb je klantnamen, machtigingskenmerken, incassodatums en bedragen. Aan de kant van de bank is er een strikte XML-structuur: pain.008. Tussen die twee werelden ontstaan de meeste fouten.

Het goede nieuws: het formaat is te leren zodra je het niet meer ziet als mysterieuze bankcode, maar als een gestructureerde paklijst. Elk gegeven heeft een vaste plek met vaste regels. Klopt de lijst, dan accepteert de bank het bestand.

Wat is een SEPA incassobestand?

SEPA (Single Euro Payments Area) is het gezamenlijke kader waarmee banken en bedrijven in de deelnemende landen dezelfde regels voor eurobetalingen gebruiken. In plaats van een eigen nationaal formaat per land, zoals ClieOp03 vroeger in Nederland, spreekt iedereen dezelfde taal.

Voor incasso’s heet die taal pain.008, een XML-bericht volgens de ISO 20022-standaard. Het vertelt de bank wie de incassant is, welke machtigingen worden gebruikt, bij welke debiteuren wordt geïncasseerd en hoe elke transactie is te herkennen. De versie die veel banken gebruiken is pain.008.001.02.

Kaart van Europa met iconen voor uniforme digitale betalingen volgens de SEPA-standaard.

Vuistregel: incasseer je via SEPA, dan is XML geen optionele export. Het is de versie van je incasso-opdrachten die de bank kan lezen.

Waarom XML anders is dan een spreadsheet

Een spreadsheet is plat, XML is hiërarchisch. In Excel lijkt elke regel op zichzelf te staan. In een incassobestand hoort sommige informatie bij het hele bestand, sommige bij een batch binnen het bestand en sommige bij één debiteur. Daar lopen veel administraties vast.

XML dwingt ook meer discipline af:

  • datums moeten in het juiste formaat staan (JJJJ-MM-DD);
  • kenmerken moeten uniek zijn waar dat vereist is;
  • verplichte velden mogen niet leeg zijn;
  • tekens die in Excel onschuldig lijken, kunnen het bestand breken.

Die strengheid is nuttig: banken kunnen elk bestand op dezelfde manier controleren en verwerken.

De opbouw van het incassobestand (pain.008)

Een pain.008-bestand begrijp je het makkelijkst als een archiefkast met drie lades. De bovenste lade bevat gegevens over de hele aanlevering, de middelste groepeert incasso’s in een batch en de onderste bevat de afzonderlijke incasso’s. Zet je een gegeven in de verkeerde lade, dan ziet de bank dat niet als een detail: het bestand kan in zijn geheel worden geweigerd.

Opbouw van een SEPA XML-bestand met group header, betalingsinformatie en transactiegegevens.

Group Header (GrpHdr)

De envelop om het hele bestand. Hier staan onder meer het berichtkenmerk <MsgId>, de aanmaakdatum en -tijd <CreDtTm>, het aantal transacties, het totaalbedrag en de naam van de partij die het bestand aanlevert. Dit is geen beschrijvende bijzaak: banken gebruiken deze waarden om het bestand te herkennen en dubbele aanleveringen te detecteren. Kenmerken zoals MsgId mogen maximaal 35 tekens lang zijn.

Let ook op de bestandsnaam. Incasso juni DEFINITIEF nieuw.xml is een slechte gewoonte; 20260630_INC_BATCH01.xml is veiliger, mits het voldoet aan de regels van je bank.

Payment Information (PmtInf)

Eén batch binnen het bestand, met transacties die dezelfde kenmerken delen: <PmtInfId> als batchkenmerk, <ReqdColltnDt> als gewenste incassodatum, je gegevens als incassant (inclusief je Incassant ID), het schema (Core of B2B) en het sequence type (FRST, RCUR, OOFF of FNAL).

Waarom staat de datum niet gewoon per regel? Omdat XML gedeelde instructies efficiënt en eenduidig groepeert. Incasso’s met dezelfde incassant, datum en schema-instellingen horen in één blok.

Kernpunt: een goede batch is saai. Eén duidelijk kenmerk, één incassodatum en geen gemengde schema’s of sequence types.

Direct Debit Transaction Information (DrctDbtTxInf)

De afzonderlijke incasso’s: <EndToEndId> als transactiekenmerk, <InstdAmt> voor het bedrag, <MndtId> voor het machtigingskenmerk met de datum van ondertekening, naam en IBAN van de debiteur en een omschrijving. Dit deel lijkt het meest op je spreadsheetregels: één klant, één bedrag, één machtiging, één incasso.

De kenmerken die het vaakst worden verward

XML-element Wat het identificeert Betekenis voor je bedrijf
<MsgId> Het hele bericht Het label van het aangeleverde bestand
<PmtInfId> Eén batch in het bericht Een groep incasso’s
<EndToEndId> Eén transactie Het kenmerk dat één incasso volgt tot je afschrift
<MndtId> De machtiging van de klant De toestemming om bij die debiteur te incasseren

Ziet alles er compleet uit en weigert de bank het bestand toch? Kijk dan eerst naar deze kenmerken.

Van Excel naar een geldig incassobestand

De meeste administraties beginnen niet met XML, maar met een spreadsheet met kolommen als Klantnaam, IBAN, Bedrag, Machtigingskenmerk, Incassodatum en Factuurnummer. Leesbaar en flexibel, maar ook het punt waar eerste aanleveringen misgaan.

Het omzetten is in de kern een koppelingsklus: elke kolom krijgt het juiste XML-element.

Kolom in spreadsheet SEPA XML-element
Klantnaam <Dbtr><Nm>
IBAN <DbtrAcct><Id><IBAN>
Bedrag <InstdAmt Ccy="EUR">
Machtigingskenmerk <MndtRltdInf><MndtId>
Datum machtiging <MndtRltdInf><DtOfSgntr>
Factuurnummer <PmtId><EndToEndId>
Incassodatum <ReqdColltnDt> (op batchniveau)
Omschrijving <RmtInf><Ustrd>

Finance zegt “alle gegevens staan erin”, IT zegt “de structuur klopt niet”. Ze hebben allebei gelijk. Een vereenvoudigd voorbeeld van het resultaat:

<Document xmlns="urn:iso:std:iso:20022:tech:xsd:pain.008.001.02">
  <CstmrDrctDbtInitn>
    <GrpHdr>
      <MsgId>INC20260701BATCH01</MsgId>
      <InitgPty>
        <Nm>Voorbeeld BV</Nm>
      </InitgPty>
    </GrpHdr>
    <PmtInf>
      <PmtInfId>PMT20260701</PmtInfId>
      <ReqdColltnDt>2026-07-01</ReqdColltnDt>
      <DrctDbtTxInf>
        <PmtId>
          <EndToEndId>FACT-2026-001</EndToEndId>
        </PmtId>
        <InstdAmt Ccy="EUR">125.00</InstdAmt>
        <DrctDbtTx>
          <MndtRltdInf>
            <MndtId>MACHT-1001</MndtId>
            <DtOfSgntr>2025-11-03</DtOfSgntr>
          </MndtRltdInf>
        </DrctDbtTx>
        <Dbtr>
          <Nm>Bakkerij De Molen BV</Nm>
        </Dbtr>
        <DbtrAcct>
          <Id>
            <IBAN>NL91ABNA0417164300</IBAN>
          </Id>
        </DbtrAcct>
        <RmtInf>
          <Ustrd>Servicekosten juni</Ustrd>
        </RmtInf>
      </DrctDbtTxInf>
    </PmtInf>
  </CstmrDrctDbtInitn>
</Document>

Een echt bestand bevat meer verplichte velden, maar het principe is duidelijk: één spreadsheetregel wordt één transactieblok, gedeelde gegevens zoals de incassodatum staan hoger in de batch. Een stap-voor-stapuitleg vind je in CSV naar SEPA XML.

Een betrouwbare omzetting doet meer dan kolommen verplaatsen. Ze controleert ook of machtigingskenmerken aanwezig zijn en het sequence type klopt, of namen geen problematische tekens bevatten, of datums consequent zijn opgemaakt en of kenmerken uniek zijn. Kopiëren en plakken in een sjabloon werkt voor één zorgvuldig bewaakte batch, maar breekt zodra de export verandert of een collega een ander bestand gebruikt.

Waarom je incassobestand wordt geweigerd

Een geweigerd bestand komt meestal terug met een cryptische melding. Werk vanuit drie soorten fouten: formaatfouten, gegevensfouten en machtigingsfouten.

Symptoom Waarschijnlijke oorzaak Eerste actie
Hele bestand direct geweigerd Schemafout of verboden tekens Valideer het XML-bestand voor het uploaden
Eén batch geweigerd Batchkenmerken of datumlogica Controleer Group Header en Payment Information
Enkele transacties geweigerd Gegevens per transactie Controleer machtiging, IBAN en kenmerken

Rekeningfouten (AC01, AC04). AC01 betekent een onjuist rekeningnummer, AC04 een opgeheven rekening. Begin bij het bronrecord, niet in de XML-editor. Controleer of de IBAN volledig en actueel is en valideer opnieuw voordat je een nieuw bestand maakt. Staat een klant goed in je CRM maar fout in het bestand, dan zit het probleem meestal in de koppeling of export.

Structuurfouten. De gegevens kloppen, maar het bestand niet: een ontbrekende eindtag, een element op het verkeerde niveau, een verplicht veld dat ontbreekt. Daar kom je niet uit door naar de XML te staren. Gebruik een validator die het schema kent, of een generator die de hiërarchie afdwingt.

Verkeerd sequence type. Is de eerste incasso op een machtiging verkeerd gemarkeerd, dan kan de bank weigeren, ook al kloppen debiteur, bedrag en datum. Leg vast dat finance de status van de machtiging beheert, het systeem die status omzet naar het juiste sequence type en iemand de uitzonderingen nakijkt voor het uploaden.

Speciale tekens. Spreadsheets vergeven veel, XML niet. Een “&” in een naam, apostroffen in kenmerken of tekst die uit een e-mail of PDF is gekopieerd, kan de verwerking breken. Schoon vrije tekstvelden op vóór het genereren, niet achteraf in het XML-bestand.

Machtigingen die niet aansluiten. Klopt het machtigingskenmerk niet met wat er bij de machtiging hoort, of is bij een migratie een verplicht veld verloren gegaan, dan zit het probleem buiten het bestand. Treden afwijzingen vooral op na een proceswijziging, dan heeft de overstap gaten veroorzaakt.

Vuistregel: een netjes uitziend XML-bestand is geen bewijs van geldigheid. Banken controleren structuur, veldregels en soms ook de inhoudelijke logica tegelijk.

Valideren en aanleveren bij je bank

Het bestand maken is de helft. Banken voeren hun eigen controles uit, vergelijken kenmerken, kijken naar de bestandsnaam en hanteren regels die bovenop het SEPA-schema komen. Loop daarom voor elke upload deze checklist af:

  • Valideer de structuur tegen het pain.008-schema. Heb je geen validator bij de hand, gebruik dan de gratis SEPA-incasso XML-validator.
  • Controleer kenmerken op uniciteit, zodat berichten en batches niet per ongeluk dubbel zijn.
  • Check lengtes en tekens. Wat in Excel past, kan de limiet overschrijden of tekens bevatten die de bank weigert.
  • Vergelijk totalen: aantal transacties en totaalbedrag moeten aansluiten op je bronlijst.
  • Bevestig incassodatum en schema. Kleine velden met grote gevolgen.

Upload je het bestand in de zakelijke omgeving van ING, Rabobank, ABN AMRO of een andere bank, let dan op drie momenten: de acceptatie van het bestand, de status van de batch en uitzonderingen per transactie. Weigert de bank direct, ga terug naar de validatie in plaats van te gokken.

Bewaar van elke run drie versies: de bronexport (wat je wilde incasseren), het XML-bestand (wat je hebt aangeleverd) en de reactie van de bank (wat is geaccepteerd of geweigerd). Zo los je discussies snel op.

Het incassobestand automatisch genereren

Handmatig werken gaat goed zolang de volumes laag zijn, één persoon de eigenaardigheden kent en de brongegevens zelden veranderen. Het breekt zodra je groeit of meerdere mensen incasso’s voorbereiden.

Digitale werkplek met schermen vol geautomatiseerde workflowgegevens.

Automatisering verschuift het moment waarop je fouten vindt: niet na de afwijzing door de bank, maar vóór het bestand ontstaat. Er zijn twee routes. Finance-teams die al met Excel, CSV of JSON werken, zetten hun bestand om via een interface. Technische teams laten hun ERP of eigen platform bestanden rechtstreeks genereren via een API. Het formaat verandert niet, alleen hoe consequent je het maakt.

Met GenerateSEPA upload je je eigen Excel- of CSV-bestand, koppel je de kolommen één keer aan de SEPA-velden en controleert de tool de IBAN’s voordat het pain.008-bestand wordt aangemaakt. Voor koppelingen met je eigen systemen is er een REST API.

Vergeet het afletteren niet. Rekeninginformatie in het XML-formaat camt.053 bevat meer gestructureerde gegevens dan het oudere MT940, inclusief redencodes bij storneringen. Dat maakt automatisch afletteren eenvoudiger. Meer over de volledige keten lees je in SEPA-incasso’s automatisch innen.

Het pain.008-formaat is bewust streng. Je kunt die strengheid elke maand met de hand opvangen, of een werkwijze bouwen die het elke keer betrouwbaar doet. Probeer GenerateSEPA 7 dagen gratis en zet je eerstvolgende incassolijst om in een geldig incassobestand.


Veelgestelde vragen

Wat is een incassobestand?
Een incassobestand is een XML-bestand in het formaat pain.008 waarmee je een batch SEPA-incasso's bij je bank aanlevert. Het is opgebouwd uit een Group Header, één of meer Payment Information-blokken en de afzonderlijke transacties. Zo kunnen alle banken in de SEPA-zone de opdrachten op dezelfde manier verwerken.
Waarom weigert mijn bank het SEPA XML-bestand?
De meest voorkomende oorzaken zijn ontbrekende verplichte velden, dubbele kenmerken, verboden tekens zoals een losse ampersand, een verkeerd sequence type of een machtigingskenmerk dat niet klopt. Valideer het bestand altijd tegen het pain.008-schema voordat je het uploadt.
Hoe maak ik een incassobestand van een Excel-bestand?
Je koppelt elke kolom aan het juiste XML-element, bijvoorbeeld de klantnaam aan Dbtr/Nm en de IBAN aan DbtrAcct/Id/IBAN, en vult de gegevens op batchniveau aan zoals je Incassant ID en de incassodatum. Een conversietool zorgt dat de hiërarchie klopt en het bestand de validatie van de bank doorstaat.
Wat is het verschil tussen MsgId, PmtInfId en EndToEndId?
MsgId identificeert het hele bestand, PmtInfId één batch binnen het bestand en EndToEndId één afzonderlijke incasso. Elk kenmerk moet uniek zijn op zijn eigen niveau. Het verwarren van deze kenmerken is een veelvoorkomende reden voor afwijzing.

Gerelateerde artikelen