ED10 - Sphere Classification of Business Transactions (from Trade Registration, with Non-Profit Status)
Problem
A non-profit organization registers a trade - and from that moment on, sphere separation (§§ 51–68 AO) applies. But in practice:
- "Spheres? Never heard of them." - many non-profit entrepreneurs do not know that they must assign every business transaction to one of four spheres
- Mixing of ideell and wirtschaftlich - workshop income (ideell) and merchandising sales (wirtschaftlich) end up in the same account, the same folder, the same repo
- No sphere labeling - journal entries have no field indicating the sphere - the auditor has to guess
- Asset mixing as grounds for revocation - § 55 Abs. 1 Nr. 5 AO threatens revocation of non-profit status in the event of asset mixing - retroactively up to 15 years
- No automatic verification - nobody checks whether every business transaction has a sphere - the assumption is "it will somehow be fine"
- Allowances misassigned - volunteer and instructor allowances (§ 3 Nr. 26/26a EStG) are not assigned to the correct sphere
Trigger A - Trade Registration: This obligation arises without employees - it is part of the organization, not of its existence as 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:
- Every business transaction has a
spherefield - mandatory field, not optional (for non-profit tenants) - Four spheres -
ideell,vermögensverwaltend,zweckbetrieblich,wirtschaftlich - Pre-commit hook checks completeness - no commit without a sphere tag for non-profit tenants
- Sphere violation report - automatic warning for a wirtschaftlich transaction in an ideell context
- Allowances assigned - volunteer/instructor allowances (§ 3 Nr. 26/26a EStG) receive a sphere tag
Compliance by Design: Sphere separation does not come about through subsequent sorting, but through structural mandatory fields and pre-commit hooks that check every business transaction for sphere assignment.
The Four Spheres
from trade registration"] GV --> I["ideell
§ 52 AO
tax-free"] GV --> V["vermögensverwaltend
tax-free"] GV --> Z["zweckbetrieblich
§ 65 AO
tax-free"] GV --> W["wirtschaftlich
§ 64 AO
taxable"] I --> IF["Examples:
workshops, educational offerings
donations, membership fees"] V --> VF["Examples:
interest, rental income
asset management"] Z --> ZF["Examples:
admission fees
purpose-related services"] W --> WF["Examples:
merchandising, advertising
non-purpose-related services"] I --> P["Allowances § 3 Nr. 26/26a
volunteer/instructor"] 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 offerings, donations, membership fees |
| vermögensverwaltend | § 58 Nr. 1 AO | tax-free | interest, rental income, asset management |
| zweckbetrieblich | § 65 AO | tax-free (if 4 criteria met) | admission fees, purpose-related services |
| wirtschaftlich | § 64 AO | taxable | merchandising, advertising, non-purpose-related services |
Risk of Missing Sphere Separation: Asset mixing (§ 55 Abs. 1 Nr. 5 AO) is grounds for revocation of non-profit status. A non-profit organization that does not separate wirtschaftlich and ideell transactions risks revocation of its non-profit status - and with it, subsequent taxation of reserves (retroactively up to 15 years).
Sphere Classification in the JSON Artifact
Every business transaction (journal 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
uuidV7is the DocID of the entry. The composite keyV7GUID:uuidV7is used for storage organization and DB queries. Thespherefield is a mandatory field for non-profit tenants - the pre-commit hook checks its presence and validity.
Pre-Commit Hook Checks Sphere Completeness
non-profit?"} P1 -->|no| OK1["Commit accepted
sphere not required"] P1 -->|yes| P2{"sphere field
present?"} P2 -->|no| R1["Commit rejected
sphere missing"] P2 -->|yes| P3{"sphere value
valid?"} P3 -->|no| R2["Commit rejected
invalid sphere"] P3 -->|yes| P4{"Sphere violation?
(wirtschaftlich in an ideell context)"} P4 -->|yes| W["Warning
+ commit accepted with note"] P4 -->|no| OK2["Commit accepted"] 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 | Fails When | 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 | wirtschaftlich in an ideell context | § 55 AO (risk of revocation) |
Important - Warning vs. Rejection: A sphere violation (wirtschaftlich transaction in an ideell context) results in a warning, not a rejection - the transaction may be legitimate (e.g., a commercial business that belongs to the corporation). But the warning forces the entrepreneur to consciously confirm the classification and document it in the commit.
Sphere Report
(post-commit hook)"] R --> SI["ideell
count + sum"] R --> SV["vermögensverwaltend
count + sum"] R --> SZ["zweckbetrieblich
count + sum"] R --> SW["wirtschaftlich
count + sum"] SW --> PR["Check:
wirtschaftlich below threshold?
§ 64 Abs. 3 AO (45,000 EUR)"] PR -->|yes| OK["no corporation tax liability"] PR -->|no| KST["corporation tax liability
+ check VAT liability"] 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 | threshold § 64 Abs. 3 AO (45,000 EUR) - above that, corporation tax/VAT liability |
Practical Example: The entrepreneur (
E1) books a merchandising sale (wirtschaftlich, 500 EUR) and a workshop (ideell, 200 EUR). The pre-commit hook requiressphere: "wirtschaftlich"orsphere: "ideell"respectively. The post-commit hook generates a report: wirtschaftlich 500 EUR (below the threshold), ideell 200 EUR. If the threshold is exceeded, the report warns of corporation tax liability.
Allowances and Spheres
Volunteer and instructor allowances (§ 3 Nr. 26/26a EStG) must be assigned to the correct sphere:
| Allowance | Sphere | Annual Tax-Free Allowance | Legal Basis |
|---|---|---|---|
| Volunteer allowance | ideell (regularly) | 960 EUR/year | § 3 Nr. 26a EStG |
| Instructor allowance | ideell or zweckbetrieblich | 3,300 EUR/year | § 3 Nr. 26 EStG |
Important: The allowances are tax-free - but only if they are assigned to the correct sphere. A volunteer allowance in the commercial business is not tax-free. The
spherefield in the diary entry documents the assignment.
Articles of Association § 6a: The payout of the allowances requires an opening clause in the articles of association (§ 6a). Until the amendment to the articles of association is entered in the commercial register, the payout is to be deferred - the entitlement arises from the date of the amendment to the articles of association. See ED11 for details.
Risk Leverage
| Today (cheap) | Tomorrow (audit-proof) | Risk Mitigated |
|---|---|---|
sphere field per business transaction |
Sphere separation provable without gaps | Revocation § 55 AO (asset mixing) |
| Pre-commit hook checks the sphere | No transaction without a sphere tag | GoBD violation "not orderly" |
| Sphere report per fiscal year | Threshold § 64 Abs. 3 AO monitored | Corporation tax/VAT back payments |
| Allowances with sphere tag | Tax exemption under § 3 Nr. 26/26a EStG evidenced | Tax liability of the allowances |
| Warning on sphere violation | Conscious classification documented | Covert asset mixing |
Harness Requirement (Preview)
Derivable from ED10:
| ID | Requirement | Priority |
|---|---|---|
| FA-3.1 | Sphere tags: ideell/vermögensverwaltend/zweckbetrieblich/wirtschaftlich |
MUST (non-profit) |
| FA-3.2 | Sphere tag mandatory per Grundbuch 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 (wirtschaftlich in an ideell context) | SHOULD (non-profit) |
| FA-8.2 | Allowance tracking (§ 3 Nr. 26/26a EStG) 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 list of requirements in Harness-Anforderungen.md.
Sources
- AO (§ 52 - non-profit status, § 55 Abs. 1 Nr. 5 - asset mixing, § 58 Nr. 1 - vermögensverwaltend, § 64 - commercial business, § 64 Abs. 3 - threshold 45,000 EUR, § 65 - purpose-related business)
- EStG (§ 3 Nr. 26 - instructor allowance, § 3 Nr. 26a - volunteer allowance)
AFJD/agents/(anonymized) - SSoT concept with sphere separation, pre-commit hooks
Source Topology and CDN Reference Links
| 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 status and may change. Please check the respective canonical source on gitcover.org for the current state.