# SPEC — KDS PEGAR (claim) + pooling | Campo | Valor | |-------|--------| | **Produto** | Pizza Digital | | **Capítulo** | RF-KDS claim exclusivo | | **Versão** | 0.2.0 | | **Data** | 2026-10-20 | | **Owner** | Roger / iTecnologys | | **UI** | `/kds/:station` | | **API** | `POST /api/kds/:station/claim/:orderId` | --- ## 1. Objetivo Na fila comum, o operador **não puxa o ticket no primeiro clique**. PEGAR abre confirmação com: - **nome do operador** logado - **nome da dona da pizza** (cliente) - pedido `#código`, estação, itens Só `Confirmar — é minha` dispara o claim exclusivo. --- ## 2. Regras 1. Fila comum: todos veem tickets `view=pool` (`canClaim`). 2. Clique PEGAR → modal; **não** chama a API ainda. 3. Confirmar → `POST …/claim/:orderId` (uma estação ganha; demais veem bloqueado). 4. Cancelar / clique fora fecha o modal. 5. Ticket mostra pill **Pizza de {primeiro nome}**. 6. Contadores: fila comum / comigo / outras estações. --- ## 3. Pooling (tempo real + backup) | Fonte | Comportamento | |-------|----------------| | Socket.io | `order.*` / `ticket.bumped` com debounce 180 ms | | Poll backup | 10 s se socket ao vivo; **3 s** se offline | | Aba oculta | não polla | | Foco / visível | recarrega na hora | RF-KDS-02 (WS sem polling) continua o caminho feliz; o poll é **rede de segurança** para TV/tablet com socket instável. --- ## 4. Copy da confirmação ```text Confirmar PEGAR Pedido #A12 {Operador} vai pegar a pizza de {Dona}? Operador {user.name} Dona da pizza {shortCustomerName} Estação Massa | Montagem | … Itens 1× Calabresa G, … [Cancelar] [Confirmar — é minha] ``` --- ## 5. Requisitos | ID | Requisito | Status | |----|-----------|--------| | RF-KDS-C1 | Claim exclusivo por estação (0.2.4) | **feito** | | RF-KDS-C2 | Modal PEGAR com operador + dona da pizza | **feito** | | RF-KDS-C3 | Poll backup + debounce + visibility | **feito** | | RF-KDS-C4 | Contadores de pool / mine / locked | **feito** | --- *Satélite. Claim original: CHANGELOG 0.2.4. Produto pai: SPEC.md v0.3.5.*