Reservas de estoque
Dúvida: o que é reserva, quem cria, e por que o ATP some com o pedido em aberto.
Dúvida: como funciona a reserva de estoque?
Ambiente: Estoque → Operações → Movimentação → Reservas (/apps/stock/reservations). Tabela FARES01.
A reserva não é um FAPOB. Ela empenho quantidade para um documento. Disponível para nova venda = físico (ou lotes ACTIVE) − reservas ACTIVE.
Quem cria reserva
Origem (originType) | Quando |
|---|---|
SALES_ORDER | create/update de pedido (não orçamento) |
PRODUCTION_ORDER | OP com empenho de MP (flag de lote: lot_id) |
TRANSFER | quando o fluxo empenha origem |
MANUAL | botão Nova nesta tela |
Campos na tela / grade
| Campo | Significado |
|---|---|
| Produto | código |
| Quantidade | reservedQuantity |
| Local | armazém |
| Lote | lotCode / lot_id (FEFO) |
| Origem | tipo + originDocument |
| Status | ACTIVE · CONSUMED · CANCELLED · EXPIRED |
| Expira em | expirationDate — vencida deve ser cancelada (job); libera saldo |
Também existem consumedQuantity e backordered_quantity (pedido acima do físico, só se a filial permitir backorder).
Passo a passo (reserva manual)
- Nova → produto, quantidade, local, validade.
- Grava
ACTIVE. - Consumir / Cancelar na linha (a UI chama o context
consumeReservation/cancelReservation).
Pedido: ao faturar, a reserva é consumida na baixa. Ao cancelar o pedido, a reserva é liberada. Orçamento não reserva. Conversão orçamento → pedido aplica estoque se validateStockOnQuoteConversion (default true). Pedido → orçamento libera reserva.
Relação com ATP
Fórmula completa: Saldo e ATP. Pedido aberto de 200 UN com estoque 180: disponível 0 (ou backorder se política permitir). FEFO reserva com lot_id quando industrial.lot-enforcement está on.
Erros comuns
| Sintoma | Causa |
|---|---|
| Tem saldo no kardex e o pedido recusa | reserva de outro PV/OP no mesmo SKU+local |
| Orçamento “comeu” estoque | não deveria; se reservou, o documento já era PEDIDO |
| Lote errado no faturamento | reserva sem lot_id com flag de lote ligada |
