--- title: Recepty a suroviny order: 20 summary: Jak operátor spravuje sdílenou knihovnu surovin a receptů (množství na 10 porcí, alergeny, kalkulace nákladů) ručně i hromadným CSV importem. --- # Recepty a suroviny Recepty a suroviny tvoří knihovnu, ze které kuchyně připravuje jídelní lístek. Recept popisuje, jaké suroviny a v jakém množství jsou potřeba na 10 porcí. Suroviny (ingredience) jsou sdílené napříč všemi recepty -- stačí je založit jednou. Tato stránka popisuje, jak knihovnu spravovat ručně i hromadně přes CSV import. > **Tip:** Než začnete zakládat recepty, projděte si nejdřív seznam **Suroviny**. Společná knihovna surovin znamená, že "Hovězí maso" je v celém systému jeden záznam s jednou sadou alergenů -- a jakákoli oprava se promítne do všech receptů, které ho používají. ## Suroviny Sekce **Suroviny** (boční menu → _Suroviny_) je sdílený katalog ingrediencí. Každá surovina má název, výchozí jednotku a seznam alergenů 1--14 dle EU legislativy. ### Vytvoření suroviny 1. Přejděte do sekce **Suroviny**. 1. Klikněte na **Přidat surovinu**. 1. Vyplňte název, výchozí jednotku a zaškrtněte alergeny. 1. Klikněte na **Vytvořit**. ### Pole suroviny | Pole | Popis | Příklad | | --- | --- | --- | | Název | Jednoznačný název suroviny. V rámci jednoho tenanta musí být unikátní. | Hovězí maso zadní | | Výchozí jednotka | Měrná jednotka suroviny -- převezme se do každého receptu, který surovinu použije. Drží se u suroviny, v receptu ji ručně nepřepisujete. Povolené hodnoty: `g`, `kg`, `ml`, `l`, `ks`. | g | | Cena za jednotku | Volitelná nákupní cena suroviny v Kč za **nákupní jednotku** (`kg`, `l` nebo `ks`). Slouží k výpočtu kalkulace nákladů receptu. U každé ceny se eviduje datum poslední aktualizace. | 89,90 Kč / kg | | Alergeny | Sada čísel 1--14 podle přílohy II nařízení EU 1169/2011 (lepek, vejce, mléko, ryby...). | 1, 7 | ### Cena suroviny a kalkulace nákladů U každé suroviny můžete zadat **nákupní cenu** v Kč za nákupní jednotku (`kg`, `l` nebo `ks`). Cena je čistě interní informace pro controlling -- nikde se nezobrazuje rodičům ani strávníkům. Z cen surovin se pak na receptu počítá **kalkulace nákladů** (kolik stojí suroviny na porci). > **Nákupní vs. receptová jednotka:** cena se zadává za nákupní jednotku (kg / l / ks), ale recept spotřebovává v gramech / mililitrech / kusech. Převod probíhá automaticky v rámci stejné rodiny (kg ↔ g, l ↔ ml, ks ↔ ks). Surovinu, kterou nakupujete v jiné rodině, než ji recept spotřebovává (např. vejce kupujete na `ks`, ale recept je počítá v `g`), systém ve výpočtu označí jako _nesedící jednotku_ a kalkulaci nezapočítá -- viz níže. ### Úprava a archivace Kliknutí na řádek otevře pravý panel s detailem. Editujete vlastnosti přímo v panelu a uložíte tlačítkem **Uložit**. Surovinu lze **Archivovat** (přes ikonu koše) -- recepty, které ji už používají, zůstanou v platnosti, ale v nabídce při zakládání nového receptu se archivovaná surovina neobjeví. Tvrdé smazání není v UI dostupné, protože by porušilo historii receptů. > **Pozor na alergeny:** Změna alergenů na surovině se projeví v _budoucím_ zobrazení receptů, ale již zveřejněná jídla v jídelním lístku alergeny přebírají z konkrétního jídla (ne suroviny). Pokud opravujete chybný alergen po zveřejnění, projděte i odpovídající jídla v jídelníčku. ## Recepty Sekce **Recepty** (boční menu → _Recepty_) je knihovna celých receptů. Každý recept obsahuje seznam surovin s množstvím **na 10 porcí** -- tato hodnota se pak používá pro výpočet denní objednávky a spotřebního koše podle skutečného počtu objednaných porcí. ### Vytvoření receptu 1. Přejděte do sekce **Recepty**. 1. Klikněte na **Přidat recept**. 1. Vyplňte základní údaje (název, popis, gramáže porcí). 1. Postupně přidávejte suroviny tlačítkem **Přidat surovinu**: vyberte surovinu z katalogu a zadejte množství na 10 porcí. Měrná jednotka se převezme přímo ze suroviny (u položky se jen zobrazí, needituje se). 1. Klikněte na **Vytvořit**. ### Pole receptu | Pole | Popis | Příklad | | --- | --- | --- | | Název | Unikátní název receptu v rámci tenanta. | Hovězí guláš s knedlíkem | | Popis | Volitelný delší popis -- technologický postup, poznámky, kód původu. | Recept dle kuchařky ZŠ, kód 26-OK-0033 | | Interní poznámka | Volitelná interní poznámka pro kuchaře / operátora. **Nezobrazuje se strávníkům ani rodičům.** Viz [Interní poznámka](#interní-poznámka) níže. | Steril. zelenina: hrubá 500 g = čistá 300 g | | Kuchyně | Volitelná kuchyně, kde se receptura připravuje. Pole se zobrazuje jen provozům s víc než jednou kuchyní. Prázdné = připravuje se ve všech. Viz [Kuchyně, kde se receptura připravuje](#kuchyně-kde-se-receptura-připravuje) níže. | Výdejna Sever | | Jednotka porce | Jednotka, ve které se měří velikost porce (`g` nebo `ml`). | g | | Plná porce | Velikost plné porce v gramech / mililitrech (koeficient 1,00 -- dospělá porce). | 250 | | Velikost porce podle věkové kategorie | Jeden řádek za každou věkovou kategorii, kterou máte nastavenou. Můžete hodnotu nechat _Auto_ -- systém ji dopočítá z plné porce podle koeficientu kategorie -- nebo ji tlačítkem **Upravit** přepsat ručně. Viz [Velikost porce podle věkové kategorie](#velikost-porce-podle-věkové-kategorie) níže. | 4-6 let: 125 (auto), 7-10 let: 175 (auto) | | Suroviny | Seznam položek <surovina, množství na 10 porcí, jednotka>. | Hovězí maso 2,5 kg; Cibule 0,8 kg; ... | ### Kuchyně, kde se receptura připravuje Máte-li v provozu víc kuchyní, může každá z nich totéž jídlo vyrábět jinak -- jedna si knedlíky dělá sama, druhá je kupuje hotové. Takové jídlo pak má **dvě receptury**, každou pro jinou kuchyni. U receptury proto můžete vybrat **kuchyni, kde se připravuje**. Slouží to k jedinému účelu: **[Nákupní žádanka](/docs/operator/reports) pro danou kuchyni pak obsahuje jen suroviny receptur, které ta kuchyně opravdu vaří.** Bez toho by si každá kuchyně objednávala i suroviny té druhé. Pravidla jsou jednoduchá: - **Prázdné pole = receptura se připravuje ve všech kuchyních.** Takto se chovaly všechny receptury dřív, takže existující data nemusíte nijak upravovat. Provozu s jednou kuchyní se pole vůbec nezobrazuje. - **Receptura bez určené kuchyně projde vždycky** -- objeví se v žádance každé kuchyně, protože ji vaří všechny. - **Jídelníček to neovlivňuje.** Při sestavování jídelníčku se nabízejí všechny receptury bez ohledu na kuchyni. - **Seznam receptur se ve výchozím stavu nefiltruje.** Vidíte všechny receptury a u každé sloupec _Kuchyně_; přepínačem nad seznamem si můžete zobrazit jen jednu kuchyni. - **Kopie receptury přebírá kuchyni originálu.** - **Archivovanou kuchyni už nelze nově přiřadit**, ale receptura, která ji má nastavenou z dřívějška, jde dál normálně upravovat -- v poli se zobrazí s poznámkou _(archivovaná)_ a můžete ji ponechat nebo vymazat. > **Pozor při volbě „Všechny kuchyně" v žádance:** žádanka za celý provoz sečte receptury všech kuchyní. Máte-li dvě varianty téhož jídla (knedlíky vlastní i kupované), objeví se v součtu obě. Je to správně -- celý provoz opravdu nakupuje obojí -- ale pro nákup za jednu kuchyni si kuchyni vyberte. ### Velikost porce podle věkové kategorie Velikosti porcí se zadávají **za věkovou kategorii**, ne za koeficient. Vidíte tedy řádky „4-6 let", „7-10 let" a tak dál -- přesně ty kategorie, které máte v **Nastavení → Věkové kategorie**. Výchozí hodnota každého řádku se dopočítá jako _plná porce × koeficient kategorie_. Koeficient v nastavení tak funguje jako **generátor výchozích velikostí**; jakmile hodnotu přepíšete ručně, platí vaše hodnota a koeficient se u té kategorie už nepoužije. Ruční přepis je určený pro **neproporcionální jídla**. Klasický případ je houska nebo rohlík: dostane ho celý každý, ne půlku. Nastavíte plnou porci na `1 ks` a u všech kategorií přepíšete velikost na `1`. Z velikosti porce se pak počítá **všechno ostatní**, takže se sestavy nemohou rozejít: | Sestava | Co z velikosti porce vychází | | --- | --- | | **Denní výdejka** | navážka -- kolik se má navážit na výdejní místo | | **Dodací list** | navážka receptur, i v PDF posílaném výdejnímu místu | | **Podklad pro vaření a Nákupní žádanka** | množství surovin -- škáluje se **za recepturu**, takže houska „1 ks pro všechny" nakoupí suroviny na plný počet strávníků, ne na zmenšené porce | | **Spotřební koš** | gramáž připsaná strávníkovi | #### Vztah k vypínači koeficientu u druhu jídla Chcete-li stejnou porci pro všechny u **celého druhu jídla** (typicky u polévky nebo přesnídávky), je jednodušší vypnout věkový koeficient v **Nastavení → Druhy jídla**. Ruční přepis na receptuře řeší **jedno konkrétní jídlo**. Obojí lze kombinovat a platí jasné pořadí: | | vypínač u druhu jídla | ruční velikost na receptuře | | --- | --- | --- | | Co určuje | **výchozí** velikost porce pro celý druh jídla | **konkrétní** velikost pro jednu recepturu | | Záběr | všechny receptury toho druhu jídla, i budoucí | jedna receptura | | Přednost | ustoupí ruční hodnotě | **vyhrává** | **Vypnutí koeficientu tedy nezaručuje stejné porce.** Má-li receptura u některé kategorie zadanou vlastní hodnotu, řídí se dál jí. Chcete-li se vrátit k výchozímu chování, přepněte řádek zpět na _Auto_. Vypínač zůstává potřeba i po zavedení velikostí porcí za kategorii: pravidlo „tenhle chod se dávkuje všem stejně" patří k **druhu jídla**, ne k receptuře. Táž receptura navíc může být použitá pod víc druhy jídla, kde by jedna ruční hodnota nestačila. ### Množství na 10 porcí (quantity_per_10) Všechna množství v receptu se zadávají **na 10 porcí**. Důvod je praktický: většina školních norem a kuchařek je psaná pro desítkové násobky a systém pak dopočítá skutečnou potřebu podle počtu objednaných porcí pro daný den. Pokud má váš recept v podkladech jiný základ (např. na 1 porci nebo na 100 porcí), přepočtěte hodnotu na 10 porcí ručně před zadáním. _Příklad:_ recept psaný na 100 porcí udává 25 kg masa → zadejte `2,5` kg. ### Úprava receptu a změna surovin 1. Klikněte na řádek receptu -- otevře se pravý panel. 1. Editujte název, popis nebo porce přímo v polích. 1. V sekci **Suroviny** můžete: - **Nahradit surovinu** jinou (ikona ↻ vedle řádku) -- vyberete náhradní surovinu a zadáte množství. Měrná jednotka se automaticky převezme z nové suroviny; když se změní rodina jednotek (např. `ml` → `ks`), pole množství se vynuluje, ať nezůstane nesmyslná hodnota po předchozí surovině. - Odebrat surovinu z receptu (ikona koše vedle řádku). - Přidat novou surovinu přes formulář **Přidat surovinu**. 1. Klikněte na **Uložit**. > **Pozor:** Úprava receptu se okamžitě promítne do všech budoucích reportů (denní objednávka, dodací listy, spotřební koš). Reporty pro již minulé dny zůstávají historicky věrné -- počítají se v okamžiku generování a uchovávají se jako PDF. ### Interní poznámka Ke každé receptuře můžete připojit **interní poznámku** -- volné textové pole pro vaši potřebu. Je čistě interní: **nezobrazuje se strávníkům, rodičům ani nikde v jídelním lístku.** Hodí se na: - **zpětné informace pro kuchaře** -- např. hrubá vs. čistá váha u sterilované zeleniny („hrubá 500 g = čistá 300 g"), postup přípravy, na co si dát pozor; - **poznámky ke změnám** receptury -- proč a kdy jste něco upravili, ať se v tom později vyznáte. Poznámku vidíte a editujete v detailu receptu, pod popisem. Uloží se spolu se zbytkem receptu tlačítkem **Uložit**. > **Kdo naposledy upravil:** pod poznámkou systém automaticky ukazuje **„Naposledy upravil: <jméno> · <datum>"** -- bere se z přihlášeného uživatele při každém uložení, takže nemusíte autora a datum psát ručně. U receptů založených importem nebo z ukázkových dat se razítko nezobrazuje. ### Tisk receptury Recept si můžete vytisknout a vzít s sebou do kuchyně -- pro ruční přepočty, kontrolu nebo poznámky k úpravám. V detailu receptu otevřete nabídku **⋮** v záhlaví panelu a zvolte **Tisk**. Otevře se tisková stránka receptu s tlačítkem **Tisk** (tiskne se na A4 na výšku). Na výtisku najdete: - **hlavičku** s názvem receptu, kuchyní, datem tisku a počtem surovin, - **velikosti porcí** za jednotlivé věkové kategorie včetně informace, zda je hodnota zadaná ručně, nebo dopočítaná ze základní porce, - **seznam surovin s množstvím na 10 porcí**, alergeny a cenou za 10 porcí, - **prázdný sloupec Poznámka** na ruční zápisky při přepočtu -- ten je jen na papíře, na obrazovce se nezobrazuje, - **alergeny celé receptury** (sjednocení alergenů všech surovin), - **kalkulaci nákladů** (cena na porci a na 10 porcí; u neúplné kalkulace se místo totalu vytiskne upozornění -- viz [Kalkulace nákladů](#kalkulace-nákladů)), - **interní poznámku**, pokud je vyplněná. > **Pozor na interní poznámku:** tiskne se včetně ní. Je určená pro provoz, ne pro rodiče a strávníky -- výtisk podle toho neposílejte ven. Množství surovin se tiskne tak, jak je v receptu uložené, tedy **na 10 porcí**. Přepočet na jiný počet porcí zatím tisková stránka nenabízí -- dělá se ručně na papíře. ### Duplikace receptu Potřebujete-li novou variantu existujícího receptu (bezlepkovou verzi, sezónní obměnu, recept s jiným postupem), nemusíte vše zadávat znovu. V detailu receptu otevřete nabídku **⋮** v záhlaví panelu a zvolte **Duplikovat**. Vznikne kopie s názvem _„<původní název> (kopie)"_ (při opakování _„(kopie 2)"_, _„(kopie 3)"_ atd.), do které se přenese **popis, velikosti porcí i všechny suroviny** s množstvím a jednotkami. Kopie se rovnou otevře k úpravě, takže můžete hned změnit název a doladit suroviny. Kopie **není** navázaná na žádné jídlo ani jídelníček -- začíná jako samostatný, volný recept. > **Tip:** Duplikace je nejrychlejší cesta, jak obejít pravidlo unikátního názvu -- viz FAQ níže. Novou kopii jen přejmenujte (např. _Hovězí guláš (bez lepku)_) a upravte suroviny. ### Kalkulace nákladů V detailu receptu najdete panel **Kalkulace**, který spočítá náklad na suroviny z aktuálních cen surovin. U každé položky vidíte její cenu na porci i na 10 porcí, dole pak **celkový náklad na porci a na 10 porcí** za celý recept. Výpočet je **živý**: jakmile upravíte cenu suroviny nebo množství v receptu, kalkulace se přepočítá z aktuálních hodnot (nedrží se historický snímek). > **Neúplná kalkulace:** dokud má aspoň jedna surovina v receptu nezadanou cenu (nebo nesedící nákupní jednotku), systém **celkový náklad neukáže** a místo něj zobrazí upozornění s počtem chybějících cen. Polovičaté číslo, které vypadá autoritativně, by bylo zavádějící -- proto se total objeví, až je recept nacalkulovaný kompletně. Dílčí ceny u jednotlivých surovin vidíte i tak. Kalkulace je zatím **jen nákladová** -- ukazuje, kolik stojí suroviny. Marže vůči prodejní ceně (z [ceníku](/docs/operator/pricing)) je samostatná věc a v této verzi není součástí kalkulace. ### Kalkulace celého jídla Jedno jídlo bývá složené z několika receptů (guláš + knedlík), takže dřív bylo potřeba sčítat jejich kalkulace ručně. Detail jídla v sekci **Jídla** má proto vlastní panel **Kalkulace**: ukáže **náklad na porci a na 10 porcí za celé jídlo** a pod ním řádek za každý přiřazený recept, aby bylo vidět, z čeho se součet skládá. Platí tu stejná pravidla jako u receptu, jen o patro výš: - **Neúplná kalkulace se nesčítá.** Stačí jedna surovina bez ceny v jednom z receptů a celkový náklad za jídlo se neukáže -- místo něj je upozornění s počtem chybějících cen a odkaz na doplnění. Recepty, které spočítat jdou, svou cenu ukazují dál. - **Součet sedí na řádky nad ním.** Sčítají se zaokrouhlené ceny jednotlivých receptů, přesně ty, které jsou vidět v tabulce, aby se celkové číslo nelišilo o haléře od toho, co si sečtete očima. - **Jídlo bez přiřazených receptů** neukáže „0 Kč", ale zprávu, že není z čeho počítat. Nula by tvrdila něco o jídle, ne o chybějících datech. - **Kalkulace odpovídá uloženému stavu.** Když v panelu zaškrtnete další recept, číslo se posune až po uložení. Panel je jen ke čtení -- nic v něm needitujete a otevření jídla kvůli kalkulaci ho neoznačí jako rozpracované. ### Archivace receptu Recept lze **archivovat** tlačítkem v záhlaví detailu. Archivovaný recept se neukáže při sestavování jídelního lístku, ale historická data (kde byl použit v minulých jídelnících) zůstávají zachována. Tvrdé smazání není v UI dostupné. ## Hromadný import receptů z CSV Pokud máte recepty v Excelu, ze starého systému, nebo jste je dostali jako CSV od kolegy, můžete je naimportovat hromadně místo ručního zadávání. 1. Přejděte do sekce **Recepty**. 1. Klikněte na **Import z CSV** v záhlaví. 1. Připravte si CSV soubor podle níže uvedeného formátu (případně si stáhněte _Ukázkový CSV_, který je odkazem přímo na stránce importu). 1. Vyberte soubor a klikněte na **Importovat**. 1. Po dokončení uvidíte souhrn -- kolik řádků prošlo, kolik receptů a surovin vzniklo, a případné chyby s číslem řádku. ### Formát CSV Soubor musí být kódovaný v **UTF-8** (diakritika!) a obsahovat hlavičku s těmito sloupci: | Sloupec | Povinný | Popis | | --- | --- | --- | | `recipe_name` | ano | Název receptu. Řádky se stejným `recipe_name` se sloučí do jednoho receptu s více surovinami. | | `ingredient_name` | ano | Název suroviny. Pokud surovina v knihovně neexistuje, založí se nová (s alergeny z tohoto řádku). | | `unit` | ano | Jednotka množství: `g`, `kg`, `ml`, `l`, `ks`. Běžné varianty zápisu (`lt`, `litr`, `kus`) se automaticky převedou na kanonický tvar. | | `quantity_per_10` | ano | Množství na 10 porcí (desetinné číslo, čárka i tečka jsou OK). | | `allergens` | ne | Čísla alergenů 1--14 oddělená čárkou v uvozovkách (např. `"1,7"`). Prázdné = bez alergenů. | | `kitchen_name` | ne | Název kuchyně, kde se receptura připravuje -- musí přesně odpovídat některé **nearchivované** kuchyni provozu (na velikosti písmen nezáleží). Prázdné = všechny kuchyně. Neznámý název řádek odmítne. Sloupec lze použít jen společně s `allergens`. | > **Kuchyni uvádějte u všech řádků jedné receptury stejnou.** Řádky jsou po surovinách, takže se název kuchyně opakuje u každé z nich. Pokud se řádky téže receptury neshodnou, import ten neshodný řádek **odmítne** a vypíše chybu -- místo aby recepturu tiše přesunul podle posledního řádku. > **Soubor bez sloupce `kitchen_name` kuchyni nemění.** Starší čtyř- a pětisloupcové soubory jdou importovat dál a přiřazení kuchyně u existujících receptur nechají být -- opakovaný import starého souboru vám tedy nastavení nesmaže. ### Příklad ``` recipe_name,ingredient_name,unit,quantity_per_10,allergens Hovězí guláš,Hovězí maso,kg,2.5, Hovězí guláš,Cibule,kg,0.8, Hovězí guláš,Pšeničná mouka,g,30,"1" Bramborová polévka,Brambory,kg,3, Bramborová polévka,Mléko,ml,200,"7" ``` S určením kuchyně (šest sloupců): ``` recipe_name,ingredient_name,unit,quantity_per_10,allergens,kitchen_name Knedlík vlastní,Pšeničná mouka,g,600,"1",Centrální kuchyně Knedlík kupovaný,Knedlík mražený,ks,10,"1",Výdejna Sever Bramborová polévka,Brambory,kg,3,, ``` > **Co se stane při konfliktu:** Pokud recept se stejným názvem už existuje, import ho **přeskočí** (neaktualizuje stávající). Pokud surovina už v knihovně existuje, použije se ta stávající a její alergeny -- alergeny ze CSV se na existující surovinu nepřepíšou. Pro přepsání musíte buď upravit recept v UI, nebo nejdřív archivovat starý záznam. ### Časté chyby při importu - **Špatné kódování** -- soubor uložen jako Windows-1250 nebo Latin-2. Otevřete v Excelu a uložte jako _CSV UTF-8_. - **Středník místo čárky** -- evropské Excely často exportují CSV se středníkem. Importér čeká čárku. - **Neznámá jednotka** -- povolené jsou jen `g`, `kg`, `ml`, `l`, `ks` (a jejich běžné varianty jako `lt`). - **Číslo s neplatným formátem** -- `quantity_per_10` musí být kladné číslo. Tisíce neoddělujte mezerou. - **Alergen mimo rozsah** -- povolená jsou čísla 1--14. ## Časté otázky ### Jak alergeny v receptu souvisí s alergeny v jídelním lístku? Surovina nese sadu svých alergenů (např. mléko = 7). Jídlo v jídelníčku má vlastní sadu alergenů, kterou si operátor vyplňuje ručně při zadávání jídla. Doporučený postup je **sjednotit obě množiny** -- vezmete alergeny ze všech surovin v receptu a stejné je vyplníte do jídla. Systém vám v této věci nepomáhá automaticky, takže pozor: spojení je jen v hlavě operátora. ### Můžu mít dva recepty se stejným názvem? Ne, název receptu musí být v rámci tenanta unikátní. Pokud potřebujete variantu, použijte sufix (např. _Hovězí guláš (light)_, _Hovězí guláš -- bez lepku_). Nejrychleji variantu vytvoříte přes **Duplikovat** v nabídce **⋮** detailu receptu -- viz [Duplikace receptu](#duplikace-receptu) -- a novou kopii jen přejmenujete. ### Jak se z receptu počítá objednávka surovin? Při generování **denní objednávky** systém vezme všechny objednávky na daný den, spočítá počet porcí pro každé jídlo, najde recept jídla a vynásobí `quantity_per_10` poměrem _(počet porcí / 10)_. Výsledek sečte přes celé jídlo / kuchyni / trasu. Viz také [Kuchyňské operace](/docs/operator/kitchen). ### Mám stovky receptů ve starém systému -- jde to nějak rychleji než CSV? Pro masivní migraci (stovky receptů z PDF výpisů nebo databází starého systému) si zažádejte u administrátora -- existují interní importní skripty, které dokáží recepty převzít přímo z PDF výpisů. Tyto skripty pouští administrátor v rámci on-boardingu nového tenanta a nejsou součástí uživatelského UI.