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
