Zum Inhalt
v26.3

TSE & Finanzamt

Seit dem 01.01.2020 ist in Deutschland eine Technische Sicherheitseinrichtung (TSE) für Kassensysteme Pflicht (KassenSichV, §146a AO). DiKAS ist vollständig TSE-konform und signiert alle kassenrelevanten Vorgänge gemäß AEAO zu §146a AO.

Für Steuerprüfer:TSE-Compliance — Dokumentation für Steuerprüfer (detaillierte technische Beschreibung)

Für Anwender:TSE-Anleitung im Benutzerhandbuch (Einrichtung und Bedienung)


Was ist eine TSE?

Eine TSE ist ein zertifiziertes Sicherheitsmodul, das jeden Kassenvorgang digital signiert. Das Finanzamt kann damit prüfen, ob Kassendaten nachträglich manipuliert wurden.

TSE in DiKAS

DiKAS signiert alle kassenrelevanten Vorgänge — nicht nur Rechnungen:

Vorgang ProcessType Entity Beschreibung
Kassenbons Kassenbeleg-V1 Receipt Jede Zahlung (Direktverkauf, Tischzahlung)
Stornos Kassenbeleg-V1 Receipt Jede Bonstornierung
Bestellungen Bestellung-V1 OpenBon Jede Bestellung im Tischbetrieb
Sammelbestellungen Bestellung-V1 OpenBon Batch-Bestellungen (Signatur auf Lead-Bon)
Schichteröffnung SonstigerVorgang Exchange Jede Schichteröffnung
Schichtschließung SonstigerVorgang Exchange Jede Schichtschließung
Tagesabschlüsse SonstigerVorgang DayClose Jeder Z-Bericht
Ausgaben SonstigerVorgang Spending Jede Barentnahme

Architektur

Signierungsfluss

Handler (z.B. ProcessDirectSaleCommand)
    → TseSigningHelper.SignReceiptAsync()
        → BackendConfig laden (TSE-fähig?)
        → ITseService.IsAvailable prüfen
        → ProcessData aufbauen
        → ClientId auflösen (CashPointSerial → BonIdServer → "1")
        → ITseService.SignReceiptAsync() [5s Timeout]
        → TSE-Felder auf Entity speichern
        → HandleOutageLogAsync() (Ausfallprotokoll)

Ausgaben (Spendings): Werden als SonstigerVorgang signiert; der Vorgangstext richtet sich nach dem AccountMode:

AccountMode TSE-Vorgangstyp
1 (Ausgabe) AVSonstAusgabe
2 (Kasse→Bank) AVTransfer
3 (Bank→Kasse) AVSonstEinlage
4 (Überweisung) AVSonstAusgabe

Komponenten

Komponente Beschreibung
TseSigningHelper Zentrale statische Klasse für alle TSE-Signierungen
ITseService Interface für TSE-Zugriff (IsAvailable, Sign, Export)
TseServiceRouter Routing: Proxy bevorzugt, Fallback auf Hardware
SwissbitTseService Lokale Swissbit-USB-TSE
TseProxyService Netzwerk-TSE über HTTP-Proxy
TseInitializationService TSE-Erstinitialisierung
ITseDataHolder Interface mit 9 TSE-Feldern auf allen signierten Entities
TseOutageLog Ausfallprotokoll-Entity
TseConfig TSE-Konfiguration (PublicKey, Serial, SigAlg, PINs)

ProcessData-Formate

Kassenbeleg-V1:

Beleg^{BruttoGesamt}_{MwStSatz1}:{MwStBetrag1}_{MwStSatz2}:{MwStBetrag2}
Beispiel: Beleg^50.00_19.00:5.00_7.00:2.00

Bestellung-V1:

{Menge}^{Artikeltext}^{BruttoBetrag};{Menge}^{Artikeltext}^{BruttoBetrag}
Beispiel: 2.00^Cola^7.00;1.00^Pizza^11.50

SonstigerVorgang:

{Vorgangstyp}^{Vorgangsdaten}
Beispiel: AVKassenschnitt^Tagesabschluss^1500.00

QR-Code-Format (DSFinV-K Anhang I)

V0;{KassenSerial};{ProcessType};{ProcessData};{TransNr};{SignZähler};{Start};{Ende};{SigAlg};{LogFormat};{Signatur};{PublicKey}

Einrichtung

Hardware-TSE (Swissbit)

USB-Stick am Server:

  1. Swissbit-TSE einstecken
  2. Admin → Einstellungen → TSE
  3. TSE-Typ: Hardware
  4. Lokalen Pfad zur TSE angeben
  5. Kassen-Seriennummer eingeben
  6. „Initialisieren" — setzt PINs und registriert Client

