Finaliza (ou rascunha) o packing de um pedido
POST/fulfillment/packing/order/:idorder
Coração do fluxo de packing. Dois modos:
Modo Rascunho (Draft=1): apenas grava o body no Redis sob a chave PickingList:<IDPickingList> (TTL 4 dias). Não toca em banco. Retorna "sucesso". É chamado a cada bipagem pelo frontend para preservar o progresso do operador.
Modo Final (sem Draft): processa o packing completo:
- Conferência: compara
Itemsenviados comStockKeepingUnitMovementdo pedido. Em caso de divergência, falha com mensagem detalhada (itens não enviados / a maior / a menor). Aceita divergência apenas quandoPartialInvoice=1(com privilégio + parametrização habilitada). - Faturamento parcial: quando há
differenceSentLessQty, ajustaStockKeepingUnitMovementproporcionalmente, recalculaPriceSellingTotale reescalaAccountsPayableReceivable.Value. SeAutomaticTransferPartialInvoiceWarehousePackingconfigurado, transfere itens removidos para o endereço de Quarentena. - Validação de série: para SKUs com
SerialNumber=1, valida e amarra cada serial viaStockKeepingUnitSerialNumber. - Reconciliação de volumes: cria/apaga linhas em
Packagespara bater comQuantityPackages; salva dimensões dos volumes vindas emVolumes[]. - Embalagens: para cada item em
Packages[], insere a linha via worker PHP/order/sku/orderskupost.php(comPriceSelling=0). - NF-e: invoca worker PHP
/nfe/invoice.phppara emissão (a menos queNoInvoice=1). - Transição de status: com transportadora + romaneio habilitado → status
6+ adiciona ao romaneio aberto. ComSetShippedAfterPacking=1ouIDOrderStatusTo→ invoca lambdaorderStatusPut(geralmente para7Enviado). Caso contrário → status22(Aguardando romaneio). - Picking-list status: marca como
5(Concluído) quando todos os pedidos terminaram, ou4(Em packing) caso contrário.
Dispara debounce de 3 s via Redis (md5 do body) para evitar disparo duplicado pelo operador.
Retorna o detalhe do pedido (invocação de OrderGet).
Request
Responses
- 200
- 400
- 404
Em modo Rascunho: literal "sucesso". Em modo Final: detalhe do pedido (resultado de OrderGet).
Mensagens [BadRequest] típicas:
Processo de faturamento em dupliciade— disparo duplicado em menos de 3 s.Pedido esta no status aberto e não pode seguir o processo de packing.Pedido esta com nota fiscal emitida e não pode alterar as quantidades dos itens—PartialInvoicecom NF já emitida.<itens não enviados: …> | <itens enviados qtde a maior: …> | <itens enviados qtde a menor: …>— divergência semPartialInvoice=1.Item X controla serial mas não foi enviado no faturamento.Item X controla serial e tem quantidade maior que um. Precisa ser enviado de forma individual o serial.Serial informado para o item X não existe/não está disponível.Erro ao selecionar serial IDSku:X/Erro ao alterar quantidade IDSku:X.Nota Fiscal não emitida— gate final quando NF não saiu e o estado não está na lista de declaração de transporte. Além disso, propaga erros do worker PHP de NF-e e doskuMovementTransferPost.
[NotFound] - Pedido não encontrado.