Přejít na hlavní obsah
Cenové tabulky v administraci

Katalog > Cenové tabulky

Definice

Analogie: Cenová tabulka je sazebník. Sdružuje všechny ceny pro jeden režim prodeje (rezervace, prodej nebo předplatné) do jednoho editovatelného objektu, který lze připojit k jednomu inzerátu nebo sdílet napříč mnoha.
Zvláštnost v TWICE: Inzerát nikdy neukládá pole ceny přímo. Veškeré ceny žijí na cenových tabulkách. Inzerát může mít jednu výchozí cenovou tabulku plus libovolný počet časově omezených tabulek pro akce, sezónní okna nebo kampaňové ceny.availabilityRange tabulky řídí, kdy jsou její řádky kandidáty, nedává tabulce prioritu. V okamžiku výpočtu se posuzují společně řádky ze všech tabulek aktivních pro danou rezervaci (viz Určení ceny).

Kde to použiji?

  • Sazebníky pronájmu – Definujte 1 den @ 40 €, 3 dny @ 100 €, 1 týden @ 180 € atd.
  • Prodejní ceny – Nastavte přímou prodejní cenu inzerátu, volitelně s porovnávací (přeškrtnutou) cenou
  • Plány předplatného – Nastavte období příslibu, platební cyklus a interval automatického obnovení
  • Akční / sezónní ceny – Připojte navíc datovanou cenovou tabulku, jejíž řádky se posuzují uvnitř jejího okna (levnější akční řádek se vybere před výchozím, viz Určení ceny)
  • Přepsání podle varianty – Upravte každý cenový řádek pomocí rateMultiplier pro konkrétní hodnoty variant
  • Hromadné přeceňování – Udržujte jednu sdílenou tabulku a propojte ji s mnoha inzeráty v kategorii

Model cenové tabulky

Sdílená výchozí cenová tabulka vrácená API vypadá takto:
catalogItemId je null u sdílených tabulek, které nejsou vázány na jeden inzerát, a availabilityRange je null u výchozí tabulky, která je platná vždy. Jedna cenová tabulka nese tři na sobě nezávislé sady řádků (rezervace, prodej a předplatné), řízené přepínači bookingsEnabled, salesEnabled a subscriptionsEnabled. Vypněte režimy, které neprodáváte, aby editační plocha zůstala přehledná.

Sdílená vs. samostatná

Propojování se spravuje přes vyhrazené koncové body (link-catalog-item, unlink-catalog-items), aby si inzerát udržel čistý záznam o tom, které sdílené tabulky se uplatňují.

Typy cenových řádků

Cenová tabulka obsahuje tři prodejní typy řádků, každý řídí jiný režim nákupu, a čtvrtý, který odkazuje jinam.

Rezervační cenové řádky

Používá se, když je objednávka rezervací pronájmu. Pro cenu podle sazby vybírá engine řádky, které nejlépe pokrývají dobu trvání rezervace (viz Určení ceny). Hodinové, denní a týdenní řádky umožňují jedné cenové tabulce pokrýt jakoukoli dobu trvání rozumnou sazbou.

Prodejní cenové řádky

Používá se pro objednávky přímého prodeje.

Cenové řádky předplatného

Používá se pro objednávky v režimu předplatného. Celý fakturační životní cyklus najdete v Předplatná.

Externí možnosti nákupu

Čtvrtý typ řádku pošle zákazníka jinam, místo aby mu prodal. Zapněte v cenové tabulce Externí možnosti nákupu a přidejte odkazy v sekci Externí odkazy. Každý odkaz vykreslí na stránce nabídky tlačítko, které otevře URL v novém panelu, vedle obvyklých nákupních tlačítek. Nevznikne objednávka ani se nestrhne platba, takže externí odkaz nemá vlastní okno dostupnosti ani vlastní přepínač zapnutí. Popisky tlačítek jsou přeložitelné jako zbytek obsahu obchodu, v rozsahu Externí možnosti nákupu. Nabídka připojená ke sdílené tabulce zobrazí odkazy té tabulky a u nabídky je uvedeno “Řízeno propojenou cenovou tabulkou”.

Ceny podle varianty

