code DSL Syntaxe

Základní pravidla pro správnou syntaxi Domain Specific Language.

keyboard Základní syntaxe
SYNTAX

Všechny DSL výrazy musí být v JSON formátu s hranatými závorkami

✅ Správně: ["*", ["var", "dsl.price_buy"], 1.3]
✅ Správně: ["if", condition, true_value, false_value]
❌ Špatně: if (condition) { return value; }
❌ Špatně: dsl.price_buy * 1.3
functions Formát operátorů
SYNTAX

První prvek pole je vždy operátor v uvozovkách

✅ Správně: [">", hodnota1, hodnota2]
✅ Správně: ["and", podminka1, podminka2]
✅ Správně: ["var", "dsl.price_buy"]
❌ Špatně: [>, hodnota1, hodnota2]
❌ Špatně: [and, podminka1, podminka2]
data_object Formát proměnných
SYNTAX

Proměnné se zadávají pomocí ["var", "nazev_promenne"]

✅ Správně: ["var", "dsl.price_buy"]
✅ Správně: ["var", "dsl.competition.lowest_price"]
❌ Špatně: dsl.price_buy
❌ Špatně: $price_buy
❌ Špatně: {dsl.price_buy}
account_tree Vnořené výrazy
SYNTAX

Výrazy lze vnořovat do sebe pro komplexní logiku

["if",
  [">", ["var", "dsl.stock_level"], 5],
  ["*", ["var", "dsl.price_buy"], 1.3],
  ["*", ["var", "dsl.price_buy"], 1.25]
]

filter_alt Filter Expressions

Filtry určují, zda se pravidlo nebo strategie vůbec spustí pro daný produkt. Vrací true/false.

inventory_2 Filtr na dostupnost
FILTER

Pravidlo se použije pouze když je skladem více než 3 ks

[">", ["var", "dsl.stock_level"], 3]

Použité proměnné:

dsl.stock_level

check_circle Výsledek:

true pokud stock_level > 3, jinak false

groups Filtr na konkurenci
FILTER

Pravidlo se použije pouze když je nalezena konkurence

[">", ["var", "dsl.competition_count"], 0]

Použité proměnné:

dsl.competition_count

check_circle Výsledek:

true pokud je nalezen alespoň 1 konkurent

category Filtr na kategorii
FILTER

Pravidlo se použije pouze pro konkrétní kategorii produktu

["==", ["var", "dsl.product.category"], "Elektronika"]

Použité proměnné:

dsl.product.category

check_circle Výsledek:

true pokud kategorie = "Elektronika"

payments Filtr na cenové pásmo
FILTER

Pravidlo se použije pouze pro produkty v určitém cenovém rozmezí

["and",
  [">", ["var", "dsl.price_buy"], 100],
  ["<", ["var", "dsl.price_buy"], 1000]
]

Použité proměnné:

dsl.price_buy

check_circle Výsledek:

true pokud 100 < nákupní cena < 1000 Kč

filter_list Kombinovaný filtr
FILTER

Pravidlo se použije pouze když je skladem a existuje konkurence

["and",
  [">", ["var", "dsl.stock_level"], 0],
  [">", ["var", "dsl.competition_count"], 0]
]

Použité proměnné:

dsl.stock_level dsl.competition_count

check_circle Výsledek:

true pokud je na skladě ANI existuje konkurence

branding_watermark Filtr na značku
FILTER

Pravidlo se použije pouze pro vybranou značku

["in", ["var", "dsl.product.brand"], ["Apple", "Samsung", "Sony"]]

Použité proměnné:

dsl.product.brand

check_circle Výsledek:

true pokud značka je Apple, Samsung nebo Sony

auto_awesome Smart Templates - Cenová Pravidla

Kompletní pravidla pro výpočet prodejní ceny. Vrací číselnou hodnotu (cenu v Kč).

calculate Pevná marže 30%
RULE

Nastavit cenu s pevnou 30% marží nad nákupní cenou. Příklad z produktu Calvin Klein Contradiction EDP (ID 24).

["*", ["var", "dsl.price_buy"], 1.3]

Použité proměnné:

