import React, { useState } from 'react'; import { INITIAL_RECIPES, RecipeItem } from '../../mock/mockData'; import { Badge } from '../../shared/components/Badge'; import { Button } from '../../shared/components/Button'; import { formatCurrency } from '../../shared/utils/formatters'; import { ChefHat } from 'lucide-react'; import { Modal } from '../../shared/components/Modal'; export const RecipesView: React.FC = () => { const [recipes] = useState(INITIAL_RECIPES); const [selectedRecipe, setSelectedRecipe] = useState(null); return (

Технологические карты & Калькуляция (BOM)

Нормы расхода сырья, расчет food cost %, плановая себестоимость и маржинальность

{recipes.map((rec) => (
setSelectedRecipe(rec)} className="p-4 rounded-xl border border-krona-border bg-krona-surface hover:border-krona-border-strong shadow-krona-soft cursor-pointer transition-all space-y-3" >

{rec.name}

Выход: {rec.yieldWeight} • {rec.category}
Food Cost: {rec.foodCostPercent}%
Себестоимость: {formatCurrency(rec.primeCost)}
Цена продажи: {formatCurrency(rec.sellingPrice)}
Маржа (руб): {formatCurrency(rec.marginRub)}
Ингредиенты ({rec.ingredients.length}): {rec.ingredients.map((i) => i.name).join(', ')}
))}
{/* Recipe Detail Modal */} {selectedRecipe && ( setSelectedRecipe(null)} title={`Техкарта: ${selectedRecipe.name}`} subtitle={`Выход готового блюда: ${selectedRecipe.yieldWeight}`} maxWidth="lg" footer={ } >
Цена в меню: {formatCurrency(selectedRecipe.sellingPrice)}
Себестоимость: {formatCurrency(selectedRecipe.primeCost)}
Food Cost %: {selectedRecipe.foodCostPercent}%
Маржинальный доход: {formatCurrency(selectedRecipe.marginRub)}
Расход сырья и калькуляция:
{selectedRecipe.ingredients.map((ing, i) => ( ))}
Ингредиент Брутто Нетто Стоимость
{ing.name} {ing.gross} {ing.net} {formatCurrency(ing.cost)}
)}
); };