obsidian-vault/Pizza-Digital/docs/PRD/PRD-SPEC-KDS-CLAIM.md

65 lines
2.5 KiB
Markdown

# PRD — KDS Claim (PEGAR) + pooling
| Campo | Valor |
|-------|--------|
| **Produto** | Pizza Digital |
| **Versão app auditada** | v0.5.0 |
| **Ambiente** | https://pizza.itecnologys.com · VM125 · loja `pizza-digital-piloto` |
| **Spec de origem** | `docs/SPEC-KDS-CLAIM.md` |
| **Módulo** | KDS multi-estação clássico |
| **Rotas UI** | `/kds` `/kds/:station` |
| **APIs** | `GET/POST /api/kds/:station*` `/api/kds/ready/*` |
| **Data** | 2026-11-09 |
| **Estilo** | PRD operacional detalhado (visão de desenvolvedor) |
| **Audiência** | Dev / QA / Product |
> Como ler: cada seção descreve o **processo real** (o que o sistema faz hoje),
> com passos de usuário, chamadas de API, regras de negócio e estados.
> Status: ✅ construído · ⚠️ parcial · ⏳ especificado / não entregue · 🐛 gap observado.
## 1. Problema
Sem claim, duas estações pegam o mesmo pedido (CityFoods resolve com PEGAR exclusivo).
## 2. Processo — fila de estação
1. Cozinheiro abre `/kds/:station` (massa|montagem|forno|expedicao…)
2. `GET /api/kds/:station` devolve seções: **Fila / Comigo / Bloqueados**
3. Na Fila, clicar PEGAR **não** claima imediatamente → confirmação (Spec)
4. Confirma → `POST /api/kds/:station/claim/:orderId`
5. Outras estações veem pedido **bloqueado** (`claimedStationId`)
6. Ao concluir → `POST /api/kds/:station/orders/:orderId/bump`
7. Expedição só bumpa quando pré-requisitos ok
8. Ready board: `GET /api/kds/ready/list`
## 3. Processo — pós-pronto
- `POST /api/kds/ready/:orderId/estufa`
- `POST /api/kds/ready/:orderId/dispatch`
- `POST /api/kds/ready/:orderId/deliver`
- `POST /api/kds/ready/batch-dispatch`
## 4. Pooling
Pedidos podem agrupar saída (drawer pooling na UI) antes do despacho.
## 5. Aceite
- ✅ Claim/bump/ready endpoints
- ✅ UI KdsPage seções
- ⚠️ Confirmar UX “confirmação antes do claim” em todos fluxos
## 6. Camada de serviço (KdsService) — claim clássico
Arquivo: `apps/api/src/kds/kds.service.ts` (~1221 linhas)
| Método | Processo |
|--------|----------|
| `stationBoard` | Monta Fila/Comigo/Bloqueados da estação |
| `claim` | Exclusivo: grava claimedStationId/claimedAt; bloqueia peers |
| `bumpOrder` | Avança ticket; pode disparar ready |
| `ensurePrepTasks` | Garante tasks de produção |
| `listReady` | Board de prontos |
| `holdEstufa` | Move para estufa |
| `dispatch` / `batchDispatch` | Sai para despacho |
| `deliver` | Marca entregue no fluxo ready |
### Diálogo tipico Socket
Após claim/bump, server emite eventos para atualizar outras telas KDS sem refresh.