dsl.price_buy

check_circle Příklad:

Nákup 373,37 Kč → Prodej 485,38 Kč (marže 112,01 Kč = 30%)

trending_down Podražit konkurenci o 10 Kč
RULE

Nastavit cenu o 10 Kč nižší než nejlevnější konkurent. 💱 Používá amount pro měnovou hodnotu. Skutečná konkurence z produktu ID 24.

["-", ["var", "dsl.competition.lowest_price"], ["amount", 10, "CZK"]]

Použité proměnné:

dsl.competition.lowest_price amount (operátor)

check_circle Příklad:

Nejlevnější konkurent 438,02 Kč → Prodej 428,02 Kč | V EUR projektu: automaticky převede 10 CZK → ~0.40 EUR

fork_right Podmíněná cena s fallbackem
RULE

Když je konkurence, podražit o 10 Kč. Jinak marže 25%. 💱 Kombinuje amount a multiplikátor. Produktu ID 24 má 20 konkurentů.

["if",
  [">", ["var", "dsl.competition_count"], 0],
  ["-", ["var", "dsl.competition.lowest_price"], ["amount", 10, "CZK"]],
  ["*", ["var", "dsl.price_buy"], 1.25]
]

Použité proměnné:

dsl.competition_count dsl.competition.lowest_price dsl.price_buy amount (operátor)

check_circle Příklad:

S konkurencí (20 konkurentů): 438,02 Kč → 428,02 Kč | Bez konkurence: 373,37 Kč → 466,71 Kč (marže 25%)

straighten Cena s min/max limitem
RULE

Marže 30%, ale minimálně 200 Kč a maximálně 1000 Kč. 💱 Používá amount pro absolutní limity.

["min",
  ["max",
    ["*", ["var", "dsl.price_buy"], 1.3],
    ["amount", 200, "CZK"]
  ],
  ["amount", 1000, "CZK"]
]

Použité proměnné:

dsl.price_buy amount (operátor)

check_circle Příklad:

Nákup 100 Kč → 200 Kč (min) | Nákup 1000 Kč → 1000 Kč (max) | V EUR: limity se převedou

inventory Dynamická cena dle skladu
RULE

Když málo na skladě (< 5 ks), zvýšit marži na 35%, jinak 25%

["if",
  ["<", ["var", "dsl.stock_level"], 5],
  ["*", ["var", "dsl.price_buy"], 1.35],
  ["*", ["var", "dsl.price_buy"], 1.25]
]

Použité proměnné:

dsl.stock_level dsl.price_buy

check_circle Příklad:

Sklad 3 ks: 100 Kč → 135 Kč | Sklad 10 ks: 100 Kč → 125 Kč

trending_up Standardní marže
RULE

Použít předdefinovanou úroveň marže "std" (např. 30%)

["margin-level", "std"]

Použité proměnné:

dsl.price_buy config.margin_levels.std

check_circle Příklad:

Nákup 100 Kč → 130 Kč (pokud std = 30%)

analytics Průměrná cena konkurence
RULE

Nastavit cenu na průměr konkurence minus 3%. Skutečný průměr z produktu ID 24: 505,62 Kč.

["*", ["var", "dsl.competition.avg_price"], 0.97]

Použité proměnné:

dsl.competition.avg_price

check_circle Příklad:

Průměr konkurence 505,62 Kč → Prodej 490,45 Kč (3% úspora)

account_tree Komplexní strategie
RULE

Pokud je skladem více než 10 ks, podražit o 15 Kč. Pokud 5-10 ks, podražit o 10 Kč. Jinak marže 30%.

["if",
  [">", ["var", "dsl.stock_level"], 10],
  ["-", ["var", "dsl.competition.lowest_price"], 15],
  ["if",
    [">=", ["var", "dsl.stock_level"], 5],
    ["-", ["var", "dsl.competition.lowest_price"], 10],
    ["*", ["var", "dsl.price_buy"], 1.3]
  ]
]

Použité proměnné:

dsl.stock_level dsl.competition.lowest_price dsl.price_buy

check_circle Příklad:

