# PRD — SPEC Cardápio (Menu domain) | Campo | Valor | |-------|--------| | **Produto** | Pizza Digital | | **Versão app auditada** | v0.5.0 | | **Ambiente** | https://pizza.itecnologys.com · VM125 · loja `pizza-digital-piloto` | | **Spec de origem** | `docs/SPEC-CARDAPIO.md` | | **Módulo** | Domínio Menu* + tamanhos + modifiers | | **Rotas UI** | `/pdv` · Admin | | **APIs** | `/api/menu/*` | | **Data** | 2026-11-09 | | **Estilo** | PRD operacional detalhado (visão de desenvolvedor) | | **Audiência** | Dev / QA / Product | > Como ler: cada seção descreve o **processo real** (o que o sistema faz hoje), > com passos de usuário, chamadas de API, regras de negócio e estados. > Status: ✅ construído · ⚠️ parcial · ⏳ especificado / não entregue · 🐛 gap observado. ## 1. Contrato do domínio (dev) ```text MenuCategory 1─N MenuItem MenuItem N─N Station (MenuItemStation) MenuItem 1─N RecipeLine (BOM) → Ingredient PizzaSizeBase (catálogo de tamanhos da loja) ``` `stockMode`: `none|bom|sku` — cardápio não guarda saldo. ## 2. Processos ### Listagem PDV `GET /api/menu` → categories+items ativos + pizzaSizes. ### Tamanhos `GET /api/menu/sizes` lê `PizzaSizeBase`. ### CRUD Gestor: create/patch/delete categories & items (Roles/capabilities). ### Ficha `GET /api/menu/ficha-meta` apoia edição de BOM. ## 3. Regras RF-MEN (status) - RF-MEN-01 CRUD ⚠️ parcial UI - RF-MEN-02 map estações ✅ - RF-MEN-05 meia-a-meia/split ✅ - RF-MEN-04 PWA ⏳ - RF-MEN-06/07 horário/áreas ⏳ (zonas em `/admin/zonas`) ## 4. Walkthrough teste QA 1. Login gestor 2. Listar menu via API — esperar Tradicionais/Da casa/Doces/bebidas 3. PDV: montar Grande 2 sabores — preço = max*1.0 4. PDV: Broto 2 sabores — deve bloquear (max=1) ## 5. MenuService — métodos `getStore` · `listStations` · `listMenu` · `fichaMeta` · CRUD category/item · replaceRecipeLines. Teste automatizável: login → GET menu → assert categories includes Tradicionais/Da casa.