# Regras de negócio e situações

O módulo lê a situação do pedido na tabela `movimentacao` e traduz para o campo `SITUACAO` da tabela destino.

<table id="bkmrk-" style="width: 100%; max-width: 720px; margin: 1.5rem auto; border: 0; border-collapse: separate; border-spacing: 0 0.75rem; table-layout: fixed; font-family: inherit; font-size: 0.95rem;"><colgroup> <col style="width: 44%;"></col> <col style="width: 6%;"></col> <col style="width: 50%;"></col> </colgroup><tbody><tr><td style="text-align: center; font-weight: 600; color: #2c3e50; border: 0; padding: 0;">Situação no ERP</td><td style="border: 0; padding: 0;"> </td><td style="text-align: center; font-weight: 600; color: #2c3e50; border: 0; padding: 0;">Na tabela OneBeat</td></tr><tr><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0.5rem 0 0;"><div style="background: #d5f5e3; border: 2px solid #27ae60; border-radius: 12px; padding: 0.75rem 1rem; color: #1e8449; line-height: 1.6;">Confirmado  
Recebido  
Atendido Parcialmente  
Finalizado</div></td><td style="text-align: center; vertical-align: middle; color: #3498db; font-size: 1.5rem; border: 0; padding: 0;">→</td><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0 0 0.5rem;"><div style="background: #d5f5e3; border: 2px solid #27ae60; border-radius: 12px; padding: 0.75rem 1rem; color: #1e8449; font-weight: 600;">ATIVO</div></td></tr><tr><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0.5rem 0 0;"><div style="background: #fdebd0; border: 2px solid #f39c12; border-radius: 12px; padding: 0.75rem 1rem; color: #b9770e; font-weight: 600;">Aberto</div></td><td style="text-align: center; vertical-align: middle; color: #3498db; font-size: 1.5rem; border: 0; padding: 0;">→</td><td style="vertical-align: middle; border: 0; padding: 0 0 0 0.5rem;"><table style="width: 100%; border: 0; border-collapse: collapse; table-layout: fixed;"><tbody><tr><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0.25rem 0 0;"><div style="background: #fadbd8; border: 2px solid #e74c3c; border-radius: 12px; padding: 0.75rem 0.5rem; color: #c0392b; font-weight: 600;">DESATIVO (removido)</div></td><td style="width: 1.75rem; text-align: center; vertical-align: middle; color: #3498db; font-size: 1.5rem; border: 0; padding: 0;">→</td><td style="width: 5.5rem; text-align: center; vertical-align: middle; border: 0; padding: 0 0 0 0.25rem;"><div style="background: #f5b7b1; border: 2px solid #e74c3c; border-radius: 12px; padding: 0.75rem 0.5rem; color: #922b21; font-weight: bold;">DELETE</div></td></tr></tbody></table>

</td></tr><tr><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0.5rem 0 0;"><div style="background: #fadbd8; border: 2px solid #e74c3c; border-radius: 12px; padding: 0.75rem 1rem; color: #c0392b; font-weight: 600;">Cancelado</div></td><td style="text-align: center; vertical-align: middle; color: #3498db; font-size: 1.5rem; border: 0; padding: 0;">→</td><td style="text-align: center; vertical-align: middle; border: 0; padding: 0 0 0 0.5rem;"><div style="background: #fadbd8; border: 2px solid #e74c3c; border-radius: 12px; padding: 0.75rem 1rem; color: #c0392b; font-weight: 600;">DESATIVO</div></td></tr></tbody></table>

Figura 13 — Pedidos abertos e cancelados viram DESATIVO e são removidos da tabela após a sincronização.

## Regra da quantidade pendente

<div class="caixa-simples" id="bkmrk-regra-simples%3A-o-que">**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).</div><table id="bkmrk-pedido-recebido-pend"><tbody><tr><th>Pedido</th><th>Recebido</th><th>Pendente</th><th>Explicação</th></tr><tr><td>10</td><td>7</td><td>3</td><td>Caso normal: faltam 3 unidades</td></tr><tr><td>10</td><td>10</td><td>0</td><td>Pedido completo</td></tr><tr><td>10</td><td>0</td><td>10</td><td>Nada recebido ainda</td></tr><tr><td>5</td><td>8</td><td>0</td><td>Recebido a mais: pendente nunca fica negativo</td></tr></tbody></table>

## Entrada confirmada

O campo `ENTRADA_CONFIRMADA` indica se o pedido foi finalizado no ERP:

<table id="bkmrk-valor-significado-co"><tbody><tr><th>Valor</th><th>Significado</th><th>Condição</th></tr><tr><td>1</td><td>Entrada confirmada</td><td>`m.situacao = 'FINALIZADO'`</td></tr><tr><td>0</td><td>Entrada não confirmada</td><td>Qualquer outra situação</td></tr></tbody></table>

## Recebimentos considerados

Para contar como "recebido", uma movimentação filha deve atender **todos** estes critérios:

<div class="caixa-tecnica" id="bkmrk-estar-vinculada-ao-p">- Estar vinculada ao pedido pai via `movimentacao_movimentacao`
- Ter situação `'Finalizado'` (com F maiúsculo)
- Ter itens ativos com `id_produto_grade` preenchido

</div>Recebimentos em andamento ou cancelados **não entram** no cálculo de QTDE\_RECEBIDA.

## Processamento incremental

![O módulo foi projetado para rodar repetidamente, processando apenas o que mudou desde a última vez.](https://kb.illimitar.pro/uploads/images/gallery/2026-06/embedded-image-bci1zivx.png)

Figura 14 — O módulo foi projetado para rodar repetidamente, processando apenas o que mudou desde a última vez.

## Concorrência — apenas uma execução por vez

<div class="caixa-alerta" id="bkmrk-regra-de-seguran%C3%A7a%3A-">**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.</div>## 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

<div class="caixa-tecnica" id="bkmrk-na-primeira-execu%C3%A7%C3%A3o">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.</div>