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

Na WebTop100 jsme podruhé v řadě získali hlavní cenu Autor roku!

Z letošního ročníku významné soutěže WebTop100 si odnesly ocenění hned tři naše projekty. A co víc, podruhé za sebou jsme získali také hlavní cenu pro nejlepší agenturu – Autor roku!

Celý článek

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

Přeskočit na hlavní nabídku