ED06 - GoBD Process Documentation: Mandatory Fields, Versioning, Approval
Problem
GoBD Rz. 64–91 requires process documentation - but in the SME sector it is the great exception:
- "What is process documentation?" - most entrepreneurs are not familiar with the term, let alone its content
- "The tax advisor does that" - many believe the tax advisor creates the process documentation - but he can only provide guidance; the entrepreneur must create and maintain it themselves
- Word document in the desk drawer - if process documentation exists at all, it is a static Word document that is not updated when the system changes - a GoBD violation
- No versioning - changes to the process documentation are not traceably documented - but GoBD Rz. 83 requires currency and traceability
- No approval - the process documentation is never "approved" - but GoBD requires that the state at the time of the audit be clear
- System changes not documented - when migrating to new software, the process documentation is not carried forward - GoBD Rz. 146–150 expressly requires this
Key Message
A GoBD-compliant process documentation in the Git repo means:
- The process documentation is a versioned Git artifact - not a Word document, but Markdown + JSON in the repo
- Every change is traceable -
git logshows who, when, what, why (commit author,uuidV7timestamp, diff, commit message) - Approval via tags - a Git tag marks the approved state of the
process documentation (e.g.,
vd-v1.0-2026) - System changes are carried forward - during a migration, a new commit with a rationale is created; the old version remains traceable
- The repo itself is part of the process documentation -
git logshows the process,.gitcover/schemas/shows the data structures, Git hooks show the controls
Compliance by Design: Process documentation is not created after the fact - it emerges from the use of Git. Anyone working with Git repositories automatically documents their process through commits, diffs, and tags. The formal process documentation supplements this with the human-readable description.
What Is Process Documentation?
(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 Requirement | Content | How Git Fulfills It |
|---|---|---|
| Process (Rz. 64–71) | Description of the bookkeeping process | git log shows every step; commit messages document the rationale |
| System environment (Rz. 72–76) | Software, hardware, versions | .gitcover/ with schemas, dictionaries; git config shows settings |
| Organization (Rz. 77–80) | Responsibilities, roles, permissions | role field per artifact; git log --author shows responsibility |
| Controls (Rz. 81–85) | Internal controls, plausibility checks | Pre-commit hooks (schema, spheres, obsolescence); post-commit hooks (index) |
| Data (Rz. 86–91) | Data structures, formats, interfaces | JSON schemas in .gitcover/schemas/; sidecars with v7g_taxonomy |
Mandatory Fields of the Process Documentation
Structure in the 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
Process Documentation as a JSON Artifact
The process documentation itself is a versioned artifact with
V7GUID (Class) and uuidV7 (Object ID as 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"]
}
Note: The
uuidV7is the DocID of the process documentation. The composite keyV7GUID:uuidV7serves storage organization and DB queries. No separatedatetime/datefield - the time is embedded in theuuidV7.
Versioning and Approval
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 Reference |
|---|---|---|
| Draft | Commit on main (or feature branch) |
Rz. 83 (currency) |
| Review | Further commits with changes | Rz. 83 (traceability) |
| Approval | git tag vd-v1.0-2026 |
Rz. 83 (binding state) |
| Production | Tag is immutable (protected) | Rz. 146 (immutability) |
| Change | New commits + new tag | Rz. 146–150 (system change) |
| Obsolescence | Old version obsolescence: superseded_by |
Rz. 146 (traceability) |
Important - Tags as Approval Markers: A Git tag is immutable
- it marks an exact commit state that cannot be changed afterwards. This corresponds to GoBD Rz. 146 (immutability). The auditor can use
git show vd-v1.0-2026to reconstruct the exact state of the process documentation at the time of the audit.
System Changes and 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 requires the following in the event of a system change:
- Keep the data of the old system available -
git bundleas a self-contained archive (no cloud account required, see ED04 Z3) - Update the process documentation - new commit with a rationale: "Migration from Cloud-Lohn to GitCover, date, role"
- Document the transition period - which data was migrated and how, which checks were performed
- Mark the old version as obsolete -
obsolescence: superseded_byin the old process documentation artifact
Practical Example: The entrepreneur (
E1) migrates from Cloud-Lohn payroll software to GitCover. He creates agit bundleof the old data, updates the process documentation (new commit with the commit message "Migration to GitCover, 260815, role: GF"), marks the old version assuperseded, and tags the new version asvd-v2.0-2027. The auditor can trace both versions.
The Repo Itself as Process Documentation
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
The Central Insight: A Git repo is itself a process documentation -
git logshows the process,git configshows the system environment, Git hooks show the controls, schemas show the data structures. The formal process documentation (Markdown indocs/verfahrensdokumentation/) supplements this with the human-readable description - but the authoritative source is the repo itself.
Risk Leverage
| Today (cheap) | Tomorrow (audit-proof) | Risk Mitigated |
|---|---|---|
| Process documentation as a Git artifact | GoBD Rz. 64–91 fulfilled by design | Estimated assessment under § 162 AO (no process documentation) |
git log as evidence of the process |
Traceability within a reasonable time | Denial of the process documentation |
| Tags as approval markers | Immutable state at the time of the audit | Denial of the state |
| System change as commit + bundle | GoBD Rz. 146–150 compliant | GoBD violation due to an undocumented change |
| Obsolescence marking | Old versions remain traceable | Concealed changes |
| Repo itself as process documentation | Automatic documentation through use | Outdated process documentation |
Harness Requirement (Preview)
Derivable from ED06:
| ID | Requirement | Priority |
|---|---|---|
| FA-6.1 | Process documentation as a versioned Git artifact | MUST |
| FA-6.3 | SKR04 chart of accounts management (incl. payroll accounts) | SHOULD |
| FA-6.6 | Immutability after approval (tags, protected branches) | MUST |
| FA-6.7 | Static web generator for period closing (Z3+) | SHOULD |
| TA-2.1 | Pre-commit: JSON schema validation | MUST |
| TA-2.4 | Pre-commit: obsolescence status check | SHOULD |
| TA-2.6 | Post-commit: automatic index generation | SHOULD |
The complete list of requirements in Harness-Anforderungen.md.
Sources
- GoBD (BMF letter, Rz. 64–91 - process documentation, Rz. 146–150 - system changes, Rz. 83 - currency)
- AO (§ 146 - procedural regulations, § 147 - retention)
AFJD/agents/(anonymized) - SSoT concept with process documentation as a Git artifact
Source Topology and CDN Reference Links
| Role | Location | Purpose |
|---|---|---|
| Primary / SSoT | git.gitcover.org/GCC | Canonical storage (GPG-signed, versioned) |
| Public OSS Mirror / CDN | codeberg.org/gitcover-commons | Read-only mirror; FLOSS discovery |
| Community Hub | github.com/gitcover-commons | Issues & Discussions; source code reference on Codeberg |
Note: This assignment of sources, mirror, and community hub reflects the current state and may change. Please check the respective canonical source on gitcover.org for the current state.