Was sind Preisregeln?
Preisregeln sind Einträge, die der Engine mitteilen: „Für diesen Kunden (oder diese Gruppe), innerhalb dieses Zeitfensters, verwende diese Preisliste." Sie verbinden einen Kunden oder eine Kundengruppe mit einer bestimmten Preisliste und definieren die Preiskategorie — zum Beispiel ob es sich um einen Einzelhandelspreis, einen Großhandelstarif oder einen internen Kostenpreis handelt.
Eine Preisregel enthält keine Bedingungen für Datensatzattribute. Die Auswahl der konkreten Preislistenposition übernimmt die Rating-Engine automatisch anhand des Codes (code) des Datensatzes.
Struktur einer Preisregel
Eine Preisregel besteht aus folgenden Feldern:
| Feld | Pflicht | Beschreibung |
|---|---|---|
name | ✓ | Verständlicher Name der Regel |
code | ✓ | Regelcode (identifiziert die Dienstkategorie) |
billing_category | ✓ | Preistyp: cost, retail, wholesale, reseller |
price_list_id | ✓ | ID der zu verwendenden Preisliste |
valid_from | ✓ | Regelgültigkeit ab (ISO-Datum) |
valid_to | Regelablauf (NULL = unbegrenzt) | |
customer_id | ID eines bestimmten Kunden (NULL = gilt für alle) | |
group_id | ID einer Kundengruppe | |
priority | Ganzzahl, Standard 0 — höhere Zahl = höhere Priorität | |
scope | self (Standard), children, subtree | |
is_active | Boolean, Standard true |
Beispiel — Regel über die API erstellen:
POST /api/v1/pricing-rules
Content-Type: application/json
{
"name": "VIP-Kunden — Einzelhandelspreise 2026",
"code": "VIP-RETAIL-2026",
"billing_category": "retail",
"price_list_id": "uuid-vip-preisliste",
"group_id": "uuid-vip-gruppe",
"priority": 100,
"valid_from": "2026-01-01",
"valid_to": null
}
Wie wählt die Engine Regeln aus?
Bei der Bewertung jedes Datensatzes (DR) durchläuft die Engine folgende Schritte:
1. Kundengruppen laden Ermittelt, zu welchen Gruppen der Kunde gehört.
2. Alle aktiven Regeln des Partners laden
Filtert nur Regeln mit is_active = true.
3. Anwendbare Regeln filtern Eine Regel gilt als anwendbar, wenn eine der folgenden Bedingungen erfüllt ist:
rule.customer_identspricht der Kunden-ID des DR → kundenspezifische Regelrule.group_idist in den Gruppen des Kunden → Gruppenregel- Beide
rule.customer_idundrule.group_idsind NULL → Standardregel (gilt für alle)
Und der DR muss im Gültigkeitsfenster der Regel liegen:
valid_from ≤ DR-Zeitstempel ≤ valid_to
4. Nach Priorität absteigend sortieren Die Regel mit der höchsten Prioritätszahl wird zuerst verarbeitet.
5. Für jede anwendbare Regel Preislistenposition suchen
Sucht nach einer Position mit demselben code wie der Datensatz (dr.code → price_list_item.code). Wenn gefunden, wird der Preis berechnet und ein bewerteter Eintrag erstellt. Wenn nicht, wird zur nächsten Regel übergegangen.
Mehrfachbewertung eines Datensatzes
Wichtige Eigenschaft: die Engine stoppt nicht nach der ersten übereinstimmenden Regel. Sie verarbeitet alle anwendbaren Regeln, und für jede, bei der eine passende Preislistenposition gefunden wird, erstellt sie einen separaten bewerteten Eintrag.
Das ermöglicht, dass ein DR gleichzeitig erhält:
- Einen Kostenpreis (was der Betreiber dem Anbieter zahlt) —
billing_category: "cost" - Einen Einzelhandelspreis (was der Kunde dem Betreiber zahlt) —
billing_category: "retail"
Beide Einträge entstehen aus demselben DR, jeder mit einer anderen Regel und einer anderen Preisliste.
Billing Category
Das Feld billing_category definiert den Typ der Preisebene. Unterstützte Werte:
| Wert | Verwendung |
|---|---|
cost | Kostenpreis — was der Betreiber dem Lieferanten zahlt |
retail | Einzelhandelspreis — was der Kunde dem Betreiber zahlt |
wholesale | Großhandelspreis — für B2B-Verkauf |
reseller | Händlerpreis — für Vertriebspartner |
Eine typische Konfiguration für einen Telekommunikationsbetreiber hat zwei Regeln pro Datensatztyp: eine cost (mit Kostenpreisliste) und eine retail (mit Kundenpreisliste). Das ergibt einen vollständigen Margenbericht.
Priorität
Priorität ist eine Ganzzahl — höhere Zahl bedeutet höhere Priorität, Regeln werden absteigend ausgewertet. Standard ist 0.
Beispiel-Prioritätshierarchie:
| Priorität | Kunde / Gruppe | Billing category | Preisliste |
|---|---|---|---|
| 200 | bestimmter Kunde | retail | Individualliste |
| 100 | VIP-Gruppe | retail | VIP-Liste |
| 10 | (Standard) | retail | Standardliste |
| 5 | (Standard) | cost | Kostenliste |
Gültigkeitsfenster der Regel
Im Gegensatz zu Preislistenversionen hat eine Preisregel ihr eigenes Zeitfenster: valid_from und valid_to. Das ermöglicht:
- Eine Regel für eine Saisonaktion erstellen (
valid_from: "2026-06-01",valid_to: "2026-08-31") - Eine alte Regel auslaufen lassen ohne sie zu löschen (set
valid_to) - Regeln im Voraus vorbereiten — die Engine wendet sie automatisch ab
valid_froman
Regel deaktivieren
Um eine Regel vorübergehend zu deaktivieren ohne sie zu löschen:
PUT /api/v1/pricing-rules/{id}
Content-Type: application/json
{ "is_active": false }
Standardregel (Fallback)
Eine Regel ohne customer_id und group_id gilt für alle Kunden des Partners:
{
"name": "Standard-Retail — alle Kunden",
"code": "DEFAULT-RETAIL",
"billing_category": "retail",
"price_list_id": "uuid-standardliste",
"customer_id": null,
"group_id": null,
"priority": 0,
"valid_from": "2026-01-01"
}
Best Practices
Immer eine Standardregel. Ein Kunde ohne passende Regel erzeugt eine leere Bewertung — das erscheint als Fehler im Reporting.
Prioritäten systematisch setzen. Konvention empfohlen: z.B. 1–9 Standard, 10–99 Gruppe, 100+ individueller Kunde.
valid_to statt löschen. Eine Regel mit vergangenem valid_to ist historisch nachvollziehbar. Eine gelöschte Regel fehlt in der Geschichte.
Regeln verständlich benennen. "VIP-Gruppe — Retail Q1 2026" ist in einem Jahr noch verständlich.
Kombinationen testen. Prüfen Sie, dass jeder DR genau eine retail-Bewertung erhält.
Fazit
Preisregeln sind ein flexibles Werkzeug zur Zuweisung von Preislisten an Kunden und Gruppen, mit Unterstützung für mehrere Preiskategorien, Zeitgültigkeit und Priorität. Im Gegensatz zu Systemen mit dynamischen Bedingungen arbeiten sie nach dem direkten Zuordnungsprinzip — Kunde/Gruppe → Preisliste — klar und ohne Nebeneffekte. Kapitel 3 behandelt Kundengruppen als Grundlage der Segmentierung.