# Changelog — SPEC Pizza Digital ## 0.6.0 — 2026-10-22 - **Demo Operação:** [`SPEC-SIM-OPS-DEMO.md`](SPEC-SIM-OPS-DEMO.md) · UI `/sim` · API `/api/sim/*` - Motor: entrada Aplicativo/WhatsApp/Telefone · KDS pizzaiolos · estufa · rotas · ETA entrega - 15 motoboys SIM · até 2000 ops/dia · prep cap 165 min · Joinville · Limpar dados teste ## 0.5.0 — 2026-10-22 - **Paridade 3 vídeos CityFoods:** [`SPEC-CITYFOODS-VIDEO-PARITY.md`](SPEC-CITYFOODS-VIDEO-PARITY.md) **v0.1.0** - Gap: mapa full-bleed, CTA **Ir para entrega**, rastreio multi-motoboy, pin some ao entregar, filtro forno por sabor - UI manda sobre painel lateral do Gestor de Rotas (dados/API `/api/routes/*` permanecem) - P0 desta release: rebuild `/despacho` mapa-first (RF-VID-01…08) ## 0.4.0 — 2026-10-22 - **Gestor de Rotas (CityFoods):** [`SPEC-DESPACHO-CITYFOODS-PARITY.md`](SPEC-DESPACHO-CITYFOODS-PARITY.md) **v0.2.0** - Fluxo: Montar rota → Despachar → mapa permanente → Motoboy (a caminho/entregue) → fechar - Dados: `DispatchBatch` / `DispatchStop` · `Order.batchId` · ping `Driver.lastLat/Lng` - API `/api/routes/*` · UI `/despacho` + `/motoboy` · SPEC mãe §15 S7/S8 → ✅ parcial - P0–P2 despacho/estufa/frota/zonas/ops documentados no baseline; próximo = iFood (P3) ## 0.3.4 — 2026-10-19 - Origem **Cardápio** renomeada na UI para **Aplicativo** (enum interno `cardapio`) - **API WhatsApp inbound v0.1:** `POST /api/inbound/whatsapp` + webhook Meta `GET/POST …/meta` - Auth `X-Api-Key` (`INBOUND_API_KEY`) · idempotência `Order.inboundKey` - Doc: [`API-WHATSAPP-INBOUND.md`](API-WHATSAPP-INBOUND.md) ## 0.3.3 — 2026-10-19 - **Tamanhos + split no pedido:** Broto / Pequena / Média / Grande / Gigante / Família - Regras: Broto+Pequena = 1 sabor · Média ≤2 · Grande ≤3 · Gigante+Família ≤4 - cm / fatias / referência em pratos de mesa · `GET /api/menu/sizes` · sheet PDV - Preço = maior sabor × fator do tamanho (base = Grande 40cm) - Seed: sabores sem sufixo G; SKUs Broto legados desativados ## 0.3.2 — 2026-10-19 - **Matriz de Acesso MVP:** [`SPEC-MATRIZ-ACESSO.md`](SPEC-MATRIZ-ACESSO.md) - UI `/acessos` · API `/api/access/*` · templates ≠ vínculos efetivos - Caps: `menu.*` · `staff.*` · `permissions.manage` · `owners.manage` · `finance.view` - Auditoria proposta `AccessAuditLog` · migração `20261019190000_access_matrix` ## 0.3.1 — 2026-10-19 - SPECs irmãs: [`SPEC-CARDAPIO.md`](SPEC-CARDAPIO.md) ↔ [`SPEC-ESTOQUE.md`](SPEC-ESTOQUE.md) - Ponte obrigatória: `stockMode` (`bom`/`sku`/`none`) + ficha técnica (BOM) - RF-MEN-08…12 · **RF-EST-01…08** (Track M/E) - Domínio: Recipe, Ingredient, StockMovement - Pesquisa regional mantida em [`CARDAPIO-JOINVILLE.md`](CARDAPIO-JOINVILLE.md) - **Quantização por peso:** 38 pizzas com BOM em gramas — [`FICHAS-TECNICAS-PESO.md`](FICHAS-TECNICAS-PESO.md) + [`data/fichas-pizzas-peso.json`](data/fichas-pizzas-peso.json) · RF-EST-13…15 · RF-MEN-15 ## 0.3.0 — 2026-10-19 - **Prioridade de produto:** entrada por canais digitais (pós-piloto S5) - Novo capítulo **§5.5** — origin × fulfillment, quadro único `/pedidos`, Track C1/C2 - Documento satélite [`docs/SPEC-CANAIS-DIGITAIS.md`](SPEC-CANAIS-DIGITAIS.md) - RFs: RF-CAN-01…08 · RF-PED-08/09 · RF-MEN-04/06/07 · RF-INT-01/03/05 - Fase 3 e S9 alinhados a Track C (cardápio → `/pedidos`; iFood = C2) - Fluxo §6.1: canais digitais + PDV → Order Ingest → `/pedidos` → KDS - **Implementado (Central):** `Order.origin`/`fulfillment`, badges + filtros + som no `/pedidos`, `POST /api/orders/demo-digital` ## 0.2.4 — 2026-07-23 - **KDS claim exclusivo (CityFoods):** fila comum → PEGAR → outras estações bloqueadas - API: `POST /api/kds/:station/claim/:orderId`, `POST /api/kds/:station/orders/:orderId/bump` - Campos: `Order.claimedStationId` / `claimedAt` - UI: secções Fila / Comigo / Bloqueados ## 0.2.3 — 2026-07-23 - **S3 entregue:** KDS multi-estação realtime - API: `GET /api/kds/:station`, `POST /api/kds/tickets/:id/bump` - Expedição bloqueada até outras estações concluírem - Auto `order.ready` quando todos os tickets fecham - UI `/kds/:station` + Socket.io (`ticket.bumped`, timers SLA) ## 0.2.2 — 2026-07-23 - **S2 entregue:** PDV + Order/OrderItem/OrderTicket + state machine - API: `POST/GET /api/orders`, `PATCH .../status`, `PATCH .../urgent` - WS: `order.created` / `order.updated` / `order.ready` / `order.canceled` - Gate: `em_producao → pronto` gera `order.ready` (ponte despacho) - UI PDV em `https://pizza.myvexx.com/pdv` ## 0.2.1 — 2026-07-23 - Sequência oficial **S0–S9** congelada (§15) - Prioridade: **KDS multi-estação antes** de delivery/rotas - **rusterando** marcado como referência oficial de dispatch / ORS / driver tour - Capítulo §15.2 Módulo Rotas (CityFoods → Pizza Digital) - Gate: `order.ready` → fila despacho → batch → ORS (S6+) - Design UI: explícito como ainda não congelado (§15.4) - S1 marcado ✅; próximo = S2 (PDV) ## 0.2.0 — 2026-07-23 - Ampliação Fase 1 (`docs/SPEC-FASE1.md`) - Infra: VM 125 `pizza-digital` no Proxmox BIG (`10.10.10.125`) - DNS: `pizza.myvexx.com` → CNAME tunnel Cloudflare (proxied) - Traefik CT114: `pizza.myvexx.com` → `http://10.10.10.125:3000` - Stack Fase 1 congelada (NestJS + React + Postgres + Redis + Socket.io) - Host de desenvolvimento documentado no SPEC principal ## 0.1.0 — 2026-07-23 - Draft inicial do zero - Baseado na Cozinha Digital CityFoods (`@cityfoods_app`) - Referências: kitchenOS, rusterando, URY Mosaic, MaSoVa, Tasty-Station - Escopo MVP: PDV + KDS multi-estação (pizzaria) + etiquetas + métricas - Fases 2–3: rotas, cardápio público, iFood, multi-tenant