ED07 - Aufbewahrungsfristen & Unveränderbarkeit: Git-Hooks, Evidence-Packages
Problem
GoBD und AO verlangen langfristige Aufbewahrung - aber die Praxis scheitert an der Umsetzung:
- "10 Jahre? Das regelt die Cloud." - viele Unternehmer glauben, die Cloud-Software regelt die Aufbewahrung automatisch - aber bei Kündigung des Accounts sind die Daten oft nicht mehr verfügbar (siehe ED01 Schmerzpunkt 6–7)
- Cloud-Account gekündigt, Daten weg - das Lohn-Account wurde pausiert, die alten Lohnkonten sind nur gegen Extra-Kosten reaktivierbar - GoBD-Verstoß (§ 146 Abs. 5 AO)
- Alte Software-Stände nicht reaktivierbar - die Sicherungen benötigen den alten Software-Stand, der nicht mehr installierbar ist - GoBD-Verstoß (§ 147 Abs. 2 AO: "unverzüglich lesbar")
- Keine Unveränderbarkeit - nachträglich geänderte Buchungen ohne Nachvollziehbarkeit - GoBD-Verstoß (Rz. 146)
- Keine Evidence-Packages - bei einer Außenprüfung kann der Prüfer nicht mit einem Datenträger versorgt werden (Z3) - GoBD- Verstoß (§ 147 Abs. 6 AO)
- Aufbewahrungsfristen nicht bekannt - 10 Jahre? 8 Jahre? 6 Jahre? Viele Unternehmer kennen die Fristen nicht für ihre Unterlagen
Kernaussage
GoBD-konforme Aufbewahrung mit Git bedeutet:
- Git-Bundles sind self-contained - kein Cloud-Account, keine
Software-Lizenz, kein Dienstleister -
git clonereicht - Aufbewahrungsfristen werden im Repo dokumentiert - jedes
Artefakt trägt seine Frist im Sidecar (
obsolescence+ Frist-Datum) - Unveränderbarkeit durch Tags und Protected Branches - freigegebene Stände sind kryptographisch unveränderbar
- Evidence-Packages für Periodenabschlüsse -
git bundle+ Static-Web (Z3+) für Prüfer (siehe ED04) - Fristen-Check als Git-Artefakt -
checks/FRISTEN_CHECK.mdwarnt vor drohenden Fristen
Compliance by Design: Aufbewahrung ist nicht nachträglich - sie entsteht durch die Wahl des Mediums. Git-Bundles sind self-contained und überdauern jede Cloud-Sperre, jeden Software-Stand-Wechsel, jede Dienstleister-Kündigung.
Aufbewahrungsfristen nach 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
| Frist | Unterlagen-Typ | Rechtsgrundlage | Beispiele |
|---|---|---|---|
| 10 Jahre | Bücher, Aufzeichnungen, Inventare, Jahresabschlüsse, Eröffnungsbilanz, Arbeitsanweisungen | § 147 Abs. 1 Nr. 1 AO | Grundbuch (JSON), Verfahrensdokumentation, Kontenplan |
| 8 Jahre | Buchungsbelege | § 147 Abs. 1 Nr. 4 AO | E-Rechnungen (XML), Lohnabrechnungen, SV-Bescheide |
| 6 Jahre | Handels- / Geschäftsbriefe, sonstige Unterlagen | § 147 Abs. 1 Nr. 2/3/5 AO | E-Mails (EML), Korrespondenz, Notizen |
Wichtig - Fristbeginn: Die Frist beginnt mit dem Schluss des Kalenderjahrs, in dem die letzte Eintragung gemacht, der Jahresabschluss aufgestellt, der Beleg empfangen oder die Aufzeichnung vorgenommen wurde (§ 147 Abs. 4 AO). Eine Buchung vom 15.08.2026 startet die Frist am 31.12.2026 - 10 Jahre enden am 31.12.2036.
Unveränderbarkeit durch Git
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
| Mechanismus | Git-Feature | GoBD-Bezug |
|---|---|---|
| Commit-Hash | SHA-256-Hash pro Commit - jede Änderung erzeugt neuen Hash | Rz. 146 (Unveränderbarkeit) |
| Tags | Unveränderbare Marker für freigegebene Stände | Rz. 146 (Freigabe) |
| Protected Branches | main geschützt, kein Force-Push, kein Rebase |
Rz. 146 (keine Umschreibung) |
| Obsoleszenz | Korrekturen als neue Commits mit superseded_by |
Rz. 146 (Nachvollziehbarkeit) |
| GPG-Signatur | Commits signiert - Authentizität nachweisbar | Rz. 146 (Urheberschaft) |
Wichtig - lineare Historie: GoBD-konform ist nur lineare Historie ohne Umschreibung.
git rebase,git commit --amendundgit push --forceaufmainsind verboten. Der Pre-Commit-Hook prüft, dass keine Force-Pushes erfolgen und Korrekturen als neue Commits mit Obsoleszenz-Markierung erfolgen.
Evidence-Packages für die Aufbewahrung
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
Ein Tenant Evidence Package (siehe ED04 Z3+) für ein Geschäftsjahr enthält:
| Komponente | Inhalt | GoBD-Bezug |
|---|---|---|
| git bundle | Vollständiges Repo (Historie, Commits, Tags) | § 147 Abs. 6 AO (Z3-Datenträger) |
| Static-Web | Browser-navigierbare Website (HTML/PDF/JSON) | Z3+ (Prüfer-Zugang ohne IAM) |
| Manifest | SHA-256-Checksummen pro Datei, V7GUID-Index | Rz. 146 (Integrität) |
| Verfahrensdoku | Als HTML gerendert | Rz. 64–91 (Verfahrensdokumentation) |
| DMS-Dokumente | Alle Belege (PDF, XML, EML) | § 147 Abs. 1 (Aufbewahrung) |
| Verträge | Periodenübergreifende Dokumente | § 147 Abs. 1 Nr. 2/3 (Handelsbriefe) |
Die sicherste Aufbewahrung: Ein USB-Stick mit
git bundle+ Static-Web + Manifest ist self-contained, offline, ohne IAM, ohne Cloud-Account, ohne Software-Lizenz. Er überdauert jede Dienstleister-Kündigung, jeden Software-Stand-Wechsel, jede Cloud-Sperre. Das ist die sicherste Form der GoBD-konformen Aufbewahrung - weil es keine Abhängigkeiten gibt.Natürlich muss man die physische Sicherheit des USB-Sticks beachten (Tresor, Brandschutz, Off-Site-Backup).
Fristen-Management im Repo
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 |
Auto-Warnung bei drohenden Fristen
(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
| Frist-Typ | Warnung | Aktion |
|---|---|---|
| Aufbewahrungsfrist endet | 30 Tage vorher | Vernichtung nach Ablauf dokumentieren |
| Behörden-Frist (ELSTER, SV) | 14 Tage vorher | Übermittlung vorbereiten |
| Verjährungsfrist (§ 169 AO) | 90 Tage vorher | Unterlagen nicht vernichten |
Risiko-Leverage
| Heute (cheap) | Morgen (revisionssicher) | Risiko gemindert |
|---|---|---|
git bundle als self-contained Archiv |
10-Jahres-Aufbewahrung ohne Cloud-Account | GoBD-Verstoß durch Account-Kündigung |
| Tags + Protected Branches | Unveränderbarkeit nach Freigabe | GoBD-Verstoß durch nachträgliche Änderung |
| Evidence-Package (Z3+) | Prüfer-Zugang ohne IAM, offline | GoBD-Verstoß durch unzugängliche Daten |
| Fristen-Check als Git-Artefakt | Fristenversäumnis vermieden | Verspätungszuschläge § 152 AO |
| Obsoleszenz-Markierung | Korrekturen nachvollziehbar | Verdeckte Änderungen |
| GPG-signierte Commits | Authentizität nachweisbar | Bestreitung der Urheberschaft |
| Static-Web (Z3+) | Browser-Navigierbarkeit für Prüfer | GoBD-Verstoß durch prüfer-unfreundliche Daten |
Harness-Anforderung (Vorschau)
Aus ED07 ableitbar:
| ID | Anforderung | Priorität |
|---|---|---|
| FA-4.1 | Fristen-Check-Datei (checks/FRISTEN_CHECK.md) |
MUST |
| FA-4.2 | Fristen-Einträge mit Datum, Typ, Tenant, Beleg-Referenz | MUST |
| FA-4.3 | Auto-Warnung bei Fristen < 14 Tage | SHOULD |
| FA-6.5 | 10-Jahres-Aufbewahrung via Evidence-Packages (Git-Bundles) | MUST |
| FA-6.6 | Unveränderbarkeit nach Freigabe (Tags, Protected Branches) | MUST |
| FA-6.7 | Static-Web-Generator für Periodenabschluss (Z3+) | SHOULD |
| TA-2.4 | Pre-Commit: Obsoleszenz-Status-Prüfung | SHOULD |
Die vollständige Anforderungsliste in Harness-Anforderungen.md.
Quellen
- GoBD (BMF-Schreiben, Rz. 146 - Unveränderbarkeit, Rz. 152 - Aufbewahrungsfristen)
- AO (§ 146 Abs. 5 - Verfügbarkeit, § 147 - Aufbewahrungsfristen 10/8/6 Jahre, § 147 Abs. 4 - Fristbeginn, § 147 Abs. 6 - Z3-Datenzugriff)
GitCover.Ledger/docs/02-Tenant-Evidence-Package.md- Tenant Evidence Package-KonzeptAFJD/agents/(anonymisiert) - SSoT-Konzept mit Fristen-Check, Evidence-Packages
Quellen-Topologie und CDN-Referenz-Links
| Rolle | Ort | Zweck |
|---|---|---|
| Primary / SSoT | git.gitcover.org/GCC | Kanonische Ablage (GPG-signiert, versioniert) |
| Public OSS Mirror / CDN | codeberg.org/gitcover-commons | Read-only-Spiegel; FLOSS-Discovery |
| Community Hub | github.com/gitcover-commons | Issues & Discussions; Quell-Code-Referenz auf Codeberg |
Hinweis: Diese Zuordnung von Quellen, Mirror und Community-Hub spiegelt den aktuellen Stand wider und kann sich ändern. Bitte prüfen Sie die jeweilige kanonische Quelle auf gitcover.org für den aktuellen Zustand.