ED14 - Tax Office: Tax Number, § 60a AO, Payroll Tax Return

Problem

After incorporation and trade registration, the tax office (FA) makes contact—but in the SME sector, it is unclear which obligations this entails and how they are evidenced in the repo:

Core Message

Tax office obligations in the Git repo mean:

  1. Tax numbers as registry entries - centralized storage in registry/ with a sidecar, one number per tax type
  2. Payroll tax return as a JSON artifact - LStA with source_sha256 referencing the ELSTER receipt
  3. ELSTER certificate documented - .pfx file with a sidecar (not the certificate itself in the repo, but the evidence)
  4. Deadline check for all tax office submissions - LStA, UStA, income/corporation tax returns with an automatic warning
  5. § 60a AO decision as evidence with a sidecar - exemption decision with validity tracking

Compliance by Design: Tax office obligations are not managed after the fact, but are structurally captured through registry entries with sidecars, deadline check and JSON artifacts.

Tax Numbers in the Registry Directory

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart LR R["registry/"] R --> KST["KSt-Steuernummer"] R --> UST["USt-Steuernummer"] R --> LST["LSt-Steuernummer"] R --> WID["W-IdNr"] R --> UID["USt-IdNr"] R --> A60["§ 60a AO Bescheid"] R --> EL["ELSTER-Zertifikat"] style R fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style KST fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style UST fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style LST fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style WID fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style UID fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style A60 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style EL fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Identifier Source Use Storage
KSt tax number Tax office notice Corporation tax return registry/finanzamt/ + sidecar
USt tax number Tax office notice VAT return, annual return registry/finanzamt/ + sidecar
LSt tax number Tax office notice Payroll tax return, LSt certificate registry/finanzamt/ + sidecar
W-IdNr BZSt notice Business identification number registry/bzst/ + sidecar
USt-IdNr BZSt notice VAT identification number (EU) registry/bzst/ + sidecar
ELSTER certificate ELSTER registration Electronic submissions registry/elster/ + sidecar
§ 60a AO decision Tax office decision Recognition of nonprofit status registry/finanzamt/ + sidecar

Practical example: The KMU has the KSt tax number <STNR>, USt tax number <STNR>, LSt tax number <STNR>, W-IdNr <WID>, and USt-IdNr DE<UID>. Each number is stored as an evidence document with a sidecar in registry/. The § 60a AO decision (recognition of nonprofit status) is also stored there, with validity tracking.

§ 60a AO Decision - Nonprofit Status

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD A["Antrag auf Gemeinnützigkeit"] A --> F["FA prüft Satzung + Zweck"] F --> B["§ 60a AO Bescheid"] B --> G["Gemeinnützigkeit anerkannt"] G --> F1["KSt/PV befreit"] G --> F2["USt teilweise befreit"] G --> F3["VBG-Freistellung möglich"] style A fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style F fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style B fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style G fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style F1 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style F2 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style F3 fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Property Value
Legal basis § 60a Abs. 1 AO
Content Recognition of nonprofit status (§§ 51-68 AO)
Effect KSt exemption, PV exemption, partial USt exemption, VBG exemption possible
Validity Until it is withdrawn or recognition is revoked
Storage registry/finanzamt/ with sidecar (SHA-256 + V7GUID:uuidV7)

Important: The § 60a AO decision is the basis for all nonprofit privileges (KSt, USt, VBG, lump-sum rules). Without this decision, tax exemptions cannot be substantiated. The decision must be stored in the repo with a sidecar so that evidence can be provided during an audit.

Payroll Tax Return (§ 41a EStG)

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD L["Lohnabrechnung erstellt"] L --> LA["LStA berechnet"] LA --> EL["ELSTER-Übermittlung"] EL --> Q["ELSTER-Quittung"] Q --> R["Quittung als Beleg mit Sidecar"] R --> D["LStA als JSON-Artefakt im Repo"] D --> F["Fristen-Check: nächste LStA"] style L fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style LA fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style EL fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style Q fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style R fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style F fill:#FDBA74,stroke:#C2410C,color:#0F1B33
Step Action Deadline GitCover implementation
Payroll statement Gross-to-net calculation (see ED23) Monthly JSON artifact in the repo
LStA calculated LSt, Soli, KiSt from the payroll statement - tags: ["lsta", "§41a-estg"]
ELSTER transmission Electronically via ELSTER 10th of the following month (+5 days) ELSTER receipt as evidence
Receipt archived ELSTER receipt with sidecar - source_sha256 in the LStA entry
Deadline check Next LStA deadline Monthly FRISTEN_CHECK.md + automatic warning

LStA as a JSON Artifact

