kassensichv.types

Zurück zur KassenSichV-Übersicht

Zentrale Typdefinitionen der KassenSichV-Bibliothek. Diese Unit enthält ausschließlich Structs, Konstanten und Hilfsfunktionen für Speicherverwaltung — keine TSE-Kommunikationslogik.

Import

import kassensichv.types;

Typen

BelegDaten

Eingangsdaten eines Kassenbons für die TSE-Signierung.

pub type BelegDaten = struct {
    transId:      int64;   // pchar — wird von TseOpenBeleg/TseProcessBeleg gesetzt
    prozessTyp:   int64;   // pchar — z.B. PROZESSTYP_KASSENBELEG
    prozessDaten: int64;   // pchar — DSFinV-K-konformer Payload
    kassenNr:     int64;   // pchar — Geräte-ID laut DSFinV-K
    umsatz:       int64;   // Eurocent (Ganzzahl, keine Fließkomma-Rundungsfehler)
    startZeit:    int64;   // Unix-Zeitstempel (UTC) — von TSE gesetzt
    endZeit:      int64;   // Unix-Zeitstempel (UTC) — von TSE gesetzt
}

Feld Typ Beschreibung
transId int64 (pchar) Interne Vorgangs-ID — wird von TseOpenBeleg / TseProcessBeleg befüllt
prozessTyp int64 (pchar) BSI-Prozesstyp — Konstante aus dieser Unit verwenden
prozessDaten int64 (pchar) Strukturierter Payload im DSFinV-K-Format
kassenNr int64 (pchar) Geräteseriennummer der Kasse laut DSFinV-K
umsatz int64 Kumulierter Bruttoumsatz in Eurocent (kein Double — Rundungsfehler!)
startZeit int64 Unix-Zeitstempel UTC — wird von der TSE gesetzt
endZeit int64 Unix-Zeitstempel UTC — wird von der TSE gesetzt

Hinweis zu umsatz: Der Betrag 2,50 EUR wird als 250 gespeichert (Eurocent). Das entspricht dem Verhalten von DSFinV-K, das BCD-Arithmetik ohne Fließkomma vorschreibt.

SigErgebnis

Steuerliche Pflichtangaben für den Bondruck nach KassenSichV / BSI TR-03153. Alle 7 Pflichtfelder laut TR-03153 Anhang A.

pub type SigErgebnis = struct {
    tseSerial:   int64;   // pchar — Seriennummer der zertifizierten TSE (Pflichtfeld)
    sigZaehler:  int64;   // fortlaufender TSE-Vorgangszähler (Pflichtfeld)
    anzahlTrans: int64;   // Gesamtzähler aller Transaktionen dieser TSE
    sigWert:     int64;   // pchar — ECDSA/SHA-256, Base64-kodiert (Pflichtfeld)
    qrCode:      int64;   // pchar — BSI TR-03153 Anhang A QR-Code-String (Pflichtfeld)
    startZeit:   int64;   // Unix-Zeitstempel UTC laut TSE (Pflichtfeld)
    endZeit:     int64;   // Unix-Zeitstempel UTC laut TSE (Pflichtfeld)
    success:     int64;   // 1 = signiert, 0 = Fehler
    errorMsg:    int64;   // pchar — Fehlermeldung (leer bei success=1)
}

Feld Typ Pflichtfeld auf Bon
tseSerial int64 (pchar) ja
sigZaehler int64 ja
sigWert int64 (pchar) ja — Base64-ECDSA/SHA-256
qrCode int64 (pchar) ja — vorformatiert, BSI TR-03153 Anhang A
startZeit int64 ja — UTC
endZeit int64 ja — UTC
anzahlTrans int64 im QR-Code enthalten
success int64 nein — intern für Fehlerprüfung
errorMsg int64 (pchar) nein — nur bei success=0 relevant

Alle pchar-Felder in SigErgebnis sind allokiert. Nach der Verwendung SigErgebnisFree() aufrufen.

Konstanten

Prozesstypen (BSI TR-03153)

pub const PROZESSTYP_KASSENBELEG: pchar = "Kassenbeleg-V1";
pub const PROZESSTYP_STORNO:      pchar = "Kassenbeleg-V1-Storno";
pub const PROZESSTYP_TRAINING:    pchar = "Training";
pub const PROZESSTYP_BESTELLUNG:  pchar = "Bestellung-V1";

Konstante Bedeutung
PROZESSTYP_KASSENBELEG Normaler Kassenbon (Verkauf, Einnahme)
PROZESSTYP_STORNO Stornierter Vorgang — eigener Bon mit negativem Betrag
PROZESSTYP_TRAINING Trainingsbetrieb — kein Steuerbezug, kein Finanzamt-Export
PROZESSTYP_BESTELLUNG Bestellvorgang ohne sofortige Zahlung (z.B. Restaurant)

Sonstige Konstanten

pub const TSE_QR_PREFIX:       pchar = "V0";
pub const DSFINVK_VERSION:     pchar = "2.3";
pub const TSE_DEFAULT_TIMEOUT: int64 = 5000;     // ms
pub const KASSENSICHV_VERSION: pchar = "1.0.0";

Speicherverwaltung

// Gibt alle allokierten Strings in SigErgebnis frei
pub fn SigErgebnisFree(sig: int64): void;

// Gibt alle allokierten Strings in BelegDaten frei (nur wenn selbst allokiert)
pub fn BelegDatenFree(beleg: int64): void;

Faustregel: BelegDaten-Felder zeigen in der Regel auf String-Literale im Programmcode und müssen nicht freigegeben werden. SigErgebnis kommt von der TSE — immer SigErgebnisFree() aufrufen.

DSFinV-K-Datenformat

Das Feld prozessDaten folgt dem DSFinV-K 2.3-Schema. Für einfache Kassenbons ist das Format:

{Artikel};{Betrag_normal}_{Betrag_ermäßigt}_{Betrag_Null}_{Betrag_besonders}_{Sonstiges}

Beispiele:

// Kaffee 2,50 EUR (normaler Steuersatz 19%)
beleg.prozessDaten := "Kaffee;2.50_0.00_0.00_0.00_0.00"c;

// Buch 15,00 EUR (ermäßigter Steuersatz 7%)
beleg.prozessDaten := "Buch;0.00_15.00_0.00_0.00_0.00"c;

// Mehrere Artikel
beleg.prozessDaten := "Kaffee+Wasser;2.50_0.00_0.00_0.00_0.00;Leitungswasser;0.00_0.00_0.50_0.00_0.00"c;

Für komplexe DSFinV-K-Anforderungen (Mehrwertsteuerausweise, Bonpflicht-Details) gilt die offizielle DSFinV-K 2.3-Spezifikation des BMF.


Letzte Aktualisierung: 2026-06-12