ED06 - Verfahrensdokumentation GoBD: Pflichtfelder, Versionierung, Freigabe
Problem
GoBD Rz. 64–91 verlangt eine Verfahrensdokumentation - aber im KMU-Bereich ist sie die große Ausnahme:
- "Was ist eine Verfahrensdokumentation?" - die meisten Unternehmer kennen den Begriff nicht, geschweige denn den Inhalt
- "Das macht der Steuerberater" - viele glauben, der StB erstellt die Verfahrensdoku - aber er kann nur anleiten, der Unternehmer muss sie selbst erstellen und pflegen
- Word-Dokument im Schreibtisch - wenn es eine Verfahrensdoku gibt, ist sie ein statisches Word-Dokument, das bei Systemwechsel nicht aktualisiert wird - GoBD-Verstoß
- Keine Versionierung - Änderungen an der Verfahrensdoku werden nicht nachvollziehbar dokumentiert - aber GoBD Rz. 83 verlangt Aktualität und Nachvollziehbarkeit
- Keine Freigabe - die Verfahrensdoku wird nie "freigegeben" - aber GoBD verlangt, dass der Stand zum Prüfungszeitpunkt klar ist
- Systemwechsel nicht dokumentiert - bei Migration zu neuer Software wird die Verfahrensdoku nicht fortgeschrieben - GoBD Rz. 146–150 verlangt das ausdrücklich
Kernaussage
Eine GoBD-konforme Verfahrensdokumentation im Git-Repo bedeutet:
- Die Verfahrensdoku ist ein versioniertes Git-Artefakt - nicht ein Word-Dokument, sondern Markdown + JSON im Repo
- Jede Änderung ist nachvollziehbar -
git logzeigt Wer, Wann, Was, Warum (Commit-Autor,uuidV7-Zeitstempel, Diff, Commit-Message) - Freigabe durch Tags - ein Git-Tag markiert den freigegebenen
Stand der Verfahrensdoku (z. B.
vd-v1.0-2026) - Systemwechsel werden fortgeschrieben - bei Migration wird ein neuer Commit mit Begründung erstellt, die alte Version bleibt nachvollziehbar
- Das Repo selbst ist Teil der Verfahrensdoku -
git logzeigt das Verfahren,.gitcover/schemas/zeigt die Datenstrukturen, Git-Hooks zeigen die Kontrollen
Compliance by Design: Die Verfahrensdokumentation ist nicht nachträglich - sie entsteht durch die Nutzung von Git. Wer mit Git-Repositories arbeitet, dokumentiert sein Verfahren automatisch durch Commits, Diffs und Tags. Die formelle Verfahrensdoku ergänzt dies um die menschenlesbare Beschreibung.
Was ist eine Verfahrensdokumentation?
(GoBD Rz. 64–91)"] VD --> V["Verfahren
(Wie wird gebucht?)"] VD --> S["Systemumgebung
(Welche Software/Hardware?)"] VD --> O["Organisation
(Wer macht was?)"] VD --> K["Kontrollen
(Wie wird geprüft?)"] VD --> D["Daten
(Welche Formate/Strukturen?)"] V --> G["Git-Repo
(Commits, Hooks)"] S --> G O --> G K --> G D --> G style VD fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style V fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style O fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style K fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style D fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style G fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
| GoBD-Anforderung | Inhalt | Wie Git es erfüllt |
|---|---|---|
| Verfahren (Rz. 64–71) | Beschreibung des Buchführungsverfahrens | git log zeigt jeden Schritt; Commit-Messages dokumentieren Begründung |
| Systemumgebung (Rz. 72–76) | Software, Hardware, Versionen | .gitcover/ mit Schemata, Dictionaries; git config zeigt Einstellungen |
| Organisation (Rz. 77–80) | Zuständigkeiten, Rollen, Berechtigungen | role-Feld pro Artefakt; git log --author zeigt Zuständigkeit |
| Kontrollen (Rz. 81–85) | Internen Kontrollen, Plausibilitätsprüfungen | Pre-Commit-Hooks (Schema, Sphären, Obsoleszenz); Post-Commit-Hooks (Index) |
| Daten (Rz. 86–91) | Datenstrukturen, Formate, Schnittstellen | JSON-Schemata in .gitcover/schemas/; Sidecars mit v7g_taxonomy |
Pflichtfelder der Verfahrensdokumentation
Struktur im Git-Repo
ORG-1/
├── .gitcover/
│ ├── schemas/ # Datenstrukturen (Rz. 86–91)
│ │ ├── diary-entry-1.0.schema.json
│ │ ├── v7g-sidecar-1.0.schema.json
│ │ └── timesheet-1.0.schema.json
│ ├── dictionaries/ # Klassifizierungen (Rz. 86–91)
│ │ ├── spheres.json
│ │ ├── roles.json
│ │ └── beleg-types.json
│ └── LEGAL_ENTITY.v7g.json # Tenant-Identität
├── docs/
│ └── verfahrensdokumentation/
│ ├── README.md # Einstieg + Übersicht
│ ├── 01-verfahren.md # Buchführungsverfahren (Rz. 64–71)
│ ├── 02-systemumgebung.md # Software/Hardware (Rz. 72–76)
│ ├── 03-organisation.md # Zuständigkeiten (Rz. 77–80)
│ ├── 04-kontrollen.md # Internen Kontrollen (Rz. 81–85)
│ └── 05-daten.md # Datenstrukturen (Rz. 86–91)
└── .githooks/
├── pre-commit # Kontrollen (Rz. 81–85)
└── post-commit # Index-Generierung
Verfahrensdoku als JSON-Artefakt
Die Verfahrensdoku selbst ist ein versioniertes Artefakt mit
V7GUID (Class) und uuidV7 (Object ID als DocID):
{
"$schema": "https://gitcover.org/schemas/verfahrensdoku-1.0.schema.json",
"V7GUID": "<V7GUID-Class-aus-Registry>",
"uuidV7": "<uuidV7-Object-mit-vorgegebener-Zeitmarke>",
"author": "E1",
"role": "GF",
"tenant": "ORG-1",
"sphere": "wirtschaftlich",
"source": "E1",
"version": "1.0",
"status": "released",
"sections": ["01-verfahren", "02-systemumgebung", "03-organisation", "04-kontrollen", "05-daten"]
}
Hinweis: Die
uuidV7ist die DocID der Verfahrensdoku. Der Composite KeyV7GUID:uuidV7dient der Ablage-Organisation und DB-Query. Kein separatesdatetime/date-Feld - die Zeit steckt in deruuidV7.
Versionierung und Freigabe
Commit 1"] E --> R["Review
Commit 2 (Änderungen)"] R --> F["Freigabe
Tag: vd-v1.0-2026"] F --> P["Produktiv
Stand v1.0"] P --> A["Änderung nötig
(z. B. Systemwechsel)"] A --> E2["Entwurf v2.0
Commit 3"] E2 --> R2["Review v2.0"] R2 --> F2["Freigabe
Tag: vd-v2.0-2027"] F2 --> P2["Produktiv
Stand v2.0"] F -.-> OBS["obsolescence:
v1.0 → superseded by v2.0"] style E fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style F fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style P fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style A fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style E2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style F2 fill:#10A987,stroke:#0A7F5C,color:#FBFAF7 style P2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style OBS fill:#E5E7EB,stroke:#6B7280,color:#0F1B33
| Phase | Git-Operation | GoBD-Bezug |
|---|---|---|
| Entwurf | Commit auf main (oder Feature-Branch) |
Rz. 83 (Aktualität) |
| Review | Weitere Commits mit Änderungen | Rz. 83 (Nachvollziehbarkeit) |
| Freigabe | git tag vd-v1.0-2026 |
Rz. 83 (verbindlicher Stand) |
| Produktiv | Tag ist unveränderbar (Protected) | Rz. 146 (Unveränderbarkeit) |
| Änderung | Neue Commits + neuer Tag | Rz. 146–150 (Systemwechsel) |
| Obsoleszenz | Alte Version obsolescence: superseded_by |
Rz. 146 (Nachvollziehbarkeit) |
Wichtig - Tags als Freigabe-Marker: Ein Git-Tag ist unveränderbar
- er markiert einen exakten Commit-Stand, der nicht nachträglich geändert werden kann. Das entspricht GoBD Rz. 146 (Unveränderbarkeit). Der Prüfer kann mit
git show vd-v1.0-2026den exakten Stand der Verfahrensdoku zum Prüfungszeitpunkt rekonstruieren.
Systemwechsel und Migration (GoBD Rz. 146–150)
(z. B. Cloud-Lohn)"] A --> M["Migration
Commit mit Begründung"] M --> N["Neues System
(z. B. Git-Cover)"] A --> DA["Daten alt
git bundle
(self-contained)"] N --> DN["Daten neu
Git-Repo
(fortgeführt)"] M --> VD["Verfahrensdoku
fortgeschrieben
+ Commit-Message
mit Begründung"] style A fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style M fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style N fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style DA fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style DN fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style VD fill:#10A987,stroke:#0A7F5C,color:#FBFAF7
GoBD Rz. 146–150 verlangt bei Systemwechsel:
- Daten des alten Systems verfügbar halten -
git bundleals self-contained Archiv (kein Cloud-Account nötig, siehe ED04 Z3) - Verfahrensdokumentation fortgeschreiben - neuer Commit mit Begründung: "Migration von Cloud-Lohn zu GitCover, Datum, Rolle"
- Übergangszeit dokumentieren - welche Daten wurden wie migriert, welche Prüfungen wurden durchgeführt
- Alte Version als obsolet markieren -
obsolescence: superseded_byim alten Verfahrensdoku-Artefakt
Praxis-Beispiel: Der Unternehmer (
E1) migriert von einer Cloud-Lohnsoftware zu GitCover. Er erstellt einengit bundleder alten Daten, schreibt die Verfahrensdoku fort (neuer Commit mit Commit-Message "Migration zu GitCover, 260815, Rolle: GF"), markiert die alte Version alssupersededund taggt die neue Version alsvd-v2.0-2027. Der Prüfer kann beide Versionen nachvollziehen.
Das Repo selbst als Verfahrensdokumentation
Verfahren (Rz. 64–71)"] R --> GC["git config
Systemumgebung (Rz. 72–76)"] R --> GA["git log --author
Organisation (Rz. 77–80)"] R --> GH["Git-Hooks
Kontrollen (Rz. 81–85)"] R --> SC["Schemata + Sidecars
Daten (Rz. 86–91)"] GL --> VD["Verfahrensdokumentation
entsteht automatisch"] GC --> VD GA --> VD GH --> VD SC --> VD style R fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style GL fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GC fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GA fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style GH fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style SC fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style VD fill:#10A987,stroke:#0A7F5C,color:#FBFAF7
Die zentrale Einsicht: Ein Git-Repo ist selbst eine Verfahrensdokumentation -
git logzeigt das Verfahren,git configzeigt die Systemumgebung, Git-Hooks zeigen die Kontrollen, Schemata zeigen die Datenstrukturen. Die formelle Verfahrensdoku (Markdown indocs/verfahrensdokumentation/) ergänzt dies um die menschenlesbare Beschreibung - aber die autoritative Quelle ist das Repo selbst.
Risiko-Leverage
| Heute (cheap) | Morgen (revisionssicher) | Risiko gemindert |
|---|---|---|
| Verfahrensdoku als Git-Artefakt | GoBD Rz. 64–91 by Design erfüllt | Schätzung § 162 AO (keine Verfahrensdoku) |
git log als Verfahrensnachweis |
Nachvollziehbarkeit in angemessener Zeit | Bestreitung der Verfahrensdoku |
| Tags als Freigabe-Marker | Unveränderbarer Stand zum Prüfungszeitpunkt | Bestreitung des Standes |
| Systemwechsel als Commit + Bundle | GoBD Rz. 146–150 konform | GoBD-Verstoß durch nicht dokumentierten Wechsel |
| Obsoleszenz-Markierung | Alte Versionen nachvollziehbar | Verdeckte Änderungen |
| Repo selbst als Verfahrensdoku | Automatische Dokumentation durch Nutzung | Verfahrensdoku veraltet |
Harness-Anforderung (Vorschau)
Aus ED06 ableitbar:
| ID | Anforderung | Priorität |
|---|---|---|
| FA-6.1 | Verfahrensdokumentation als versioniertes Git-Artefakt | MUST |
| FA-6.3 | SKR04-Kontenplan-Verwaltung (inkl. Lohnkonten) | SHOULD |
| FA-6.6 | Unveränderbarkeit nach Freigabe (Tags, Protected Branches) | MUST |
| FA-6.7 | Static-Web-Generator für Periodenabschluss (Z3+) | SHOULD |
| TA-2.1 | Pre-Commit: JSON-Schema-Validierung | MUST |
| TA-2.4 | Pre-Commit: Obsoleszenz-Status-Prüfung | SHOULD |
| TA-2.6 | Post-Commit: Auto-Index-Generierung | SHOULD |
Die vollständige Anforderungsliste in Harness-Anforderungen.md.
Quellen
- GoBD (BMF-Schreiben, Rz. 64–91 - Verfahrensdokumentation, Rz. 146–150 - Systemwechsel, Rz. 83 - Aktualität)
- AO (§ 146 - Ordnungsvorschriften, § 147 - Aufbewahrung)
AFJD/agents/(anonymisiert) - SSoT-Konzept mit Verfahrensdoku als Git-Artefakt
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.