ED09 - Sphere Classification of Business Transactions (from trade registration, in case of non-profit status)

Problem

A non-profit organization registers a trade - and from that moment the sphere separation (§§ 51-68 AO) applies. But in practice:

Trigger A - trade registration: This obligation arises without employees - it is part of the organization, not of being an employer. From the moment a non-profit organization registers a trade, every business transaction must be assigned to a sphere.

Core Statement

Sphere classification in the Git repo means:

  1. Every business transaction has a sphere field - mandatory field, not optional (for non-profit tenants)
  2. Four spheres - ideell, vermögensverwaltend, zweckbetrieblich, wirtschaftlich
  3. Pre-commit hook checks completeness - no commit without sphere tag for non-profit tenants
  4. Sphere violation report - automatic warning on commercial transaction in ideal context
  5. Lump sums assigned - honorary/exercise leader lump sums (§ 3 Nr. 26/26a EStG) receive sphere tag

Compliance by Design: Sphere separation does not arise through retroactive sorting, but through structural mandatory fields and pre-commit hooks that check every business transaction for sphere assignment.

The four spheres

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD GV["Geschäftsvorfall
ab Gewerbeanmeldung"] GV --> I["ideell
§ 52 AO
steuerfrei"] GV --> V["vermögensverwaltend
steuerfrei"] GV --> Z["zweckbetrieblich
§ 65 AO
steuerfrei"] GV --> W["wirtschaftlich
§ 64 AO
steuerpflichtig"] I --> IF["Beispiele:
Workshops, Bildungsangebote
Spenden, Mitgliedsbeiträge"] V --> VF["Beispiele:
Zinsen, Mieteinnahmen
Vermögensverwaltung"] Z --> ZF["Beispiele:
Aufnahmegebühren
zweckbezogene Leistungen"] W --> WF["Beispiele:
Merchandising, Werbung
fremdzweckige Leistungen"] I --> P["Pauschalen § 3 Nr. 26/26a
Ehrenamt/Übungsleiter"] Z --> P style GV fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style I fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style V fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style Z fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style IF fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style VF fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style ZF fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style WF fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style P fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33
Sphere Legal basis Tax status Examples
ideell § 52 AO tax-free Workshops, educational offers, donations, membership fees
vermögensverwaltend § 58 Nr. 1 AO tax-free Interest, rental income, asset management
zweckbetrieblich § 65 AO tax-free (with 4 criteria) Admission fees, purpose-related services
wirtschaftlich § 64 AO taxable Merchandising, advertising, third-party-purpose services

Risk of missing sphere separation: Asset mixing (§ 55 Abs. 1 Nr. 5 AO) is a reason for denial of non-profit status. A non-profit organization that does not separate commercial and ideal transactions risks the denial of non-profit status - and thus re-taxation of reserves (up to 15 years retroactively).

Sphere classification in the JSON artifact

Every business transaction (booking entry, diary entry, voucher) contains the sphere field as a mandatory field for non-profit tenants:

{
  "$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": "Buchhalter",
  "tenant": "ORG-1",
  "sphere": "ideell",
  "source": "E1",
  "source_sha256": "<SHA-256-...>",
  "tags": ["workshop", "bildungsangebot"]
}

Note: The uuidV7 is the DocID of the entry. The composite key V7GUID:uuidV7 serves the storage organization and DB query. The sphere field is a mandatory field for non-profit tenants - the pre-commit hook checks its presence and validity.

Pre-commit hook checks sphere completeness

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD C["Commit mit Geschäftsvorfall"] C --> H["Pre-Commit-Hook"] H --> P1{"Tenant
gemeinnützig?"} P1 -->|nein| OK1["Commit akzeptiert
Sphäre nicht erforderlich"] P1 -->|ja| P2{"sphere-Feld
vorhanden?"} P2 -->|nein| R1["Commit abgelehnt
Sphäre fehlt"] P2 -->|ja| P3{"sphere-Wert
gültig?"} P3 -->|nein| R2["Commit abgelehnt
ungültige Sphäre"] P3 -->|ja| P4{"Sphären-Verletzung?
(wirtschaftlich im ideellen Kontext)"} P4 -->|ja| W["Warnung
+ Commit akzeptiert mit Vermerk"] P4 -->|nein| OK2["Commit akzeptiert"] style C fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style H 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 OK1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style OK2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R1 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style R2 fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style W fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Check Error on GoBD/AO reference
Tenant non-profit? - § 52 AO (non-profit status)
sphere field present Missing sphere for non-profit tenant § 55 Abs. 1 Nr. 5 AO (asset mixing)
sphere value valid Invalid sphere value § 52/64/65 AO (sphere definition)
Sphere violation Commercial in ideal context § 55 AO (denial risk)

Important - warning vs. rejection: A sphere violation (commercial transaction in ideal context) leads to a warning, not a rejection - the transaction can be legitimate (e.g. commercial business operation that belongs to the corporation). But the warning forces the entrepreneur to consciously confirm the classification and document it in the commit.

Sphere report

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR R["Sphären-Report
(Post-Commit-Hook)"] R --> SI["ideell
Anzahl + Summe"] R --> SV["vermögensverwaltend
Anzahl + Summe"] R --> SZ["zweckbetrieblich
Anzahl + Summe"] R --> SW["wirtschaftlich
Anzahl + Summe"] SW --> PR["Prüfung:
wirtschaftlich unter Freigrenze?
§ 64 Abs. 3 AO (45.000 EUR)"] PR -->|ja| OK["keine KSt-Pflicht"] PR -->|nein| KST["KSt-Pflicht
+ USt-Pflicht prüfen"] style R fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style SI fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SV fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SZ fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style SW fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style PR fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style OK fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style KST fill:#FDBA74,stroke:#C2410C,color:#0F1B33

The post-commit hook generates a sphere report per fiscal year:

Sphere Evaluation Tax check
ideell Count + sum of transactions tax-free, no check
vermögensverwaltend Count + sum tax-free, no check
zweckbetrieblich Count + sum tax-free under § 65 AO (4 criteria)
wirtschaftlich Count + sum Exemption limit § 64 Abs. 3 AO (45,000 EUR) - above KSt/USt liability

Practical example: The entrepreneur (E1) books a merchandising sale (commercial, 500 EUR) and a workshop (ideal, 200 EUR). The pre-commit hook requires sphere: "wirtschaftlich" or sphere: "ideell". The post-commit hook generates a report: commercial 500 EUR (below exemption limit), ideal 200 EUR. On exceeding the exemption limit, the report warns of KSt liability.

Lump sums and spheres

Honorary and exercise leader lump sums (§ 3 Nr. 26/26a EStG) must be assigned to the correct sphere:

Lump sum Sphere Annual allowance Legal basis
Honorary lump sum ideell (regularly) 960 EUR/year § 3 Nr. 26a EStG
Exercise leader lump sum ideell or zweckbetrieblich 3,300 EUR/year § 3 Nr. 26 EStG

Important: The lump sums are tax-free - but only if they are assigned to the correct sphere. An honorary lump sum in the commercial business operation is not tax-free. The sphere field in the diary entry documents the assignment.

Articles § 6a: The payment of the lump sums requires an opening clause in the articles (§ 6a). Until the HR registration of the articles amendment, the payment must be deferred - the claim arises from the date of the articles amendment. See ED10 for details.

Risk-Leverage

Today (cheap) Tomorrow (audit-proof) Risk mitigated
sphere field per business transaction Sphere separation completely verifiable Denial § 55 AO (asset mixing)
Pre-commit hook checks sphere No transaction without sphere tag GoBD violation "not ordered"
Sphere report per fiscal year Exemption limit § 64 Abs. 3 AO monitored KSt/USt back payment
Lump sums with sphere tag Tax exemption § 3 Nr. 26/26a EStG evidenced Tax liability of lump sums
Warning on sphere violation Conscious classification documented Hidden asset mixing

Harness requirement (preview)

Derivable from ED09:

ID Requirement Priority
FA-3.1 Sphere tags: ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich MUST (non-profit)
FA-3.2 Sphere tag mandatory per general ledger entry and diary entry MUST (non-profit)
FA-3.3 Pre-commit hook checks sphere tag completeness MUST (non-profit)
FA-3.4 Sphere violation report (commercial in ideal context) SHOULD (non-profit)
FA-8.2 Lump sums § 3 Nr. 26/26a EStG tracking with sphere tag SHOULD (non-profit)
FA-8.5 Sphere classification per business transaction (mandatory field, pre-commit checked) MUST (non-profit)
TA-2.3 Pre-commit hook: sphere tag check (non-profit only) MUST (non-profit)

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.