ED08 - Durées de conservation & immuabilité : hooks Git, packages de preuves

Problème

GoBD et AO exigent une conservation à long terme - mais la mise en œuvre dans la pratique est défaillante :

Message clé

Une conservation conforme à la GoBD avec Git signifie :

  1. Les bundles Git sont autonomes - aucun compte cloud, aucune licence logicielle, aucun fournisseur de services - git clone suffit
  2. Les durées de conservation sont documentées dans le dépôt - chaque artefact porte sa durée dans le sidecar (obsolescence + date d'échéance)
  3. L'immuabilité par les tags et les branches protégées - les versions validées sont cryptographiquement immuables
  4. Des packages de preuves pour les clôtures de période - git bundle + Static-Web (Z3+) pour les auditeurs (voir ED05)
  5. Un contrôle des échéances en tant qu'artefact Git - checks/FRISTEN_CHECK.md signale les échéances imminentes

Conformité dès la conception : la conservation n'est pas un ajout ultérieur - elle naît du choix du support. Les bundles Git sont autonomes et survivent à tout blocage du cloud, tout changement de version logicielle et toute résiliation de fournisseur de services.

Durées de conservation selon AO § 147

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD AO["AO § 147
Aufbewahrungsfristen"] AO --> J10["10 Jahre
§ 147 Abs. 1 Nr. 1"] AO --> J8["8 Jahre
§ 147 Abs. 1 Nr. 4"] AO --> J6["6 Jahre
§ 147 Abs. 1 Nr. 2/3/5"] J10 --> D10["Bücher, Aufzeichnungen
Inventare, Jahresabschlüsse
Eröffnungsbilanz
Arbeitsanweisungen"] J8 --> D8["Buchungsbelege
E-Rechnungen (XML)
Lohnbelege"] J6 --> D6["Handels- / Geschäftsbriefe
E-Mails (EML)
Sonstige Unterlagen"] style AO fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style J10 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style J8 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style J6 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D10 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style D8 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style D6 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Durée Type de document Base juridique Exemples
10 ans Livres, enregistrements, inventaires, comptes annuels, bilan d'ouverture, instructions de travail § 147 Abs. 1 Nr. 1 AO Grand livre (JSON), documentation des processus, plan comptable
8 ans Pièces justificatives comptables § 147 Abs. 1 Nr. 4 AO Factures électroniques (XML), bulletins de paie, avis de sécurité sociale (SV)
6 ans Courriers commerciaux / lettres d'affaires, autres documents § 147 Abs. 1 Nr. 2/3/5 AO E-mails (EML), correspondance, notes

Important - début du délai : le délai commence à la clôture de l'année civile au cours de laquelle la dernière saisie a été effectuée, les comptes annuels ont été établis, le justificatif a été reçu ou l'enregistrement a été réalisé (§ 147 Abs. 4 AO). Une écriture du 15.08.2026 lance le délai le 31.12.2026 - le délai de 10 ans expire le 31.12.2036.

Immuabilité grâce à Git

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD B["Buchung
Commit"] B --> H["SHA-256-Hash
des Commits"] H --> T["Tag
(Freigabe-Marker)"] T --> P["Protected Branch
(kein Force-Push)"] P --> U["Unveränderbarkeit
GoBD Rz. 146"] K["Korrektur nötig"] K --> NC["Neuer Commit
+ Obsoleszenz-Markierung"] NC --> O["Original bleibt
nachvollziehbar"] style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style H fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style P fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style U fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style K fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style NC fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style O fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Mécanisme Fonctionnalité Git Référence GoBD
Hachage de commit Hash SHA-256 par commit - chaque modification génère un nouveau hash Rz. 146 (immuabilité)
Tags Marqueurs immuables pour les versions validées Rz. 146 (validation)
Branches protégées main protégé, pas de force-push, pas de rebase Rz. 146 (absence de réécriture)
Obsolescence Corrections sous forme de nouveaux commits avec superseded_by Rz. 146 (traçabilité)
Signature GPG Commits signés - authenticité vérifiable Rz. 146 (paternité de l'auteur)

Important - historique linéaire : seul un historique linéaire sans réécriture est conforme à la GoBD. git rebase, git commit --amend et git push --force sur main sont interdits. Le hook pre-commit vérifie qu'aucun force-push n'est effectué et que les corrections sont apportées par de nouveaux commits avec un marquage d'obsolescence.

Packages de preuves pour la conservation

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD FY["Geschäftsjahr
z. B. FY2026"] FY --> EP["Tenant Evidence Package
(Periodenabschluss)"] EP --> GB["git bundle
self-contained Archiv"] EP --> SW["Static-Web
(Z3+ Browser)"] EP --> MF["Manifest
+ SHA-256-Checksummen"] GB --> USB["USB-Stick
oder Off-Site-Backup"] SW --> USB MF --> USB USB --> PR["Prüfer
git clone oder index.html
offline, ohne IAM"] style FY fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style EP fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style GB fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SW fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style MF fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style USB fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style PR fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33

Un Tenant Evidence Package (voir ED05 Z3+) pour un exercice contient :

Composant Contenu Référence GoBD
git bundle Dépôt complet (historique, commits, tags) § 147 Abs. 6 AO (support de données Z3)
Static-Web Site web navigable dans un navigateur (HTML/PDF/JSON) Z3+ (accès de l'auditeur sans IAM)
Manifeste Sommes de contrôle SHA-256 par fichier, index V7GUID Rz. 146 (intégrité)
Documentation des processus Rendue en HTML Rz. 64–91 (documentation des processus)
Documents du DMS Toutes les pièces justificatives (PDF, XML, EML) § 147 Abs. 1 (conservation)
Contrats Documents couvrant plusieurs périodes § 147 Abs. 1 Nr. 2/3 (courriers commerciaux)

La conservation la plus sûre : une clé USB contenant git bundle + Static-Web + Manifeste est autonome, hors ligne, sans IAM, sans compte cloud et sans licence logicielle. Elle survit à toute résiliation de fournisseur de services, à tout changement de version logicielle et à tout blocage du cloud. Il s'agit de la forme la plus sûre de conservation conforme à la GoBD - car elle ne comporte aucune dépendance.

Bien entendu, la sécurité physique de la clé USB doit être assurée (coffre-fort, protection contre l'incendie, sauvegarde hors site).

Gestion des échéances dans le dépôt

checks/FRISTEN_CHECK.md

# Fristen-Check

## Vorlauf (bis 010926) - PRIO 1

- [ ] 200826: ELSTER-Organisationszertifikat anfordern
- [ ] 250826: Gefahrtarifstelle festlegen
- [ ] 300826: D&O-Versicherung GF-Haftung

## Aufbewahrungsfristen (laufend)

| Frist | Unterlagen-Typ | Endet | Status |
|---:|:---|---:|:---|
| 10 Jahre | Grundbuch FY2026 | 31.12.2036 | aktiv |
| 8 Jahre | E-Rechnungen FY2026 | 31.12.2034 | aktiv |
| 6 Jahre | E-Mails FY2026 | 31.12.2032 | aktiv |

Alerte automatique en cas d'échéances imminentes

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR FC["Fristen-Check
(Git-Artefakt)"] FC --> P14["über 14 Tage
grün"] FC --> P7["7–14 Tage
gelb"] FC --> P0["unter 7 Tage
orange/rot"] P0 --> W["Warnung
an Unternehmer"] style FC fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style P14 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style P7 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style P0 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Type d'échéance Alerte Action
Fin d'une durée de conservation 30 jours avant Documenter la destruction après expiration
Échéance administrative (ELSTER, SV) 14 jours avant Préparer la transmission
Délai de prescription (§ 169 AO) 90 jours avant Ne pas détruire les documents

Levier d'atténuation des risques

Aujourd'hui (faible coût) Demain (résistant aux révisions) Risque atténué
git bundle comme archive autonome Conservation pendant 10 ans sans compte cloud Non-conformité à la GoBD due à la résiliation du compte
Tags + branches protégées Immuabilité après validation Non-conformité à la GoBD due à une modification ultérieure
Package de preuves (Z3+) Accès de l'auditeur sans IAM, hors ligne Non-conformité à la GoBD en raison de données inaccessibles
Contrôle des échéances en tant qu'artefact Git Non-respect des échéances évité Majorations de retard § 152 AO
Marquage d'obsolescence Corrections traçables Modifications dissimulées
Commits signés GPG Authenticité vérifiable Contestation de la paternité de l'auteur
Static-Web (Z3+) Navigabilité dans un navigateur pour l'auditeur Non-conformité à la GoBD en raison de données inadaptées à l'usage par l'auditeur

Exigence du Harness (aperçu)

Déductible d'ED08 :

ID Exigence Priorité
FA-4.1 Fichier de contrôle des échéances (checks/FRISTEN_CHECK.md) MUST
FA-4.2 Entrées d'échéance avec date, type, tenant et référence de la pièce justificative MUST
FA-4.3 Alerte automatique pour les échéances < 14 jours SHOULD
FA-6.5 Conservation pendant 10 ans via des packages de preuves (bundles Git) MUST
FA-6.6 Immuabilité après validation (tags, branches protégées) MUST
FA-6.7 Générateur Static-Web pour la clôture de période (Z3+) SHOULD
TA-2.4 Pre-Commit : vérification du statut d'obsolescence SHOULD

La liste complète des exigences figure dans Harness-Anforderungen.md.

Sources

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 public OSS / CDN codeberg.org/gitcover-commons Miroir en lecture seule ; FLOSS-Discovery
Pôle communautaire github.com/gitcover-commons Issues & Discussions ; référence du code source sur Codeberg

Remarque : cette attribution des sources, du miroir et du pôle communautaire reflète l'état actuel et peut changer. Veuillez vérifier la source canonique concernée sur gitcover.org pour connaître l'état actuel.