Sklad 15 ks: 500 Kč → 485 Kč | Sklad 7 ks: 500 Kč → 490 Kč | Sklad 2 ks: 100 Kč → 130 Kč

emoji_events První na trhu, min. 10% marže
RULE

Být vždy nejlevnější (o 5 Kč), ale dodržet minimální marži 10%

["max",
  ["-", ["var", "dsl.competition.lowest_price"], 5],
  ["*", ["var", "dsl.price_buy"], 1.1]
]

Použité proměnné:

dsl.competition.lowest_price dsl.price_buy

check_circle Příklad:

Konkurent 500 Kč, nákup 400 Kč → 495 Kč (10% zachováno) | Konkurent 200 Kč, nákup 100 Kč → 195 Kč

groups Marže +10% při vysoké konkurenci
RULE

Pokud je konkurence více než 5 obchodů, zvýšit marži o 10%. Produktu ID 24 má 20 konkurentů, takže aktivuje vyšší marži.

["if",
  [">", ["var", "dsl.competition_count"], 5],
  ["*", ["var", "dsl.price_buy"], 1.4],
  ["*", ["var", "dsl.price_buy"], 1.3]
]

Použité proměnné:

dsl.competition_count dsl.price_buy

check_circle Příklad:

20 konkurentů (jako ID 24): 373,37 Kč → 523,72 Kč (40% marže) | 3 konkurenti: 373,37 Kč → 485,38 Kč (30% marže)

balance Median při <= 3 konkurentech
RULE

Pokud je konkurence max 3 obchody, použít median cenu, jinak marže 25%. Poznámka: Produktu ID 24 má 20 konkurentů, jde do fallbacku.

["if",
  ["<=", ["var", "dsl.competition_count"], 3],
  ["var", "dsl.competition.median_price"],
  ["*", ["var", "dsl.price_buy"], 1.25]
]

Použité proměnné:

dsl.competition_count dsl.competition.median_price dsl.price_buy

check_circle Příklad:

2 konkurenti, median 450 Kč → 450 Kč | 20 konkurentů (jako ID 24), nákup 373,37 Kč → 466,71 Kč (marže 25%)

tune Median s marží 10-40%
RULE

Použít median cenu konkurence, ale zajistit marží mezi 10-40%. Pro produkt ID 24: median 504,13 Kč, nákup 373,37 Kč.

["min",
  ["max",
    ["var", "dsl.competition.median_price"],
    ["*", ["var", "dsl.price_buy"], 1.1]
  ],
  ["*", ["var", "dsl.price_buy"], 1.4]
]

Použité proměnné:

dsl.competition.median_price dsl.price_buy

check_circle Příklad:

ID 24: Median 504,13 Kč, nákup 373,37 Kč → 504,13 Kč (35% marže, v rozmezí 10-40%) | Min: 410,71 Kč (10%), Max: 523,72 Kč (40%)

percent Margin 25% (ne markup!)
RULE

Nastavit cenu s 25% marží (profit / prodejní cena). Pozor: marže ≠ markup!

["/", ["var", "dsl.price_buy"], 0.75]

Použité proměnné:

dsl.price_buy

check_circle Výpočet:

Nákup 100 Kč → Prodej 133.33 Kč → Marže: 25% | Markup: 33.33%

trending_up Markup 25% (ne marže!)
RULE

Nastavit cenu s 25% markupem (přirážka na nákupní cenu). Pozor: markup ≠ marže!

["*", ["var", "dsl.price_buy"], 1.25]

Použité proměnné:

dsl.price_buy

check_circle Výpočet:

Nákup 100 Kč → Prodej 125 Kč → Marže: 20% | Markup: 25%

rocket_launch Vysoký markup 300%
RULE

Markup může být i nad 100% (marže nikdy!). Zde 300% markup = 75% marže.

["*", ["var", "dsl.price_buy"], 4.0]

Použité proměnné:

dsl.price_buy

check_circle Výpočet:

Nákup 100 Kč → Prodej 400 Kč → Marže: 75% | Markup: 300%

psychology Podmíněná marže/markup logika
RULE

Pokud nákup < 500 Kč: markup 50%. Jinak: marže 30%.

