// Fictional one-portion recipes. Reuse the original demo stock without resetting it. import {stock as boxStock} from './trial-demo-data.mjs'; const extra=[ ['potato','Картофель',80,'fresh'],['butter','Масло сливочное',1100,'fresh'], ['milk','Молоко',110,'fresh'],['egg','Яйцо куриное без скорлупы',260,'fresh'], ['peas','Горошек зелёный консервированный',300,'grocery'], ['chicken-raw','Филе куриное сырое',480,'protein'],['whitefish','Филе трески',950,'protein'], ['lemon','Лимон',300,'fresh'],['rice','Рис сухой',180,'grocery'] ].map(([key,name,cost,supplier])=>({id:`demo-banquet-v1-stock-${key}`,name,cost,unit:'кг',qty:0,min:0.1,supplierId:`demo-v1-supplier-${supplier}`,lastPurchaseDate:'',lastPurchasePrice:0})); const products=new Map([...boxStock.map(p=>[p.id.replace('demo-v1-stock-',''),p]),...extra.map(p=>[p.id.replace('demo-banquet-v1-stock-',''),p])]); // Gross / prepared net grams per guest; water absorbed by rice is described separately. const recipes=[ ['caprese','Капрезе с моцареллой и базиликом','Холодные закуски',290, [['mozzarella',50,50],['tomato',70,60],['basil',6,5],['oil',5,5]],['Молоко'], ['Нарезать томаты и моцареллу.','Выложить слоями, добавить базилик и масло.']], ['roastbeef','Ростбиф с корнишонами и горчичным соусом','Холодные закуски',390, [['beef',65,65],['pickle',22,20],['mustard',5,5],['cooking-cream',10,10]],['Молоко','Горчица'], ['Нарезать готовый ростбиф тонкими ломтиками.','Смешать сливки с горчицей, подать с корнишонами.']], ['salmon-roll','Рулетики из лосося со сливочным сыром','Холодные закуски',350, [['salmon',45,45],['cream',25,25],['cucumber',22,18],['dill',3,2]],['Рыба','Молоко'], ['Нарезать лосось и огурец тонкими ломтиками.','Распределить сыр, свернуть рулетики, украсить укропом.']], ['hummus','Овощные палочки с хумусом','Холодные закуски',230, [['carrot',48,40],['cucumber',44,40],['pepper',40,30],['hummus',50,50]],['Кунжут в составе хумуса'], ['Очистить овощи и нарезать палочками.','Подать с порцией готового хумуса.']], ['caesar','Салат с курицей, сухариками и сыром','Салаты',340, [['chicken',60,60],['lettuce',42,35],['cherry',35,30],['toast',23,20],['gouda',15,15],['cooking-cream',15,15],['mustard',5,5]],['Глютен','Молоко','Горчица'], ['Подсушить кубики хлеба, подготовить салат и томаты.','Нарезать готовую курицу, соединить с овощами и сыром.','Заправить сливками с горчицей, сверху добавить сухарики.']], ['olivier','Оливье с индейкой','Салаты',280, [['potato',65,50],['carrot',26,20],['turkey',35,35],['egg',22,20],['peas',20,20],['pickle',22,20],['cooking-cream',12,12],['mustard',3,3]],['Яйцо','Молоко','Горчица'], ['Отварить картофель, морковь и яйцо; остудить.','Нарезать овощи, яйцо, ветчину и корнишоны кубиком.','Добавить горошек и заправить сливками с горчицей.']], ['greek','Овощной салат с моцареллой и маслинами','Салаты',290, [['tomato',55,50],['cucumber',44,40],['pepper',32,25],['mozzarella',40,40],['olive',17,15],['oil',10,10]],['Молоко'], ['Подготовить и крупно нарезать овощи.','Добавить моцареллу и маслины, заправить маслом.']], ['julienne','Жюльен с курицей и грибами','Горячие закуски',310, [['chicken',40,40],['mushroom',60,40],['onion',15,10],['cooking-cream',25,20],['gouda',15,15],['oil',5,5]],['Молоко'], ['Обжарить нарезанные грибы и лук на масле.','Добавить готовую курицу и сливки, распределить по формам.','Посыпать сыром и запечь до расплавления.']], ['stuffed-mushrooms','Шампиньоны, запечённые с сыром','Горячие закуски',270, [['mushroom',125,85],['cream',20,20],['gouda',10,10],['dill',3,2],['oil',3,3]],['Молоко'], ['Подготовить шляпки грибов, ножки мелко нарезать.','Смешать ножки со сливочным сыром и укропом, наполнить шляпки.','Добавить гауду и запечь.']], ['chicken','Куриное филе с овощами и сливочным соусом','Горячие блюда',490, [['chicken-raw',180,135],['pepper',45,30],['carrot',32,25],['cooking-cream',30,25],['oil',5,5]],['Молоко'], ['Обжарить куриное филе и довести до готовности.','Отдельно приготовить перец и морковь.','Добавить сливочный соус, подать с овощами; учесть потери при приготовлении.']], ['cod','Треска с лимоном и овощами','Горячие блюда',590, [['whitefish',170,130],['tomato',45,35],['pepper',30,20],['lemon',15,10],['oil',5,5]],['Рыба'], ['Подготовить филе и нарезать овощи.','Запечь рыбу с овощами, лимоном и маслом до готовности.']], ['beef-hot','Ростбиф с грибами в сливочном соусе','Горячие блюда',690, [['beef',125,120],['mushroom',80,55],['onion',24,15],['cooking-cream',30,25],['oil',5,5]],['Молоко'], ['Обжарить грибы и лук, добавить сливки.','Прогреть готовый ростбиф и подать с грибным соусом.']], ['mash','Картофельное пюре','Гарниры',160, [['potato',170,120],['milk',25,20],['butter',10,10]],['Молоко'], ['Очистить и отварить картофель, слить воду.','Размять с тёплым молоком и сливочным маслом.']], ['rice','Рис с овощами','Гарниры',170, [['rice',40,40],['carrot',25,20],['pepper',25,20],['peas',15,15],['oil',5,5]],[], ['Отварить рис; учебный расчёт учитывает 50 г поглощённой воды на порцию.','Приготовить овощи, добавить горошек и смешать с рисом.'],50], ['berry-cream','Ягодный десерт со сливочным кремом','Десерты',240, [['cream',35,35],['cooking-cream',20,20],['biscuit',15,15],['strawberry',28,25],['blueberry',11,10],['sugar',5,5]],['Молоко','Глютен','Яйцо в составе бисквита'], ['Смешать сыр, сливки и сахарную пудру.','Выложить в креманку бисквит, крем и подготовленные ягоды.']], ['cheese-honey','Бри с виноградом, мёдом и орехами','Десерты',310, [['brie',45,45],['grape',39,35],['walnut',10,10],['honey',10,10]],['Молоко','Орехи'], ['Нарезать бри и подготовить виноград.','Подать с грецким орехом и мёдом.']], ['fruit','Фруктово-ягодное ассорти','Фрукты и ягоды',290, [['grape',88,80],['strawberry',77,70],['blueberry',32,30]],[], ['Подготовить ягоды и виноград, удалить плодоножки.','Выложить порционное ассорти.']], ['bread','Хлебная корзинка с зелёным маслом','Хлеб и масло',120, [['baguette',30,30],['rye',20,20],['butter',8,8],['dill',3,2]],['Глютен','Молоко'], ['Нарезать хлеб, при желании подсушить.','Смешать масло с укропом, подать отдельно.']] ]; export const banquet=recipes.map(([key,name,catalogSection,price,quantities,allergens,steps,waterGrams=0],index)=>{ const rows=quantities.map(([key,gross,net])=>{const p=products.get(key);return {productId:p.id,name:p.name,unit:p.unit,gross:gross/1000,net:net/1000,unitCost:p.cost}}); const outputGrams=Math.round(rows.reduce((sum,r)=>sum+r.net*1000,waterGrams)); return {id:`demo-banquet-v1-${key}`,name,category:6,catalogSection,price,weight:`${outputGrams} г`,pieces:1,photo:`demo/images/banquet-${key}.webp`,demo:true, composition:[rows.map(r=>r.name).join(', ')],ingredients:rows.map(r=>[r.name,r.gross,r.unit]), ttk:{number:`ДЕМО-Б${String(index+1).padStart(2,'0')}`,basis:'На 1 порцию / 1 гостя',outputGrams,waterGrams,pieces:1,rows,steps,allergens, ingredientCost:Math.round(rows.reduce((sum,r)=>sum+r.gross*r.unitCost,0)*100)/100, note:'Учебная рецептура и примерные цены. Выход указан после приготовления. Перед использованием в работе уточните нормы, стоимость и аллергены.'}}; }); export const banquetDemo={version:1,banquet,stock:extra};