{
  "$schema": "https://gitcover.org/schemas/diary-entry-1.0.schema.json",
  "V7GUID": "<V7GUID-Class-aus-Registry>",
  "docUid": "<uuidV7-Object-mit-vorgegebener-Zeitmarke>",
  "author": "E1",
  "role": "Lohnverantwortlicher",
  "tenant": "ORG-1",
  "sphere": "ideell",
  "source": "FA",
  "source_sha256": "<SHA-256-der-ELSTER-Quittung>",
  "tags": ["lsta", "§41a-estg", "nullmeldung", "aktivrente"],
  "lsta": {
    "monat": "09/2026",
    "brutto": 2000.00,
    "lst": 0.00,
    "soli": 0.00,
    "kist": 0.00,
    "freibetrag_aktivrente": 2000.00,
    "art": "nullmeldung"
  }
}

Note: The uuidV7 is the DocID of the entry. The composite key V7GUID:uuidV7 is used to organize storage and for DB queries. The lsta object documents the payroll tax return with all its components. For an Aktivrente (§ 3 Nr. 21 EStG), the LSt is 0.00

  • it is a nil return (see ED23).

Document the ELSTER Certificate

%%{init: {'theme':'base','themeVariables':{'primaryColor':'#FBFAF7','primaryTextColor':'#0F1B33','primaryBorderColor':'#6B7280','lineColor':'#6B7280'}}}%% flowchart TD E["ELSTER-Zertifikat"] E --> P["Persönliches Zertifikat (E1)"] E --> O["Organisations-Zertifikat (ORG-1)"] P --> PI[".pfx-Datei installiert"] O --> OI[".pfx-Datei installiert (geplant)"] PI --> D["Sidecar im Repo
(nicht die .pfx selbst)"] OI --> D D --> N["Nachweis: Zertifikat aktiv
+ ELSTER-Test-Übermittlung"] style E fill:#0F1B33,stroke:#0F1B33,color:#FBFAF7 style P fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style O fill:#DBEAFE,stroke:#1D4ED8,color:#0F1B33 style PI fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style OI fill:#FDBA74,stroke:#C2410C,color:#0F1B33 style D fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33 style N fill:#D1FAE5,stroke:#0A7F5C,color:#0F1B33
Certificate type Status Storage in the repo
Personal certificate (E1) Active (since 260522) Sidecar in registry/elster/ (not the .pfx file itself)
Organization certificate (ORG-1) Open (deadline 200826) Planned: sidecar after activation

Important - .pfx not in the repo: The .pfx file (certificate + private key) is not included in the Git repo - it contains cryptographic secrets. Instead, a sidecar is stored that documents the existence and activation of the certificate (date, status, ELSTER test receipt). The .pfx file is kept securely outside the repo (e.g., on an encrypted data carrier).

See ED16: The practical use of the ELSTER certificate (government interface practices, DE-Mail, transmission via GitCover) is covered in ED16.

Deadline Monitoring for Tax Office Submissions

Submission Deadline Frequency GitCover monitoring
Payroll tax return 10th of the following month (+5 days for electronic filing) Monthly FRISTEN_CHECK.md + automatic warning
VAT return 10th of the following month Monthly/quarterly FRISTEN_CHECK.md + automatic warning
Income/corporation tax return 31.07. (extended by tax advisor) Annual FRISTEN_CHECK.md
VAT annual return 31.07. (extended) Annual FRISTEN_CHECK.md
Payroll tax certificate 28.02. of the following year Annual FRISTEN_CHECK.md

Practical tip: The deadline check is maintained as a Git artifact and updated with every commit. The automatic warning (see ED08) warns 14 days before an FA deadline expires. This way, no missed deadline goes unnoticed again - and § 152 AO (late filing surcharge of up to EUR 25,000) is avoided.

Risk Leverage

Today (low-cost) Tomorrow (revision-proof) Risk mitigated
Tax numbers in registry/ with sidecar All identifiers centrally verifiable Tax number contested
§ 60a AO decision with sidecar Nonprofit status can be proven Revocation due to missing evidence
LStA as JSON artifact + ELSTER receipt Payroll tax return traceable Late filing surcharge § 152 AO
ELSTER certificate with sidecar Electronic submissions provable Failure to file § 370 AO
Deadline check for all tax office submissions Missed deadlines avoided Late filing surcharges § 152 AO

Harness Requirement (Preview)

Derivable from ED14:

ID Requirement Priority
FA-12.1 ELSTER transmission: LStA, UStA, LSt certificate; receipt as evidence with sidecar MUST
FA-12.8 Government identifier registry (StNr, W-IdNr, USt-IdNr, SV-BetrNr, VBG-Mitgliedsnr, IK) MUST
FA-8.1 Storage of the § 60a AO decision and validity tracking MUST (nonprofit)
FA-4.1 Deadline check file (checks/FRISTEN_CHECK.md) MUST
FA-4.2 Deadline entries with date, type, tenant, evidence reference MUST
FA-4.3 Automatic warning for deadlines less than 14 days away SHOULD

The complete requirements 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 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.