ED06 - GoBD Procedure Documentation: Mandatory Fields, Versioning, Release

Problem

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

Core Statement

A GoBD-compliant procedure documentation in the Git repo means:

  1. The procedure 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. Release via tags - a Git tag marks the released state of the procedure documentation (e.g. vd-v1.0-2026)
  4. System changes are continued - on migration a new commit with justification is created, the old version remains traceable
  5. The repo itself is part of the procedure documentation - git log shows the procedure, .gitcover/schemas/ shows the data structures, Git hooks show the controls

Compliance by Design: The procedure documentation is not retroactive - it emerges through the use of Git. Anyone working with Git repositories documents their procedure automatically through commits, diffs and tags. The formal procedure documentation complements this with the human-readable description.

What is a procedure 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 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 the procedure documentation

Structure in the Git repo

ORG-1/
├── .gitcover/
│   ├── schemas/                    # Data structures (Rz. 86-91)
│   │   ├── diary-entry-1.0.schema.json
│   │   ├── v7g-sidecar-1.0.schema.json
│   │   └── timesheet-1.0.schema.json
│   ├── dictionaries/               # Classifications (Rz. 86-91)
│   │   ├── spheres.json
│   │   ├── roles.json
│   │   └── beleg-types.json
│   └── LEGAL_ENTITY.v7g.json       # Tenant identity
├── docs/
│   └── verfahrensdokumentation/
│       ├── README.md               # Entry + overview
│       ├── 01-verfahren.md         # Accounting procedure (Rz. 64-71)
│       ├── 02-systemumgebung.md    # Software/hardware (Rz. 72-76)
│       ├── 03-organisation.md      # Responsibilities (Rz. 77-80)
│       ├── 04-kontrollen.md        # Internal controls (Rz. 81-85)
│       └── 05-daten.md             # Data structures (Rz. 86-91)
└── .githooks/
    ├── pre-commit                  # Controls (Rz. 81-85)
    └── post-commit                 # Index generation

Procedure documentation as JSON artifact

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

Versioning and release

%%{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)
Release git tag vd-v1.0-2026 Rz. 83 (binding state)
Productive 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 release markers: A Git tag is immutable

  • it marks an exact commit state that cannot be changed retroactively. This corresponds to GoBD Rz. 146 (immutability). The auditor can reconstruct the exact state of the procedure documentation at the time of audit with git show vd-v1.0-2026.

System change 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 on system change:

  1. Keep data of the old system available - git bundle as self-contained archive (no cloud account needed, see ED04 Z3)
  2. Continue procedure documentation - new commit with justification: "Migration from cloud payroll to GitCover, date, role"
  3. Document transition period - which data was migrated how, which checks were performed
  4. Mark old version as obsolete - obsolescence: superseded_by in the old procedure documentation artifact

Practical example: The entrepreneur (E1) migrates from a cloud payroll software to GitCover. He creates a git bundle of the old data, continues the procedure 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 procedure 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 a procedure documentation - git log shows the procedure, git config shows the system environment, Git hooks show the controls, schemas show the data structures. The formal procedure documentation (Markdown in docs/verfahrensdokumentation/) complements this with the human-readable description - but the authoritative source is the repo itself.

Risk-Leverage

Today (cheap) Tomorrow (audit-proof) Risk mitigated
Procedure documentation as Git artifact GoBD Rz. 64-91 fulfilled by design Estimation § 162 AO (no procedure documentation)
git log as procedure evidence Traceability within a reasonable time Dispute of the procedure documentation
Tags as release markers Immutable state at time of audit Dispute of the state
System change as commit + bundle GoBD Rz. 146-150 compliant GoBD violation through undocumented change
Obsolescence marking Old versions traceable Hidden changes
Repo itself as procedure documentation Automatic documentation through use Procedure documentation outdated

Harness requirement (preview)

Derivable from ED06:

ID Requirement Priority
FA-6.1 Procedure documentation as versioned Git artifact MUST
FA-6.3 SKR04 chart of accounts management (incl. payroll accounts) SHOULD
FA-6.6 Immutability after release (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 requirement list in Harness-Anforderungen.md.

Sources

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.