Regras de negócio e situações
Situação do pedido no ERP
O módulo lê a situação do pedido na tabela movimentacao e traduz para o campo SITUACAO da tabela destino.
Regra da quantidade pendente
Regra simples: o que falta = o que foi pedido menos o que já chegou. Se por algum motivo o recebido for maior que o pedido, o sistema considera que nada falta (zero).
| Pedido | Recebido | Pendente | Explicação |
|---|---|---|---|
| 10 | 7 | 3 | Caso normal: faltam 3 unidades |
| 10 | 10 | 0 | Pedido completo |
| 10 | 0 | 10 | Nada recebido ainda |
| 5 | 8 | 0 | Recebido a mais: pendente nunca fica negativo |
Entrada confirmada
O campo ENTRADA_CONFIRMADA indica se o pedido foi finalizado no ERP:
| Valor | Significado | Condição |
|---|---|---|
| 1 | Entrada confirmada | m.situacao = 'FINALIZADO' |
| 0 | Entrada não confirmada | Qualquer outra situação |
Recebimentos considerados
Para contar como "recebido", uma movimentação filha deve atender todos estes critérios:
- Estar vinculada ao pedido pai via
movimentacao_movimentacao - Ter situação
'Finalizado'(com F maiúsculo) - Ter itens ativos com
id_produto_gradepreenchido
Recebimentos em andamento ou cancelados não entram no cálculo de QTDE_RECEBIDA.
Processamento incremental
Concorrência — apenas uma execução por vez
Regra de segurança: se duas execuções tentarem rodar ao mesmo tempo, a segunda será bloqueada com a mensagem "Ja tem outro processo em execucao, aguarde o termino". Isso evita dados duplicados ou corrompidos.
O que acontece quando não há pedidos novos?
Se não existir nenhum pedido com data maior que o ponteiro, o método getPedidoUltimaVerificacao() lança uma exceção: "Não foram encontrados pedidos para atualizar". A execução é interrompida, o lock é liberado, e nada é alterado na tabela destino.
Ponteiro inicial
Na primeira execução (sem registro em
log), o ponteiro padrão é 2000-01-01 00:00:00, ou seja, todos os pedidos desde essa data serão considerados.