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