Ir para o conteúdo principal

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')