Pokud má inzerát varianty, cenová tabulka může nést volitelné pole variants se záznamy CatalogItemVariantPricingTable. Každý záznam váže variantName plus jednu nebo více values na rateMultiplier a násobitele podle řádku pro rezervaci, prodej a předplatné. CatalogItemVariantPricingTable má následující pole: Každé přepsání podle řádku odkazuje na základní cenový řádek, který upravuje (basePricingRowId), a uplatňuje rateMultiplier (a volitelně additionalRateMultiplier) nad cenou tohoto základního řádku. Násobitel 1.0 odpovídá základu, 1.2 přidá 20 %, 0.8 odečte 20 %. Administrace označí každou kombinaci se záznamem CatalogItemVariantPricingTable jako „Cena varianty” místo „Základ”.

Cenotvorba od

Každý rezervační cenový řádek má pole timeBasis, které řídí, jak se počítá doba trvání pro účtování. Existují dva režimy:

Jak funguje účtování „Cenotvorba od”

Cenový engine určí každé kalendářní období, kterého se rezervace dotkne, na vlastní mřížce řádku. Denní jednotka je vždy od půlnoci do půlnoci, hodinová jednotka od celé hodiny do celé hodiny a týdenní jednotka začíná na dni v týdnu nastaveném jako první u daného tenanta. Každé dotčené období se účtuje jako jedna jednotka, pokud jemnější sazba nepokrývá rezervovanou část tohoto období levněji. Engine rekurzivně vybírá nejlevnější platnou skladbu. Příklad, denní a týdenní sazby: Desetidenní rezervace začínající ve čtvrtek, s denní sazbou 50 € a týdenní sazbou 250 €:
  • Čtvrtek až neděle: 4 zahájené dny = 200 €
  • Pondělí až následující neděle: 1 zahájený týden = 250 €
  • Celkem: 450 €
Týden je zarovnaný na kalendář (pondělí až neděle při týdnu začínajícím v pondělí), ne ukotvený na vyzvednutí. Příklad, denní a hodinové sazby: Denní sazba 100 €, hodinová sazba 20 €. Rezervace od pondělí 09:00 do úterý 09:00:
  • Pondělí: 1 zahájený den = 100 €
  • Úterý: 1 zahájený den = 100 €
  • Celkem: 200 € (2 kalendářní dny)
Pokud by hodinová sazba byla místo toho 5 €, engine by naúčtoval 24 zahájených hodin = 120 €, protože jemnější skladba je levnější.

„Cenotvorba od” u balíčků s pevnou dobou trvání

Rezervační řádky s pevnou dobou trvání také podporují timeBasis. Balíček s pevnou dobou v režimu capped ukotví datum vrácení ke kalendářnímu období, ne k přesnému času vyzvednutí. Pevný balíček „2 dny” vyzvednutý v pondělí ve 14:00:
  • Uplynulé (rolling): vrácení ve středu ve 14:00, přesně o 48 hodin později
  • Zahájené (capped): vrácení v úterý do posledního dostupného času vrácení, rezervace zasahuje do pondělí a úterý, takže jsou pokryty dva kalendářní dny
Pokud den vrácení připadne na den, kdy je místo zavřené, tato možnost se pro dané datum vyzvednutí nenabízí.

Omezení

  • Jednotky pod hodinu se vždy účtují jako uplynulé. Řádky používající seconds nebo minutes nastavení timeBasis neovlivňuje. V tabulce s režimem „Cenotvorba od” volně koexistují.
  • Všechny řádky podle sazby v jedné tabulce sdílejí jedno timeBasis. Administrace to vynucuje jedním zaškrtávacím polem Cenotvorba od, které se uplatní na všechny způsobilé řádky podle sazby. Řádky s pevnou dobou trvání mají každý své nezávislé nastavení timeBasis.
  • Týdenní sazby používají den začátku týdne nastavený u tenanta. Rezervace sobota-neděle se počítá jako jeden týden při týdnu začínajícím v pondělí (oba dny jsou ve stejném týdnu pondělí-neděle), ale jako dva týdny při týdnu začínajícím v neděli.
Sekce rezervačních cen se zaškrtávacím polem Cenotvorba od

Rezervační ceny podle sazby se zaškrtávacím polem Cenotvorba od

Možnosti doby trvání pevného řádku s variantami Zahájeno a Uplynulé

Možnosti doby trvání na řádku s pevnou cenou

Určení ceny