TSE-Proxy (Netzwerk)

Für verteilte Systeme mit mehreren Kassen:

  1. TSE-Proxy-Server einrichten
  2. Admin → Einstellungen → TSE
  3. TSE-Typ: Proxy
  4. URL des Proxy-Servers eingeben
  5. „Aktivieren"

API-Endpoints

Methode Endpoint Beschreibung
GET /api/v1/tse/info TSE-Statusinformationen (Kapazität, Zertifikat, Signaturen)
GET /api/v1/tse/config TSE-Konfiguration lesen
PUT /api/v1/tse/config TSE-Konfiguration aktualisieren
POST /api/v1/tse/initialize TSE initialisieren
GET /api/v1/tse/export/tar TSE-Logdaten als TAR exportieren (optional ?startDate=&endDate=)

TSE-Daten auf dem Bon

Jeder Kassenbon enthält die TSE-Daten:

══════════════════════════════════
  BON Nr. 20260313-0042
──────────────────────────────────
  ...Artikel...
──────────────────────────────────
  TSE-Information:
  Signatur:   a8f3c2d1e5...
  Trans.-Nr:  12345
  Sign.-Zäh:  67890
  Start:      2026-03-13T18:30:00
  Ende:       2026-03-13T18:30:01
  Seriennr:   ABCDEF1234567890

  [QR-Code]
══════════════════════════════════

Der QR-Code enthält alle TSE-Daten im DSFinV-K-Format (Anhang I) und kann vom Finanzamt gescannt werden.

DSFinV-K Export

Für die Kassenprüfung exportiert DiKAS Daten im DSFinV-K-Format:

  1. Admin → Einstellungen → Export → DSFinV-K
  2. Zeitraum wählen
  3. „Export erstellen"
  4. ZIP-Datei mit allen vorgeschriebenen CSV-Dateien

GDPdU Export

Für die digitale Betriebsprüfung:

  1. Admin → Einstellungen → Export → GDPdU
  2. Zeitraum wählen
  3. „Export erstellen"
  4. GDPdU-konforme Exportdatei

TSE-Ausfall

Wenn die TSE ausfällt (Defekt, Netzwerkproblem):

  1. DiKAS protokolliert den Ausfall automatisch (TseOutageLog mit StartTime, Reason, AffectedTransactions)
  2. Das Kassieren wird nicht blockiert — der Betrieb geht weiter
  3. Das TseError-Feld auf dem betroffenen Dokument wird gesetzt
  4. Bei Wiederverfügbarkeit werden offene Ausfall-Einträge geschlossen (EndTime gesetzt)
  5. Die Ausfall-Protokolle werden für das Finanzamt aufbewahrt

Wichtig: Bei TSE-Ausfall sind Sie verpflichtet, den Ausfall zu dokumentieren und zeitnah zu beheben. DiKAS erledigt die Dokumentation automatisch.

Tests

17 dedizierte TSE-Tests in TseSigningTests.cs:

  • ProcessData-Format für Kassenbeleg-V1 (ein/mehrere Steuersätze, Nullbeleg)
  • ProcessData-Format für Bestellung-V1 (einzeln, mehrere Positionen)
  • QR-Code-Generierung (V0-Format, Null-Fälle)
  • Signierungsfluss (TSE aktiv, deaktiviert, nicht verfügbar)
  • ClientId-Fallback-Kette (CashRegisterId → BonIdServer → "1")
  • Betragsformatierung (InvariantCulture)
  • ProcessType-Konstanten

Häufige Fragen zur TSE

Muss ich eine TSE haben? Ja, seit 01.01.2020 in Deutschland Pflicht.

Welche TSE unterstützt DiKAS? Hardware-TSE (Swissbit USB) und netzwerkbasierte TSE-Proxies.

Was kostet eine TSE? Hardware-TSE: ca. 250–300 EUR einmalig.

Kann das Finanzamt meine Daten prüfen? Ja, über DSFinV-K-, GDPdU- und TSE-TAR-Export. DiKAS ist darauf vorbereitet.

Blockiert ein TSE-Ausfall die Kasse? Nein. DiKAS protokolliert den Ausfall und arbeitet weiter. Der Ausfall muss zeitnah behoben werden.


Weiterführende Dokumente

TSE-Compliance für Steuerprüfer — Detaillierte technische Dokumentation für die Betriebsprüfung → TSE-Anleitung für Anwender — Einrichtung und Bedienung → Kassenmeldung ans Finanzamt — Kasse über Mein ELSTER melden (§ 146a Abs. 4 AO) → Plugin-Entwicklung — Eigene Module erstellen