Transferência entre armazéns
Dúvida: como transferir saldo de um local para outro na mesma filial.
Dúvida: como transferir produto entre armazéns?
Ambiente: Estoque → Operações → Movimentação → Transferências (/apps/stock/transfers). Não transfere entre filiais.
Pré-requisitos: dois armazéns ativos na mesma filial; saldo suficiente na origem (salvo política de negativo da filial, padrão não permite); permissão transferencias.
Caminho na tela
- Nova Transferência.
- Campos do cabeçalho:
| Campo | Obrigatório | Nota |
|---|---|---|
| Origem | sim | SearchField de local |
| Destino | sim | diferente da origem |
| Solicitante | não | funcionário |
| Observações | não | |
| Itens | sim | produto + quantidade (UM de estoque) |
- Salvar → status
DRAFT. Ainda não há FAPOB. - Na grade: Aprovar (
DRAFT→APPROVED). Continua sem movimento. - Concluir (
APPROVED→COMPLETED) —POST /stock-transfer/execute/:id. Aí o Core grava os movimentos. - Cancelar vale em
DRAFTeAPPROVED.COMPLETEDnão volta pelo botão da lista.
Abas da lista: Todas, Rascunho, Aprovadas, Concluídas, Canceladas. Visualizar: /apps/stock/transfers/[id].
O que o sistema grava ao concluir
- Um
FAPOBsaída (S) no local origem, origemTRANSFER. - Um
FAPOBentrada (E) no local destino, mesma quantidade e mesmodocument(código da transferência). - Custo da saída via FIFO na origem; a entrada no destino herda o custo do movimento (não “zera” o custo).
- Com lote: a transferência deve carregar
lot_idquando o SKU temlotControle a flag de lote está ligada (senão o lote some no destino).
Regras
- Mesma empresa/filial. Locais diferentes.
- Estorno de transferência não é “apagar linha”: use movimento de volta ou ajuste, conforme o caso. Estorno genérico:
POST /stock/reverse/:movementIdcom motivo, se o saldo permitir.
API
| Método | Rota | Quando |
|---|---|---|
GET | /stock-transfer/:filialId | lista (status, page, limit) |
GET | /stock-transfer/detail/:id | detalhe |
POST | /stock-transfer/:filialId | cria rascunho |
PATCH | /stock-transfer/:id | edita rascunho |
DELETE | /stock-transfer/:id | exclui rascunho |
POST | /stock-transfer/approve/:id | aprova (approvedBy) |
POST | /stock-transfer/execute/:id | conclui e lança estoque |
Erros comuns
| Sintoma | Causa |
|---|---|
| Salvou e o kardex não mudou | ficou em rascunho ou só aprovada — falta Concluir |
| Recusa por saldo | origem sem disponível (reserva de pedido come o ATP) |
| Tentou outra filial | bloqueado de propósito |
