Wiki
Pricing Engine
Wie die deterministische Pricing Engine von QuoteNode Angebotssummen berechnet, Rabatte anwendet und Multi-Currency sowie MwSt. verarbeitet.
Pricing Engine
QuoteNode verwendet eine deterministische Pricing Engine, die reproduzierbare und auditierbare Berechnungen sicherstellt. Jeder Preis, jeder Rabatt und jeder Steuerbetrag folgt einer festen Auswertungsreihenfolge und wird zur Verifikation gespeichert.
Berechnungsreihenfolge
Die Engine verarbeitet Preise exakt in dieser Abfolge:
- Line unit price — Basispreis aus dem Katalog oder manuell eingegeben für freie Positionen
- Pricing rule evaluation — automatische Anpassung auf Basis von Kunden- oder Kundengruppenregeln
- Quantity multiplication — unit_price × quantity = line_subtotal
- Line-level discount — prozentual oder als fixer Betrag vom line_subtotal = line_net
- Line VAT — line_net × VAT_rate = line_vat
- Line gross — line_net + line_vat = line_gross
- Subtotal — Summe aller line_net-Werte
- Offer-level discount — prozentual oder fix auf den Subtotal
- Shipping — wird zum rabattierten Subtotal (NET) addiert
- Total NET — rabattierter Subtotal + Shipping
- Total VAT — Summe der VAT-Beträge nach eventueller Neuberechnung
- Total GROSS — total_net + total_vat
Pricing Rules
Pricing Rules erlauben automatische Preisänderungen abhängig von Kundenbeziehungen.
Ziel der Regeln
- Pro Kunde — gilt für einen bestimmten Kunden
- Pro Kundengruppe — gilt für alle Kunden einer Gruppe
Scope der Regeln
- Alle Produkte — die Regel gilt für den gesamten Katalog
- Bestimmte Produktgruppe — die Regel gilt nur innerhalb einer benannten Gruppe
Regeltypen
- Percentage discount — prozentualer Rabatt auf den Basispreis
- Percentage markup — prozentualer Aufschlag
- Fixed amount discount — fixer Rabatt pro Einheit
- Fixed amount markup — fixer Aufschlag pro Einheit
Prioritäten und Konflikte
Wenn mehrere Regeln auf dieselbe Kunde-Produkt-Kombination passen:
- werden die Regeln nach Priorität sortiert,
- gewinnt die Regel mit der höchsten Priorität,
- Regeln werden nicht gestapelt.
Gültigkeit
Jede Regel kann einen Datumsbereich (valid_from, valid_to) und ein Aktiv-Flag haben. Nur aktive Regeln innerhalb des Gültigkeitsfensters werden ausgewertet.
Multi-Currency
QuoteNode unterstützt Angebote in jeder konfigurierten Währung:
- Base currency — Standardwährung des Tenants, für Reports genutzt
- Offer currency — die Währung eines konkreten Angebots
- FX rate — der Wechselkurs zwischen Angebots- und Basiswährung
Wenn ein Angebot nicht in der Basiswährung erstellt wird:
- werden Produktpreise im Katalog in Basiswährung gespeichert,
- rechnet das System beim Erstellen mit dem aktuellen Kurs um,
- wird der verwendete Kurs im Snapshot gespeichert,
- konvertieren Pipeline-Berichte Werte anhand dieses gespeicherten Kurses zurück.
FX-Kurse werden aktuell manuell gepflegt. Automatische NBP-/ECB-Integration ist weiterhin geplant.
MwSt.-Handling
VAT Groups
VAT-Gruppen definieren die verfügbaren Steuersätze eines Tenants:
- Standardraten wie 23 %, 8 %, 5 %, 0 %
- befreit
- benutzerdefinierte Sätze für besondere Jurisdiktionen
Jedes Produkt ist einer VAT-Gruppe zugeordnet. Eine Gruppe ist der Standard für neue Produkte und freie Positionen.
VAT pro Position
MwSt. wird pro Zeile und nicht als Pauschale auf die Gesamtsumme berechnet. Das ist entscheidend für Angebote mit unterschiedlichen Steuersätzen.
Die Angebotssumme enthält einen VAT-Breakdown mit Gesamtwerten pro Satz.
Preisanzeigemodi
Jedes Angebot kann in einem von drei Modi dargestellt werden:
- NET — nur Nettowerte sichtbar
- GROSS — nur Bruttowerte sichtbar
- NET + VAT + GROSS — vollständige Aufschlüsselung pro Zeile und in den Summen
Der Modus wird pro Angebot definiert und beeinflusst sowohl PDF als auch öffentliche Angebotsseite.
Rabatte
Rabatte auf Zeilenebene
Jede Zeile kann einen individuellen Rabatt besitzen:
- prozentual,
- als fixer Betrag.
Der Rabatt wird nach der Mengenmultiplikation und vor der MwSt. angewendet.
Rabatt auf Angebotsebene
Ein globaler Rabatt kann auf das gesamte Angebot gelegt werden:
- prozentual,
- als fixer Betrag.
Er wird nach der Summierung aller Zeilen, aber vor Versand und MwSt. angewendet.
Darstellung von Rabatten
Das Template-System unterstützt drei Modi:
- BAKED_IN — der Kunde sieht nur den Endpreis
- SHOW_COLUMN — Rabatt wird in einer eigenen Spalte ausgewiesen
- HIDDEN — Rabatt wirkt, wird aber nicht separat dargestellt
Rundung
Alle monetären Berechnungen nutzen HALF_UP-Rundung. Gerundet wird:
- pro Zeile nach Rabatt und vor MwSt.,
- pro MwSt.-Betrag,
- auf Ebene der Angebotsgesamtsumme.
Das konsistente Rundungsmodell stellt sicher, dass Positionssummen und Gesamtergebnis zusammenpassen.
Gespeicherte Summen
Berechnete Totale werden in der denormalisierten Tabelle offer_totals gespeichert, um:
- schnelle Queries in Reports und Listen zu ermöglichen,
- Audit-Validierung zu unterstützen,
- historische Genauigkeit auch nach späteren Änderungen an Preisregeln zu bewahren.