Een SaaS-bedrijf in Europa heeft vier boekhoudkundige problemen die een winkel of een bureau niet heeft: de omzet komt binnen voordat ze is verdiend, de betaalprovider betaalt uit in batches die niet overeenkomen met facturen, de btw-behandeling van een abonnement hangt af van waar de klant zich bevindt en of het een onderneming is, en elk van die feiten staat in uw eigen database en niet in een spreadsheet. Het antwoord is niet meer uren boekhouden. Het is een grootboek dat klanten, facturen en betalingen via een API uit uw applicatie ontvangt, het btw-oordeel per factuur vastlegt en de belastingaangifte aan een professional overlaat.
Omzetverantwoording: een jaarabonnement is geen jaaromzet
Wanneer een klant € 1.200 vooruitbetaalt voor een jaar, hebt u € 1.200 aan liquide middelen en € 1.200 aan een verplichting die uitgestelde omzet heet; u verdient daarvan elke maand € 100 naarmate u de dienst levert. Dat is de basisregel achter IFRS 15 en de nationale equivalenten ervan, en daarom ziet een SaaS-balans er vreemd uit voor oprichters die alleen ooit naar een bankrekening hebben gekeken.
Het kernbeginsel van IFRS 15 is dat "een entiteit omzet verantwoordt om de overdracht van beloofde goederen of diensten aan de klant weer te geven voor een bedrag dat de vergoeding weerspiegelt waarop de entiteit verwacht recht te hebben". De standaard beschrijft vijf stappen: het contract identificeren, de prestatieverplichtingen identificeren, de transactieprijs bepalen, deze toerekenen en omzet verantwoorden wanneer — of naarmate — elke verplichting is vervuld. Een abonnement wordt gewoonlijk over een periode vervuld, dus de omzet wordt over de abonnementsperiode verantwoord.
Welk kader u daadwerkelijk toepast, is een zaak voor uw accountant. Kleine ondernemingen in Duitsland, Frankrijk, België en Polen rapporteren normaal gesproken volgens nationale verslaggevingsregels, niet volgens IFRS, en voor kleine entiteiten bestaan er enkele vereenvoudigingen. Het mechanisme is in alle gevallen hetzelfde: vooruitontvangen geld is eerst een verplichting, pas later omzet. Wat verandert, zijn de details — of een installatievergoeding een afzonderlijke verplichting is, hoe u een korting voor jaarlijkse betaling behandelt, wat een gratis maand doet. Die punten vereisen professionele bevestiging.
- Uitgestelde omzet (contractverplichting)
- Geld dat is ontvangen voor een dienst die u nog verschuldigd bent. Een verplichting op de balans, die over de dienstperiode vrijvalt naar omzet.
- Nog te factureren omzet (contractactief)
- Dienst die u hebt geleverd maar nog niet gefactureerd — verbruiksgebaseerde abonnementen die achteraf worden gefactureerd, leveren dit aan het einde van de maand op.
- MRR / ARR
- Managementcijfers, geen boekhoudkundige cijfers. Nuttig voor investeerders; het is niet wat in de jaarrekening terechtkomt.
Stripe-uitbetalingen zijn geen facturen
Een Stripe-uitbetaling is één bankoverschrijving die veel betalingen bundelt, minus terugbetalingen en kosten, na een afwikkelingstermijn. Uw omzet bestaat uit de afzonderlijke betalingen en de facturen erachter; de uitbetaling is alleen de manier waarop het geld bij u terechtkwam. Boek ze als twee verschillende dingen.
Stripes eigen documentatie is duidelijk over de volgorde: "Stripe stuurt geld van uw beschikbare saldo naar uw bankrekening als uitbetalingen", volgens het uitbetalingsschema van het account, en "het moment waarop geld beschikbaar komt, hangt af van uw afwikkelingstermijn". Een betaling verschijnt eerst als een saldo in behandeling "minus eventuele Stripe-kosten" en komt later beschikbaar. Het aanbevolen uitgangspunt voor afletteren is de balanstransactie, die Stripe aanmaakt "voor elk type transactie dat het saldo van uw Stripe-account binnenkomt of verlaat" — typen zoals charge, refund, stripe_fee, payout en currency_conversion.
Een schone aanpak behandelt Stripe als een tussenrekening:
- Wanneer een klant wordt belast, legt u de verkoop vast: vordering (of rechtstreeks de Stripe-tussenrekening) tegenover omzet of uitgestelde omzet, met de btw-behandeling die voor die klant is bepaald.
- Leg de kosten van Stripe vast als een uitgave tegenover dezelfde tussenrekening, op basis van de balanstransactie en niet van een schatting.
- Wanneer de uitbetaling in de bankkoppeling verschijnt, boekt u het uitbetalingsbedrag van de tussenrekening over naar de bank. Als de tussenrekening niet op nul uitkomt, ontbreekt er iets — een terugbetaling, een geschil, een valutaomrekening.
Of u voor elke kaartbetaling een formele factuur uitreikt, hangt af van de klant. Voor een zakelijke klant in de EU is een factuur vereist voor btw-doeleinden; voor een consument vaak niet, al reiken veel SaaS-bedrijven er toch een uit omdat klanten erom vragen. De factuur is het document dat het btw-oordeel draagt; de Stripe-ontvangstbevestiging is geen btw-factuur, tenzij ze alles bevat wat een btw-factuur nodig heeft.
EU-btw op een abonnement: B2C gebruikt OSS, B2B gebruikt de verlegging
Een online geleverd softwareabonnement is een "langs elektronische weg verrichte dienst". Verkocht aan een consument in een ander EU-land wordt hij belast waar de consument woont; verkocht aan een btw-geregistreerde onderneming in een ander EU-land wordt hij belast waar de onderneming is gevestigd, en die onderneming voldoet de btw zelf onder de verleggingsregeling. Twee klanten die dezelfde € 20 betalen, kunnen dus vier verschillende btw-uitkomsten opleveren.
De samenvatting van de Commissie over de plaats van de dienst noemt de drie regels die hier van belang zijn. Voor B2B-diensten is "de plaats van belastingheffing de plaats waar de afnemer is gevestigd" (artikel 44 van de btw-richtlijn). Voor B2C-diensten is de standaard "de plaats waar de dienstverrichter is gevestigd" (artikel 45) — maar "B2C-telecommunicatie-, omroep- en elektronische diensten worden belast waar de afnemer woont" (artikel 58). Een SaaS-verkoop aan een consument wordt dus belast tegen het nationale tarief van de consument, niet tegen het uwe.
27 verschillende nationale tarieven aan consumenten aanrekenen zou normaal gesproken 27 registraties betekenen. De One Stop Shop (éénloketsysteem) vermijdt dat: het is een optionele regeling, gestart op 1 juli 2021, waarbij een onderneming die in één lidstaat is geregistreerd de btw die in alle andere lidstaten verschuldigd is in één kwartaalaangifte aangeeft en betaalt. De OSS dekt onder meer "grensoverschrijdende diensten aan niet-belastingplichtigen". Er bestaat een jaarlijkse drempel van EUR 10.000 voor grensoverschrijdende B2C-TBE-diensten — daaronder mag een leverancier in zijn eigen land blijven belasten — en "de OSS-regelingen zijn optioneel voor belastingplichtigen". Of OSS, de drempel of een lokale registratie de juiste keuze is voor uw bedrijf, vereist professionele bevestiging.
| Klant | Waar belast | Wie de btw betaalt | Wat de factuur toont |
|---|---|---|---|
| Onderneming in uw eigen land | Uw land | U rekent aan en draagt af | Standaardtarief |
| Btw-geregistreerde onderneming in een ander EU-land | Land van de klant (art. 44) | Klant, onder de verleggingsregeling | Geen btw; beide btw-nummers; een vermelding "btw verlegd" |
| Consument in een ander EU-land | Land van de consument (art. 58) | U, via OSS of een lokale registratie | Nationaal tarief van de consument |
| Onderneming of consument buiten de EU | Doorgaans buiten het toepassingsgebied van de EU-btw | Hangt af van het bestemmingsland | Geen EU-btw; lokale regels kunnen van toepassing zijn |
De verlegging berust erop dat de koper werkelijk een belastingplichtige is. VIES, het VAT Information Exchange System van de Commissie, "stelt ondernemingen in staat snel bevestiging te krijgen van de btw-nummers van hun handelspartners". Dezelfde pagina beperkt wat een controle bewijst: de gegevens "worden verkregen uit databanken van de lidstaten waarover de diensten van de Commissie geen controle hebben", en een bevestiging "geeft op zichzelf geen recht om intracommunautaire leveringen van btw vrij te stellen". Controleer het nummer op het moment van verkoop, bewaar het resultaat bij de factuur en houd bewijs bij van waar de klant zich bevindt.
Terugbetalingen, creditnota's en geschillen
Een terugbetaling is geen verwijderde factuur. In de EU wordt een gefactureerde verkoop gecorrigeerd met een creditnota die naar de oorspronkelijke factuur verwijst, zodat beide documenten blijven bestaan en de btw in de juiste periode kan worden gecorrigeerd. De Stripe-terugbetaling is dan de betaling van die creditnota.
- Volledige terugbetaling binnen dezelfde btw-periode — creditnota voor het volledige bedrag, terugbetaling daartegenover vastgelegd, netto-effect nul.
- Gedeeltelijke terugbetaling — creditnota voor het terugbetaalde deel; de uitgestelde omzet voor de geannuleerde maanden valt vrij en wordt niet als omzet verantwoord.
- Chargeback / geschil — Stripe houdt het bedrag in als een
adjustment-balanstransactie; behandel het als een terugbetaling totdat het geschil is beslecht, en draai het terug als u wint. - Mislukte terugbetaling — Stripe stort het geld terug op uw saldo (
refund_failure); de creditnota blijft staan, de betalingskant wordt heropend.
Meerdere valuta: welke koers, en wanneer
Als u prijzen in EUR, USD en GBP hanteert, heeft uw grootboek nog steeds één rapporteringsvaluta, en elke factuur in vreemde valuta wordt omgerekend tegen de koers op de factuurdatum. Het verschil tussen die koers en de koers waartegen het geld daadwerkelijk binnenkomt, is een koerswinst of -verlies, dat afzonderlijk van de omzet wordt geboekt.
Stripe voegt een laag toe: een USD-betaling die naar een EUR-bankrekening wordt uitbetaald, wordt door Stripe omgerekend, en de omrekening verschijnt als een eigen balanstransactie (currency_conversion, met waar van toepassing een stripe_fx_fee). Het gerealiseerde verschil is de kloof tussen uw omrekening op de factuurdatum en de omrekening van Stripe bij afwikkeling. Openstaande vorderingen in vreemde valuta worden aan het einde van het jaar gewoonlijk herrekend tegen de slotkoers, wat een ongerealiseerd verschil oplevert; de behandeling hangt af van uw verslaggevingsregels en vereist professionele bevestiging. Een uitgebreidere behandeling staat op de pagina meerdere bedrijven, meerdere valuta.
Wat u via een API automatiseert, en wat niet
Automatiseer de gebeurtenissen die uw applicatie al kent: een klant meldt zich aan, een abonnementsfactuur is verschuldigd, een betaling slaagt, een terugbetaling wordt uitgevoerd. Automatiseer niet de beoordelingen: welke btw-regeling op een grensgeval van toepassing is, hoe u een gebundelde prijs toerekent, wanneer u een vordering afschrijft.
Een minimale integratie heeft drie stromen. Uw app maakt de klant aan in het grootboek met land en btw-nummer. Wanneer Stripe (of uw eigen factureringslogica) een abonnementsfactuur produceert, maakt uw app het overeenkomstige conceptfactuur aan in het grootboek, dat op basis van de feiten de btw-behandeling bepaalt en het document valideert. Wanneer Stripe een geslaagde betaling meldt, legt uw app de betaling vast. Stripes webhookhandleiding legt uit waarom de laatste stap idempotent moet zijn: "webhook-eindpunten kunnen af en toe dezelfde gebeurtenis meer dan één keer ontvangen", en Stripe "garandeert niet dat gebeurtenissen worden afgeleverd in de volgorde waarin ze zijn gegenereerd". Het grootboek waarnaar u schrijft, heeft aan zijn kant dezelfde bescherming nodig — een idempotentiesleutel op elke schrijfbewerking.
Hoe KRONENWERK hiermee omgaat
KRONENWERK is een grootboek met dubbel boekhouden, facturatie, creditnota's, bankkoppelingen en een openbare API, gebouwd voor bedrijven in Duitsland, Frankrijk, België, Polen (beperkt), Canada en de Verenigde Staten. Voor een SaaS-bedrijf zijn de relevante onderdelen het btw-oordeel, de API en de webhooks. Ondersteund met beperkingen
- Btw-oordeel per factuur. Op basis van het land van verkoper en koper, of de koper een onderneming of een consument is, en het soort prestatie, krijgt elke factuur een oordeel: standaard, nultarief, vrijgesteld, verlegd, buiten toepassingsgebied, of "invoer vereist" / "professionele bevestiging vereist". Btw-nummers van kopers worden bij uitreiking gecontroleerd via VIES en het oordeel wordt bij de factuur opgeslagen. KRONENWERK gokt niet.
- Klanten, facturen en betalingen via de API. De API op
https://kronenwerk.org/api/extern/v1accepteertPOST /customers,POST /invoices/draftsenPOST /transactions, elk met eenIdempotency-Key-header. Concepten worden na validatie in het product uitgereikt; de API reikt niet rechtstreeks wettelijke facturen uit. Zie een SaaS koppelen en de facturatie-API. - Webhooks. Ondertekende leveringen voor
invoice.issued,invoice.paid,invoice.cancelled,purchase.recordedenpayment.recorded, met herhaalpogingen en eenIdempotency-Keyper gebeurtenis. - Bankkoppelingen. Europese bankrekeningen worden gekoppeld via Enable Banking, Canadese en Amerikaanse rekeningen via Plaid, zodat de Stripe-uitbetaling in het grootboek verschijnt om te worden afgeletterd.
- Meerdere valuta en meerdere bedrijven. Facturen in vreemde valuta, één grootboek per bedrijf, één API-sleutel per bedrijf.
Veelgestelde vragen
Moet ik voor elke kaartbetaling een factuur uitreiken?
Voor een zakelijke klant in de EU wel — voor de meeste B2B-prestaties is een factuur vereist voor btw-doeleinden. Voor consumenten zijn de regels soepeler, maar een document dat de btw-behandeling draagt, blijft de veiligste vastlegging. Of een vereenvoudigde factuur volstaat, vereist professionele bevestiging.
Mag ik aan elke consument in de EU de btw van mijn eigen land aanrekenen?
Alleen zolang uw grensoverschrijdende B2C-verkopen van elektronische diensten onder de jaarlijkse drempel van EUR 10.000 blijven, en alleen als u er niet van afziet. Boven de drempel geldt het nationale tarief van de consument en is de OSS de gebruikelijke manier om dat aan te geven.
Wat als het btw-nummer van de klant niet door de VIES-controle komt?
Pas de verlegging niet toe op basis van een mislukte controle. Behandel de klant als consument totdat een geldig nummer wordt verstrekt, of vraag om ander bewijs van de zakelijke status. Bewaar het VIES-resultaat in beide gevallen bij de factuur.
Importeert KRONENWERK mijn Stripe-transacties?
Niet rechtstreeks. Uitbetalingen komen binnen via de bankkoppeling; afzonderlijke betalingen, kosten en terugbetalingen worden door uw applicatie via de API of handmatig vastgelegd. Een Stripe-connector maakt vandaag geen deel uit van het product.
Berekent KRONENWERK uitgestelde omzet?
Nee. Het legt de factuur en de betaling vast; de maandelijkse vrijval van uitgestelde omzet naar omzet is een transactie die u of uw integratie boekt. Uw accountant bepaalt het schema.
Bronnen
- European Commission — One Stop Shop: overview — geraadpleegd op
- European Commission — Where to tax: place of taxable transactions — geraadpleegd op
- European Commission — VIES (VAT Information Exchange System) — geraadpleegd op
- IFRS Foundation — IFRS 15 Revenue from Contracts with Customers — geraadpleegd op
- Stripe documentation — Receive payouts — geraadpleegd op
- Stripe documentation — Balance transaction types — geraadpleegd op
- Stripe documentation — Receive Stripe events in your webhook endpoint — geraadpleegd op
- KRONENWERK developer documentation — geraadpleegd op