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