Kennisbank
Komma's, centen en btw: waar bedragen tussen systemen scheef gaan
Een bedrag gaat tussen twee systemen op vier plekken scheef: de notatie (19,95, 19.95 of 1995), btw inclusief of exclusief, de btw-code en het moment van afronden. Het verschil is meestal één cent per order, en één cent is genoeg om een betaling niet meer automatisch te laten afletteren.
Bijgewerkt op
Hoe schrijft elk systeem een bedrag?
Hetzelfde bedrag van € 59,85 komt in zes vormen voorbij. Deze notaties zijn op 3 oktober 2026 nagelezen in de documentatie van de leverancier.
| Bron | Notatie | Voorbeeld |
|---|---|---|
| Shopify, order | tekst met een punt | "total_price": "59.85" |
| WooCommerce, order | tekst met een punt, standaard 2 decimalen | "total": "59.85" |
| Mollie, betaling | valuta plus tekst | {"currency": "EUR", "value": "59.85"} |
| Stripe, betaling | geheel getal in centen | "amount": 5985 |
| Exact Online, orderregel | getal met drijvende komma (Edm.Double) |
"AmountFC": 59.85 |
| Prijslijst van een leverancier | tekst met een komma | 59,85 of 1.249,50 |
Drie fouten komen hieruit voort.
Factor 100. Een koppeling die 5985 als euro's leest, zet € 5.985,00 op de factuur. Andersom wordt 59,85, gelezen als centen, 60 cent. De eenheid hoort daarom per veld in de mapping te staan: euro's of centen.
Punt en komma verwisseld. In 1.249,50 is de punt een scheidingsteken voor duizendtallen. Een parser die de punt als decimaalteken leest, maakt er 1,249 van of weigert de regel. Meer over dit soort bestanden staat in CSV- en Excel-bestanden van leveranciers.
Rekenen met drijvende komma. Een bedrag als 1,15 bestaat in binaire notatie niet exact. De berekening 1,15 × 100 levert 114,99999999999999 op, en wie daar een geheel getal van maakt door af te kappen, houdt 114 cent over. Een koppeling leest bedragen daarom als tekst in en rekent in centen of in een decimaal type, nooit in float.
Zo levert WooCommerce de order uit het voorbeeld verderop:
{
"number": "10482",
"currency": "EUR",
"prices_include_tax": true,
"total": "59.85",
"total_tax": "10.39",
"line_items": [
{
"sku": "KB-2210",
"quantity": 3,
"total": "49.46",
"total_tax": "10.39"
}
]
}
De prijzen in de winkel zijn inclusief btw (prices_include_tax), en toch staat het regelbedrag exclusief btw in total, met de btw apart in total_tax. De parameter dp in het verzoek bepaalt met hoeveel decimalen WooCommerce de bedragen teruggeeft; zonder die parameter zijn het er 2.
Inclusief of exclusief btw?
Een webshop voor consumenten bewaart prijzen inclusief btw. Een ERP rekent met prijzen exclusief btw. Shopify meldt per order welke van de twee geldt in het veld taxes_included, WooCommerce in prices_include_tax. Wie dat veld overslaat, boekt bij een winkel met prijzen inclusief btw 21% te veel omzet.
Het omrekenen zelf is de tweede valkuil. Een rekenvoorbeeld: Bakker Installatie B.V. bestelt 3 stuks van artikel KB-2210 voor € 19,95 per stuk, inclusief 21% btw.
| Stap | Webshop, rekent inclusief | ERP, stuksprijs op 2 decimalen | ERP, stuksprijs op 4 decimalen |
|---|---|---|---|
| Stuksprijs exclusief btw | n.v.t. | 19,95 / 1,21 = 16,49 | 19,95 / 1,21 = 16,4876 |
| Regelbedrag exclusief btw | 59,85 min 10,39 = 49,46 | 3 × 16,49 = 49,47 | 3 × 16,4876 = 49,46 |
| Btw 21% | 59,85 × 21 / 121 = 10,39 | 49,47 × 0,21 = 10,39 | 49,46 × 0,21 = 10,39 |
| Totaal | 59,85 | 59,86 | 59,85 |
De klant heeft € 59,85 betaald. De factuur uit de middelste kolom is € 59,86. De betaling dekt de factuur niet volledig en blijft in de boekhouding open staan tot iemand de cent met de hand wegboekt. Bij 400 orders per maand en een afwijking op één op de tien orders zijn dat 40 posten per maand die niet vanzelf afletteren.
Er zijn twee oplossingen, en welke past hangt af van wat het ERP in het prijsveld toelaat. De koppeling stuurt de stuksprijs met vier decimalen door, zodat de afronding pas op het regelbedrag valt. Of hij vergelijkt het ordertotaal in het ERP met total_price uit de webshop en zet het verschil op een aparte regel die naar de grootboekrekening voor afrondingsverschillen boekt. In beide gevallen is het betaalde bedrag leidend: dat staat vast, de rest is berekend.
Btw-tarief of btw-code?
De webshop kent een tarief. De boekhouding werkt met een code die bepaalt waar de omzet in de aangifte terechtkomt. Voor Nederlandse verkopen is dat één op één: 21% en 9% hebben elk een code. Bij 0% loopt het uiteen.
| Situatie | Tarief op de order | Wat de boekhouding nodig heeft |
|---|---|---|
| Verkoop in Nederland, algemeen tarief | 21% | de code voor 21% |
| Verkoop in Nederland, verlaagd tarief | 9% | de code voor 9% |
| Zakelijke klant in een ander EU-land | 0% | de code voor een intracommunautaire levering, met het btw-identificatienummer van de klant op de factuur |
| Particulier in een ander EU-land, boven het drempelbedrag | het tarief van het land van de klant | een code per land en tarief, voor de aangifte via het éénloketsysteem (OSS) |
| Verleggingsregeling | 0% | de code voor verlegd, met "btw verlegd" en het btw-identificatienummer van de klant op de factuur |
Het drempelbedrag voor afstandsverkopen binnen de EU is € 10.000 omzet per kalenderjaar. Daaronder geldt meestal Nederlandse btw, daarboven de btw van het land van de klant (Belastingdienst, nagelezen op 3 oktober 2026). Een webshop die halverwege het jaar over de drempel gaat, heeft vanaf dat moment per land een tarief en een code nodig. Wat dat voor de inrichting van de winkel betekent staat in btw voor webshops.
De codes zelf verschillen per administratie. In Exact Online is een btw-code een tekstveld (Code) met een eigen percentage en een Type: I voor inclusief, E voor exclusief, B voor alleen een grondslag en N voor geen btw. Voor OSS heeft de code een veld OssCountry. Het lage tarief kan in de webshop id 4 hebben en in het ERP code 1. De koppeling gebruikt daarom een tabel in plaats van een aanname:
belastingklasse webshop land klant btw-code ERP
standard NL alle 2
reduced-rate NL alle 1
standard BE zakelijk 7 (intracommunautair, 0%)
standard BE particulier BE21 (OSS)
zero-rate NO alle 6 (export, 0%)
Een order met een combinatie die niet in de tabel staat wordt niet geboekt op een standaardcode. Hij komt op een controlelijst, met de reden erbij.
Afronden per regel of per order?
Volgens de Belastingdienst rond je een btw-bedrag rekenkundig af op hele centen, en kies je tussen afronden per geleverd goed of dienst en afronden op het totaal. Beide methodes zijn toegestaan, zolang je er één aanhoudt. Twee systemen die elk een andere methode volgen, komen op dezelfde order verschillend uit.
Een order met drie regels exclusief btw: € 12,45, € 8,12 en € 3,31.
| Methode | Berekening | Btw |
|---|---|---|
| Per regel | 2,6145 wordt 2,61; 1,7052 wordt 1,71; 0,6951 wordt 0,70 | 5,02 |
| Op het totaal | 23,88 × 0,21 = 5,0148 | 5,01 |
De ene kant komt op € 28,90, de andere op € 28,89. Voor e-facturen ligt de methode vast: Peppol BIS Billing 3.0 rekent de btw per btw-categorie uit over de som van de regels en rondt bedragen op documentniveau af op twee decimalen. Een factuur die per regel is afgerond en via Peppol wordt verstuurd, kan daardoor op de btw-controle worden afgekeurd.
De koppeling volgt de methode van het systeem dat de factuur maakt en legt die keuze vast in de mapping. Het ordertotaal uit de webshop gaat mee als controlegetal.
Hoe komen korting en verzendkosten over?
Korting bestaat in drie vormen: een percentage, een bedrag en een vervangende nettoprijs. Shopify geeft bij elke korting aan welke het is (value_type is percentage of fixed_amount) en levert het totaal in total_discounts. WooCommerce levert per regel het bedrag voor korting (subtotal) en na korting (total), en op de order discount_total en discount_tax. Exact Online bewaart op de orderregel een UnitPrice, een NetPrice en een Discount als verhouding ten opzichte van de standaardprijs van het artikel.
Een vaste korting van € 5,00 op een order met drie regels moet over die regels worden verdeeld. € 5,00 gedeeld door 3 is € 1,6667 per regel: twee regels krijgen € 1,67 en één regel € 1,66, anders klopt het totaal niet. Stapelt een kortingscode op een staffelprijs, dan stuurt de koppeling de nettoprijs per regel door en niet het percentage, omdat het ERP het percentage opnieuw over zijn eigen basisprijs zou rekenen.
Verzendkosten zijn in Shopify en WooCommerce een eigen onderdeel van de order (shipping_lines, shipping_total en shipping_tax). In het ERP worden ze een orderregel op een vast artikel, met een eigen btw-code. Bij een order met artikelen tegen 9% en 21% verdeelt de webshop de btw op de verzendkosten soms naar rato over beide tarieven; de orderregel in het ERP heeft één code. Ook dat verschil is een of twee cent.
Welke koers geldt bij vreemde valuta?
Een order in een andere valuta heeft twee bedragen: wat de klant betaalde en wat dat in euro's waard is. Shopify levert beide in total_price_set, als presentment_money (de valuta van de klant) en shop_money (de valuta van de winkel). Exact Online bewaart ze als AmountFC (valuta van de transactie) en AmountDC (valuta van de administratie).
De vraag is welke koers het tweede bedrag bepaalt. Een order van 250,00 Zwitserse frank is bij een koers van 0,9400 frank per euro € 265,96 waard, en bij 0,9300 € 268,82. Rekent de webshop met de koers van het afrekenmoment en het ERP met de koers van de factuurdatum twee dagen later, dan verschillen order en factuur € 2,86. De ECB publiceert referentiekoersen op werkdagen rond 16:00 uur; een order van zaterdag heeft dus de koers van vrijdag. De koppeling legt vast welke bron en welke datum gelden en stuurt de koers mee met de order, zodat het ERP niet zelf een andere kiest.
Wat betekent dit voor je koppeling?
Bedragen zijn een onderdeel van elke orderkoppeling en elke prijskoppeling die wij bouwen. Per veld leggen we vast in welke eenheid het bedrag staat, of het inclusief of exclusief btw is, hoeveel decimalen meegaan en waar wordt afgerond. De btw-codes staan in een tabel die bij jouw administratie hoort.
Voor de koppeling live gaat, draait hij in een dry run op echte orders: je ziet per order het totaal uit de webshop naast het totaal dat in het ERP zou komen, en elk verschil van een cent staat in de diff. Daarna hosten en bewaken we de koppeling. Een order met een onbekende btw-combinatie of een totaal dat niet aansluit komt op de controlelijst in het dashboard en verdwijnt niet stil in de boekhouding. Vertel welke systemen je gebruikt, dan kijken we waar de bedragen bij jou uiteen lopen.
Veelgestelde vragen
Waarom wijkt de factuur één cent af van wat de klant betaald heeft?
De webshop rekent vanaf de prijs inclusief btw, het ERP vanaf de prijs exclusief btw. Wordt de stuksprijs onderweg op twee decimalen afgerond, dan telt het ERP anders op: 3 keer 16,49 plus 21% is 59,86, terwijl 3 keer 19,95 gelijk is aan 59,85. De koppeling stuurt de prijs daarom met vier decimalen door, of boekt het verschil op een aparte regel voor afrondingsverschillen.
Moet de btw per regel of per order worden afgerond?
Allebei mag. De Belastingdienst laat de keuze tussen afronden per geleverd goed of dienst en afronden op het totaalbedrag, zolang je één methode aanhoudt. Het probleem ontstaat als de webshop de ene methode gebruikt en het ERP de andere. De koppeling neemt dan de methode van het systeem dat de factuur maakt en controleert het totaal tegen het betaalde bedrag.
Wat is het verschil tussen een btw-tarief en een btw-code?
Een tarief is een percentage: 21, 9 of 0. Een btw-code is de sleutel in de boekhouding die bepaalt in welke rubriek van de aangifte de omzet terechtkomt. Een levering aan een zakelijke klant in België, een export naar Noorwegen en een verlegde levering hebben alle drie 0% btw en elk een eigen code.
Hoe komen verzendkosten in het ERP?
In Shopify en WooCommerce zijn verzendkosten een eigen onderdeel van de order (shipping_lines), met een eigen btw-bedrag. De meeste ERP-systemen kennen dat onderdeel niet. De koppeling zet de verzendkosten dan als orderregel op een vast artikel, bijvoorbeeld VERZEND, met de btw-code die bij de order hoort.
Welke wisselkoers gebruikt een koppeling bij een order in vreemde valuta?
Dat wordt per koppeling vastgelegd: de koers die de webshop bij het afrekenen heeft gebruikt, of de koers van de orderdatum in het ERP. Shopify levert beide bedragen mee in total_price_set, zodat de gebruikte koers uit de order zelf volgt. De factuur en de betaling moeten met dezelfde koers worden geboekt, anders blijft er een koersverschil open staan.
Vertel wat je nodig hebt
Vertel welke systemen je gebruikt en wat je wilt verbeteren. Je krijgt binnen één werkdag een persoonlijk antwoord. We helpen je de werkzaamheden helder te krijgen en spreken de prijs en planning af voordat je iets toezegt.
- Je weet de prijs en de doorlooptijd voordat je iets toezegt
- Wij zoeken uit welke koppeling het werk uit handen neemt
- Wij verzorgen de bouw, hosting, bewaking en het onderhoud
- Je team krijgt minder overtypwerk en minder uitzoekwerk