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

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
- 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.
- 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.
- 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.
- 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
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
- Données de baseClient, délai de paiement, cas fiscal
- Catalogue de prestationsLignes avec unité et tarif
- Série de numérosPréfixe, année, mois, numéro courant
- La facture visiblePDF/A-3b, lié à la marque
- XML intégréfactur-x.xml selon EN 16931
- Export comptableDATEV et CSV, SKR03 ou SKR04
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.
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
L'application, sur des données inventées
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.”
Pourquoi c'est publié
Ce que cela signifie pour votre projet
Plus du laboratoire
Méthode Event Scout Un modèle de langage lit les pages d'événements, tout le reste est du code fixe. Il reste une courte liste des journées qui valent le déplacement.
Recherche appliquée Vellum Bords, perspective, lumière et texte sont calculés sur le téléphone. Un document ne quitte l'appareil que lorsque quelqu'un l'envoie.
Design computationnel Atlas EV1 Douze chapitres démontent une voiture électrique, jusqu'à une cellule. Aucun fichier de modèle, aucune texture : 327 pièces issues d'un tableau. Avez-vous un formalisme réglementé que quelqu'un maintient à la main ? C'est précisément à cela que sert un pilote.
Nous contacter