R&D LAB Méthode En service Conçu pour notre propre comptabilité

Belegt

Facturation électronique ZUGFeRD, auto-hébergée

Depuis 2025, une facture allemande est un fichier qu'une machine doit lire. Belegt la produit en interne : le XML d'abord, le PDF ensuite, sur notre matériel.

  • PDF/A-3bsortie avec un factur-x.xml intégré
  • 20codes de règles vérifiés hors ligne, en interne
  • 4étapes de l'assistant avant le fichier
  • 0données de facture qui quittent la maison
Liste des factures de Belegt avec douze documents, colonnes numéro, client, projet, date, montant et statut, plus export CSV et DATEV

Toutes les données de cet article sont des données de démonstration inventées. La base de travail n'a pas été ouverte pour les captures.

Pourquoi c'est publié

Nous vendons du logiciel et de l'automatisation. Belegt en est la preuve sur un exemple inconfortable : une tâche réglementée, un format figé, de vraies échéances, nos propres données. L'outil tourne dans notre propre exploitation, pas dans une démonstration. Si vous voulez savoir comment nous découpons une application métier, où nous inscrivons les règles en dur dans le code et où nous laissons la décision à un humain, vous le voyez ici sur notre propre comptabilité.

Depuis le 1er janvier 2025, les entreprises en Allemagne doivent pouvoir recevoir des factures électroniques en B2B ; l'obligation d'en émettre arrive par étapes jusqu'en 2028. Un PDF joint à un courriel n'y suffit plus. Ce qui est exigé, c'est un jeu de données structuré selon EN 16931, en pratique ZUGFeRD ou Factur-X. Belegt est notre propre réponse, construite parce que nous en avions besoin.

La décision

Le XML est le document, le PDF en est la vue

Quand on construit une facture électronique pour la première fois, on commence par le PDF. C'est l'erreur qui coûte cher plus tard. Un document ZUGFeRD est un PDF/A-3 auquel est joint un fichier nommé factur-x.xml, et si les deux divergent, un système comptable s'en tient à la pièce jointe. Nous avons donc inversé l'ordre : Belegt construit d'abord le jeu de données, en génère le XML, puis rend le PDF comme vue de celui-ci.

Cette seule décision entraîne tout le reste. Parce que le XML est le document, le contrôle doit précéder la génération et non la suivre. Parce qu'il est le document, c'est lui qui est enregistré et haché au moment de la clôture, le PDF étant conservé à côté. Et parce qu'il est le document, la mise en forme s'arrête là où elle toucherait à la lisibilité par la machine.

La deuxième raison de le construire nous-mêmes était moins élégante. Les données de facturation sont la collection la plus dense de données tierces qu'une petite entreprise détient : adresses, numéros fiscaux, coordonnées bancaires, noms de projets. Un abonnement facturé au document emporte cette collection avec lui. Belegt la place dans un fichier sur notre propre matériel ; les champs sensibles y sont chiffrés en AES-256-GCM, la clé restant hors du code source.

Ce qui n'en est délibérément pas sorti, c'est un conseil juridique. L'application contrôle les règles de gestion de la norme, dans la mesure où elles se vérifient sans réseau. La certification juridique d'un document relève du validateur officiel KoSIT, et rien ici ne le remplace.

Si le PDF et le XML divergent, c'est le XML qui l'emporte. C'est donc par là qu'on commence.

Le parcours d'une facture

Quatre étapes, et seulement ensuite un fichier

  1. 01 Brouillon Émetteur, client, numéro et période, puis les lignes. Les données de base et le catalogue de prestations sont déjà enregistrés. Le numéro proposé n'est ici qu'un aperçu : il lit le compteur sans le déplacer.
  2. 02 Contrôle Avant toute génération, un jeu de règles parcourt les données : vingt règles nommées issues d'EN 16931, de l'annexe autoliquidation et de l'extension allemande XRechnung. Les blocages apparaissent comme erreurs avec leur code de règle, les avis à part.
  3. 03 Générer le XML Le jeu de données contrôlé devient une CrossIndustryInvoice portant l'identifiant urn:cen.eu:en16931:2017. En mode XRechnung, l'identifiant KoSIT s'y ajoute et le Leitweg-ID passe de l'avis à l'obligation.
  4. 04 PDF/A-3b avec pièce jointe Le PDF est composé avec polices intégrées, marqué PDF/A-3b, et reçoit factur-x.xml en pièce jointe avec la relation Alternative. À la clôture, le jeu de données, le XML, le PDF et un SHA-256 du XML sont enregistrés.

Le contrôle précède le fichier

Étape de contrôle de l'assistant : résumé de la facture, puis le contrôle EN 16931 listant quatre violations bloquantes BR-02, BR-07, BR-10 et BR-21, ainsi qu'un auto-contrôle XML
Un brouillon vide, volontairement : l'étape de contrôle nomme les quatre règles manquantes, chacune avec son code dans la norme.

Le contrôle s'exécute entièrement sur la machine locale. Il connaît vingt codes de règles, recalcule les totaux à partir des lignes et distingue strictement bloquant et consultatif : une IBAN manquante n'arrête pas une facture B2B, une adresse d'acheteur incomplète si.