["if",
  ["<", ["var", "dsl.price_buy"], 500],
  ["*", ["var", "dsl.price_buy"], 1.5],
  ["/", ["var", "dsl.price_buy"], 0.7]
]

Použité proměnné:

dsl.price_buy

check_circle Příklad:

Nákup 300 Kč → 450 Kč (50% markup) | Nákup 800 Kč → 1142.86 Kč (30% marže)

security Guardrails - Ochranné Limity

Ochranné podmínky které musí být splněny. Vrací true/false, ovlivňuje zda se cena použije.

shield Minimální marže 15%
GUARDRAIL

Zajistit, že marže je vždy alespoň 15%

[">", ["margin-%"], 15]

Použité proměnné:

margin-% dsl.price_buy

check_circle Výsledek:

true pokud marže >= 15%, cena se použije

price_check Maximální cena 5000 Kč
GUARDRAIL

Zajistit, že cena nepřekročí 5000 Kč. 💱 Používá amount pro absolutní limit.

["<=", ["var", "dsl.price_new"], ["amount", 5000, "CZK"]]

Použité proměnné:

dsl.price_new amount (operátor)

check_circle Výsledek:

true pokud nová cena <= 5000 Kč | V EUR projektu: <= ~205.76 EUR

attach_money Minimální marže 50 Kč
GUARDRAIL

Zajistit absolutní marži alespoň 50 Kč. 💱 Používá amount pro měnovou hodnotu.

[">", 
  ["-", ["var", "dsl.price_new"], ["var", "dsl.price_buy"]], 
  ["amount", 50, "CZK"]
]

Použité proměnné:

dsl.price_new dsl.price_buy amount (operátor)

check_circle Výsledek:

true pokud (prodej - nákup) >= 50 Kč | V EUR: >= ~2.06 EUR

compare_arrows Max změna o 10%
GUARDRAIL

Zajistit, že nová cena se neliší od aktuální o více než 10%

["and",
  [">=", ["var", "dsl.price_new"], ["*", ["var", "dsl.price_current"], 0.9]],
  ["<=", ["var", "dsl.price_new"], ["*", ["var", "dsl.price_current"], 1.1]]
]

Použité proměnné:

dsl.price_new dsl.price_current

check_circle Výsledek:

true pokud nová cena je v rozmezí 90% - 110% aktuální ceny

warehouse Pouze když je skladem
GUARDRAIL

Nastavit cenu pouze když je produkt na skladě

[">", ["var", "dsl.stock_level"], 0]

Použité proměnné:

dsl.stock_level

check_circle Výsledek:

true pokud je skladem alespoň 1 ks

trending_flat Neklesnou pod konkurenci
GUARDRAIL

Zajistit, že cena nebude nižší než nejlevnější konkurent

[">=", ["var", "dsl.price_new"], ["var", "dsl.competition.lowest_price"]]

Použité proměnné:

dsl.price_new dsl.competition.lowest_price

check_circle Výsledek:

true pokud naše cena >= nejnižší cena konkurence

verified_user Kombinované ochrany
GUARDRAIL

Marže min 15% A cena max 5000 Kč A skladem > 0

["and",
  [">", ["margin-%"], 15],
  ["<=", ["var", "dsl.price_new"], 5000],
  [">", ["var", "dsl.stock_level"], 0]
]

Použité proměnné:

margin-% dsl.price_new dsl.stock_level

check_circle Výsledek:

true pokud jsou splněny VŠECHNY tři podmínky

percent Max 150% nákupní ceny
GUARDRAIL

Zajistit, že cena nepřekročí 150% nákupní ceny

["<=", ["var", "dsl.price_new"], ["*", ["var", "dsl.price_buy"], 1.5]]

Použité proměnné:

dsl.price_new dsl.price_buy

check_circle Výsledek:

true pokud prodejní cena <= 1.5x nákupní cena

sell RRP jako maximum
GUARDRAIL

Zajistit, že cena nepřekročí doporučenou maloobchodní cenu (RRP)

["<=", ["var", "dsl.price_new"], ["var", "dsl.product.rrp"]]

Použité proměnné:

