obsidian-vault/Pizza-Digital/docs/PRD-CARDAPIO-JOINVILLE.md

8.1 KiB
Raw Blame History

PRD — Cardápio Joinville (o que a plataforma faz)

Campo Valor
Produto Pizza Digital
Módulo Cardápio / Menu (pesquisa regional → operação)
Fonte Spec CARDAPIO-JOINVILLE.md · SPEC-CARDAPIO.md
Ambiente auditado https://pizza.itecnologys.com · VM125 · v0.5.0
Loja piloto Pizza Digital Joinville (pizza-digital-piloto)
Data auditoria 2026-11-09
Tipo PRD operacional (Spec × construído × passos de uso)

1. Entendimento da demanda

Documentar cada Spec não só como intenção, mas como PRD da plataforma real:

  1. Ler a Spec / pesquisa
  2. Inspecionar o que está construído (UI + API + banco)
  3. Descrever passo a passo o que o usuário faz
  4. Marcar o que já funciona, o que é parcial e o que falta

Este arquivo é o exemplo-piloto usando CARDAPIO-JOINVILLE.md.


2. Problema e objetivo

Problema

Pizzarias de Joinville vendem com nomenclatura inconsistente de tamanhos, sabores regionais e preços locais. Sem um cardápio único, PDV/KDS/canais divergem.

Objetivo do módulo (construído)

Ser a fonte da verdade do que a loja vende no piloto Joinville: categorias, itens, preços base (Grande), tamanhos no pedido, split de sabores e acompanhamentos — alimentando o PDV e, depois, KDS/Central.

Fora deste PRD

Saldo de estoque, NF, inventário → SPEC-ESTOQUE.md / SmartStock.


3. O que a pesquisa Joinville definiu vs o que existe hoje

Tema (CARDAPIO-JOINVILLE) Spec / pesquisa Construído na plataforma (2026-11-09) Status
6 tamanhos (Broto→Família) cm, fatias, sabores máx., fator preço Tabela PizzaSizeBase com 6 sizeCodes ativos ✅
Preço base = Grande 40 cm Sim MenuItem.priceCents = preço Grande; PDV multiplica por priceFactor ✅
Split = maior sabor × fator Sim Sheet do PDV: escolhe tamanho + N sabores até maxFlavors ✅
Tradicionais alta rotação Lista ~20 sabores Cat. Tradicionais · 20 ativos (Calabresa, Mussarela, Frango Catupiry…) ✅
Regionais SC Joinville, Linguiça Blumenau, Aipim, Catarina Cat. Da casa · 6 ativos (+ Aipim Blumenau, Coração) ✅
Doces 6 tipos Cat. Doces · 6 ativos (Broto legado inativo) ✅
Bebidas / sucos / energéticos / vitaminas Tabelas de mercado 4 categorias · 57 itens ativos ✅
Bordas Catupiry/Cheddar ~R$12–20 Cat. Bordas especiais · 3 itens ✅
SKU Broto separado Evitar no piloto Cat. legado Pizzas Broto · active=false · 5 itens inativos ✅ (legado)
Cardápio público PWA /c/:slug Track C1 Ainda não é o foco deste PRD ⏳
CRUD gestor no Admin RF-MEN-01 API CRUD existe; UI Admin menu ⚠️ parcial

Inventário real (banco piloto)

Categoria Ativos Inativos
Tradicionais 20 1
Da casa 6 0
Doces 6 1
Refrigerantes 23 0
Sucos 14 0
Energéticos 8 0
Vitaminas · frutas c/ leite 12 0
Bordas especiais 3 0
Pizzas Broto (legado) 0 5
Total 92 7

Tamanhos reais (PizzaSizeBase)

sizeCode Nome cm Fatias Sabores máx. Fator
broto Broto 25 4 1 0,55
pequena Pequena 30 6 1 0,70
media Media 35 8 2 0,85
grande Grande 40 12 3 1,00
gigante Gigante 45 16 4 1,20
familia Familia 50 20 4 1,35

4. Personas e telas

