NF-e: Consultando Notas com Possíveis Problemas
Movimentações em aberto ou finalizadas com notas pendentes (desde 01/05/2025 até D-1):
WITH
m AS (SELECT id, data_emissao, tipo_estoque, modulo, situacao, id_entidade, `data` FROM movimentacao WHERE (data_emissao BETWEEN '2025-05-01 00:00:00' AND DATE_FORMAT(NOW(), '%Y-%m-%d 00:00:00')) AND situacao <> 'Cancelado')
, nf AS (SELECT * FROM movimentacao_nfe WHERE id_movimentacao IN (SELECT id FROM m))
, a AS (SELECT * FROM nf WHERE (situacao IN ('AUTORIZADO', 'CONTINGENCIA', 'RECEBIDA') OR (modelo = 59 AND situacao = 'TRANSMITIDO')) AND (contingencia IS NULL OR contingencia <> '100'))
, i AS ( SELECT * FROM nf WHERE NOT (situacao IN ('AUTORIZADO', 'CONTINGENCIA', 'RECEBIDA') OR (modelo = 59 AND situacao = 'TRANSMITIDO')) AND (contingencia IS NULL OR contingencia <> '100'))
SELECT
i.id, i.id_movimentacao, m.id_entidade, i.ambiente, i.modelo, i.serie, i.numero, i.chave, m.tipo_estoque, m.modulo, m.situacao AS situacao_movimentacao, i.situacao AS situacao_nfe, m.data_emissao, i.data_situacao
FROM
m
LEFT JOIN a ON (a.id_movimentacao = m.id)
LEFT JOIN i ON (i.id_movimentacao = m.id)
WHERE
a.id IS NULL AND i.id IS NOT NULL
Notas emitidas pelo Módulo NFE onde a situação da movimentação está fora do fluxo de situação da NF-e:
WITH
m AS (SELECT id, data_emissao, tipo_estoque, modulo, situacao, id_entidade, `data` FROM movimentacao WHERE situacao NOT IN ('Cancelado', 'Finalizado', 'Confirmado') AND modulo = 'NFE')
, nf_aberto AS (SELECT * FROM movimentacao_nfe WHERE id_movimentacao IN (SELECT id FROM m) AND situacao IN ('EM DIGITAÇÃO', 'TRANSMITIDO') GROUP BY id_movimentacao)
, nf_errado AS (SELECT * FROM movimentacao_nfe WHERE id_movimentacao IN (SELECT id FROM m) AND situacao NOT IN ('DENEGADO', 'RECEBIDA') AND id_movimentacao NOT IN (SELECT id_movimentacao FROM nf_aberto) GROUP BY id_movimentacao)
SELECT
nf.id, nf.id_movimentacao, m.id_entidade, nf.ambiente, nf.modelo, nf.serie, nf.numero, nf.chave, m.tipo_estoque, m.modulo, m.situacao AS situacao_movimentacao, nf.situacao AS situacao_nfe, m.data_emissao, nf.data_situacao, m.`data` AS data_movimentacao, nf.`data` AS data_nfe
FROM
nf_errado nf
INNER JOIN m ON (m.id = nf.id_movimentacao)
Possíveis notas emitidas duplicadas:
WITH m AS (
SELECT
id, data_emissao, tipo_estoque, modulo, situacao, id_entidade
FROM
movimentacao
WHERE
data_emissao >= '2025-01-01 00:00:00'
AND situacao <> 'Cancelado'
)
, nf AS (
SELECT
id, ambiente, modelo, serie, numero, chave, contingencia, situacao, data_situacao, id_movimentacao
FROM
movimentacao_nfe
WHERE
id_movimentacao IN (SELECT id FROM m)
)
, a AS (
SELECT
*
FROM
nf
WHERE
(situacao IN ('AUTORIZADO', 'CONTINGENCIA') OR (modelo = 59 AND situacao = 'TRANSMITIDO'))
AND (contingencia IS NULL OR contingencia <> '100')
)
, i AS (
SELECT
*
FROM
nf
WHERE
NOT (situacao IN ('AUTORIZADO', 'CONTINGENCIA') OR (modelo = 59 AND situacao = 'TRANSMITIDO'))
)
SELECT
m.*, i.id AS id_movimentacao_nfe, i.ambiente, i.modelo, i.serie, i.numero, i.chave, i.situacao, i.data_situacao
FROM
m
LEFT JOIN a ON (a.id_movimentacao = m.id)
LEFT JOIN i ON (i.id_movimentacao = m.id)
WHERE
a.id IS NOT NULL
AND i.id IS NOT NULL
AND i.situacao NOT IN ('DESATIVO-INUTILIZADO', 'INUTILIZADO')
Nenhum comentário