dsl.price_new dsl.product.rrp

check_circle Výsledek:

true pokud naše cena <= RRP (doporučená maloobchodní cena)

trending_up Maximum markup 200%
GUARDRAIL

Zajistit, že markup nepřekročí 200% (marže max 66.67%)

["<=", ["var", "dsl.price_new"], ["*", ["var", "dsl.price_buy"], 3.0]]

Použité proměnné:

dsl.price_new dsl.price_buy

check_circle Výsledek:

true pokud prodejní cena <= 3x nákupní cena (max 200% markup)

percent Maximum marže 60%
GUARDRAIL

Zajistit, že marže nepřekročí 60% (markup max 150%)

[">=", ["var", "dsl.price_new"], ["/", ["var", "dsl.price_buy"], 0.4]]

Použité proměnné:

dsl.price_new dsl.price_buy

check_circle Výsledek:

true pokud cena >= nákup/0.4 (60% marže = markup 150%)

balance Marže 10-50% (markup 11-100%)
GUARDRAIL

Zajistit marži mezi 10-50%, což odpovídá markupu 11.11-100%

["and",
  [">=", ["var", "dsl.price_new"], ["/", ["var", "dsl.price_buy"], 0.9]],
  ["<=", ["var", "dsl.price_new"], ["/", ["var", "dsl.price_buy"], 0.5]]
]

Použité proměnné:

dsl.price_new dsl.price_buy

check_circle Výsledek:

true pokud marže je v rozmezí 10-50%

currency_exchange 💱 Operátor Amount - Měnové hodnoty

Operátor amount umožňuje explicitně specifikovat absolutní měnové hodnoty v DSL výrazech a automaticky je převádí na měnu projektu.

info Kdy používat amount vs. holé číslo?
DŮLEŽITÉ

✅ Holé číslo = Multiplikátor / Procenta

["*", ["var", "dsl.price_buy"], 1.35]  → 35% marže (multiplikátor)
["+", ["var", "dsl.price"], 0.15]      → Přičíst 0.15 jako multiplikátor

❌ Holé číslo = Není jasné, co znamená!

["-", ["var", "dsl.competition.lowest_price"], 10]
→ Je to 10 Kč? Nebo 10%? Nebo 10 EUR? NEPOUŽÍVAT!

amount = Absolutní hodnota v měně

["-", ["var", "dsl.competition.lowest_price"], ["amount", 10, "CZK"]]
→ Konkurence - 10 Kč (JASNÉ!)

["+", ["var", "dsl.price"], ["amount", 2, "EUR"]]
→ Cena + 2 EUR (v CZK projektu se převede → ~48.64 Kč)
code Syntaxe operátoru amount
SYNTAX

Formát: ["amount", hodnota, "měna"]

["amount", 100, "CZK"]  → 100 Kč
["amount", 10, "EUR"]   → 10 EUR (převede se na měnu projektu)
["amount", 50]          → 50 v default měně (CZK)
["amount", 5, "USD"]    → 5 USD (automatický převod)
sync Automatická konverze měn
AUTO

DSL automaticky převádí mezi měnami pomocí aktuálních kurzů ČNB

// V CZK projektu:
["amount", 10, "EUR"] → ~243 Kč (při kurzu 24.32)

// V EUR projektu:
["amount", 100, "CZK"] → ~4.11 EUR (při kurzu 24.32)
remove Podražit o fixní částku
RULE

Odečíst 50 Kč od konkurenční ceny

["-", 
  ["var", "dsl.competition.lowest_price"], 
  ["amount", 50, "CZK"]
]

check_circle Příklad:

Konkurent 1000 Kč → 950 Kč | V EUR projektu: 1000 Kč → ~39.02 EUR, minus ~2.06 EUR = ~36.96 EUR

add Přidat premium
RULE

Přidat 100 Kč premium k nákupní ceně

["+", 
  ["var", "dsl.price_buy"], 
  ["amount", 100, "CZK"]
]

check_circle Příklad:

Nákup 500 Kč → 600 Kč (fixní přirážka)

sync_alt Cross-currency příklad
RULE

Použít EUR hodnoty v CZK projektu

