Przejdź do treści
Q
QuoteNode

Wiki

Silnik cenowy

Jak deterministyczny silnik cenowy QuoteNode wylicza sumy ofert, rabaty, VAT i waluty.

Silnik cenowy

QuoteNode używa deterministycznego silnika cenowego, który gwarantuje powtarzalne i audytowalne wyliczenia. Każda cena, każdy rabat i każdy podatek są przetwarzane w określonej kolejności i zapisywane do weryfikacji.

Kolejność obliczeń

Silnik liczy ceny dokładnie w tej sekwencji:

  1. Cena jednostkowa pozycji — cena bazowa z katalogu albo wpisana ręcznie dla pozycji niestandardowej
  2. Ocena reguł cenowych — automatyczne korekty zależne od klienta lub grupy klientów
  3. Mnożenie przez ilośćunit_price × quantity = line_subtotal
  4. Rabat na poziomie pozycji — procentowy albo kwotowy rabat od line_subtotal = line_net
  5. VAT pozycjiline_net × VAT_rate = line_vat
  6. Brutto pozycjiline_net + line_vat = line_gross
  7. Subtotal — suma wszystkich line_net
  8. Rabat na poziomie oferty — procentowy albo kwotowy rabat od subtotal
  9. Dostawa — dodawana do subtotal po rabacie jako wartość netto
  10. Razem NETTO — subtotal po rabacie plus dostawa
  11. Razem VAT — suma VAT per pozycja, przeliczona ponownie po rabacie globalnym, jeśli dotyczy
  12. Razem BRUTTOtotal_net + total_vat

Reguły cenowe

Reguły cenowe pozwalają automatycznie korygować ceny na podstawie relacji z klientem.

Cel reguły

  • Per customer — dla konkretnego klienta
  • Per customer group — dla wszystkich klientów z określonej grupy

Zakres reguły

  • All products — dla całego katalogu
  • Specific product group — tylko dla produktów z konkretnej grupy

Typy reguł

  • Percentage discount — rabat procentowy od ceny bazowej
  • Percentage markup — narzut procentowy
  • Fixed amount discount — stała kwota rabatu per jednostka
  • Fixed amount markup — stała kwota narzutu per jednostka

Priorytety i konflikty

Gdy do tej samej kombinacji klient-produkt pasuje więcej niż jedna reguła:

  1. reguły są sortowane po priorytecie,
  2. wygrywa reguła o najwyższym priorytecie,
  3. reguły nie sumują się ze sobą.

Okres ważności

Każda reguła może mieć zakres dat valid_from i valid_to oraz flagę aktywności. Ewaluowane są tylko reguły aktywne i mieszczące się w swoim okresie ważności.

Multi-currency

QuoteNode wspiera oferty w dowolnej skonfigurowanej walucie:

  • Base currency — domyślna waluta tenanta używana w raportach
  • Offer currency — waluta wybrana dla konkretnej oferty
  • FX rate — kurs pomiędzy walutą oferty a walutą bazową

Gdy oferta powstaje w walucie innej niż bazowa:

  1. ceny produktów są przechowywane w katalogu w walucie bazowej,
  2. przy tworzeniu oferty system przelicza je według aktualnego kursu,
  3. użyty kurs jest zapisywany w snapshotcie oferty,
  4. raporty pipeline przeliczają wartości z powrotem do waluty bazowej na podstawie tego właśnie kursu.

Na dziś kursy FX są zarządzane ręcznie przez administratora. Automatyczna integracja NBP/ECB pozostaje planowana.

Obsługa VAT

Grupy VAT

Grupy VAT definiują dostępne stawki podatkowe dla tenanta:

  • standardowe stawki, takie jak 23%, 8%, 5%, 0%,
  • stawkę zwolnioną,
  • stawki niestandardowe dla specyficznych jurysdykcji.

Każdy produkt należy do grupy VAT. Jedna grupa jest oznaczona jako domyślna i trafia na nowe produkty oraz niestandardowe pozycje.

VAT per pozycja

VAT liczony jest per wiersz, a nie jako płaska stawka od sumy całkowitej. To konieczne przy ofertach mieszających produkty o różnych stawkach podatku.

Oferta zawiera zestawienie VAT pokazujące łączną wartość dla każdej stawki.

Tryby prezentacji cen

Każda oferta może działać w jednym z trzech trybów:

  • NET — klient widzi wyłącznie wartości netto
  • GROSS — klient widzi tylko wartości brutto
  • NET + VAT + GROSS — pełne rozbicie na poziomie pozycji i sum

Tryb ustawiany jest per oferta i wpływa zarówno na PDF, jak i na stronę linku publicznego.

Rabaty

Rabaty na poziomie pozycji

Każda pozycja może mieć swój własny rabat:

  • procentowy,
  • kwotowy.

Rabat per pozycja działa po przemnożeniu ceny przez ilość, ale przed VAT.

Rabat na poziomie oferty

Na całą ofertę można nałożyć rabat globalny:

  • procentowy,
  • kwotowy.

Taki rabat jest stosowany po zsumowaniu pozycji, ale przed dostawą i VAT.

Prezentacja rabatów

System szablonów obsługuje trzy tryby pokazywania rabatów:

  • BAKED_IN — klient widzi już cenę końcową
  • SHOW_COLUMN — rabat pokazuje się jako osobna kolumna
  • HIDDEN — rabat działa, ale nie jest eksponowany osobną kolumną

Zaokrąglenia

Wszystkie obliczenia pieniężne używają zaokrąglenia HALF_UP. Zaokrąglenia są stosowane:

  • per pozycja po rabacie i przed VAT,
  • per kwota VAT,
  • per sumy końcowe oferty.

Spójny model zaokrągleń gwarantuje, że sumy pozycji zgadzają się z wynikiem całej oferty.

Utrwalone sumy

Wyliczone sumy są przechowywane w zdenormalizowanej tabeli offer_totals, aby wspierać:

  • szybkie queryowanie w raportach i listach,
  • weryfikację audytową,
  • historyczną spójność nawet wtedy, gdy reguły cenowe zmienią się później.

Last reviewed: Recently