availabilityRange řídí, které tabulky jsou kandidáty pro danou rezervaci, nedává tabulce prioritu. Neexistuje pole priority nebo přepsání na úrovni tabulky. Při výpočtu ceny: Všechny cenové výpočty běží v časovém pásmu místa. Hranice dne, hranice týdne, omezení weekdays a okna timeOfDayRange se vyhodnocují podle místního času daného místa, ne podle UTC nebo časového pásma zákazníka. Rezervace blízko místní půlnoci se přiřadí ke správnému místnímu dni a přechody letního času řeší kalendářní aritmetika v časovém pásmu daného místa.
  1. Shromážděte aktivní tabulky. Tabulka je aktivní, když nemá availabilityRange, nebo se její rozsah překrývá s daty rezervace. Výchozí tabulka (bez rozsahu) je proto vždy aktivní společně s jakoukoli datovanou tabulkou, do jejíhož okna rezervace spadá.
  2. Spojte řádky do poolu. Každý povolený řádek z každé aktivní tabulky se shromáždí do jednoho kandidátského poolu. Engine nejprve nevybírá jednu „vítěznou” tabulku, řádky z různých tabulek soutěží přímo.
  3. Vyberte řádek/řádky.
    • Rezervace podle sazby (dynamické) – jak se pool vyhodnotí, závisí na časovém základu řádků v něm. Celý postup najdete v Cenách podle sazby a níže v Nejdelší vyhovující řádek vs. nejlevnější skladba: oba základy používají skutečně odlišné algoritmy a tento rozdíl rozhoduje, zda se lze vyhnout předraženému dlouhému řádku. V obou případech musí omezení řádku weekdays, timeOfDayRange a availabilityRange projít, než je řádek způsobilý pro daný úsek, a jakýkoli zbytek připadne kratším řádkům a pravidlům dodatečného času.
    • Rezervace s pevnou cenou – zákazník vybere konkrétní cenový řádek (například 1 den @ 40 €) a cena tohoto řádku se použije přímo.
  4. Uplatněte násobitele variant. Pokud záznam CatalogItemVariantPricingTable odpovídá vybrané kombinaci hodnot variant, vynásobte příspěvek řádku násobitelem na úrovni řádku (a rateMultiplier na úrovni tabulky).
  5. Vraťte součty. Koncové body …/rate-based-price a …/fixed-price vrací priceBreakdown plus totalPrice, s jednotlivými příspěvky rozepsanými pro výkladní skříň i souhrn objednávky.
Datovaná tabulka nepřebíjí výchozí podle data, soutěží ve stejném poolu. U ceny podle sazby se datovaný řádek použije jen tehdy, když ho engine vybere.Řádky se stejnou dobou trvání odděluje jen cena, takže levnější akční řádek vyhrává uvnitř svého okna, a vyšší datovaná cena (například sváteční příplatek) se neuplatní, dokud výchozí tabulka nese řádek stejné doby trvání za nižší cenu.Příklad. Výchozí tabulka: 1 den @ 100 € (bez časového rozsahu). Sváteční tabulka: 1 den @ 150 € (24.–31. 12.). 24hodinový pronájem 25. 12. se ocení na 100 €, oba řádky pokrývají den stejně, takže vyhrává levnější. Chcete-li účtovat sváteční sazbu 150 €, odeberte nebo vypněte konkurující řádek za 100 € pro dané okno (nebo nastavte jeho availabilityRange tak, aby sváteční data vyloučil), aby ho pokrýval jen řádek za 150 €.
V modelu cenové tabulky dnes neexistují ceny podle štítku zákazníka, ceny podle segmentu zákazníka na cenové tabulce nastavit nelze. Akce pro konkrétní zákazníky se řeší přes slevové kódy, ne přes cenové tabulky.

Nejdelší vyhovující řádek vs. nejlevnější skladba

Vyhodnocení podle sazby není jeden algoritmus. Který se spustí, rozhoduje časový základ řádků podle sazby v poolu. Uplynulá doba (rolling, výchozí): nejdelší vyhovující řádek jako první. Engine prochází rezervaci od jejího začátku. V každém kroku vezme nejdelší řádek, který se ještě vejde do zbývajícího času, posune se o dobu trvání tohoto řádku a opakuje. Cena rozhoduje jen mezi řádky se stejnou dobou trvání. Engine nikdy neporovnává dlouhý řádek proti skladbě kratších, takže:
  • Týdenní řádek vyhraje sedmidenní rezervaci bez ohledu na cenu, i když stojí víc než sedm denních sazeb.
  • Dva jednodenní řádky za 100 € a 150 € se vyhodnotí na 100 €, protože mají stejnou dobu trvání.
  • Jednodenní řádek za 150 € a dvanáctihodinový řádek za 10 € se vyhodnotí na denní řádek, protože je delší.
