ED06 - Pièces justificatives, DMS, facture électronique : classement, traçabilité rétrograde/progressive
Problème
Un entrepreneur se lance dans le classement de ses pièces justificatives - et se trouve face à la question : Comment classer mes pièces justificatives conformément à la GoBD, et comment les rendre traçables ?
La pratique actuelle dans le secteur des PME :
- Pièces papier dans des dossiers - pas électroniques, pas exploitables par machine, pas traçables rétrogradement/progressivement
- PDF dans des comptes cloud - non conformes à la GoBD (pas d'inaltérabilité, pas d'exploitabilité par machine, dépendance au prestataire)
- E-mails avec pièces jointes PDF - non archivés (la boîte mail n'est pas une archive), pas d'authenticité des pièces, pas de chaîne de preuve
- Factures électroniques (XML) incomprises - beaucoup d'entrepreneurs ne savent pas que depuis 2025, le fichier XML est le document original, pas le PDF
- (Souvent) Aucun classement - les pièces sont rangées par date, pas par opération ; les écritures comptables n'ont pas de référence de pièce
- (Souvent) Pas de traçabilité rétrograde - le vérificateur ne peut pas remonter de l'écriture comptable à la pièce, car la référence manque
- (Souvent) Pas de traçabilité progressive - impossible de passer de la pièce à l'écriture comptable, car les références croisées manquent
Message clé
Un classement des pièces justificatives conforme à la GoBD signifie :
- Chaque pièce justificative possède une identité unique (DocID) - la
uuidV7(Object ID) est déjà à elle seule l'identité unique de la pièce, indépendamment du nom de fichier. En outre, chaque pièce reçoit un hachage SHA-256 comme contrôle d'intégrité cryptographique. La Composite KeyV7GUID:uuidV7sert à l'organisation du classement (p. ex. par type de pièce) et aux DB-Queries (p. ex. avec EF Core dans une Vertical App) - pas à l'identité elle-même. - Chaque pièce possède un Sidecar -
.v7g.mdavec classification (V7GUID), identité d'objet (uuidV7), taxonomie, statut d'obsolescence, heure de saisie (dansuuidV7comme horodatage 48 bits) - Chaque écriture comptable référence sa pièce -
source_sha256dans l'entrée de journal → pièce - Traçabilité rétrograde - de l'écriture comptable → pièce →
entrée de journal →
uuidV7résoluble - Traçabilité progressive - de la pièce → écriture comptable → livre journal → bilan d'ouverture résoluble
- Facture électronique : le XML est le document original - pas le PDF (depuis 2025, § 14 UStG, EN 16931)
Compliance by Design : le classement des pièces ne naît pas d'un tri a posteriori, mais de champs obligatoires structurels (SHA-256, V7GUID, Sidecar) et de Pre-Commit-Hooks qui vérifient chaque écriture comptable pour sa référence de pièce.
Types de pièces justificatives et leurs spécificité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 pièce | Spécificité GoBD | Délai de conservation |
|---|---|---|
| Pièce papier | Numérisation requise (§ 147 Abs. 2 AO) ; l'original peut être détruit si le scan est conforme à la GoBD | 8 ans (§ 147 Abs. 3 AO) |
| Pièce PDF (« autre facture ») | Depuis 2025, n'est plus une « facture électronique » ; SHA-256 + Sidecar ; exploitable par machine ? Non - le PDF est non structuré | 8 ans |
| E-mail (EML + pièce jointe) | La boîte mail n'est pas une archive ; l'EML doit être archivé avec sa 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) ; conserver sans modification ; validation EN 16931 ; exploitable par machine | 8 ans |
Important - facture électronique depuis 2025 : depuis le 1er janvier 2025, la facture électronique est obligatoire pour les opérations B2B entre entreprises nationales (§ 14 UStG). Un simple PDF n'est plus une facture électronique - c'est une « autre facture ». Une 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 les documents originaux au sens de l'AO ».
Classification des pièces justificatives 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 pièce justificative (obligatoire)
Chaque pièce justificative reçoit un Sidecar .v7g.md avec la Composite Key
V7GUID:uuidV7 :
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-1.0.schema.json",
"V7GUID": "<V7GUID-Class-aus-Registry>",
"uuidV7": "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
}
}
Composite Key
V7GUID:uuidV7- organisation du classement et requêtes :
uuidV7(Object ID) - constitue déjà à elle seule l'identité unique (DocID) de la pièce, générée avec une marque temporelle prédéfinie, horodatage 48 bits ancré dans le GUIDV7GUID(Class) - classifie le type de pièce à partir de la Registry.gitcover(type de pièce, organisation du classement, DB-Query pour une Vertical App avec EF Core)v7g_taxonomy[].v7guid- Object ID de la pièce classifiéegcpn.prima_nota_ref/journal_entry_ref- référence croisée vers livre journal/journal (traçabilité progressive)- La Composite Key
V7GUID:uuidV7sert à l'organisation du classement et aux requêtes - l'identité de la pièce est lauuidV7seule- Pas de champ
datetimeséparé - le temps est contenu dansuuidV7
Traçabilité rétrograde 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 | Cible | Référence GoBD |
|---|---|---|---|---|
| Rétrograde | Écriture comptable (SKR04) | source_sha256 → pièce → Sidecar uuidV7 |
Entrée de journal | Rz. 146 (compréhensibilité) |
| Progressive | Pièce (SHA-256) | Sidecar gcpn.journal_entry_ref → écriture comptable → livre journal |
Bilan d'ouverture | Rz. 147 (vérifiabilité) |
Référence GoBD : la traçabilité rétrograde correspond à la GoBD Rz. 146 (compréhensibilité - « tiers compétent dans un délai raisonnable »). La traçabilité progressive correspond à la GoBD Rz. 147 (vérifiabilité). Toutes deux sont garanties by Design par SHA-256 + V7GUID + Sidecar - et non par des références croisées manuelles.
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 | Visionneuse XML requise (p. ex. ELSTER (e-rechnung.elster.de)[https://e-rechnung.elster.de] |
| ZUGFeRD | Hybride : PDF + XML intégré | Partie XML (fait foi depuis 2025, BMF FAQ 12a) | Image PDF (affichage auxiliaire uniquement) |
Important - ZUGFeRD depuis 2025 : en cas de divergence entre la partie XML et la partie image PDF, c'est depuis 2025 la partie structurée (XML) qui 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, pas le PDF.
Pre-Commit-Hook pour les factures électroniques
Le Pre-Commit-Hook vérifie pour les factures électroniques :
| Vérification | Erreur si |
|---|---|
| Le fichier XML a une structure XRechnung/ZUGFeRD valide | Structure XML invalide |
Sidecar .v7g.md présent |
Sidecar manquant |
sha256 dans le Sidecar correspond au fichier XML |
Hash-Mismatch (fichier modifié) |
v7g_taxonomy classifie comme facture électronique |
Classification manquante |
Pas de champ datetime/date dans le Sidecar (temps dans uuidV7) |
Champ 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 à ce titre être conservés 6 ans. Beaucoup d'entrepreneurs n'archivent pas les e-mails - c'est une violation de la 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 GoBD |
|---|---|---|
| Réception d'un e-mail | Enregistrer le fichier EML sans modification | § 147 Abs. 1 Nr. 2 AO (lettres commerciales reçues) |
| Extraire la pièce jointe | Ranger la pièce jointe PDF/XML séparément + SHA-256 | Exploitabilité par machine (§ 147 Abs. 6 AO) |
| Sidecar par pièce | .v7g.md pour l'EML et pour chaque pièce jointe |
Compréhensibilité (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 pièce dans le Sidecar (
v7g_taxonomy). Le Pre-Commit-Hook vérifie que chaque EML possède un Sidecar et que chaque pièce jointe est classifiée séparément.
Complétude des pièces justificatives (Pre-Commit-Hook)
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 si | Référence GoBD |
|---|---|---|
source_sha256 présent |
Référence de pièce manquante | Rz. 146 (compréhensibilité) |
| La pièce existe dans le dépôt | Pièce non archivée | § 147 Abs. 1 Nr. 4 AO (pièce comptable) |
| Sidecar présent | Classification manquante | Rz. 146 (compréhensibilité) |
| Correspondance SHA-256 | Pièce modifiée a posteriori | Rz. 146 (inaltérabilité) |
Risiko-Leverage
| Aujourd'hui (cheap) | Demain (sécurisé pour l'audit) | Risque atténué |
|---|---|---|
| SHA-256 par pièce | ID de pièce unique, indépendante du nom de fichier | Contestation de l'authenticité de la pièce |
Sidecar avec Composite Key V7GUID:uuidV7 |
Acte de classification compréhensible | Contestation de la classification |
source_sha256 par écriture comptable |
Traçabilité rétrograde | Contestation du rattachement de la pièce |
gcpn.journal_entry_ref dans le Sidecar |
Traçabilité progressive | Contestation de la comptabilisation |
| Facture électronique XML inchangée + Sidecar | Conforme au § 14b UStG (intégrité) | Non-déductibilité de la TVA en amont |
| E-mail EML archivé + Sidecar | Conforme au § 147 Abs. 1 Nr. 2 AO | Perte de preuve en cas de litige avec les autorités |
| Le Pre-Commit-Hook vérifie la complétude des pièces | Aucune écriture comptable sans pièce | Violation GoBD « incomplet » |
Exigence Harness (aperçu)
Dérivable de ED06 :
| ID | Exigence | Priorité |
|---|---|---|
| FA-2.1 | SHA-256 comme ID de pièce | MUST |
| FA-2.2 | Obligation de Sidecar .v7g.md par pièce |
MUST |
| FA-2.3 | Sidecar avec Composite Key V7GUID:uuidV7 |
MUST |
| FA-2.8 | Fonctionnalité DMS : classification des pièces | 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 | MUST |
| FA-2.12 | Traçabilité rétrograde | MUST |
| FA-2.13 | Traçabilité progressive | MUST |
| FA-2.14 | Pre-Commit-Hook : vérifier la complétude des pièces | MUST |
| FA-2.15 | Workflow de numérisation : papier → scan → SHA-256 → Sidecar | SHOULD |
La liste complète des exigences dans Harness-Anforderungen.md.
Sources
- GoBD (circulaire du BMF, Rz. 146 - compréhensibilité, Rz. 147 - vérifiabilité)
- AO (§ 147 Abs. 1 Nr. 2/3 - lettres commerciales, § 147 Abs. 1 Nr. 4 - pièces comptables, § 147 Abs. 2 - exploitable par machine, § 147 Abs. 3 - délais de conservation)
- UStG (§ 14 - facture électronique, § 14b - conservation)
- FAQ du BMF sur la facture électronique (état : mars 2026)
- EN 16931 (CEN/TC 434 - XRechnung, ZUGFeRD)
AFJD/agents/(anonymisé) - concept SSoT avec archive de pièces justificatives, Sidecars
Topologie des sources et liens de référence CDN
| Rôle | Emplacement | Objectif |
|---|---|---|
| Primary / SSoT | git.gitcover.org/GCC | Dépôt canonique (signé GPG, versionné) |
| Public OSS Mirror / CDN | codeberg.org/gitcover-commons | Miroir en lecture seule ; découverte FLOSS |
| Community Hub | github.com/gitcover-commons | Issues & Discussions ; référence du code source sur Codeberg |
Remarque : cette attribution des sources, du miroir et du Community Hub reflète l'état actuel et peut changer. Veuillez vérifier la source canonique respective sur gitcover.org pour connaître l'état actuel.