ED02 - Das KMU-Organisationsmodell: Tenants, Sphären, Rollen

Problem

Ein Unternehmer gründet eine Organisation - und steht vor der Frage: Wie strukturiere ich meine Organisation, dass Compliance-Pflichten sauber getrennt, nachvollziehbar und revisionssicher abgebildet werden?

Die heutige Praxis im KMU-Bereich kennt keine saubere Trennung:

Kernaussage

Eine Organisation als GitCover-Verbund zu strukturieren bedeutet: Tenant (Organisation), Sphäre (Tätigkeitsbereich bei Gemeinnützigkeit) und Rolle (Funktion des Akteurs) werden als Pflichtfelder jedes Artefakts definiert - nicht als optionale Metadaten. Git-Hooks prüfen bei jedem Commit, dass die Trennung vollständig ist. So entsteht Compliance by Design: Die Struktur der Organisation ist in der Struktur des Repos verankert.

Compliance by Design: Tenant, Sphäre und Rolle sind keine nachträglichen Etiketten - sie sind strukturelle Pflichtfelder, ohne die ein Artefakt nicht in das Repo aufgenommen wird.

Das Drei-Ebenen-Modell: Tenant, Sphäre, Rolle

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR A["Artefakt
(Beleg, Tagebucheintrag, Grundbuch-Eintrag)"] A --> T["Tenant
Welche Organisation?"] A --> S["Sphäre
Welcher Tätigkeitsbereich?
(nur gemeinnützig)"] A --> R["Rolle
In welcher Funktion handelt der Akteur?"] T --> T1["ORG-1 (KMU)"] T --> T2["ORG-1a (Tochter)"] T --> T3["ORG-1b (Tochter)"] S --> S1["ideell"] S --> S2["vermögensverwaltend"] S --> S3["zweckbetrieblich"] S --> S4["wirtschaftlich"] R --> R1["GF (Geschäftsführer)"] R --> R2["Buchhalter"] R --> R3["Lohnverantwortlicher"] R --> R4["F&E-Leiter"] R --> R5["Administrator"] style A fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style T fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style T1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style T3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style S1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S3 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style S4 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R1 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R3 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R4 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R5 fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Ebene 1 - Tenant (Organisation)

Ein Tenant ist eine rechtlich selbständige Organisationseinheit, für die eigene Aufzeichnungspflichten bestehen. Im GitCover-Verbund wird jeder Tenant als eigenes Git-Repo (oder eigener Branch-Namespace) geführt.

Tenant-Typ Beispiel (Platzhalter) Eigene Pflichten
Einzelunternehmen ORG-1 (KMU) GoBD, AO, E-Rechnung
Holding mit Töchtern ORG-1 (Holding), ORG-1a/ORG-1b (Töchter) Je Gesellschaft eigene Buchführung, eigener Jahresabschluss
Gemeinnützige Organisation ORG-1 (gemeinnützig) Zusätzlich: Sphären-Trennung, § 52 AO, VBG-Freistellung
Konsortium / Verbund ORG-1, ORG-2, ORG-3 Je Organisation eigener Tenant, Querverweise über V7GUID

Praxis-Beispiel: Ein Unternehmer (E1) führt eine Holding (ORG-1) mit zwei Töchtern (ORG-1a, ORG-1b). Jede Tochter ist ein eigener Tenant mit eigenem Repo. Die Holding hat ein Meta-Repo, das die Töchter über V7GUID-Referenzen verknüpft - aber die Bücher der Töchter bleiben getrennt.

Ebene 2 - Sphäre (Tätigkeitsbereich, nur bei Gemeinnützigkeit)

Die Sphäre ist nur bei gemeinnützigen Organisationen relevant - aber dann zwingend. Das Steuerrecht (§ 51–68 AO) verlangt die Trennung der vier Sphären, um die Gemeinnützigkeit nicht zu gefährden.

Sphäre Bedeutung Beispiel
ideell Zweckbetrieb im Sinne der Satzung, steuerfrei Workshop-Reihe, Bildungsangebot
vermögensverwaltend Verwaltung des Stiftungsvermögens, steuerfrei Zinsen aus Anlagen, Mieteinnahmen
zweckbetrieblich Wirtschaftlicher Geschäftsbetrieb, der den Zweck erfüllt, steuerfrei (§ 65 AO) Mitgliedsbeiträge, Aufnahmegebühren
wirtschaftlich Wirtschaftlicher Geschäftsbetrieb, der nicht den Zweck erfüllt, steuerpflichtig Merchandising, Werbeeinnahmen
%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR V["Geschäftsvorfall"] V --> I["ideell
steuerfrei
§ 52 AO"] V --> VV["vermögensverwaltend
steuerfrei"] V --> Z["zweckbetrieblich
steuerfrei
§ 65 AO"] V --> W["wirtschaftlich
steuerpflichtig
§ 64 AO"] I --> F["Freibetrag
§ 3 Nr. 26/26a EStG"] Z --> F W --> ST["USt/KSt
pflichtig"] style V fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style I fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style VV fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style Z fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style F fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style ST fill:#FDBA74,stroke:#C2410C,color:#0F1B33

Risiko bei fehlender Sphären-Trennung: Vermögensmischung (§ 55 Abs. 1 Nr. 5 AO) ist ein Aberkennungsgrund für die Gemeinnützigkeit. Eine gemeinnützige Organisation, die wirtschaftliche und ideelle Vorgänge nicht trennt, riskiert die Aberkennung des gemeinnützigen Status - und damit Nachversteuerung der Rücklagen (bis zu 15 Jahre rückwirkend).

Ebene 3 - Rolle (Funktion des Akteurs)

Die Rolle dokumentiert, in welcher Funktion ein Akteur gehandelt hat. Das ist wichtig, weil in vielen Organisationen oft eine Person mehrere Rollen innehat (besonders bei KMU) - und weil die Rolle bestimmt, welche Pflichten greifen.

Rolle Funktion Typische Pflichten
GF (Geschäftsführer) Vertretung nach außen, Gesamtverantwortung GoBD, AO, Fristen, Vertretungsmacht
Buchhalter Buchführung, Belegarchiv GoBD, E-Rechnung, Aufbewahrung
Lohnverantwortlicher Lohnabrechnung, SV-Meldungen SGB IV, DEÜV, LStDV
F&E-Leiter Forschung, FZul-Stundennachweise FZulG, BSFZ, F&E vs. Verwaltung
Administrator Repo-Verwaltung, Hooks, Zugriffe Git, GPG, Zugriffsrechte

Praxis-Beispiel: Der Unternehmer E1 ist gleichzeitig GF, Buchhalter, Forscher, Entwickler und F&E-Leiter. Im Repo wird bei jedem Artefakt dokumentiert, in welcher Rolle er gehandelt hat - z. B. role: "GF" bei einem Beschluss, role: "F&E-Leiter" bei einem FZul-Stundennachweis. So bleibt nachvollziehbar, ob eine Aufzeichnung aus der GF-Perspektive (Verwaltung) oder der F&E-Perspektive (Forschung) entstand.

Umsetzung im Git-Repo

Verzeichnisstruktur

ORG-1/                          # Tenant: KMU
├── .gitcover/                  # GitCover-Konfiguration
│   ├── LEGAL_ENTITY.v7g.json   # Tenant-Identität (V7GUID)
│   ├── dictionaries/           # Sphären, Rollen, Beleg-Typen
│   └── schemas/                # JSON-Schemata für Artefakte
├── diary/                      # Tagebuch (SSoT)
│   ├── entries/                # Tages-Einträge
│   └── tenants/                # Tenant-Sichten (Symlinks)
├── registry/                   # Behörden-Identifikatoren
├── sources/                    # Belegarchiv (PDF, XML, EML)
├── sidecars/                   # .v7g.md Sidecars
└── checks/                     # Fristen-Check, Sphären-Check

JSON-Artefakt mit Tenant, Sphäre, Rolle

Jedes Artefakt (Tagebucheintrag, Beleg, Grundbuch-Eintrag) enthält Tenant, Sphäre und Rolle als Pflichtfelder. Zentrales Kernprinzip der temporalen Nachvollziehbarkeit: Die Erfassungszeit ist kein separates Feld, sondern in der uuidV7 selbst verankert - als 48-Bit-Zeitstempel gemäß RFC 9562 §5.7. Die uuidV7 wird aus einer vorgegebenen Zeitmarke (nicht now()) via GitCover Helper (UuidV7Gen) generiert, der Rest mit Zufall aufgefüllt. Damit ist die Erfassungszeit kryptographisch mit der Identität des Artefakts verknüpft und nicht nachträglich änderbar.

Wichtig - Was im Git-Repo landet: Nur diese strukturierten Artefakte (JSON-Einträge, Sidecars, Belege) werden ins Git-Repo aufgenommen. Private Dokumente werden nie ins Repo aufgenommen, sofern sie nicht ausdrücklich als Artefakt eingeführt und klassifiziert wurden.

{
  "$schema": "https://gitcover.org/schemas/diary-entry-1.0.schema.json",
  "V7GUID": "<V7GUID-Class-aus-Registry>",
  "uuidV7": "<uuidV7-Object-mit-vorgegebener-Zeitmarke>",
  "author": "E1",
  "role": "GF",
  "tenant": "ORG-1",
  "sphere": "ideell",
  "source": "E1",
  "source_sha256": "<SHA-256-...>",
  "tags": ["lohnabrechnung", "sv-meldung"]
}

Erläuterung Composite Key: V7GUID (Class Identifier) klassifiziert das Dokument/die Action anhand der .gitcover Registry (was/welcher Typ). uuidV7 (Object ID) ist der konkrete Objekt-Identifikator mit der vorgegebenen Zeitmarke (RFC 9562 §5.7, 48-Bit Unix-ms). Beide zusammen bilden den GCPN Sidecar Composite Key V7GUID:uuidV7. Eine separate datetime- oder date-String-Darstellung ist redundant und wird nicht in den Fakten geführt - der 48-Bit-Zeitstempel steckt bereits in der uuidV7. String-Darstellungen für DTO/HTMX-Transfer sind Harness-Verantwortung, nicht Fakten-Ebene.

Git-Hooks prüfen die Trennung

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD C["Commit"] C --> H1["Pre-Commit-Hook"] H1 --> P1{"Tenant
vorhanden?"} P1 -->|nein| R1["Commit abgelehnt
Tenant fehlt"] P1 -->|ja| P2{"Sphäre
vorhanden?
(nur gemeinnützig)"} P2 -->|nein| R2["Commit abgelehnt
Sphäre fehlt"] P2 -->|ja| P3{"Rolle
vorhanden?"} P3 -->|nein| R3["Commit abgelehnt
Rolle fehlt"] P3 -->|ja| P4{"Sphäre
gültig?"} P4 -->|nein| R4["Commit abgelehnt
ungültige Sphäre"] P4 -->|ja| OK["Commit akzeptiert"] style C fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style H1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style P4 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R1 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R3 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R4 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style OK fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Hook Prüfung Fehler bei
Pre-Commit tenant-Feld vorhanden und gültig Fehlendes oder unbekanntes Tenant
Pre-Commit sphere-Feld vorhanden (nur gemeinnützig) Fehlende Sphäre bei gemeinnützigem Tenant
Pre-Commit sphere-Wert gültig (ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich) Ungültiger Sphären-Wert
Pre-Commit role-Feld vorhanden und gültig Fehlende oder unbekannte Rolle
Post-Commit Auto-Index-Generierung pro Tenant und Sphäre -

Tenant-Verbund: Mehrere Organisationen

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD H["ORG-1 (Holding)
Meta-Repo"] H --> R1["ORG-1a (Tochter 1)
eigenes Repo"] H --> R2["ORG-1b (Tochter 2)
eigenes Repo"] H --> R3["ORG-1c (Tochter 3)
eigenes Repo"] R1 --> V1["V7GUID-Referenz
auf ORG-1"] R2 --> V2["V7GUID-Referenz
auf ORG-1"] R3 --> V3["V7GUID-Referenz
auf ORG-1"] H --> M["Meta-Repo
Querverweise über V7GUID
keine Buchungen"] style H fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style R1 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R2 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style R3 fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style V1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V3 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style M fill:#10A987,stroke:#0A7F5C,color:#FBFAF7

Ein Tenant-Verbund (Holding mit Töchtern, Konsortium) wird über V7GUID-Referenzen verknüpft - nicht über gemeinsame Repos. Jeder Tenant behält seine eigene Buchführung, aber das Meta-Repo der Holding kann auf Belege und Einträge der Töchter verweisen, ohne sie zu kopieren.

Wichtig: Das Meta-Repo enthält keine Buchungen - nur Querverweise. Die Buchführung bleibt bei jedem Tenant. Das Meta-Repo ist eine Index-Ebene, keine Buchhaltungsebene.

Risiko-Leverage

Heute (cheap) Morgen (revisionssicher) Risiko gemindert
tenant-Feld pro Artefakt Klare Zuordnung bei Holding-Prüfung Vermögensmischung zwischen Gesellschaften
sphere-Feld pro Eintrag Gemeinnützigkeits-Status verteidigt Aberkennung § 55 AO (Vermögensmischung)
role-Feld pro Eintrag Nachvollziehbar, in welcher Funktion gehandelt wurde Rollenkonflikt, unberechtigte Vertretung
Pre-Commit-Hook prüft Sphäre Sphären-Trennung lückenlos manuelle Sphären-Fehler
V7GUID-Referenz statt Kopie Eindeutige Zuordnung ohne Duplikate Inkonsistenz bei Kopien

Harness-Anforderung (Vorschau)

Aus ED02 ableitbar:

ID Anforderung Priorität
FA-1.4 Tenant-Zuordnung (tenant: "ORG-1") pro Eintrag MUST
FA-3.1 Sphären-Tags: ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich MUST (gemeinnützig)
FA-3.2 Sphären-Tag Pflicht pro Grundbuch-Eintrag und Diary-Eintrag MUST (gemeinnützig)
FA-3.3 Pre-Commit-Hook prüft Sphären-Tag-Vollständigkeit MUST (gemeinnützig)
TA-2.3 Pre-Commit-Hook: Sphären-Tag-Prüfung (nur gemeinnützig) MUST (gemeinnützig)
FA-1.3 V7GUID pro Eintrag (Tenant-übergreifende Eindeutigkeit) MUST

Die vollständige Anforderungsliste in Harness-Anforderungen.md.

Quellen

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.