Une entreprise SaaS en Europe a quatre problèmes comptables qu'un commerce ou une agence n'a pas : le chiffre d'affaires est encaissé avant d'être acquis, le prestataire de paiement reverse les fonds par lots qui ne correspondent pas aux factures, le traitement TVA d'un abonnement dépend du pays du client et de sa qualité d'assujetti ou non, et chacun de ces faits vit dans votre propre base de données plutôt que dans un tableur. La réponse n'est pas davantage d'heures de comptabilité. C'est un grand livre qui reçoit les clients, les factures et les paiements de votre application par une API, qui enregistre le verdict TVA par facture et qui laisse la déclaration fiscale à un professionnel.
Reconnaissance du revenu : un abonnement annuel n'est pas un chiffre d'affaires annuel
Lorsqu'un client paie 1 200 € pour une année d'avance, vous détenez 1 200 € de trésorerie et 1 200 € d'une dette appelée produits constatés d'avance ; vous en acquérez 100 € chaque mois au fur et à mesure que vous fournissez le service. C'est la règle de base qui sous-tend IFRS 15 et ses équivalents nationaux, et c'est pourquoi le bilan d'un SaaS paraît étrange aux fondateurs qui n'ont jamais regardé qu'un compte bancaire.
Le principe fondamental d'IFRS 15 est qu'« une entité comptabilise les produits des activités ordinaires de manière à présenter le transfert des biens ou services promis aux clients pour un montant qui reflète la contrepartie que l'entité s'attend à recevoir ». La norme décrit cinq étapes : identifier le contrat, identifier les obligations de prestation, déterminer le prix de la transaction, le répartir, et comptabiliser le revenu lorsque — ou à mesure que — chaque obligation est remplie. Un abonnement est en général rempli progressivement, le revenu est donc comptabilisé sur la période d'abonnement.
Le référentiel que vous appliquez réellement relève de votre expert-comptable. Les petites entreprises en Allemagne, en France, en Belgique et en Pologne publient normalement selon les normes comptables nationales et non IFRS, et certaines simplifications existent pour les petites entités. Le mécanisme est le même partout : l'encaissement d'avance est d'abord une dette, un produit ensuite. Ce qui change, c'est le détail — si des frais de mise en service constituent une obligation distincte, comment traiter une remise pour paiement annuel, ce que fait un mois gratuit. Ces points requièrent une confirmation professionnelle.
- Produits constatés d'avance (passif sur contrat)
- Argent reçu pour un service que vous devez encore. Une dette au bilan, reprise en produits sur la période de service.
- Produits à recevoir (actif sur contrat)
- Service que vous avez fourni mais pas encore facturé — les formules à l'usage facturées à terme échu en génèrent en fin de mois.
- MRR / ARR
- Indicateurs de gestion, pas des chiffres comptables. Utiles pour les investisseurs ; ce n'est pas ce qui entre dans les comptes annuels.
Les virements Stripe ne sont pas des factures
Un virement (payout) Stripe est un seul transfert bancaire qui regroupe de nombreux paiements, moins les remboursements et les frais, après un délai de règlement. Votre chiffre d'affaires, ce sont les paiements individuels et les factures qui les sous-tendent ; le virement n'est que la manière dont la trésorerie vous est parvenue. Comptabilisez-les comme deux choses différentes.
La documentation de Stripe est claire sur la séquence : « Stripe envoie les fonds de votre solde disponible vers votre compte bancaire sous forme de virements », selon le calendrier de virement du compte, et « le moment où les fonds deviennent disponibles dépend de votre délai de règlement ». Un paiement apparaît d'abord comme solde en attente « déduction faite des frais Stripe » et devient disponible plus tard. Le point de départ recommandé pour le rapprochement est la transaction de solde (balance transaction), que Stripe crée « pour chaque type de transaction qui entre dans le solde de votre compte Stripe ou en sort » — des types tels que charge, refund, stripe_fee, payout et currency_conversion.
Une approche propre traite Stripe comme un compte d'attente :
- Lorsqu'un client est débité, enregistrez la vente : créance (ou directement le compte d'attente Stripe) contre produits ou produits constatés d'avance, avec le traitement TVA décidé pour ce client.
- Enregistrez les frais Stripe en charge contre le même compte d'attente, à partir de la transaction de solde plutôt que d'une estimation.
- Lorsque le virement arrive dans le flux bancaire, transférez son montant du compte d'attente vers la banque. Si le compte d'attente ne revient pas à zéro, il manque quelque chose — un remboursement, un litige, une conversion de devise.
Émettre ou non une facture en bonne et due forme pour chaque paiement par carte dépend du client. Pour un client professionnel dans l'UE, une facture est obligatoire aux fins de la TVA ; pour un consommateur, elle ne l'est souvent pas, même si beaucoup de SaaS en émettent une de toute façon parce que les clients la demandent. La facture est le document qui porte le verdict TVA ; le reçu Stripe n'est pas une facture TVA sauf s'il contient tout ce qu'une facture TVA exige.
TVA européenne sur un abonnement : B2C via l'OSS, B2B en autoliquidation
Un abonnement logiciel fourni en ligne est un « service fourni par voie électronique ». Vendu à un consommateur d'un autre pays de l'UE, il est taxé là où réside le consommateur ; vendu à une entreprise assujettie d'un autre pays de l'UE, il est taxé là où l'entreprise est établie, et c'est elle qui acquitte la TVA par autoliquidation. Deux clients qui paient les mêmes 20 € peuvent donc relever de quatre traitements TVA différents.
La synthèse de la Commission sur le lieu des prestations énonce les trois règles qui comptent ici. Pour les services B2B, « le lieu d'imposition est le lieu où le preneur est établi » (article 44 de la directive TVA). Pour les services B2C, la règle par défaut est « le lieu où le prestataire est établi » (article 45) — mais « les prestations B2C de services de télécommunication, de radiodiffusion et de services électroniques sont taxées là où le preneur réside » (article 58). Une vente SaaS à un consommateur est donc taxée au taux national du consommateur, pas au vôtre.
Facturer 27 taux nationaux différents aux consommateurs signifierait normalement 27 immatriculations. Le guichet unique (One Stop Shop, OSS) l'évite : c'est un régime facultatif, lancé le 1er juillet 2021, dans lequel une entreprise immatriculée dans un État membre déclare et paie la TVA due dans tous les autres par une seule déclaration trimestrielle. L'OSS couvre notamment « les prestations transfrontalières de services à des personnes non assujetties ». Un seuil annuel de 10 000 EUR pour les services TBE B2C transfrontaliers existe — en dessous, un prestataire peut continuer à taxer dans son propre pays — et « les régimes OSS sont facultatifs pour les assujettis ». Savoir si l'OSS, le seuil ou une immatriculation locale convient à votre entreprise requiert une confirmation professionnelle.
| Client | Lieu d'imposition | Qui paie la TVA | Ce que montre la facture |
|---|---|---|---|
| Entreprise dans votre propre pays | Votre pays | Vous facturez et reversez | Taux normal |
| Entreprise assujettie dans un autre pays de l'UE | Pays du client (art. 44) | Le client, par autoliquidation | Pas de TVA ; les deux numéros de TVA ; la mention d'autoliquidation |
| Consommateur dans un autre pays de l'UE | Pays du consommateur (art. 58) | Vous, via l'OSS ou une immatriculation locale | Taux national du consommateur |
| Entreprise ou consommateur hors UE | Généralement hors du champ de la TVA de l'UE | Dépend du pays de destination | Pas de TVA UE ; des règles locales peuvent s'appliquer |
L'autoliquidation repose sur le fait que l'acheteur est réellement un assujetti. VIES, le système d'échange d'informations en matière de TVA de la Commission, « permet aux entreprises d'obtenir rapidement la confirmation des numéros de TVA de leurs partenaires commerciaux ». La même page limite ce qu'une vérification prouve : les données « proviennent des bases de données des États membres sur lesquelles les services de la Commission n'ont aucun contrôle », et une confirmation « ne donne pas en soi le droit d'exonérer de TVA les livraisons intracommunautaires ». Vérifiez le numéro au moment de la vente, conservez le résultat avec la facture et gardez des preuves de la localisation du client.
Remboursements, avoirs et litiges
Un remboursement n'est pas une facture supprimée. Dans l'UE, une vente facturée est corrigée par un avoir qui fait référence à la facture d'origine, de sorte que les deux documents subsistent et que la TVA puisse être corrigée sur la bonne période. Le remboursement Stripe est alors le paiement de cet avoir.
- Remboursement total dans la même période TVA — avoir du montant total, remboursement enregistré en regard, effet net nul.
- Remboursement partiel — avoir pour la partie remboursée ; les produits constatés d'avance des mois annulés sont repris, pas reconnus en revenu.
- Rétrofacturation / litige — Stripe déduit le montant sous forme de transaction de solde
adjustment; traitez-le comme un remboursement jusqu'à la résolution du litige, puis contre-passez si vous obtenez gain de cause. - Remboursement échoué — Stripe restitue les fonds à votre solde (
refund_failure) ; l'avoir demeure, le volet paiement est rouvert.
Multidevise : quel cours, et quand
Si vous tarifez en EUR, USD et GBP, votre grand livre n'a toujours qu'une devise de présentation, et chaque facture en devise étrangère est convertie au cours de la date de facture. L'écart entre ce cours et celui auquel l'argent arrive réellement est un gain ou une perte de change, comptabilisé séparément du chiffre d'affaires.
Stripe ajoute une couche : un paiement en USD reversé sur un compte bancaire en EUR est converti par Stripe, et la conversion apparaît comme une transaction de solde distincte (currency_conversion, avec un stripe_fx_fee le cas échéant). L'écart réalisé est la différence entre votre conversion à la date de facture et la conversion de Stripe au règlement. Les créances ouvertes en devise étrangère à la clôture sont généralement réévaluées au cours de clôture, ce qui produit un écart latent ; le traitement dépend de votre référentiel comptable et requiert une confirmation professionnelle. Un traitement plus complet figure sur la page plusieurs sociétés, plusieurs devises.
Ce qu'il faut automatiser par API, et ce qu'il ne faut pas
Automatisez les événements que votre application connaît déjà : un client s'inscrit, une facture d'abonnement est due, un paiement réussit, un remboursement est émis. N'automatisez pas les jugements : quel régime de TVA s'applique à un cas limite, comment répartir un prix groupé, quand passer une créance en perte.
Une intégration minimale comporte trois flux. Votre application crée le client dans le grand livre avec son pays et son numéro de TVA. Lorsque Stripe (ou votre logique de facturation) produit une facture d'abonnement, votre application crée le brouillon de facture correspondant dans le grand livre, qui décide du traitement TVA à partir des faits et valide le document. Lorsque Stripe signale un paiement réussi, votre application enregistre le paiement. Le guide des webhooks de Stripe explique pourquoi la dernière étape doit être idempotente : « les points de terminaison de webhook peuvent occasionnellement recevoir le même événement plus d'une fois », et Stripe « ne garantit pas la livraison des événements dans l'ordre où ils sont générés ». Le grand livre dans lequel vous écrivez a besoin de la même protection de son côté — une clé d'idempotence sur chaque écriture.
Comment KRONENWERK gère cela
KRONENWERK est un grand livre en partie double avec facturation, avoirs, flux bancaires et une API publique, conçu pour les entreprises en Allemagne, en France, en Belgique, en Pologne (limité), au Canada et aux États-Unis. Pour une entreprise SaaS, les éléments pertinents sont le verdict fiscal, l'API et les webhooks. Pris en charge avec des limitations
- Verdict fiscal par facture. À partir du pays du vendeur et de l'acheteur, de la qualité d'entreprise ou de consommateur de l'acheteur et de la nature de la prestation, chaque facture reçoit un verdict : taux normal, taux zéro, exonéré, autoliquidation, hors champ, ou « saisie requise » / « requiert une confirmation professionnelle ». Les numéros de TVA des acheteurs sont vérifiés dans VIES à l'émission et le verdict est conservé avec la facture. KRONENWERK ne devine pas.
- Clients, factures et paiements par l'API. L'API à l'adresse
https://kronenwerk.org/api/extern/v1acceptePOST /customers,POST /invoices/draftsetPOST /transactions, chacun avec un en-têteIdempotency-Key. Les brouillons sont émis dans le produit après validation ; l'API n'émet pas directement de factures légales. Voir connecter un SaaS et l'API de facturation. - Webhooks. Livraisons signées pour
invoice.issued,invoice.paid,invoice.cancelled,purchase.recordedetpayment.recorded, avec nouvelles tentatives et unIdempotency-Keypar événement. - Flux bancaires. Les comptes bancaires européens se connectent via Enable Banking, les comptes canadiens et américains via Plaid, de sorte que le virement Stripe apparaît dans le grand livre pour être rapproché.
- Multidevise et multisociété. Factures en devises étrangères, un grand livre par société, une clé d'API par société.
Questions fréquentes
Dois-je émettre une facture pour chaque paiement par carte ?
Pour un client professionnel dans l'UE, oui — une facture est obligatoire aux fins de la TVA pour la plupart des prestations B2B. Pour les consommateurs, les règles sont plus souples, mais un document qui porte le traitement TVA reste la pièce la plus sûre. Savoir si une facture simplifiée suffit requiert une confirmation professionnelle.
Puis-je facturer la TVA de mon propre pays à tous les consommateurs de l'UE ?
Seulement tant que vos ventes B2C transfrontalières de services électroniques restent sous le seuil annuel de 10 000 EUR, et seulement si vous n'y renoncez pas. Au-dessus du seuil, le taux national du consommateur s'applique et l'OSS est la voie habituelle pour le déclarer.
Que faire si le numéro de TVA du client échoue à la vérification VIES ?
N'appliquez pas l'autoliquidation sur la foi d'une vérification échouée. Traitez le client comme un consommateur jusqu'à ce qu'un numéro valide soit fourni, ou demandez une autre preuve de sa qualité d'entreprise. Conservez dans tous les cas le résultat VIES avec la facture.
KRONENWERK importe-t-il mes transactions Stripe ?
Pas directement. Les virements arrivent par la connexion bancaire ; les paiements individuels, frais et remboursements sont enregistrés par votre application via l'API ou à la main. Un connecteur Stripe ne fait pas partie du produit aujourd'hui.
KRONENWERK calcule-t-il les produits constatés d'avance ?
Non. Il enregistre la facture et le paiement ; la reprise mensuelle des produits constatés d'avance en produits est une transaction que vous ou votre intégration passez. Votre expert-comptable décide de l'échéancier.
Sources
- European Commission — One Stop Shop: overview — consulté le
- European Commission — Where to tax: place of taxable transactions — consulté le
- European Commission — VIES (VAT Information Exchange System) — consulté le
- IFRS Foundation — IFRS 15 Revenue from Contracts with Customers — consulté le
- Stripe documentation — Receive payouts — consulté le
- Stripe documentation — Balance transaction types — consulté le
- Stripe documentation — Receive Stripe events in your webhook endpoint — consulté le
- KRONENWERK developer documentation — consulté le