Cenotvorba od (capped): nejlevnější skladba. Engine místo toho pracuje s kalendářními obdobími. Za každé období, kterého se rezervace dotkne, naúčtuje buď jednu jednotku tohoto období, nebo levnější jemnější skladbu rezervované části, podle toho, co stojí méně, a tyto možnosti porovnává rekurzivně napříč každou úrovní granularity na tabulce. Zde cena rozhoduje i napříč dobami trvání: týdenní řádek dražší než sedm zahájených dnů prohrává s denními řádky.
Řádky podle sazby v jedné tabulce sdílejí jeden časový základ, ale řádky z různých tabulek se spojují do poolu. Pokud kterýkoli řádek v poolu používá Cenotvorbu od, celá rezervace se vyhodnotí enginem pro kalendářní období, přičemž uplynulé řádky proti němu soutěží na nezarovnaném rozsahu.
Praktický důsledek: při výchozím uplynulém základu se předražený dlouhý řádek „neprocenuje pryč”, naopak se upřednostní. Odstupňování přináší slevu jen proto, že delší blok naceníte níž, ne proto, že by engine hledal nejlevnější celkovou cenu.

Uplatnění tabulek na inzeráty a kolekce

Sdílená cenová tabulka se propojuje s inzerátem přes vyhrazené koncové body:
  • POST /pricing-tables/pricing-table/:pricingTableId/link-catalog-item – propojí jeden inzerát
  • DELETE /pricing-tables/pricing-table/:pricingTableId/unlink-catalog-items – hromadné odpojení
  • POST /pricing-tables/add-pricing-table-to-catalog-item – diskriminované sjednocení pro čtyři režimy propojení:
    • mode = 'link' – propojí s existující sdílenou tabulkou
    • mode = 'create' – vytvoří novou samostatnou tabulku přímo na místě
    • mode = 'sharedToShared' – nahradí jedno sdílené propojení jiným
    • mode = 'sharedToStandalone' – rozvětví sdílenou tabulku do samostatné na inzerátu
    • mode = 'standaloneToShared' / 'standaloneUpdate' – přepne vlastnictví nebo přejmenuje přímo na místě
Kolekce nelze s cenovou tabulkou propojit přímo. Pro přecenění kolekce projděte její listCatalogItems a propojte tabulku s každým inzerátem.

Klíčové vlastnosti (cenová tabulka)

Vztahy

Sdílenou cenovou tabulku lze propojit z mnoha inzerátů. Samostatná cenová tabulka existuje na jednom inzerátu.
Každá tabulka je kontejner pro tři na sobě nezávislé cenové režimy. Režimy zapínejte a vypínejte bez přestavby tabulky.
Záznamy cen podle varianty odkazují na hodnoty variant na inzerátu, viz koncept Varianta.
Výkladní skříň i tvůrce objednávek vybere správný řádek podle režimu nákupu (rezervace / prodej / předplatné) a zavolá koncový bod …/rate-based-price nebo …/fixed-price pro výpočet celkové ceny.

Životní cyklus

1

Vytvoření

POST /pricing-tables/ s label a (u sdílených tabulek) isDefault: true. Nové tabulky začínají s prázdnými poli řádků.
Samostatnou použijte, když jsou ceny jedinečné pro jeden inzerát. Sdílenou použijte, když chcete stejný sazebník znovu použít napříč kategorií inzerátů.
Ne. Jen tabulky s availabilityRange = null mohou mít isDefault = true (vynucuje administrace; model příznak povoluje, ale logika propojení datované tabulky při určování výchozí přeskočí).
2

Přidání řádků

Přidejte rezervační / prodejní řádky nebo řádky předplatného přes koncové body pro jednotlivé řádky (/pricing-table/:id/row, …/sales-row, …/subscription-row). Přepsání podle varianty přidejte přes /pricing-table/:id/variant-pricing-table.
3

Propojení s inzerátem

Použijte add-pricing-table-to-catalog-item se správným mode. Karta Ceny na inzerátu zobrazuje propojené tabulky v postranním panelu a umožňuje vytvářet nové přímo na místě.
4

Přepsání podle varianty

Přidejte blok CatalogItemVariantPricingTable pro hodnoty variant, které potřebují jinou cenu.
5

Povýšení nebo nahrazení

