Sitzungspreise
HandyCafe verwendet eine segmentbasierte Preisberechnung für Sitzungskosten in Ihrem Internetcafe oder Gaming-Center. Anstatt einen einzigen Pauschaltarif für die gesamte Sitzung anzuwenden, unterteilt die Berechnung jede Sitzung in Segmente mit eigenem Preiskontext. Dieser Ansatz gewährleistet eine genaue Abrechnung, auch wenn Sitzungen mehrere Zeitslots, Preisänderungen, Pausen oder Verbindungsabbrüche überspannen.
Grundkonzepte
| Begriff | Definition |
|---|---|
| Grundstundensatz | Der Preis pro Stunde vor Anwendung von Multiplikatoren. Festgelegt unter Einstellungen > Preise. |
| Preisslot | Ein benannter Zeitraum mit einem bestimmten Multiplikator. Es gibt 8 Slots, jeweils farbcodiert. |
| Multiplikator | Ein Faktor auf den Grundsatz. 1,0 = Standardpreis, 0,5 = halber Preis, 2,0 = doppelter Preis. |
| Segment | Ein zusammenhängender Zeitraum innerhalb einer Sitzung, in dem der Preiskontext (Slot, Multiplikator, Grundpreis) unverändert bleibt. |
| Abrechnung | Die abschließende Berechnung, die bestimmt, wie viel der Kunde beim Sitzungsende schuldet. |
Grundstundensatz
Der Grundstundensatz ist die Basis aller Preisberechnungen. Er wird unter Einstellungen > Preise festgelegt und stellt den Standardpreis pro Stunde PC-Nutzung dar.
Alle internen Berechnungen verwenden Währungsuntereinheiten (z. B. Cent für EUR). Wenn Ihr Grundsatz 3,00 EUR pro Stunde beträgt, ist der interne Wert 300. Dies eliminiert Rundungsprobleme bei Gleitkommazahlen.
Doppelte Währungsunterstützung
HandyCafe unterstützt eine Basiswährung und eine lokale Währung mit Wechselkurs (FX-Rate). Wenn Sie in einem Land operieren, wo internationale und lokale Preisgestaltung voneinander abweichen:
- Basiswährung. Die für interne Preisberechnungen verwendete Währung.
- Lokale Währung. Die den Kunden angezeigte und für Zahlungen verwendete Währung.
- FX-Rate. Der Umrechnungsfaktor zwischen Basis- und lokaler Währung.
Wenn beide Währungen identisch sind, wird die FX-Rate als 1,0 behandelt und hat keine Auswirkung.
Preisslots
Es gibt 8 farbcodierte Preisslots, die jeweils eine andere Preisstufe repräsentieren:
| Slot | Farbe | Typische Verwendung |
|---|---|---|
| Blau | Blau | Standardtarif |
| Orange | Orange | Abend- oder Wochenendzuschlag |
| Rot | Rot | Spitzenzeiten-Aufschlag |
| Grün | Grün | Nebenzeiten-Rabatt |
| Blaugrün | Blaugrün | Studenten- oder Mitgliedertarif |
| Grau | Grau | Feiertags- oder Sonderpreise |
| Cyan | Cyan | Nachttarif |
| Smaragd | Smaragd | Aktionstarif |
Jeder Slot hat drei Eigenschaften:
- Name. Eine beschreibende Bezeichnung (z. B. "Spitzenzeiten" oder "Nachtrabatt").
- Multiplikator. Ein Dezimalwert, der den Grundsatz modifiziert. Gängige Werte: 1,0 (Standard), 0,5 (halber Preis), 1,5 (50% Aufschlag), 2,0 (doppelter Preis). Der Multiplikator muss null oder positiv sein.
- Zeitplandaten. Eine interne Darstellung, die festlegt, zu welchen Stunden und Tagen der Slot gilt. Dies wird automatisch über das Zeitplanraster verwaltet.
Slots können einzeln aktiviert oder deaktiviert werden. Deaktivierte Slots werden von der Preisberechnung ignoriert.
Das Zeitplanraster
Der Preisplan ist eine 7-Tage-mal-24-Stunden-Matrix (168 einstündige Blöcke insgesamt). Jedem Block wird ein Preisslot zugewiesen. Der Zeitplan bestimmt, welcher Multiplikator zu einem gegebenen Zeitpunkt gilt.
Das Raster wird unter Einstellungen > Preisplan konfiguriert. Die Tage laufen von Montag bis Sonntag und die Stunden von 00:00 bis 23:00. Um einem Zeitblock einen Slot zuzuweisen, wählen Sie den Block im Raster und wählen die gewünschte Slotfarbe.
Preissegmente
Ein Segment ist ein zusammenhängender Zeitraum innerhalb einer Sitzung, in dem sich der Preiskontext nicht ändert. Die Preisberechnung erstellt ein neues Segment bei folgenden Grenzereignissen:
| Grenze | Auslöser |
|---|---|
| session_start | Eine neue Sitzung beginnt |
| session_stop | Die Sitzung wird beendet |
| pause | Der Kassierer pausiert die Sitzung |
| resume | Der Kassierer setzt die Sitzung fort |
| tick | Die Uhr überschreitet eine Stundengrenze in einen anderen Preisslot |
| disconnect | Der Client-PC verliert seine Netzwerkverbindung |
| offline | Der Client-PC geht offline |
| load_recovery | Der Server startet neu und stellt eine laufende Sitzung wieder her |
Jedes Segment erfasst:
| Feld | Beschreibung |
|---|---|
| session_id | Die Sitzung, zu der dieses Segment gehört |
| segment_start | Unix-Zeitstempel des Segmentbeginns |
| segment_end | Unix-Zeitstempel des Segmentendes (null wenn noch offen) |
| pricing_slot_id | Die ID des aktiven Preisslots (z. B. "blue", "red" oder "base") |
| multiplier | Der Multiplikatorwert des Preisslots |
| base_price_snapshot | Der zum Zeitpunkt der Segmenteröffnung erfasste Grundstundensatz |
| amount | Die berechneten Kosten für dieses Segment (gesetzt beim Schließen) |
| boundary_reason | Warum dieses Segment erstellt wurde |
Kostenformel
Die Kosten eines einzelnen Segments werden berechnet als:
amount = ceil( (base_price_snapshot * multiplier * duration_seconds) / 3600 )
Die Berechnung verwendet skalierte Ganzzahlarithmetik zur Vermeidung von Gleitkommafehlern:
- Der Multiplikator wird auf eine Festkomma-Ganzzahl skaliert (multipliziert mit 1.000.000).
- Die Berechnung erfolgt vollständig in 128-Bit-Ganzzahlen.
- Aufrundung wird verwendet. Das Ergebnis wird immer auf die nächste Untereinheit aufgerundet.
Sitzungsgesamtberechnung
Die Gesamtkosten der Sitzung werden in drei Schritten berechnet:
Schritt 1: Alle Segmente summieren
Rohsumme = Summe aller geschlossenen Segmentbeträge + Teilbetrag des offenen Segments
Schritt 2: Rundung anwenden
Gerundete Summe = Aufrunden(Rohsumme, Rundungsschritt)
Rundung erfolgt immer nach oben (Aufrundung) zum Schutz der Einnahmen.
Schritt 3: Startgebühr-Minimum anwenden
Endsumme = max(Gerundete Summe, Startgebühr)
Die Startgebühr ist der Mindestbetrag für jede Sitzung, unabhängig von der Dauer.
Abrechnung
Die Abrechnung ist der Prozess der Finalisierung der Sitzungskosten. Es gibt zwei Abrechnungsstufen:
Startabrechnung (nur Vorauszahlung)
Bei Beginn einer Vorauszahlungssitzung wird ein "Start"-Abrechnungsdatensatz erstellt. Dieser erfasst die berechneten Kosten und den tatsächlich berechneten Betrag.
Stoppabrechnung
Beim Beenden einer Sitzung (Vorauszahlung oder Nachzahlung) wird ein "Stopp"-Abrechnungsdatensatz erstellt mit: Berechnete Kosten, berechneter Betrag, manuell angepasster Betrag (falls der Kassierer den Preis manuell geändert hat), Provisionssatz, Provisionsgebühr, Festgebühr und einem JSON-Snapshot der vollständigen Preissegment-Zeitleiste.
MwSt. (Mehrwertsteuer)
Die MwSt. wird als Prozentsatz (0-100%) unter Einstellungen > Preise konfiguriert. Sie wird auf den berechneten Sitzungsbetrag aufgeschlagen:
MwSt. = Berechneter Betrag x (MwSt.-Satz / 100)
Der MwSt.-Betrag wird separat im Zahlungsdialog angezeigt, damit der Kassierer die Steueraufschlüsselung sehen kann.
Vorauszahlung-Preismodi
Preis beim Kauf fixieren
Bei Sitzungsbeginn wird der berechnete Betrag fixiert. Für die Dauer der Sitzung wird die Sitzungsendzeit basierend auf den gekauften Minuten festgelegt. Selbst bei Preisplanänderungen läuft die Sitzung bis zum Ablauf der fixierten Zeit weiter.
Live-Preisplan
Die verbleibende Sitzungszeit wird kontinuierlich neu berechnet, wenn sich die Preisslots ändern. Wenn die Sitzung in einen günstigeren Slot wechselt, verlängert sich die verbleibende Zeit. Bei einem teureren Slot verkürzt sie sich.
Nächste Schritte
- Sitzungsverwaltung: Den vollständigen Sitzungslebenszyklus kennenlernen
- Preiseinstellungen: Grundsatz, Rundung und Startgebühr konfigurieren
- Preisplan-Einstellungen: Das 7x24-Zeitplanraster einrichten
- Zahlungsmethoden: Zahlungsmethoden mit Provision und Gebühren konfigurieren