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

6.7 KiB
Raw Permalink Blame History

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)

# 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)

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)

         ┌─────────────────────────────────────────┐
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 ☐