Chcete-li zavést změnu ceny bez narušení aktivních objednávek, přidejte pro dané okno novou datovanou tabulku. Uvnitř tohoto okna její řádky soutěží s výchozí tabulkou ve stejném poolu: levnější řádek se vybere automaticky, pro uplatnění vyšší sazby ještě odeberte konkurující výchozí řádek nebo mu časově omezte platnost (viz Určení ceny).Existující objednávky si ponechávají cenu, kterou zachytily u pokladny.
6

Smazání

DELETE /pricing-tables/delete-table/:pricingTableId. Odstranění sdílené tabulky ji odpojí od každého inzerátu.

Časté dotazy

Ano. Můžete připojit výchozí tabulku plus libovolný počet datovaných tabulek pro akce nebo sezónní okna. V okamžiku objednávky se řádky ze všech tabulek aktivních pro danou rezervaci spojí do poolu a engine z něj vybírá, viz Určení ceny. availabilityRange rozhoduje, které tabulky jsou kandidáty, ne která vyhraje.
Z rezervačních cenových řádků, které pokrývají požadovanou dobu trvání. Na výchozím základu Uplynulá doba engine vezme nejdelší řádek, který se vejde do zbývajícího času, a na zbytek uplatní pravidla dodatečného času. Na základu Cenotvorba od účtuje kalendářní období, kterých se rezervace dotkne. Viz Nejdelší vyhovující řádek vs. nejlevnější skladba.
Vytvořte datovanou cenovou tabulku s availabilityRange pokrývajícím víkend, s řádky nacenenými o 20 % níž než výchozí, a propojte ji s dotčenými inzeráty. Protože jsou akční řádky levnější a pokrývají stejné doby trvání, engine je uvnitř okna vybere a poté se vrátí k výchozí tabulce.Funguje to právě proto, že je akce levnější, na vyšší ceny a příplatky se ptá další otázka.
Protože engine spojuje do poolu všechny aktivní tabulky a datované nezvýhodňuje. Tam, kde mají dva řádky stejnou dobu trvání, je odděluje jen cena, takže vyhrává levnější výchozí řádek a příplatek se nikdy nevybere.Chcete-li uplatnit příplatek, odeberte nebo vypněte konkurující výchozí řádek pro dané okno, nebo nastavte availabilityRange výchozího řádku tak, aby daná data vyloučil, aby je pokrýval jen vyšší řádek.
Uplynulý základ (rolling, výchozí) počítá uplynulý čas od vyzvednutí. „Den” je 24 hodin. Rezervace od pondělí 14:00 do středy 14:00 se účtuje přesně na 2 dny.Cenotvorba od (capped) počítá každé kalendářní období, kterého se rezervace dotkne. „Den” je od půlnoci do půlnoci. Stejná rezervace od pondělí 14:00 do středy 14:00 zasahuje do pondělí, úterý a středy, tedy 3 zahájené dny.Cenotvorbu od používejte, když účtujete za kalendářní den (jako parkovací domy nebo noci v hotelu). Uplynulý základ používejte, když účtujete za přesný uplynulý čas (jako hodinový pronájem vybavení).
Ne přes cenové tabulky. Model cenové tabulky dnes nemá rozměr segmentu zákazníka. Pro ceny podle konkrétního zákazníka použijte slevové kódy.
Časové pásmo místa. Hranice dne a týdne, omezení podle dne v týdnu a okna denní doby se vyhodnocují podle místního času daného místa. Pokud není nastaveno časové pásmo místa, použije se časové pásmo na úrovni tenanta, jako poslední možnost UTC.Časové pásmo se určuje podle vybraného místa vyzvednutí (nebo, když není vybráno jediné místo, podle hlavního propojeného místa inzerátu).
Ne. Objednávky zachycují cenové příspěvky u pokladny. Úprava cenové tabulky ovlivňuje jen budoucí součty objednávek.
priceContribution je to, co jeden řádek přidal k celku, totalPrice je součet napříč všemi řádky, které engine vybral (základní řádek + řádky dodatečného času + násobitele variant).

Reference pro vývojáře

Cenové tabulky jsou v API vystaveny jako pricing-tables.

API: Pricing Tables

Otevřít koncový bod v referenci API.

Související články

Inzeráty

Co je cenová tabulka připojena k

Varianty

Přepsání cen podle varianty

Kolekce

Seskupte inzeráty před hromadným uplatněním sdílené tabulky

Životní cyklus objednávky

Kde se součty cenové tabulky zachycují u pokladny