ED06 - Justificatifs, DMS, facture électronique : ordre, traçabilité rétrograde/progressive
Problème
Un entrepreneur commence à archiver ses justificatifs - et se trouve confronté à la question : comment classer les justificatifs de manière conforme GoBD, et comment les rendre traçables ?
La pratique actuelle dans les PME :
- Justificatifs papier dans des classeurs - non électroniques, non exploitables par machine, non traçables de manière rétrograde/progressive
- PDF dans des comptes cloud - non conformes GoBD (pas d'immutabilité, pas d'exploitabilité par machine, dépendance vis-à-vis du prestataire)
- E-mails avec pièces jointes PDF - non archivés (la boîte mail n'est pas une archive), pas d'authenticité du justificatif, pas de chaîne de preuve
- Factures électroniques (XML) non comprises - beaucoup d'entrepreneurs ne savent pas que, depuis 2025, le fichier XML est le document original, et non le PDF
- (Souvent) Aucun ordre - les justificatifs sont classés par date, pas par opération ; les écritures comptables n'ont pas de référence de justificatif
- (Souvent) Aucune traçabilité rétrograde - à partir de l'écriture comptable, le vérificateur 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 manquent
Message clé
Un archivage des justificatifs conforme GoBD signifie :
- Chaque justificatif a une identité unique (DocID) - l'
uuidV7(Object ID) constitue déjà à elle seule l'identité unique du justificatif, indépendamment du nom de fichier. En outre, chaque justificatif reçoit un hash SHA-256 comme contrôle d'intégrité cryptographique. La clé compositeV7GUID:uuidV7sert à l'organisation de l'archivage (par ex. par type de justificatif) et aux requêtes DB (par ex. avec EF Core dans une Vertical App) - pas à l'identité elle-même. - Chaque justificatif a un sidecar -
.gc.mdavec classification (V7GUID), identité d'objet (uuidV7), taxonomie, statut d'obsolescence, horodatage d'enregistrement (dansuuidV7comme horodatage 48 bits). Exception (à partir de 261011) : les justificatifs intégrés dans une procédure de signature (justificatif interne numérique, par ex. justificatif de représentation) portent leurs métadonnées de sidecar intégralement dans le*.gcsig.md(blocsourceintégré, schémagcsig-1.4) ; un.gc.mdséparé disparaît — aucun sidecar concurrent. - Chaque écriture comptable référence son justificatif -
source_sha256dans l'entrée de journal → justificatif - Traçabilité rétrograde - de l'écriture comptable → justificatif →
entrée de journal →
uuidV7 - Traçabilité progressive - du justificatif → écriture comptable → grand livre → bilan d'ouverture
- Facture électronique : le XML est le document original - pas le PDF (depuis 2025, § 14 UStG, EN 16931)
Compliance by Design : l'ordre des justificatifs ne résulte pas d'un tri a posteriori, mais de champs obligatoires structurels (SHA-256, V7GUID, sidecar) et de hooks pre-commit qui vérifient la référence de justificatif de chaque écriture comptable.
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 | Délai de conservation |
|---|---|---|
| Justificatif papier | Scan requis (§ 147 Abs. 2 AO) ; l'original peut être détruit si le scan est conforme GoBD | 8 ans (§ 147 Abs. 3 AO) |
| Justificatif PDF (« autre facture ») | Depuis 2025, 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 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) ; 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 transactions B2B entre entreprises nationales (§ 14 UStG). Un simple PDF n'est plus 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.gc.md # Sidecar
│ │ └── rechnung_002.pdf # Sonstige Rechnung (PDF)
│ │ └── rechnung_002.pdf.gc.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 .gc.md avec la clé composite
V7GUID:uuidV7 :
{
"$schema": "https://gitcover.org/schemas/v7g-sidecar-2.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 de l'archivage et requête :
uuidV7(Object ID) - constitue déjà à elle seule l'identité unique (DocID) du justificatif, générée avec un horodatage prédéfini, horodatage 48 bits ancré dans le GUIDV7GUID(Class) - classifie le type de justificatif issu du registre.gitcover(type de justificatif, organisation de l'archivage, requête DB dans une Vertical App avec EF Core)v7g_taxonomy[].v7guid- Object ID du justificatif classifiégcpn.prima_nota_ref/journal_entry_ref- renvoi vers le grand livre/journal (traçabilité progressive)- La clé composite
V7GUID:uuidV7sert à l'organisation de l'archivage et aux requêtes - l'identité du justificatif est l'uuidV7seule- 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 .gc.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 .gc.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 | Départ | Résolution via | Cible | Référence GoBD |
|---|---|---|---|---|
| Rétrograde | Écriture comptable (SKR04) | source_sha256 → justificatif → sidecar uuidV7 |
Entrée de journal | Rz. 146 (traçabilité) |
| Progressive | Justificatif (SHA-256) | Sidecar gcpn.journal_entry_ref → écriture comptable → grand livre |
Bilan d'ouverture | Rz. 147 (vérifiabilité) |
Référence GoBD : la traçabilité rétrograde correspond à GoBD Rz. 146 (traçabilité - « un tiers expert dans un délai raisonnable »). La traçabilité progressive correspond à GoBD Rz. 147 (vérifiabilité). Les deux sont garanties by Design par SHA-256 + V7GUID + sidecar - et non par des renvois manuels.
Repérabilité : docUid au lieu du nom/chemin (261026)
Chaque référence de justificatif dans une facture porte le docUid du justificatif d'origine, pas le nom ni le chemin :
dans le XML comme cac:AdditionalDocumentReference/cbc:ID (uuidV7), dans le sidecar/GCPN comme docUid.
Le registre DMS reprend le même docUid comme object_id - il n'invente pas une seconde
identité. Un justificatif est ainsi repérable de manière univoque par docUid, même s'il est renommé ou
déplacé.
L'action qui crée ou stocke un justificatif est gérée comme pgid (Process Gateway,
classe V7GUID) : produced_by_pgid pour la création (par ex. création de facture 180),
stored_by_pgid pour l'enregistrement DMS (par ex. 183). Catalogue :
GCUV/TOP/compliance/process_gateways.json ; valeurs normatives 8 bits :
OSS/TOP/.gitcover/dictionaries/gateway_ids.json.
GCPN en un seul fichier : pour chaque facture, il existe un .gcpn.md qui
contient le XML (document original) et le PDF (vue) dans documents[], ainsi que le workflow
create→pdf→present→accept→sign→register et les events et relations
(contrat/justificatifs de coûts). XML/PDF restent des fichiers séparés ; un
.gc.md séparé disparaît. Progressivement (Rz. 147), on lit du GCPN vers les documents ;
rétrogradement (Rz. 146), du docUid dans le DMS via le GCPN vers les justificatifs.
Règle de promotion : après le scan du dépôt et la création du sidecar, un .gc.md peut être
enrichi dans le GCPN ; les données JSON du sidecar sont intégrées (GCPN = sur-ensemble,
.gc.md = sous-ensemble). Ensuite, le .gc.md séparé est redondant et peut être supprimé ;
l'historique Git reste la preuve GoBD, le GCPN est la SSoT.
Identité de facture : invoice_id est une uuidV7 (critère d'ordre/de référence) ;
invoice_no n'est que du texte. Seller/Buyer sont référencés via leur Party-uuidV7
(creditor/vendor respectivement debitor/customer), pas via leur nom réel (PII).
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 .gc.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 (par ex. ELSTER (e-rechnung.elster.de)[https://e-rechnung.elster.de] |
| ZUGFeRD | Hybride : PDF + XML intégré | Partie XML (déterminante depuis 2025, BMF FAQ 12a) | Image PDF (simple affichage auxiliaire) |
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 est déterminante (BMF FAQ question 12a). L'image PDF n'est plus prépondérante. Le sidecar doit référencer le XML comme document original, pas le PDF.
Hook pre-commit pour les factures électroniques
Le hook pre-commit vérifie, pour les factures électroniques :
| Vérification | Erreur en cas de |
|---|---|
| Le fichier XML a une structure XRechnung/ZUGFeRD valide | Structure XML invalide |
Sidecar .gc.md présent |
Sidecar manquant |
sha256 dans le sidecar correspond au fichier XML |
Non-correspondance de hash (fichier modifié) |
v7g_taxonomy classifié comme facture électronique |
Classification manquante |
Aucun 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 donc être conservés 6 ans. Beaucoup d'entrepreneurs n'archivent pas les 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 .gc.md
pro Beleg"] SH2 --> SC2["Sidecar .gc.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 de l'e-mail | Enregistrer le fichier EML sans modification | § 147 Abs. 1 Nr. 2 AO (lettres commerciales reçues) |
| Extraire la pièce jointe | Stocker séparément la pièce jointe PDF/XML + SHA-256 | Exploitabilité par machine (§ 147 Abs. 6 AO) |
| Sidecar par justificatif | .gc.md pour l'EML et pour chaque pièce jointe |
Traçabilité (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 pre-commit vérifie que chaque EML a un sidecar et que chaque pièce jointe est classifiée séparément.
Complétude des justificatifs (hook pre-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 .gc.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 en cas de | Référence GoBD |
|---|---|---|
source_sha256 présent |
Référence de justificatif manquante | Rz. 146 (traçabilité) |
| Le justificatif existe dans le dépôt | Justificatif non archivé | § 147 Abs. 1 Nr. 4 AO (justificatif d'écriture) |
| Sidecar présent | Classification manquante | Rz. 146 (traçabilité) |
| Correspondance SHA-256 | Justificatif modifié a posteriori | Rz. 146 (immutabilité) |
Levier de risque
| Aujourd'hui (cheap) | Demain (sécurisé pour l'audit) | Risque réduit |
|---|---|---|
| SHA-256 par justificatif | ID 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étrograde | Contestation de l'affectation du justificatif |
gcpn.journal_entry_ref dans le sidecar |
Traçabilité progressive | Contestation de l'écriture |
| XML de facture électronique inchangé + sidecar | Conforme § 14b UStG (intégrité) | Non-déductibilité de la TVA en amont |
| E-mail EML archivé + sidecar | Conforme § 147 Abs. 1 Nr. 2 AO | Perte de preuve en cas de litige avec l'administration |
| Hook pre-commit vérifie la complétude des justificatifs | Aucune écriture comptable sans justificatif | Violation GoBD « incomplet » |
Exigence du harness (aperçu)
Déductible d'ED06 :
| ID | Exigence | Priorité |
|---|---|---|
| FA-2.1 | SHA-256 comme ID de justificatif | MUST |
| FA-2.2 | Sidecar par justificatif — *.gc.md ou (pour les justificatifs signés/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 de la facture électronique : import XRechnung/ZUGFeRD, validation | SHOULD |
| FA-2.10 | Archivage des e-mails : EML + SHA-256 + sidecar | MUST |
| FA-2.11 | Ordre GoBD : index par exercice comptable | MUST |
| FA-2.12 | Traçabilité rétrograde | MUST |
| FA-2.13 | Traçabilité progressive | MUST |
| FA-2.14 | Hook pre-commit : vérifier la complétude des justificatifs | MUST |
| FA-2.15 | Workflow de scan : papier → scan → SHA-256 → sidecar | SHOULD |
La liste complète des exigences se trouve dans Harness-Anforderungen.md.
Sources
- GoBD (lettre BMF, Rz. 146 - traçabilité, Rz. 147 - vérifiabilité)
- AO (§ 147 Abs. 1 Nr. 2/3 - lettres commerciales, § 147 Abs. 1 Nr. 4 - justificatifs d'écriture, § 147 Abs. 2 - exploitable par machine, § 147 Abs. 3 - délais de conservation)
- UStG (§ 14 - facture électronique, § 14b - conservation)
- FAQ BMF sur la facture électronique (état mars 2026)
- EN 16931 (CEN/TC 434 - XRechnung, ZUGFeRD)
E1/agents/(anonymisé) - concept SSoT avec archive de justificatifs, sidecars
Topologie des sources et liens de référence CDN
| Rôle | Lieu | Objet |
|---|---|---|
| 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 correspondante sur gitcover.org pour connaître l'état actuel.