Tagesabschluss + Z-Bon
Live seit 13.06.2026 (Commit 7421abaa8) unter
https://profipos.de/backoffice/tagesabschluesse.
Workflow
Architektur-Decision
- Keine eigene
tagesabschluesse-Tabelle — Mapping direkt aufz_bons(existiert seit V6). - Status-Marker:
kassenbestand_ende_ist IS NULL→ Entwurfkassenbestand_ende_ist IS NOT NULL→ Abgeschlossen
z_typ-Konstanten:tagesabschluss_kasse,tagesabschluss_standort.
Routes (CodeIgniter 4)
$r->get ('tagesabschluesse', 'TagesabschluesseController::liste');
$r->get ('tagesabschluesse/neu', 'TagesabschluesseController::erstellen');
$r->post ('tagesabschluesse', 'TagesabschluesseController::speichern');
$r->get ('tagesabschluesse/(:segment)/druck', 'TagesabschluesseController::druck/$1');
$r->post ('tagesabschluesse/(:segment)/abschliessen', 'TagesabschluesseController::abschliessen/$1');
$r->get ('tagesabschluesse/(:segment)', 'TagesabschluesseController::detail/$1');
Reihenfolge der Routes
Spezifische Routes (/druck, /abschliessen) MÜSSEN vor der generischen
(:segment)-Detail-Route stehen, sonst matched die generische Route zuerst.
Aggregation (privater Helper aggregateBestellungen())
4 Sub-Queries gegen bestellungen, bestellpositionen, zahlungen →
liefern in einem Rutsch:
- Brutto + Netto + Storno + Trinkgeld + Rabatte
- Steuer-Aufschlüsselung als JSON nach
z_bons.steuer_aufschluesselung - Zahlart-Aufschlüsselung als JSON nach
z_bons.zahlart_aufschluesselung
Audit-Log
Jeder Abschluss-Schritt wird in audit_log protokolliert:
| Aktion | Severity | Inhalt |
|---|---|---|
tagesabschluss.erstellt | info | {z_bon_uuid, z_typ, zeitraum_von, zeitraum_bis} |
tagesabschluss.abgeschlossen | info | {z_bon_uuid, kassenbestand_ende_ist, differenz_bar} |
Audit-UUID: bin2hex(random_bytes(16)), JSON
JSON_UNESCAPED_UNICODE.
Druck-View
druck.php ist eine standalone View (ohne Layout-Include) mit eigenem
@media print { @page A4 }-CSS:
- Print-Button
class="no-print"(im Druck unsichtbar) window.print()direkt nach DOM-Ready- Druckdatum-Footer
DB-Schema (z_bons-relevante Felder)
| Feld | Typ | Bedeutung |
|---|---|---|
z_bon_uuid | CHAR(36) | PK |
mandant_uuid, standort_uuid, geraet_uuid | CHAR(36) | letzteres NULLABLE |
z_typ | VARCHAR | tagesabschluss_kasse / tagesabschluss_standort |
z_nummer | BIGINT | pro Mandant+Standort vergeben via MAX(z_nummer)+1 (KEIN AUTO_INCREMENT) |
bon_zeitraum_von / bis | DATETIME | |
anzahl_bons, anzahl_storno_bons | INT | |
umsatz_brutto / netto | DECIMAL | |
summe_trinkgeld / rabatte / storno | DECIMAL | |
kassenbestand_anfang / ende_soll / ende_ist | DECIMAL NULL | |
differenz_bar | DECIMAL | |
steuer_aufschluesselung / zahlart_aufschluesselung | LONGTEXT JSON | |
abgeschlossen_am, abgeschlossen_von_benutzer_uuid | ||
dsfinvk_exportiert, tse_export_pfad, tse_export_hash_sha256 | ||
bon_text, bon_pdf_pfad |
Verwandte Themen
- DSFinV-K-Export (greift auf abgeschlossene
z_bonszu) - Audit-Log
- Cloud-REST v6