Kassen-Schichten
Übersicht aller Bediener-Schichten pro Kasse mit Storno-Möglichkeit. Live
seit 13.06.2026 (Commit 059589397).
Routes
GET /backoffice/kassen-schichten
GET /backoffice/kassen-schichten/<uuid>
POST /backoffice/kassen-schichten/<uuid>/storno
Liste
4 Stat-Cards:
- Offen
- Abgeschlossen (heute)
- Storniert
- Summe-Differenz (Kasse – Soll)
Filter: tage, status, standort, geraet, benutzer.
Detail
- Wer (Bediener-Anzeige-Name) / Wo (Standort + Gerät)
- Zeiten (geöffnet / geschlossen)
- Bestand (Anfang / Soll-Ende / Ist-Ende / Differenz)
- Bons in der Schicht
- Storno-Formular (nur bei
status='offen'oderstatus='abgeschlossen')
Storno
Validierung: grund.length >= 5. Schreibt audit_log-Eintrag mit
Aktion kassen_schicht_storniert.
Kein MQTT-Event
Der Storno-Workflow triggert kein MQTT-Event und keinen Webhook. Der Standort-Server liest den neuen Status erst beim nächsten Cloud-Sync.
DB-Schema
CREATE TABLE kassen_schichten (
schicht_uuid CHAR(36) PRIMARY KEY,
mandant_uuid CHAR(36) NOT NULL,
standort_uuid CHAR(36) NOT NULL,
geraet_uuid CHAR(36) NOT NULL,
benutzer_uuid CHAR(36) NOT NULL,
status ENUM('offen','abgeschlossen','storniert') NOT NULL,
geoeffnet_am DATETIME NOT NULL,
geschlossen_am DATETIME NULL,
kassenbestand_anfang DECIMAL(10,2) NULL,
kassenbestand_ende_soll DECIMAL(10,2) NULL,
kassenbestand_ende_ist DECIMAL(10,2) NULL,
differenz DECIMAL(10,2) NULL,
storno_grund VARCHAR(255) NULL,
storniert_am DATETIME NULL,
storniert_von_uuid CHAR(36) NULL
);