ED07 - Procedural Documentation GoBD: Mandatory Fields, Versioning, Approval

Problem

GoBD Rz. 64–91 requires procedural documentation - but in the SME sector it is the great exception:

Key Statement

GoBD-compliant procedural documentation in a Git repo means:

  1. The procedural documentation is a versioned Git artifact - not a Word document, but Markdown + JSON in the repo
  2. Every change is traceable - git log shows who, when, what, why (commit author, uuidV7 timestamp, diff, commit message)
  3. Approval via tags - a Git tag marks the approved state of procedural documentation (e.g. vd-v1.0-2026)
  4. System changes are updated - on migration, a new commit with justification is created; the old version remains traceable
  5. The repo itself is part of procedural documentation - git log shows the procedure, .gitcover/schemas/ shows the data structures, Git hooks show the controls

Compliance by Design: The procedural documentation is not an afterthought - it arises through the use of Git. Anyone who works with Git repositories automatically documents their procedure through commits, diffs and tags. The formal procedural documentation supplements this with the human-readable description.

What Is Procedural Documentation?

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD VD["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 Requirement Content How Git fulfills it
Procedure (Rz. 64–71) Description of the accounting procedure git log shows every step; commit messages document the justification
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 Procedural Documentation

Structure in the Git Repo

ORG-1/
├── .gitcover/
│   ├── schemas/                    # Datenstrukturen (Rz. 86–91)
│   │   ├── diary-entry-1.0.schema.json
│   │   ├── v7g-sidecar-2.0.schema.json
│   │   └── timesheet-1.0.schema.json
│   ├── dictionaries/               # Klassifizierungen (Rz. 86–91)
│   │   ├── spheres.json
│   │   ├── roles.json
│   │   └── beleg-types.json
│   └── LEGAL_ENTITY.gc.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

Procedural Documentation as a JSON Artifact

The procedural 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>",
  "docUid": "<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 uuidV7 is the DocID of the procedural documentation. The composite key V7GUID:uuidV7 serves storage organization and DB query. No separate datetime/date field - the time is contained in the uuidV7.

Versioning and Approval

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD E["Entwurf
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 retroactively. This corresponds to GoBD Rz. 146 (immutability). With git show vd-v1.0-2026, the auditor can reconstruct the exact state of the procedural documentation at the time of the audit.

System Changes and Migration (GoBD Rz. 146–150)

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR A["Altes System
(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 when changing systems:

  1. Keep data from the old system available - git bundle as a self-contained archive (no cloud account required, see ED05 Z3)
  2. Update procedural documentation - new commit with justification: "Migration from Cloud-Lohn to GitCover, date, role"
  3. Document the transition period - which data were migrated how, which checks were performed
  4. Mark old version as obsolete - obsolescence: superseded_by in the old procedural documentation artifact

Practical Example: The entrepreneur (E1) migrates from cloud payroll software to GitCover. He creates a git bundle of the old data, updates the procedural documentation (new commit with commit message "Migration to GitCover, 260815, role: GF"), marks the old version as superseded, and tags the new version as vd-v2.0-2027. The auditor can trace both versions.

The Repo Itself as Procedural Documentation

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD R["Git-Repo"] R --> GL["git log
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 procedural documentation - git log shows the procedure, git config shows the system environment, Git hooks show the controls, schemas show the data structures. The formal procedural documentation (Markdown in docs/verfahrensdokumentation/) supplements this with the human-readable description - but the authoritative source is the repo itself.

Risk Leverage

Today (cheap) Tomorrow (audit-proof) Risk reduced
Procedural documentation as Git artifact GoBD Rz. 64–91 fulfilled by design Estimate under § 162 AO (no procedural documentation)
git log as procedure evidence Traceability within a reasonable time Disputing the procedural documentation
Tags as approval markers Immutable state at audit time Disputing the state
System change as commit + bundle GoBD Rz. 146–150 compliant GoBD violation due to undocumented change
Obsolescence marking Old versions traceable Concealed changes
Repo itself as procedural documentation Automatic documentation through use Procedural documentation outdated

Harness Requirement (Preview)

Derivable from ED07:

ID Requirement Priority
FA-6.1 Procedural documentation as 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: auto-index generation SHOULD

The complete requirements list is in Harness-Anforderungen.md.

Sources

Role Location Purpose
Primary / SSoT git.gitcover.org/GCC Canonical repository (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 mapping 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.