Spočítat cenu ve velkém B2C/B2B e-shopu je věda

Rozsáhlé B2B e-shopy vyžadují mnohem rozsáhlejší možnosti cenotvorby než je tomu zvykem u B2C e-shopů. Okolností, které ovlivňují ceny pro různé typy zákazníků, je netušené množství, navíc se všelijak ovlivňují a podmiňují, což je třeba řešit na pozadí e-shopu ve zlomcích sekundy. Tento článek popisuje základní možnosti tvorby cen na platformě Edee.one.

Do cenotvorby spadají i tzv. cenové politiky (např. množstevní slevy, obratové slevy, bonusové programy, slevové poukazy, kredity, předplacené kupóny atd.), které jsou samostatnou velkou kapitolou, kterou si necháme na některý z příštích článků.


Ceníky

Základním pojmem v Edee.one je ceník. Na ceník je možné vázat ceny produktů. Ceník má svůj název, časovou platnost, prioritu a podmínky použití (o tom více v části Podmínky použití a priorita ceníku).

Ceny produktů mají stanovenou měnu, cenu bez DPH, cenu s DPH, procento DPH a časovou platnost. Pokud není časová platnost definovaná u konkrétní ceny, použije se časová platnost ceníku, do kterého cena patří.

ceníky v CMS pro e-shopy Edee.one


Virtuální ceníky

Kromě běžných ceníků je možné založit i virtuální ceník, který automatizovaně kopíruje ceny jiného ceníku a aplikuje na ně konkrétní výpočet. Je tedy možné na pár kliknutí vytvořit ceník, kde budou všechny ceny jiného ceníku (třeba základního nebo ceníku kuchyňských nožů) zlevněny o 5 %.

virtuální ceník v CMS pro e-shopy Edee.one

O údržbu cen ve virtuálních cenících se nemusí starat ani člověk ani programátor. Edee.one bude automatizovaně zrcadlit ceny z vybraného ceníku a vypočítávat odpovídající ceny navázané na něj.

Virtuální ceník lze založit i nad jiným virtuálním ceníkem, takže výpočty lze libovolně řetězit a výpočty tím kombinovat.

Toto je poměrně silný koncept, kterým se dá vyřešit celá řada scénářů běžných v B2B světě. Ale o tom více až v části Technické pozadí.


Zobrazení ceny koncovému uživateli

Koncovému uživateli se u každého produktu zobrazuje pouze jediná cena, která je vybrána přesně jemu na míru. Nepřihlášený uživatel uvidí typicky jinou cenu než uživatel přihlášený, VIP zákazník bude mít cenu ještě mnohem lepší.

V B2B světě má každý produkt i desítky různých cen, které je potřeba použít v odlišných kontextech. Výběr správné ceny pro aktuálního uživatele se provádí následujícím způsobem:

  1. vyberou se ceny pro aktuálně vybranou měnu
  2. vyberou se ceny, které jsou aktuálně časově platné
  3. vyřadí se ceny všech ceníků, které nemají splněny podmínky použití (o tom více v části Podmínky použití)
  4. ceny se seřadí dle priority (podrobněji níže) a vybere se cena s nejvyšší prioritou


Podmínky použití

Každý ceník může definovat tzv. podmínky použití, neboli omezení kontextu, ve kterém je platný. Podmínky použití jsou programovatelné, ale pojďme zmínit alespoň ty nejčastější:

  • ceník je platný pouze pro určitou doménu, pokud se produkt prodává na několika zároveň, např. na vlastním e-shopu, na Marketplace MALL.CZ apod.
  • ceník je platný pouze pro přihlášeného uživatele
  • ceník je platný pouze pro uživatele s konkrétní rolí (VIP například)
  • ceník je platný, pokud obrat uživatele za poslední 3 měsíce přesáhl X tisíc

Ale můžeme klidně definovat ceník, který bude platný pouze v den, kdy má uživatel narozeniny :) - podmínky použití patří do programovatelné logiky.


Priorita

O použití prodejní ceny rozhoduje ve finále její priorita. Po protřídění cen podle výše popsaného postupu obvykle zůstane v nabídce několik možných cen, které může zákazník dostat. Cílem našeho snažení je však vybrat jednu konkrétní finální prodejní cenu pro našeho zákazníka.

Výpočet priority ceny záleží na požadavcích provozovatele e-shopu - na výběr máme hned z několika strategií:

  • priorita ceny je odvozená z priority ceníku - cena nejdůležitějšího ceníku vítězí
  • priorita ceny je odvozená z výše ceny - tj. lepší/nižší cena vítězí
  • priorita ceny je odvozena od data poslední aktualizace - tj. naposledy aktualizovaná cena má přednost