["if",
  ["<", ["var", "dsl.price"], ["amount", 500, "CZK"]],
  ["amount", 20, "EUR"],
  ["var", "dsl.price"]
]

check_circle Příklad:

Pokud cena < 500 Kč, nastav na 20 EUR (~486 Kč). Jinak ponech.

vertical_align_bottom Minimum s amount
RULE

Větší z: marže 30% nebo minimálně 150 Kč

["max",
  ["*", ["var", "dsl.price_buy"], 1.3],
  ["amount", 150, "CZK"]
]

check_circle Příklad:

Nákup 100 Kč: max(130, 150) = 150 Kč | Nákup 200 Kč: max(260, 150) = 260 Kč

payments Podporované měny
30+ MĚN
Hlavní měny: CZK (default), EUR, USD, PLN, GBP, CHF, SEK, NOK, DKK, HUF, RON, BGN, HRK, RUB
Další: AUD, CAD, JPY, CNY, BRL, INR, KRW, MXN, ZAR, TRY, IDR, THB a další...
Kurzy z ČNB kurzovního lístku, aktualizace denně.

functions Operátory - Quick Reference

Kompletní přehled všech dostupných operátorů DSL

Operátor Popis Příklad Výsledek
+ Sčítání ["+", 10, 5] 15
- Odčítání ["-", 10, 5] 5
* Násobení ["*", 10, 2] 20
/ Dělení ["/", 10, 2] 5
min Minimum ["min", 10, 5, 20] 5
max Maximum ["max", 10, 5, 20] 20
== Rovná se ["==", 10, 10] true
!= Nerovná se ["!=", 10, 5] true
> Větší než [">", 10, 5] true
>= Větší nebo rovno [">=", 10, 10] true
< Menší než ["<", 5, 10] true
<= Menší nebo rovno ["<=", 10, 10] true
and Logické AND ["and", true, true] true
or Logické OR ["or", false, true] true
not Logické NOT ["not", false] true
if Podmínka ["if", true, "ano", "ne"] "ano"
var Proměnná ["var", "dsl.price_buy"] hodnota proměnné
in Je v seznamu ["in", "X", ["X", "Y"]] true
margin-% Marže v % ["margin-%"] % marže
margin-level Úroveň marže ["margin-level", "std"] cena s marží "std"
amount 💱 Měnová hodnota ["amount", 100, "CZK"] 100 Kč (převede na měnu projektu)

data_object Proměnné - Quick Reference

Kompletní přehled všech dostupných proměnných DSL

Proměnná Typ Popis Příklad hodnoty
dsl.price_buy number Nákupní cena produktu 536.65
dsl.price_current number Aktuální prodejní cena 650.00
dsl.price_new number Nově vypočítaná cena 625.00
dsl.stock_level number Množství na skladě 15
dsl.competition_count number Počet konkurentů 11
dsl.competition.lowest_price number Nejnižší cena konkurence 627.27
dsl.competition.avg_price number Průměrná cena konkurence 750.50
dsl.competition.highest_price number Nejvyšší cena konkurence 890.00
dsl.product.category string Kategorie produktu "Elektronika"
dsl.product.brand string Značka produktu "Apple"
dsl.product.ean string EAN kód produktu "8590000123456"
dsl.final_price.margin_percent number Marže v % (profit / sell price) 67.67
dsl.final_price.markup_percent number Markup v % (profit / buy price) 209.31
dsl.final_price.profit_amount number Absolutní zisk v Kč 2236.47
margin-% number Procentuální marže (legacy) 25.5
help Rozdíl mezi Margin a Markup
IMPORTANT
Marže (Margin): Podíl zisku k prodejní ceně. Max 100%. Vzorec: (Prodej - Nákup) / Prodej × 100
Markup (Obchodní přirážka): Podíl zisku k nákupní ceně. Může být >100%. Vzorec: (Prodej - Nákup) / Nákup × 100
Příklad: Nákup 100 Kč → Prodej 150 Kč
- Zisk: 50 Kč
- Marže: 50/150 × 100 = 33.33% 
- Markup: 50/100 × 100 = 50%