pizza-digital/docs/PROMPT-CENTRAL-PEDIDOS.md
Admin d669f56398 Import Pizza Digital SPECs and docs from Obsidian vault sync
Co-authored-by: Cursor <cursoragent@cursor.com>
2026-11-09 19:52:34 +00:00

161 lines
6.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Context Prompt — Central de Pedidos (Cursor)
> Cole o bloco **PROMPT** abaixo num chat Cursor (Agent) no repo `pizza-digital`.
> Spec: `SPEC.md` §5.5 · `docs/SPEC-CANAIS-DIGITAIS.md` · RF-PED / RF-CAN
> Código base: `apps/web/src/PedidosPage.tsx` · rota `/pedidos`
---
## PROMPT (copiar daqui)
```text
# Missão
Construir / evoluir o módulo **Central de Pedidos** do produto **Pizza Digital**
(rota `/pedidos`) — o quadro operacional único da loja, estilo CityFoods.
PT-BR em toda UI e comentários de produto. Código TS em inglês.
# Contexto do produto
Pizza Digital = SO da cozinha + delivery próprio (não é marketplace).
Referência UX: CityFoods — Cozinha Digital + quadro Pedidos (`@cityfoods_app`).
A Central de Pedidos é o **hub pós-login**:
- Staff entra → `/pedidos` (não /pdv)
- CTA **+ Novo** → PDV (`/pdv`) para digitar pedido
- Pedidos de **qualquer canal** (PDV, cardápio digital, WhatsApp, iFood, telefone)
caem no **mesmo Order** e aparecem neste quadro
- Daqui a loja vai para KDS, etiqueta e despacho
Regra de ouro (SPEC §5.5):
> Nenhum canal tem UI de cozinha própria — tudo passa pelo Order bus e pelo `/pedidos`.
# Dimensões de pedido (alvo — migrar do `channel` legado)
origin: "pdv" | "cardapio" | "ifood" | "whatsapp" | "telefone"
fulfillment: "entrega" | "retirada" | "mesa"
Legado atual (Prisma `OrderChannel`):
delivery → origin=pdv, fulfillment=entrega
balcao → origin=pdv, fulfillment=retirada
pdv → origin=pdv, fulfillment=mesa
UI do card:
- Faixa colorida = fulfillment (ENTREGA / RETIRADA / MESA) + código curto
- Badge secundário = origin (CARDÁPIO / IFOOD / WHATSAPP / PDV / TELEFONE)
# Stack (não trocar)
- Monorepo: apps/api (NestJS + Prisma + Socket.io) · apps/web (React + Vite + TS)
- DB: PostgreSQL · Redis · Docker na VM 125
- Auth: JWT via `useAuth` / `authFetch`
- Realtime: Socket.io eventos `order.created` | `order.updated` | `order.ready` | `ticket.bumped`
- Host: https://pizza.itecnologys.com · path /pedidos
# Arquivos-chave (ler antes de editar)
- SPEC.md (§5.5, §6.1, §7.1 RF-PED, §7.8 RF-CAN, §10)
- docs/SPEC-CANAIS-DIGITAIS.md
- apps/web/src/PedidosPage.tsx ← tela Central
- apps/web/src/PdvPage.tsx ← + Novo
- apps/web/src/App.tsx ← login → /pedidos
- apps/web/src/styles.css ← classes .pedidos-*
- apps/web/src/channelLabel.ts
- apps/api/prisma/schema.prisma ← Order ainda tem `channel`
- apps/api (módulo orders + gateway WS)
# Estado atual (já no ar)
- Skin CityFoods: header Pedidos / + Novo, chips de tags, grid de cards, aside Histórico
- WS refresh no board
- Filtro ACTIVE = confirmado | em_producao | pronto
- channelTag mapeia delivery/balcao/pdv → ENTREGA/RETIRADA/MESA (ainda via `channel`)
- Marcar pronto, link etiqueta, link KDS
- Ainda NÃO há: origin/fulfillment no schema, badge de origem, som de novo pedido digital,
filtros por fulfillment/origin, cancelar/editar no card, som + highlight de pedido novo
# O que construir nesta sessão (Central de Pedidos — pacote board)
## P0 — modelo + API
1. Migrar Order: adicionar `origin` + `fulfillment` (manter `channel` deprecated ou mapear na leitura)
2. Create/list orders aceitam e devolvem origin/fulfillment
3. Compat: PDV continua mandando channel legado → API normaliza para origin+fulfillment
4. WS payload inclui origin + fulfillment
## P1 — UI Central `/pedidos`
1. Card: faixa = fulfillment; badge = origin (CARDÁPIO / IFOOD / …)
2. Som + flash no card quando `order.created` (especialmente origin digital)
3. Filtros: Todos | Entrega | Retirada | Mesa + opcional por origin
4. Ordenação: horário (default) | nº pedido | urgente primeiro
5. Histórico lateral: últimos prontos/em_rota/entregue com origin
6. Ações no card: ✓ pronto (se em_producao) · etiqueta · abrir KDS · (depois) cancelar
7. Empty state: “Nenhum pedido” + CTA + Novo
8. Touch-first, legível a 1 m; pt-BR; R$ via money.ts
## P2 — ponte canais (não implementar cardápio inteiro aqui)
- Garantir que POST /api/orders com origin=cardapio|ifood|whatsapp aparece no board ≤ 500 ms
- Badge correto; fulfillment escolhido pelo cliente
- Stub: endpoint/fixture que simula pedido digital para testar o board sem PWA
# UX CityFoods a preservar
- Faixa ENTREGA/RETIRADA no topo do card
- Tags de sabor/components sob o item
- “Preparo tardio” se em_producao > 20 min
- Histórico com check à direita
- + Novo em destaque no header
- Sem dashboard genérico; um quadro operacional
# Critérios de aceite
1. Login → /pedidos abre o quadro
2. + Novo → /pdv → criar pedido → volta a aparecer no quadro via WS sem F5
3. Pedido simulado origin=cardapio mostra badge CARDÁPIO + faixa ENTREGA/RETIRADA
4. Latência visual ≤ 500 ms após order.created
5. KDS e etiqueta continuam funcionando a partir do mesmo Order
6. Mobile/tablet: cards usáveis com dedo; sem regressão no PDV
# Fora de escopo nesta sessão
- PWA cardápio /c/:slug completo (Track C1.1–C1.3 — sessão separada)
- Webhook iFood real (C2)
- Rotas / ORS / motoboy
- Redesign do KDS
- Multi-tenant SaaS
# Como trabalhar
1. Ler SPEC §5.5 + PedidosPage + schema Order
2. Mudar uma fatia por vez (schema → API → UI → fixture digital)
3. Não inventar libs novas; seguir padrões Nest/React do repo
4. Depois de UI: rebuild web se deploy Docker; validar /pedidos
5. Atualizar docs/SPEC-CANAIS-DIGITAIS.md se fechar um critério C1.x
Comece pelo gap origin/fulfillment (API + badges no PedidosPage). Mostre o plano curto e implemente.
```
---
## Prompt curto (follow-up / hillclimb)
```text
Continua a Central de Pedidos (/pedidos) no Pizza Digital.
SPEC §5.5 · origin×fulfillment · badge origem · WS ≤500ms · CityFoods skin.
Não faça o cardápio PWA agora — só o board + normalização do Order.
Arquivo principal: apps/web/src/PedidosPage.tsx + orders API + prisma Order.
```
---
## Mapa mental (1 tela)
```text
┌─────────────────────────────────────────┐
Canais → │ CENTRAL DE PEDIDOS /pedidos │ → KDS
│ + Novo → PDV │ → Etiqueta
│ cards: fulfillment + badge origin │ → Despacho
└─────────────────────────────────────────┘
```
## Checklist de sessão
| # | Item | Done |
|---|------|------|
| 1 | `origin` + `fulfillment` no Prisma/API | ☐ |
| 2 | Badges no card PedidosPage | ☐ |
| 3 | Som/flash `order.created` | ☐ |
| 4 | Filtros fulfillment | ☐ |
| 5 | Fixture pedido digital | ☐ |
| 6 | Aceite WS ≤ 500 ms | ☐ |