Naše datová knihovna pro Skupinu ČEZ sbírá ocenění i v zahraničí
Online ESG datová knihovna v roce 2023 získala několik prvních míst na prestižních soutěžích, včetně dvou zahraničních. Seznamte se v našem článku.
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ů.
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ří.
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 %.
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í.
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:
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ší:
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.
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í:
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é.
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.
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í.
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í.
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í 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.
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:
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ě.
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:
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:
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č.
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