Gerenciamento de Cardápio
Visão Geral
Permite gerenciar categorias e itens do cardápio do restaurante.
Localização
frontend-react/src/views/admin/MenuManagementView.tsx
Funcionalidades
Categorias
- Criar categorias
- Ordenar categorias (drag-and-drop)
- Ativar/desativar categorias
- Editar nome
Itens
- Criar itens com:
- Nome
- Descrição
- Preço
- Imagem
- Tempo de preparo (minutos)
- Ativar/desativar itens
- Editar detalhes
Estrutura
Cardápio
├── Categoria 1
│ ├── Item A
│ └── Item B
├── Categoria 2
│ └── Item CCampos do Item
| Campo | Tipo | Descrição |
|---|---|---|
| name | string | Nome do item |
| description | string | Descrição detalhada |
| price | number | Preço em centavos |
| image | string | URL da imagem |
| category | ObjectId | Categoria relacionada |
| preparationTime | number | Tempo em minutos |
| isAvailable | boolean | Disponibilidade |
Insumos do Prato (Ficha Técnica)
O painel Insumos do Prato aparece no formulário de edição de um item existente (não visível ao criar um novo item — salve primeiro).
Cabeçalho do painel
O cabeçalho exibe "Insumos do Prato (N)" onde N é a contagem de ingredientes já vinculados. Quando não há nenhum vínculo, o badge não aparece.
Linha de ingrediente
Cada linha da tabela de insumos exibe:
| Elemento | Descrição |
|---|---|
| Nome / SKU | Nome do item de estoque |
| Quantidade | Quantidade consumida por porção do prato |
| Unidade | Rótulo da unidade (ex: kg, un, l) |
| Pill de estoque | Indicador colorido em tempo real: vermelho (sem estoque), âmbar (abaixo do mínimo), cinza (ok) |
| Botão remover | Remove o vínculo (não apaga o item de estoque) |
O pill mostra 📦 X un com a availableQuantity atual do ingrediente.
Adicionar ingrediente
- No dropdown "Selecionar insumo", escolha o item de estoque
- Ao selecionar, o campo de unidade ao lado do input de quantidade é preenchido automaticamente
- Informe a quantidade por porção (ex:
0.2para 200 g) - Clique em + Adicionar
Loading e estado vazio
- Enquanto os ingredientes são carregados, o painel exibe um skeleton animado (3 linhas)
- Se não houver nenhum insumo vinculado, aparece um texto descritivo explicando que nenhum insumo foi adicionado ainda
Prioridade
Se um item tiver ficha técnica (insumos via este painel), o campo Item de Estoque simples (vínculo 1:1) é ignorado. A ficha técnica tem prioridade.
Importação de Cardápio via IA
A funcionalidade de Importação IA permite criar dezenas de itens de cardápio de uma vez a partir de um cardápio existente em papel, foto ou texto.
Rota: /t/:slug/admin/menu/import
View: frontend-react/src/views/admin/MenuImportView.tsx
Fluxo de importação
Fase 1 — Upload:
- Cole o texto do cardápio ou faça upload de um arquivo (foto, PDF,
.txt) - Clique em Analisar com IA
- O backend envia para Claude Haiku:
POST /t/:slug/onboarding/menu/import - O modelo retorna um array de itens parseados com categoria, nome, descrição, preço e confiança
Fase 2 — Revisão:
Uma tabela exibe todos os itens parseados. Para cada item:
| Coluna | Descrição |
|---|---|
| Confiança | Indicador verde/âmbar/vermelho (Alta / Média / Baixa) |
| Categoria | Editável inline |
| Nome | Editável inline |
| Descrição | Editável inline |
| Preço | Editável inline (R$) |
| Selecionado | Checkbox — selecione os itens a importar |
Por padrão, apenas itens de alta confiança são pré-selecionados. Itens de baixa confiança precisam de seleção manual após revisão.
Fase 3 — Confirmação:
Clique em Importar N itens selecionados. O sistema:
- Cria categorias novas automaticamente (ou reutiliza existentes pelo nome)
- Cria os
MenuItempara cada item selecionado - Redireciona para
/admin/menucom toast de confirmação
Indicadores de confiança
| Cor | Nível | Critério |
|---|---|---|
| Verde | Alta | Nome, preço e categoria identificados com certeza |
| Âmbar | Média | Algum campo incerto ou ambíguo |
| Vermelho | Baixa | Dados incompletos — revisar antes de importar |
Backend
| Arquivo | Descrição |
|---|---|
backend/src/tenants/onboarding.service.ts → importMenuFromAi() | Envia para Claude Haiku, parseia JSON |
backend/src/tenants/onboarding.controller.ts → POST menu/import | Aceita file (multipart) ou hint (texto) |
backend/src/tenants/onboarding.controller.ts → POST menu/apply-import | Cria categorias + itens |
frontend-react/src/components/onboarding/MenuImportPreviewTable.tsx | Tabela de revisão com edição inline |