pizza-digital/docs/CHANGELOG-SPEC.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

113 lines
5.6 KiB
Markdown
Raw Permalink 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.

# 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