Ce qu'il n'est pas figure dans la même vue : un pré-contrôle sans Java, et non un remplacement du validateur officiel KoSIT ou Mustang. La certification juridique d'un document reste l'affaire de cette exécution externe.

Structure

Un jeu de données, deux lecteurs

Un seul jeu de données produit à la fois la page lue par une personne et l'enregistrement lu par une machine. Les deux sont enregistrés ensemble à la clôture, le XML étant en outre haché.

Ce qui se passe après l'envoi

La seconde moitié du travail sur une facture commence une fois qu'elle est partie. Belegt tient les créances dans une vue dédiée : jours restants avant échéance, niveau de relance et le montant que les intérêts de retard ajouteraient si un rappel partait.

Le niveau de relance ne monte pas tout seul. C'est un champ sur le document que quelqu'un règle, et le rappel est un bouton que quelqu'un presse. Un outil qui relance les clients sans intervention est un risque plutôt qu'un soulagement dans une structure qui compte une poignée de clients.

Les brouillons datés figurent dans la même vue, entièrement préparés. Eux non plus ne partent pas d'eux-mêmes à leur date : ils attendent d'être ouverts et envoyés.

Vue des créances avec quatre documents, jours avant échéance, montant du rappel et un brouillon daté
Créances et un brouillon planifié, le tout sur des données de démonstration inventées.

Ce qui a changé en 2025

PDF par courriel, jusqu'en 2024

  • Une image de facture. Les chiffres y sont du texte dans une mise en page.
  • La comptabilité les ressaisit, ou laisse un moteur de reconnaissance deviner.
  • Une inversion de chiffres se voit au mieux au rapprochement.
  • Chaque destinataire écrit sa propre règle pour votre mise en page.

Facture électronique EN 16931, dès 2025

  • Un jeu de données structuré. Chaque champ porte un code de la norme.
  • La comptabilité l'importe ; le PDF à côté est destiné aux humains.
  • Les violations des règles de gestion apparaissent avant l'envoi.
  • Un format pour tous les destinataires, avec une extension pour le secteur public.

Ce qui est inscrit en dur

01 Le XML fait foi À la clôture, le jeu de données complet, le XML et le PDF sont enregistrés et le XML est haché en SHA-256. Ensuite le document n'est plus modifié : il y a un avoir sous le code 381 ou une facture rectificative sous le code 384.
02 Des numéros au format fixe Préfixe, exercice, mois, numéro courant. Le compteur se réinitialise chaque mois et est tiré à l'enregistrement dans une transaction qui le rapproche d'abord du numéro le plus élevé déjà présent. La base n'autorise chaque numéro qu'une fois par locataire.
03 Des cas fiscaux, pas du texte libre L'autoliquidation et le régime de la franchise sont des états du document qui fixent ensemble le taux, l'affichage de la TVA et la mention. En autoliquidation, deux règles de la norme exigent les deux numéros de TVA avant toute génération.
04 La mise en forme s'arrête à la marque L'interface peut changer de couleur et fonctionner en thème clair ou sombre ; le PDF de facture, non. Un document dont l'apparence varie selon l'humeur du jour pose problème dans une archive.
05 Toute écriture laisse une trace Création, envoi, relance, export et connexion sont consignés dans un journal dont les entrées sont chaînées par le hachage de la précédente. Les données de facture elles-mêmes résident dans un fichier sur notre propre matériel, les champs sensibles chiffrés en AES-256-GCM.

L'application, sur des données inventées

Vue analytique avec les montants facturés, en attente et en retard, ainsi que des barres par client et par projet
Analyse sur les mêmes enregistrements : douze documents, une vue du chiffre d'affaires, pas de second tableur qui se périme.
Gestion des profils avec un émetteur et cinq clients, chacun avec une ville et un numéro de TVA
Les données de base en un seul endroit. Les numéros de TVA n'y sont que des zéros, car tout le jeu est inventé.
Vue automatisation avec des sections vides pour les documents récurrents et les échéanciers, plus un catalogue de cinq prestations
Le catalogue de prestations d'où viennent les lignes. Les documents récurrents et les échéanciers sont ici volontairement vides.

Ce pour quoi c'est construit

  • Les petites sociétés de services qui doivent pouvoir recevoir dès 2025 et émettre d'ici 2028, sans payer au document.
  • Les structures à clients peu nombreux mais récurrents : forfaits de maintenance et appels de projet passent par le même catalogue.
  • Les prestations transfrontalières dans l'UE, où le cas fiscal tient à la fiche client et non à la mémoire de quelqu'un.
  • Tous ceux qui ne veulent pas voir leurs données clients et bancaires dans la base d'un tiers.
  • Comme modèle : la même construction pour un autre formalisme réglementé dans votre propre exploitation.

“Quels avantages la comptabilité en partie double procure au marchand ! C'est l'une des plus belles inventions de l'esprit humain.”

Johann Wolfgang von Goethe · Les Années d'apprentissage de Wilhelm Meister, 1795

Pourquoi c'est publié

Ce que cela signifie pour votre projet

Plus du laboratoire

Avez-vous un formalisme réglementé que quelqu'un maintient à la main ? C'est précisément à cela que sert un pilote.

Nous contacter

Grace Hopper

“La phrase la plus nuisible de la langue est : on a toujours fait comme ça.”