Persona Onde usa o cardápio Rota
Atendente PDV Monta pedido a partir do cardápio /pdv
Gestor CRUD categorias/itens (API/Admin) /admin · /api/menu/*
Cliente (futuro) Cardápio digital /c/:slug (Track C)
Cozinha Não edita cardápio; recebe itens mapeados a estações /kds/*

5. Fluxo passo a passo — Atendente no PDV (construído)

Caminho feliz: pizza com tamanho + split + bebida → enviar à cozinha.

Passo 1 — Entrar

  1. Abrir https://pizza.itecnologys.com/login
  2. Usar demo: pdv@pizza.local / 805353 (loja pizza-digital-piloto)
  3. Ir em PDV

Passo 2 — Tipo de fulfillment

  1. Escolher Entrega, Balcão ou Mesa
  2. Se Entrega: preencher Cliente, Telefone, Bairro, Endereço
  3. Opcional: observações e flag Urgente

Passo 3 — Escolher item do cardápio

  1. Navegar nas categorias (Tradicionais, Da casa, Doces, Refrigerantes…)
  2. Tocar num item
  3. Se o item é pizza (halfHalf=true): abre sheet de montagem
  4. Se é bebida/extra: adiciona linha direta ao pedido

Passo 4 — Montar pizza (regra Joinville)

  1. Escolher tamanho (Broto…Família) na grade
  2. Sistema limita sabores pelo maxFlavors do tamanho
  3. Selecionar 1..N sabores (split)
  4. Preço unitário = maior priceCents entre sabores × priceFactor do tamanho
  5. Opcional: borda especial
  6. Confirmar → linha no “Pedido atual” com nome tipo:
    Pizza Grande 40cm · Calabresa / Mussarela

Passo 5 — Enviar à cozinha

  1. Revisar linhas e total
  2. Enviar pra cozinha
  3. Pedido entra na Central /pedidos e gera tickets KDS conforme estações do item

6. Fluxo passo a passo — Gestor (API / Admin)

Listar cardápio

GET /api/menu (JWT) → { pizzaSizes, categories[] } com itens ativos.

Tamanhos

GET /api/menu/sizes → catálogo PizzaSizeBase.

CRUD (RF-MEN-01 — parcial na UI)

  • POST/PATCH/DELETE /api/menu/categories
  • POST/PATCH/DELETE /api/menu/items
  • Campos relevantes: name, priceCents, halfHalf, active, stockMode, estações, ficha (BOM)

Regra de negócio congelada (piloto)

  1. Preço catalogado = Grande
  2. Broto/Pequena = 1 sabor (inteira)
  3. Média ≤2 · Grande ≤3 · Gigante/Família ≤4
  4. Split cobra o maior sabor
  5. Cardápio não guarda saldo — ponte via stockMode + ficha

7. Arquitetura funcional (como a plataforma liga as peças)

CARDAPIO-JOINVILLE.md (pesquisa)
        │
        ▼
 seed / MenuCategory + MenuItem + PizzaSizeBase
        │
        ├─► PDV sheet (tamanho × sabores × fator)
        ├─► OrderItem (sizeCode, halfHalf, preço calculado)
        ├─► KDS (estações do MenuItem)
        └─► Estoque (BOM / RecipeLine) — SPEC irmã

8. Critérios de aceite (PRD)

# Critério Evidência Status
CA-01 Existem ≥6 tamanhos com fator e max sabores PizzaSizeBase ✅
CA-02 Catálogo Joinville com tradicionais + SC + doces + bebidas 92 ativos ✅
CA-03 PDV calcula preço por tamanho a partir da base Grande PdvPage priceForSize ✅
CA-04 PDV impede ultrapassar max sabores do tamanho validação sheet ✅
CA-05 API menu autenticada por loja /api/menu ✅
CA-06 Categoria Broto legado não aparece como catálogo ativo active=false ✅
CA-07 PDV mostra categorias/itens ao operador logado UI /pdv ⚠️ a validar (em 2026-11-09 UI mostrou “Nenhuma categoria…” apesar da API OK — possível bug de fetch/cache)
CA-08 PWA cardápio público Track C ⏳

9. Gaps e próximos passos

  1. Investigar PDV sem categorias na UI enquanto API retorna 8 cats / 92 itens
  2. Completar UI Admin de CRUD alinhada ao RF-MEN-01
  3. Expor cardápio no canal digital (SPEC-CANAIS)
  4. Ligar indisponibilidade a Estoque (esgotado / pausado)
  5. Repetir este formato de PRD para as demais Specs (KDS, Despacho, Matriz, etc.)

10. Referências

— PRD gerado a partir de Spec + auditoria da plataforma · iTecnologys