Transfere quantidade entre armazéns/endereços
POST/sku/movement/transfer
Move quantidade de um SKU entre dois armazéns ou dois endereços/lotes, gerando duas movimentações vinculadas (saída na origem, entrada no destino). O custo unitário usado em ambas é o custo médio do armazém de origem — ou o valor de CostSet quando a parametrização UseCostFromCostSet está ativa.
Origem e destino precisam estar no mesmo Centro de Distribuição (IDStockKeepingUnitDistributionCenter). O SKU precisa ser do tipo Produto/Variação, Matéria-prima ou Insumo.
Modos de transferência:
- Entre armazéns — envie
IDStockKeepingUnitWarehouseFrom+IDStockKeepingUnitWarehouseTo. O sistema consome lotes na ordem FIFO (mais antigo primeiro) até completarQuantity. Para SKU sem rastreabilidade (Batch = 0) usa o lote padrão. - Entre lotes/endereços — envie
IDBatchFrom+ (IDBatchToouIDStockKeepingUnitLocationTo). Quando vier sóIDStockKeepingUnitLocationTo, o sistema procura um lote compatível no destino (mesma validade/fabricação/comentário) e o reutiliza; se não existir, cria um novo lote. Com a parametrizaçãoKeepUniqueBatchForFiscalConciliationativa, sempre cria um novo lote no destino.
Validações:
- Se a quantidade total do lote origem for menor que
Quantity, devolve[BadRequest] - Quantidade total insuficiente para transferencia. Pode ser contornado comIgnoreBalance=1(query) ou ativandoAllowNegativeBalanceTransfer. - Em transferência entre endereços com SKU rastreável (
Batch = 1), se o endereço destino já tem o mesmo SKU em lote divergente (validade/fabricação/comentário diferentes) e a parametrizaçãoAllowSameItemDifferentBatchSameLocationestá inativa, devolve[BadRequest] - Item possui lotes divergentes no endereço de destino.
Efeitos colaterais:
- Atualiza
StockKeepingUnitBalance(cache de saldo) do SKU no armazém de destino. - Reprocessa pedidos no armazém de destino com status "Falta produto" (e equivalentes —
IDStatusOrder IN (11, 12, 24)), limpandoQuantityNonconformityà medida que a quantidade transferida cobre as faltas, e devolvendo o pedido aIDStatusOrder = 1(Fechado) quando todos os itens voltam a ter saldo. Cada alteração gera evento de pedido (OrderEvents.IDEvent = 35). - Publica mensagem
SkuBalanceTransferna fila SQSwebhook.fifopara os webhooks da empresa.
Resposta: por padrão devolve as duas movimentações criadas (SkuMovementTransferResponseItem). Quando BatchResponse=1 é enviado na query, devolve a lista completa de lotes ativos do SKU (SkuMovementTransferBatchResponseItem) — útil para o frontend recarregar o painel de saldos sem nova chamada.
Request
Responses
- 200
- 400
- 500
Transferência criada com sucesso. Quando BatchResponse=1, retorna a lista de lotes ativos do SKU; caso contrário, retorna as duas movimentações criadas.
Falha de validação. Possíveis mensagens:
[BadRequest] - Quantidade precisa ser maior que zero—Quantityausente ou zero.[BadRequest] - SKU não existe—IDSkuinválido ou não pertence à conta.[BadRequest] - Item não é do tipo SKU, materia prima ou insumo—IDTypeSkufora de(3, 6, 7).[BadRequest] - Lote origem não existe—IDBatchFrominválido.[BadRequest] - Lote destino não existe—IDBatchToinválido.[BadRequest] - Endereço destino não existe—IDStockKeepingUnitLocationToinválido.[BadRequest] - Armazém origem não existe/[BadRequest] - Armazém destino não existe— armazém inválido ou de outra empresa.[BadRequest] - Centro de distribuição de origem diferente do destino— armazéns/endereços em CDs diferentes.[BadRequest] - Item possui lotes divergentes no endereço de destino e não pode ser transferido— bloqueio quandoAllowSameItemDifferentBatchSameLocationestá inativo.[BadRequest] - Quantidade total insuficiente para transferencia: Origem: X Transferência: Y— saldo insuficiente (libere comAllowNegativeBalanceTransferouIgnoreBalance=1).[BadRequest] - Quantidade insuficiente para transferência— não há lote disponível para consumir no armazém de origem.
Erro interno.