Pular para o conteúdo principal

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é completar Quantity. Para SKU sem rastreabilidade (Batch = 0) usa o lote padrão.
  • Entre lotes/endereços — envie IDBatchFrom + (IDBatchTo ou IDStockKeepingUnitLocationTo). 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ção KeepUniqueBatchForFiscalConciliation ativa, 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 com IgnoreBalance=1 (query) ou ativando AllowNegativeBalanceTransfer.
  • 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ção AllowSameItemDifferentBatchSameLocation está 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)), limpando QuantityNonconformity à medida que a quantidade transferida cobre as faltas, e devolvendo o pedido a IDStatusOrder = 1 (Fechado) quando todos os itens voltam a ter saldo. Cada alteração gera evento de pedido (OrderEvents.IDEvent = 35).
  • Publica mensagem SkuBalanceTransfer na fila SQS webhook.fifo para 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

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.