# Como os dados são processados

O método `getPedidosRecebidos()` executa um único comando SQL complexo que usa **CTEs** (Common Table Expressions — subconsultas nomeadas) para organizar os dados em etapas.

![As CTEs organizam pedidos, itens e recebimentos antes do INSERT final.](https://kb.illimitar.pro/uploads/images/gallery/2026-06/embedded-image-yhvf8pxn.png)

Figura 9 — As CTEs organizam pedidos, itens e recebimentos antes do INSERT final.

## Etapa por etapa

### 1. CTE `m` — Pedidos no período

Seleciona movimentações do tipo PEDIDO alteradas entre o ponteiro e a data limite. Faz LEFT JOIN com `stage_pedido_lx` para integração LX.

### 2. CTE `mi` — Itens do pedido

Para cada pedido, soma as quantidades de cada produto (grade) nos itens ativos do pedido.

### 3. CTE `mr` — Recebimentos vinculados

Busca movimentações filhas (recebimentos) ligadas ao pedido pai, apenas com situação `Finalizado`.

### 4. CTE `mri` — Itens recebidos

Soma as quantidades recebidas de cada produto em cada recebimento vinculado ao pedido.

### 5. SELECT final — Montagem do registro

Junta pedido + itens pedidos + itens recebidos + dados da filial (nome, CNPJ, código).

![Cálculo da quantidade pendente: pedido menos recebido, nunca negativo.](https://kb.illimitar.pro/uploads/images/gallery/2026-06/embedded-image-gbswx0yp.png)

Figura 10 — Cálculo da quantidade pendente: pedido menos recebido, nunca negativo.

## Campos calculados

<table id="bkmrk-campo-destino-como-%C3%A9"><tbody><tr><th>Campo destino</th><th>Como é calculado</th></tr><tr><td>`QTDE_PEDIDA`</td><td>Soma dos itens do pedido (`mi.qtde`)</td></tr><tr><td>`QTDE_RECEBIDA`</td><td>Soma dos itens recebidos (`COALESCE(mri.qtde, 0)`)</td></tr><tr><td>`QTDE_PENDENTE`</td><td>`IF((pedida - recebida) < 0, 0, pedida - recebida)`</td></tr><tr><td>`ENTRADA_CONFIRMADA`</td><td>`1` se situação = FINALIZADO, senão `0`</td></tr><tr><td>`SITUACAO`</td><td>`DESATIVO` se Cancelado/Aberto, senão `ATIVO`</td></tr><tr><td>`DATA_TRANSFERENCIA`</td><td>`NOW()` no momento da gravação</td></tr><tr><td>`SKU`</td><td>Código do produto (`mi.codigo`)</td></tr><tr><td>`CHAVE_NFE`</td><td>Chave da nota fiscal do pedido</td></tr></tbody></table>

## Atualização de registros existentes

O INSERT usa `ON DUPLICATE KEY UPDATE`, ou seja:

<div class="caixa-tecnica" id="bkmrk-se-o-registro-n%C3%A3o-ex">- Se o registro **não existe** (chave primária nova) → insere.
- Se o registro **já existe** → atualiza apenas: QTDE\_RECEBIDA, QTDE\_PENDENTE, QTDE\_PEDIDA, ENTRADA\_CONFIRMADA, DATA\_TRANSFERENCIA e SITUACAO.

</div>Chave primária: `ID_PRODUTO_GRADE + COD_FILIAL + ID_FILIAL + ID_MOVIMENTACAO_PAI + CNPJ_FILIAL`

## Filtros aplicados

<table id="bkmrk-filtro-valor-motivo-"><tbody><tr><th>Filtro</th><th>Valor</th><th>Motivo</th></tr><tr><td>`modulo`</td><td>'PEDIDO'</td><td>Apenas movimentações de pedido</td></tr><tr><td>`tipo_estoque`</td><td>'PEDIDO'</td><td>Confirma tipo de estoque</td></tr><tr><td>`m.data`</td><td>&gt; ponteiro AND &lt;= limite</td><td>Janela incremental</td></tr><tr><td>`md.situacao`</td><td>'ATIVO'</td><td>Itens não excluídos</td></tr><tr><td>`md.id_produto_grade`</td><td>IS NOT NULL</td><td>Produtos com grade definida</td></tr><tr><td>`mr.situacao`</td><td>'Finalizado'</td><td>Recebimentos concluídos</td></tr></tbody></table>

<div class="rodape-nav" id="bkmrk--2"></div>## Dicionário da coluna CONFIRMADO

<div class="rodape-nav" id="bkmrk-situa%C3%A7%C3%A3o-valor-abert"><table id="bkmrk-situa%C3%A7%C3%A3o-valor-abert-1"><tbody><tr><th>Situação</th><th>Valor</th></tr><tr><td>`Aberto/Cancelado`</td><td>0</td></tr><tr><td>`Demais situações`</td><td>1</td></tr></tbody></table>

</div><div class="rodape-nav" id="bkmrk-%E2%86%90-anterior%3A-fluxo-de"></div>