ED06 - Justificatifs, DMS, facture électronique : classement, traçabilité régressive/progressive
Problème
Un entrepreneur commence à organiser l’archivage des justificatifs et se pose la question : Comment classer des justificatifs de manière conforme aux GoBD, et comment les rendre traçables ?
La pratique actuelle dans les PME :
- Justificatifs papier dans des dossiers - non électroniques, non exploitables automatiquement, sans traçabilité régressive/progressive
- PDF dans des comptes cloud - non conformes aux GoBD (pas d’immuabilité, pas d’exploitabilité automatique, dépendance au prestataire de services)
- E-mails avec pièces jointes PDF - non archivés (une boîte de réception n’est pas une archive), aucune authenticité du justificatif, aucune chaîne de preuves
- Factures électroniques (XML) mal comprises - de nombreux entrepreneurs ignorent que, depuis 2025, le fichier XML est le document original, et non le PDF
- (Souvent) Aucun classement - les justificatifs sont classés par date, et non par opération ; les écritures comptables n’ont pas de référence de justificatif
- (Souvent) Aucune traçabilité régressive - à partir de l’écriture comptable, l’inspecteur ne peut pas remonter au justificatif, car la référence manque
- (Souvent) Aucune traçabilité progressive - à partir du justificatif, on ne peut pas remonter à l’écriture comptable, car les renvois croisés manquent
Kernaussage
Un archivage des justificatifs conforme aux GoBD signifie :
- Chaque justificatif a une identité unique (DocID) - le
uuidV7(Object ID) constitue à lui seul l’identité unique du justificatif, indépendamment du nom de fichier. De plus, chaque justificatif reçoit une empreinte SHA-256 comme contrôle d’intégrité cryptographique. La clé compositeV7GUID:uuidV7sert à l’organisation du classement (p. ex. par type de justificatif) et aux requêtes BDD (p. ex. dans une application verticale avec EF Core) - et non à l’identité elle-même. - Chaque justificatif possède un sidecar -
.v7g.mdavec classification (V7GUID), identité d’objet (uuidV7), taxonomie, statut d’obsolescence, horodatage de saisie (dansuuidV7sous forme d’horodatage 48 bits). Exception (à partir de 261011) : les justificatifs repris dans un processus de signature (justificatif numérique interne, p. ex. justificatif de frais de restauration) portent l’intégralité de leurs métadonnées de sidecar dans le*.gcsig.md(blocsourceintégré, schémagcsig-1.4) ; aucun.v7g.mddistinct n’est nécessaire — pas de sidecars concurrents. - Chaque écriture comptable référence son justificatif -
source_sha256dans l’écriture du journal → justificatif - Traçabilité régressive - à partir de l’écriture comptable → justificatif →
écriture du journal →
uuidV7, la résolution est possible - Traçabilité progressive - à partir du justificatif → écriture comptable → grand livre → bilan d’ouverture, la résolution est possible
- Facture électronique : le XML est le document original - pas le PDF (depuis 2025, § 14 UStG, EN 16931)
Conformité par conception : Le classement des justificatifs ne résulte pas d’un tri a posteriori, mais de champs structuraux obligatoires (SHA-256, V7GUID, Sidecar) et de hooks de pré-commit qui vérifient que chaque écriture comptable comporte une référence de justificatif.
Types de justificatifs et leurs particularités GoBD
(Scan erforderlich)"] B --> PDF["PDF-Beleg
(sonstige Rechnung)"] B --> EML["E-Mail
(EML + Anhang)"] B --> XML["E-Rechnung
(XML - Ur-Dokument)"] P --> S["Scan → SHA-256
+ Sidecar"] PDF --> SH["SHA-256
+ Sidecar"] EML --> EM["EML archiviert
+ Anhang extrahiert
+ Sidecar"] XML --> XV["XML unverändert
+ Sidecar
+ Validierung (EN 16931)"] style B fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style P fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style PDF fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style EML fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style XML fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SH fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style EM fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style XV fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Type de justificatif | Particularité GoBD | Durée de conservation |
|---|---|---|
| Justificatif papier | Numérisation obligatoire (§ 147 Abs. 2 AO) ; l’original peut être détruit si la numérisation est conforme aux GoBD | 8 ans (§ 147 Abs. 3 AO) |
| Justificatif PDF (« autre facture ») | Depuis 2025, ce n’est plus une « facture électronique » ; SHA-256 + sidecar ; exploitable automatiquement ? Non - le PDF n’est pas structuré | 8 ans |
| E-mail (EML + pièce jointe) | Une boîte de réception n’est pas une archive ; l’EML doit être archivé avec la pièce jointe ; vérification de l’expéditeur | 6 ans (§ 147 Abs. 1 Nr. 2/3 AO) |
| Facture électronique (XML) | Le XML est le document original (depuis 2025, § 14 UStG) ; conservation sans modification ; validation EN 16931 ; exploitable automatiquement | 8 ans |
Important - facture électronique depuis 2025 : Depuis le 1er janvier 2025, la facture électronique est obligatoire pour les opérations B2B entre des entreprises établies en Allemagne (§ 14 UStG). Un PDF simple n’est pas une facture électronique - c’est une « autre facture ». La facture électronique n’existe que si elle est émise, transmise et reçue dans un format électronique structuré (XML, EN 16931). Voir ED01 « Facture électronique : les formats XML sont des documents originaux dans l’AO ».
Classification des justificatifs dans le dépôt Git
Structure des répertoires
ORG-1/sources/ # Belegarchiv (Tenant: ORG-1)
├── eingangsrechnungen/ # Eingangsrechnungen (Lieferanten)
│ ├── 260815/ # Nach Datum (YYMMDD)
│ │ ├── rechnung_001.xml # E-Rechnung (XRechnung)
│ │ ├── rechnung_001.xml.v7g.md # Sidecar
│ │ └── rechnung_002.pdf # Sonstige Rechnung (PDF)
│ │ └── rechnung_002.pdf.v7g.md # Sidecar
├── ausgangsrechnungen/ # Ausgangsrechnungen (Kunden)
├── lohnbelege/ # Lohnabrechnungen
├── sv-bescheide/ # SV-Bescheide, VBG-Bescheide
├── vertraege/ # Verträge (periodenübergreifend)
├── korrespondenz/ # E-Mails, Briefe
└── sonstige/ # Sonstige Belege
Sidecar par justificatif (obligatoire)
Chaque justificatif reçoit un sidecar .v7g.md avec la clé composite
V7GUID:uuidV7 :
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-1.0.schema.json",
"V7GUID": "<V7GUID-Class-aus-Registry>",
"docUid": "019f2c6f-0900-7001-8000-000000000001",
"sha256": "ab94670c0dd8499c27ef2feddd1d9c5925977d55a52150a6fca0f6567d2e5e79",
"title": "260815_Rechnung_001.xml",
"original_filename": "Rechnung_001.xml",
"locations": [
{
"unc_path": "./ORG-1/sources/eingangsrechnungen/260815/rechnung_001.xml",
"from": "260815",
"to": null,
"note": "Primärspeicherort"
}
],
"v7g_taxonomy": [
{
"v7guid": "019f2c6f-0900-7000-8000-000000000000",
"taxonomy": "ORG-1/Eingangsrechnung",
"valid_from": "260815",
"valid_to": null,
"note": "Tenant: ORG-1, Category: Eingangsrechnung, Sphäre: wirtschaftlich"
}
],
"gcpn": {
"prima_nota_ref": "GB-2026-08-001",
"journal_entry_ref": "J-2026-08-001"
},
"obsolescence": {
"status": "active",
"superseded_by": null,
"superseded_at": null
}
}
Clé composite
V7GUID:uuidV7- organisation du classement et requête :
uuidV7(Object ID) - constitue à lui seul l’identité unique (DocID) du justificatif, généré avec un repère temporel prédéfini, un horodatage 48 bits étant ancré dans le GUIDV7GUID(Class) - classifie le type de justificatif à partir du registre.gitcover(type de justificatif, organisation du classement, requête BDD dans une application verticale avec EF Core)v7g_taxonomy[].v7guid- Object ID du justificatif classifiégcpn.prima_nota_ref/journal_entry_ref- renvoi croisé vers le grand livre/journal (traçabilité progressive)- La clé composite
V7GUID:uuidV7sert à l’organisation du classement et à la requête - l’identité du justificatif est la seuleuuidV7- Aucun champ
datetimedistinct - l’heure est intégrée àuuidV7
Traçabilité régressive et progressive
SKR04 6000 an 1600"] BS --> SR["source_sha256
im Tagebucheintrag"] SR --> BE["Beleg
(SHA-256 match)"] BE --> SC["Sidecar .v7g.md
V7GUID:uuidV7"] SC --> DE["Tagebucheintrag
uuidV7"] end subgraph PRO["Progressiv (Prüfer vom Beleg vorwärts)"] direction LR BE2["Beleg
(SHA-256)"] BE2 --> SC2["Sidecar .v7g.md
gcpn.journal_entry_ref"] SC2 --> BS2["Buchungssatz
SKR04"] BS2 --> GB["Grundbuch
(JSON)"] GB --> EB["Eröffnungsbilanz"] end style BS fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SR fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style BE fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style DE fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style BE2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style BS2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style EB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Direction | Point de départ | Résolution via | Point d’arrivée | Référence aux GoBD |
|---|---|---|---|---|
| Régressive | Écriture comptable (SKR04) | source_sha256 → justificatif → sidecar uuidV7 |
Écriture du journal | Rz. 146 (reconstituabilité) |
| Progressive | Justificatif (SHA-256) | Sidecar gcpn.journal_entry_ref → écriture comptable → grand livre |
Bilan d’ouverture | Rz. 147 (vérifiabilité) |
Référence aux GoBD : La traçabilité régressive correspond à GoBD Rz. 146 (reconstituabilité - « un tiers expert dans un délai raisonnable »). La traçabilité progressive correspond à GoBD Rz. 147 (vérifiabilité). Les deux sont garanties par conception grâce au SHA-256 + V7GUID + sidecar, et non par des renvois croisés manuels.
Facture électronique : le XML est le document original
(XML oder ZUGFeRD)"] ER --> V["Validierung
EN 16931 / XRechnung-Schema"] V -->|gültig| A["Ablage im Git-Repo
XML unverändert"] V -->|ungültig| R["Fehler-Logging
+ manuelle Prüfung"] A --> S["Sidecar .v7g.md
SHA-256 + V7GUID:uuidV7"] S --> B["Buchungssatz
source_sha256 → XML"] B --> N["Nachverfolgbarkeit
retrograd + progressiv"] style ER fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style V fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style A fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style B fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style N fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
XRechnung vs. ZUGFeRD
| Format | Structure | Document original | Visualisation |
|---|---|---|---|
| XRechnung | XML pur (EN 16931) | Fichier XML | Visualiseur XML requis (p. ex. ELSTER (e-rechnung.elster.de)[https://e-rechnung.elster.de] |
| ZUGFeRD | Hybride : PDF + XML intégré | Partie XML (depuis 2025, la partie XML fait foi, BMF FAQ 12a) | Image PDF (affichage auxiliaire uniquement) |
Important - ZUGFeRD depuis 2025 : En cas de divergence entre la partie XML et l’image PDF, depuis 2025, la partie structurée (XML) fait foi (BMF FAQ Frage 12a). L’image PDF n’est plus déterminante. Le sidecar doit référencer le XML comme document original, et non le PDF.
Hook de pré-commit pour les factures électroniques
Le hook de pré-commit vérifie, pour les factures électroniques :
| Vérification | Erreur lorsque |
|---|---|
| Le fichier XML a une structure XRechnung/ZUGFeRD valide | La structure XML est non valide |
Le sidecar .v7g.md est présent |
Le sidecar est manquant |
Le sha256 du sidecar correspond au fichier XML |
L’empreinte ne correspond pas (fichier modifié) |
v7g_taxonomy classe le justificatif comme facture électronique |
La classification est manquante |
Aucun champ datetime/date dans le sidecar (heure dans uuidV7) |
Le champ est redondant |
Archivage des e-mails
Les e-mails sont des lettres commerciales ou d’affaires au sens du § 147 Abs. 1 Nr. 2/3 AO et doivent donc être conservés 6 ans. De nombreux entrepreneurs n’archivent pas leurs e-mails - c’est une violation des GoBD.
(EML/MBOX)"] EM --> EX["Anhang extrahiert
(PDF, XML)"] EM --> AR["EML archiviert
(unverändert)"] EX --> SH["SHA-256 pro Anhang"] AR --> SH2["SHA-256 der EML"] SH --> SC["Sidecar .v7g.md
pro Beleg"] SH2 --> SC2["Sidecar .v7g.md
für E-Mail"] style EM fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style EX fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style AR fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SH fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SH2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style SC fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SC2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Étape | Action | Référence aux GoBD |
|---|---|---|
| Réception d’un e-mail | Enregistrer le fichier EML sans le modifier | § 147 Abs. 1 Nr. 2 AO (lettres commerciales reçues) |
| Extraction de la pièce jointe | Archiver séparément la pièce jointe PDF/XML + SHA-256 | Exploitabilité automatique (§ 147 Abs. 6 AO) |
| Sidecar par justificatif | .v7g.md pour l’EML et pour chaque pièce jointe |
Reconstituabilité (Rz. 146) |
| Vérification de l’expéditeur | En-têtes DKIM/SPF documentés dans le sidecar | Force probante de l’e-mail |
Conseil pratique : Un dépôt Git peut archiver en parallèle les e-mails (EML/MBOX) et les pièces jointes (PDF, XML)
- avec une séparation claire par type de justificatif dans le sidecar (
v7g_taxonomy). Le hook de pré-commit vérifie que chaque EML possède un sidecar et que chaque pièce jointe est classée séparément.
Complétude des justificatifs (hook de pré-commit)
vorhanden?"} P1 -->|nein| R1["Commit abgelehnt
Belegreferenz fehlt"] P1 -->|ja| P2{"Beleg existiert
im Repo?"} P2 -->|nein| R2["Commit abgelehnt
Beleg nicht gefunden"] P2 -->|ja| P3{"Sidecar .v7g.md
vorhanden?"} P3 -->|nein| R3["Commit abgelehnt
Sidecar fehlt"] P3 -->|ja| P4{"SHA-256 match?"} P4 -->|nein| R4["Commit abgelehnt
Beleg verändert"] P4 -->|ja| OK["Commit akzeptiert
Beleg-Vollständigkeit OK"] style C fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P4 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R1 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R3 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R4 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style OK fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| Vérification | Erreur lorsque | Référence aux GoBD |
|---|---|---|
source_sha256 présent |
La référence de justificatif est manquante | Rz. 146 (reconstituabilité) |
| Le justificatif existe dans le dépôt | Le justificatif n’est pas archivé | § 147 Abs. 1 Nr. 4 AO (pièce justificative comptable) |
| Le sidecar est présent | La classification est manquante | Rz. 146 (reconstituabilité) |
| Le SHA-256 correspond | Le justificatif a été modifié ultérieurement | Rz. 146 (inaltérabilité) |
Leviers de réduction des risques
| Aujourd’hui (économique) | Demain (résistant aux révisions) | Risque réduit |
|---|---|---|
| SHA-256 par justificatif | Identifiant de justificatif unique, indépendant du nom de fichier | Contestation de l’authenticité du justificatif |
Sidecar avec clé composite V7GUID:uuidV7 |
Acte de classification traçable | Contestation de la classification |
source_sha256 par écriture comptable |
Traçabilité régressive | Contestation du rattachement du justificatif à l’écriture |
gcpn.journal_entry_ref dans le sidecar |
Traçabilité progressive | Contestation de l’écriture |
| Facture électronique XML inchangée + sidecar | Conforme au § 14b UStG (intégrité) | Non-déductibilité de la TVA récupérable |
| EML archivé + sidecar | Conforme au § 147 Abs. 1 Nr. 2 AO | Perte de la force probante lors d’un litige avec l’administration |
| Le hook de pré-commit vérifie la complétude des justificatifs | Aucune écriture comptable sans justificatif | Violation des GoBD « non complet » |
Exigences du harnais (aperçu)
Déductibles d’ED06 :
| ID | Exigence | Priorité |
|---|---|---|
| FA-2.1 | SHA-256 comme ID de justificatif | MUST |
| FA-2.2 | Sidecar par justificatif — *.v7g.md ou (pour les justificatifs signés/les justificatifs internes) intégré dans *.gcsig.md |
MUST |
| FA-2.3 | Sidecar avec clé composite V7GUID:uuidV7 |
MUST |
| FA-2.8 | Fonctionnalité DMS : classification des justificatifs | MUST |
| FA-2.9 | Intégration des factures électroniques : import XRechnung/ZUGFeRD, validation | SHOULD |
| FA-2.10 | Archivage des e-mails : EML + SHA-256 + sidecar | MUST |
| FA-2.11 | Classement GoBD : index par exercice comptable | MUST |
| FA-2.12 | Traçabilité régressive | MUST |
| FA-2.13 | Traçabilité progressive | MUST |
| FA-2.14 | Hook de pré-commit : vérifier la complétude des justificatifs | MUST |
| FA-2.15 | Workflow de numérisation : papier → numérisation → SHA-256 → sidecar | SHOULD |
La liste complète des exigences figure dans Harness-Anforderungen.md.
Sources
- GoBD (lettre du BMF, Rz. 146 - reconstituabilité, Rz. 147 - vérifiabilité)
- AO (§ 147 Abs. 1 Nr. 2/3 - lettres commerciales, § 147 Abs. 1 Nr. 4 - pièces justificatives comptables, § 147 Abs. 2 - exploitable automatiquement, § 147 Abs. 3 - durées de conservation)
- UStG (§ 14 - facture électronique, § 14b - conservation)
- FAQ du BMF sur la facture électronique (version de mars 2026)
- EN 16931 (CEN/TC 434 - XRechnung, ZUGFeRD)
E1/agents/(anonymisé) - concept SSoT avec archive des justificatifs, sidecars
Topologie des sources et liens de référence CDN
| Rôle | Emplacement | Finalité |
|---|---|---|
| Primaire / SSoT | git.gitcover.org/GCC | Dépôt canonique (signé GPG, versionné) |
| Miroir OSS public / CDN | codeberg.org/gitcover-commons | Miroir en lecture seule ; FLOSS-Discovery |
| Hub communautaire | github.com/gitcover-commons | Issues & Discussions ; référence au code source sur Codeberg |
Remarque : Cette correspondance entre les sources, le miroir et le hub communautaire reflète l’état actuel et peut évoluer. Veuillez vérifier la source canonique correspondante sur gitcover.org pour connaître l’état actuel.