Strategie je opět programovatelná - jedinou podmínkou je, že pro každou cenu musí být priorita stanovená jako jednoduché číslo a strategie by měla zajistit, aby číslo bylo vždy unikátní. Pokud by se sešly dvě ceny se stejnou prioritou, systém náhodně vybere jednu z těchto cen, a to není z pohledu zákazníka vítané.

Master produkty a varianty

Pokud zobrazujeme produkt s více variantami (tzv. master produkt - představme si ho jako tričko s různými velikostmi a barvami) a tento produkt má různé ceny pro různé varianty (třeba královská barva - fialová - je dražší než ostatní), chceme zákazníkovi zobrazit korektní informaci, že cena tohoto produktu začíná na 500 korunách a končí na 850 korunách.


Komplety

Pokud zobrazujeme produkt typu komplet (představme si ho jako komodu, která je složená z korpusu, 2 dvířek a 2 kování), musíme v některých případech vypočítat celkovou cenu kompletu dynamicky z unikátních cen jednotlivých komponent pro konkrétního uživatele vynásobených počtem jejich výskytu v kompletu. Uživatel následně vidí výslednou sečtenou cenu kompletu.

Dynamický výpočet je v tomto případě nutný třeba proto, že kování mají ve VIP ceníku speciální slevu a na komodu se dívá právě náš VIP zákazník. Tedy výsledná cena komody pro něj bude vypočtena z běžných cen korpusu a dvířek, ale speciální VIP ceny pro kování.


Filtrace dle ceny

Abychom dokázali filtrovat podle ceny, je nutné výše popsané výpočty provést v okamžiku výběru omezení cenového rozsahu, a to pouze z těch ceníků, které jsou uživateli dostupné, s mezivýpočty pro master produkty a komplety, a přitom vše seřadit dle priorit cen a s výběrem prodejní ceny platné pro konkrétního uživatele, který s e-shopem právě pracuje.

U master produktů se jako cena pro účely filtrace považuje cena jeho nejlevnější varianty, u kompletu potom celková cena kompletu vypočtená z jeho povinných součástí.


Primární a sekundární cena

B2B zákazníci očekávají, že ceny zobrazené v e-shopu budou typicky ceny bez DPH, jelikož většina z těchto zákazníků jsou plátci DPH a tato varianta ceny je pro ně směrodatná. Naopak koncoví zákazníci - fyzické osoby - potřebují vidět cenu s DPH. V naprosté většině námi realizovaných e-shopů se B2B a B2C e-shopy prolínají a zobrazení cen se musí adaptovat po přihlášení uživatele na formu, která je mu bližší.

Pro tyto účely jsou všechna místa, kde dochází k zobrazení ceny, adaptovaná na zobrazení ve třech variantách:

  • zobrazení pouze ceny bez DPH
  • zobrazení pouze ceny s DPH
  • zobrazení ceny bez i s DPH, přičemž jedna z těchto cen je hlavní a podružná cena se zobrazuje menším a méně výrazným písmem

Zobrazení cen je možné adaptovat nejen pro celý e-shop, ale také podle kontextu právě přihlášeného uživatele. Toto zobrazení ovlivňuje výpisy kategorií, košík, objednávku, účet uživatele, nákupní seznamy, porovnávání a mnoho dalšího.

Samozřejmostí je to, že filtrace dle ceny se automaticky adaptuje na primární cenu důležitou pro aktuálního uživatele.


Aktivní histogramy

Jelikož ceny zobrazujeme pomocí intervalového filtru od-do, dokážeme v reálném čase vypočítat statistické rozložení cen aktuálních pro přihlášeného uživatele v kategorii, ve které se právě nachází. Princip histogramu je nejlépe vidět v praxi:

histogram při filtraci v CMS pro e-shopy Edee.one

Na horizontální ose ve sloupcovém grafu zobrazíme počty produktů, jejichž cena spadá do určitého cenového intervalu. Uživatel má pak ihned přehled o tom, v jakých cenových úrovních je největší výběr a kde naopak ne.

Histogram se také adaptuje výběrem ostatních filtrů - takže výběrem konkrétní značky se v histogramu zobrazí pouze ceny těch produktů, které odpovídají vybrané značce. Rozložení histogramů pro různě definované filtry tedy může vypadat radikálně odlišně.


Technické pozadí

V tomto okamžiku je, myslím, jasné, jak je filtrace podle ceny v B2B e-shopu složitá výpočetní úloha. Řada konkurenčních řešení nedokáže provádět výpočet cen v reálném čase u všech produktů z kategorie, ale dopočítává ceny jen u produktů na právě zobrazené stránce. Ta je totiž rozsahem značně omezená a tudíž jim umožňuje podobný výpočet v rozumném čase dodat.

Abychom byli schopni tyto výpočty vykonávat, není možné za běhu provádět příliš mnoho kalkulací. Pro účely zobrazení cen ve výpisech, histogramech a filtru dle ceny je nutné, aby byly všechny ceny pro uživatele předpočítané a předsetříděné dle priority. Při vyhledávání pouze vyřazujeme ceny, které nemají pro daného uživatele smysl a provádíme agregace cen v rámci setu.

ERP systémy mají odlišné způsoby cenotvorby a často umožňují různé formy cenových hladin, skupin produktů, koncových cen pro konkrétní zákazníky a podobně. Tyto komplexní struktury musíme pro naše účely převést na plochou strukturu ceníků a cen do nich přiřazených. Jednak kvůli rychlosti a druhak kvůli tomu, že potřebujeme mezi různými systémy cenotvorby v ERP vytvořit společnou abstrakci, která vyhoví všem. To vyžaduje, aby byly dopočítané varianty cen, které reálně v ERP neexistují.

V praxi jsme se setkali třeba s následujícím scénářem:

  1. produkt má stanovenou základní prodejní cenu
  2. existuje ceník velkoodběratelů, který má na všechny produkty slevu 7 %
  3. jednotliví zákazníci mohou mít na konkrétní skupiny produktů další mimořádnou slevu danou sazbou v %

Problematická v tomto systému je kumulovaná sleva. Pokud má zákazník třeba na segment nožů dodatečnou slevu 10 %, je jeho celková sleva na nože 16,3 % (1 - 0,93 * 0,9 = 0,163).

Zjistili jsme však, že ačkoliv existují stovky zákazníků, speciální zákaznické slevy mívají jednoduché rozdělení na hodnoty 10 %, 20 % a 30 %. Díky využití virtuálních ceníků nám stačí tedy vytvořit následující strukturu:

  1. základní cena
  2. velkoobchodní ceník - sleva 7 % ze základní ceny
  3. dodatečná sleva na nože 10 % z velkoobchodního ceníku
  4. dodatečná sleva na nože 20 % z velkoobchodního ceníku
  5. dodatečná sleva na nože 30 % z velkoobchodního ceníku

Díky této kompozici nám e-commerce část v Edee.one vypočítá všechny potřebné ceny, které potřebujeme pro korektní zobrazení a filtrace na frontendu. Cenotvorba je pestrá disciplína, ale prozatím se nám vždy podařilo najít způsob, jak komplexní modely zjednodušit na tuto primitivní abstrakci. Z hlediska výkonu musíme počítat s větším množstvím ovšem jednodušších dat, která se dají velmi rychle vyfiltrovat pryč.


Dopady na rychlost odezvy webu

Pozorný čtenář si jistě několikrát v průběhu čtení článku položil otázku: Jaký vliv mají výpočty na rychlost vykreslení stránek e-shopu?

V praxi máme otestováno, že platforma Edee.one zvládá tyto výpočty v řádu desítek, maximálně nižších stovek milisekund nad databází, která obsahuje miliony rozdílných cen. V kategorii s 10 tisíci produkty, kterým odpovídá cca 200 tisíc unikátních cen, dokážeme na stroji s 2,7 GHz CPU vypočítat ceny a vykreslit celou stránku včetně parametrického filtru se stovkami položek na straně serveru za 700 ms. S každou další verzí platformy je přitom naše vyhledávání vždy o kousek rychlejší a v kapse máme ještě několik nápadů, které nám pomohou rychlost dále vylepšovat.

Jan Novotný, Senior Application Developer FG Forrest

Mohlo by vás zajímat

Náš B2C a B2B e-shop pro SENESI získal už pět významných ocenění

SENESI patří mezi naše dlouhodobé klienty, s nimiž průběžně rozvíjíme jejich online řešení. Těší nás, že to oceňují jak zákazníci, tak poroty prestižních soutěží.

Celý článek

Vybojovali jsme 2. místo na WebTop100 za projekt pro Armádu ČR

Jsme hrdí na to, že kvalitu tak významného řešení ocenila porota největší soutěže digitálních projektů v Česku a na Slovensku. Pojďme si jej představit.

Celý článek

Přeskočit na hlavní nabídku