/*
------------------------------------------------------------------------------------------------------
-- CRIAÇÃO DA PROCEDURE LX_LJ_ETL_VALIDA_MOVIMENTO
------------------------------------------------------------------------------------------------------
*/

If Object_id ('LX_LJ_ETL_VALIDA_MOVIMENTO', 'P') Is Not Null 
  Drop Procedure LX_LJ_ETL_VALIDA_MOVIMENTO; 
GO
IF NOT EXISTS ( SELECT 1 FROM sys.tables t
            JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('Faturamento', 'Empresa') AND s.name = 'dbo'
)
BEGIN
    RAISERROR('ERRO: Estrutura incompatível com o banco do LinxERP.', 16, 1)
    RETURN
END
EXEC('
CREATE PROCEDURE [dbo].[LX_LJ_ETL_VALIDA_MOVIMENTO] (   @CODIGO_FILIAL VARCHAR(6) = NULL,
												@UF VARCHAR(2) = NULL,												
												@DIA INT = NULL,
												@MES INT = NULL,
												@ANO INT = NULL,
												@EMPRESA INT   = NULL
											)

AS
					 
BEGIN  TRY
		
	SET NOCOUNT ON
	SET ANSI_WARNINGS OFF
	SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED

	DECLARE @DATA_MOVIMENTO_INICIAL DATETIME,
			@DATA_MOVIMENTO_FINAL DATETIME,					
			@ULTIMO_DIA VARCHAR(2)

	IF OBJECT_ID(''tempdb..#tmpCalculaVendasDetalhes'') IS NOT NULL	
		drop table #tmpCalculaVendasDetalhes

	IF OBJECT_ID(''tempdb..#tmpCalculaVendasDiaTerminal'') IS NOT NULL	
		drop table #tmpCalculaVendasDiaTerminal

	IF OBJECT_ID(''tempdb..#tmpCalculaVendasDia'') IS NOT NULL	
		drop table #tmpCalculaVendasDia

	IF OBJECT_ID(''tempdb..#tmpCalculaVendasMes'') IS NOT NULL	
		drop table #tmpCalculaVendasMes
	
	IF OBJECT_ID(''tempdb..#tmpLfEcfItem'') IS NOT NULL	
		drop table #tmpLfEcfItem
	
	--Caso não sejam informados parametros para a data pega os dados da da corrente.
	IF(@DIA IS NULL AND @MES IS NULL AND @ANO IS NULL)
	BEGIN

		SET @DATA_MOVIMENTO_INICIAL = CONVERT(VARCHAR(8),  DATEADD(D, -1, GETDATE()), 112)
		SET @DATA_MOVIMENTO_FINAL = @DATA_MOVIMENTO_INICIAL

	END		   
	ELSE	   	
	BEGIN

		IF(@ANO IS NULL)
			SET @ANO = DATEPART(YEAR, GETDATE())
	
		IF(@DIA IS NULL AND @MES IS NOT NULL)
		BEGIN
			SET @DATA_MOVIMENTO_INICIAL = CONVERT(VARCHAR(4), @ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),@MES),2) + ''01''
			
			IF(@MES = DATEPART(MONTH, GETDATE()))
				SET @DATA_MOVIMENTO_FINAL = CONVERT(VARCHAR(8), GETDATE() - 1, 112)
			ELSE
			BEGIN
				SET @ULTIMO_DIA = DAY(DATEADD(D,-1,DATEADD(M,1,CONVERT(DATETIME,CONVERT(VARCHAR(4),@ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),@MES), 2) + ''01''))))
				SET @DATA_MOVIMENTO_FINAL = CONVERT(VARCHAR(4),@ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),@MES), 2) + RIGHT(''00'' + CONVERT(VARCHAR(2),@ULTIMO_DIA), 2)
			END
		END		
			 
		IF(@DIA IS NOT NULL AND @MES IS NULL)		
		BEGIN		
			SET @DATA_MOVIMENTO_INICIAL = CONVERT(VARCHAR(4), @ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),DATEPART(MONTH, GETDATE())),2) + RIGHT(''00'' + CONVERT(VARCHAR(2),@DIA),2)
			SET @DATA_MOVIMENTO_FINAL = @DATA_MOVIMENTO_INICIAL
		END

		IF(@DIA IS NOT NULL AND @MES IS NOT NULL)					
		BEGIN
			SET @DATA_MOVIMENTO_INICIAL = CONVERT(VARCHAR(4), @ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),@MES),2) + RIGHT(''00'' + CONVERT(VARCHAR(2),@DIA),2)	
			SET @DATA_MOVIMENTO_FINAL = @DATA_MOVIMENTO_INICIAL
		END
		
		IF(@DIA IS NULL AND @MES IS NULL AND @ANO IS NOT NULL)	
		BEGIN		
			SET @DATA_MOVIMENTO_INICIAL = CONVERT(VARCHAR(4), @ANO) + ''01'' + ''01''
			
			IF(@ANO = DATEPART(YEAR, GETDATE()))
				SET @DATA_MOVIMENTO_FINAL = CONVERT(VARCHAR(8), GETDATE() - 1, 112)
			ELSE
				SET @DATA_MOVIMENTO_FINAL = CONVERT(VARCHAR(4),@ANO) + ''12'' + ''31''
		END	
	
	END
	
	--Ajusta Loja Venda Parcelas
	INSERT INTO LOJA_VENDA_PARCELAS
	(CODIGO_FILIAL, TERMINAL, LANCAMENTO_CAIXA, PARCELA, TIPO_PGTO, VALOR, VENCIMENTO, MOEDA)
	SELECT 
		A.CODIGO_FILIAL, A.TERMINAL, A.LANCAMENTO_CAIXA, ''01'' AS PARCELA, ''D'' AS TIPO_PGTO, A.TOTAL_VENDA AS VALOR, A.DATA AS VENCIMENTO, ''R$'' AS MOEDA 
	FROM 
		LOJA_VENDA_PGTO A (NOLOCK)
	INNER JOIN LOJAS_VAREJO AA (NOLOCK)
		ON AA.CODIGO_FILIAL = A.CODIGO_FILIAL	
	INNER JOIN FILIAIS B  (NOLOCK)
		ON AA.FILIAL = B.FILIAL
	INNER JOIN CADASTRO_CLI_FOR C (NOLOCK)
		ON B.CLIFOR = C.CLIFOR 
	WHERE A.DATA >= @DATA_MOVIMENTO_INICIAL AND A.DATA <= @DATA_MOVIMENTO_FINAL	 
				AND (C.UF = @UF or @UF IS NULL)
					AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)								
		AND A.VENDA_FINALIZADA = 1 
		AND A.TOTAL_VENDA = 0 
		AND NOT EXISTS (SELECT 1 FROM LOJA_VENDA_PARCELAS 
						WHERE CODIGO_FILIAL = A.CODIGO_FILIAL 
						AND TERMINAL = A.TERMINAL 
						AND LANCAMENTO_CAIXA = A.LANCAMENTO_CAIXA) 
	ORDER BY 
		1, 2, 3, 4
		
	--Ajusta Id_Vendedor na LojaVendaProduto
	UPDATE A SET ID_VENDEDOR = 1
	FROM LOJA_VENDA_PRODUTO A (NOLOCK)
	INNER JOIN LOJAS_VAREJO AA (NOLOCK)
		ON AA.CODIGO_FILIAL = A.CODIGO_FILIAL	
	INNER JOIN FILIAIS B  (NOLOCK)
		ON AA.FILIAL = B.FILIAL
	INNER JOIN CADASTRO_CLI_FOR C (NOLOCK)
		ON B.CLIFOR = C.CLIFOR 
	WHERE	A.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND A.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
				AND (C.UF = @UF or @UF IS NULL)
					AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)
			AND ID_VENDEDOR = 0 
			AND EXISTS (SELECT 1 FROM LOJA_VENDA_VENDEDORES 
						WHERE CODIGO_FILIAL = A.CODIGO_FILIAL 
						AND TICKET = A.TICKET 
						AND DATA_VENDA = A.DATA_VENDA 
						AND ID_VENDEDOR = 1)
			
	--Ajusta ID_Vendedor na LojaVendaTroca
	UPDATE A SET ID_VENDEDOR = 1
	FROM LOJA_VENDA_TROCA A (NOLOCK)
	INNER JOIN LOJAS_VAREJO AA (NOLOCK)
		ON AA.CODIGO_FILIAL = A.CODIGO_FILIAL	
	INNER JOIN FILIAIS B  (NOLOCK)
		ON AA.FILIAL = B.FILIAL
	INNER JOIN CADASTRO_CLI_FOR C (NOLOCK)
		ON B.CLIFOR = C.CLIFOR 
	WHERE	A.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND A.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
				AND (C.UF = @UF or @UF IS NULL)
					AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)
		AND ID_VENDEDOR = 0 
		AND EXISTS (SELECT 1 FROM LOJA_VENDA_VENDEDORES 
					WHERE CODIGO_FILIAL = A.CODIGO_FILIAL 
					AND TICKET = A.TICKET 
					AND DATA_VENDA = A.DATA_VENDA 
					AND ID_VENDEDOR = 1)	

	--Ajusta LojaVendaVendores da Venda
	INSERT INTO LOJA_VENDA_VENDEDORES
		(CODIGO_FILIAL, TICKET, DATA_VENDA, ID_VENDEDOR, VENDEDOR, COMISSAO)
	SELECT
		DISTINCT A.CODIGO_FILIAL, A.TICKET, A.DATA_VENDA, ISNULL(A.ID_VENDEDOR,0), B.VENDEDOR, B.COMISSAO 
	FROM
		LOJA_VENDA_PRODUTO A (NOLOCK)
	INNER JOIN LOJA_VENDA B (NOLOCK)
		ON A.CODIGO_FILIAL = B.CODIGO_FILIAL AND A.TICKET = B.TICKET AND A.DATA_VENDA = B.DATA_VENDA 
	LEFT JOIN LOJA_VENDA_VENDEDORES C	(NOLOCK)
		ON A.CODIGO_FILIAL = C.CODIGO_FILIAL AND A.TICKET = C.TICKET AND A.DATA_VENDA = C.DATA_VENDA AND ISNULL(A.ID_VENDEDOR,0) = ISNULL(C.ID_VENDEDOR,0) 
	INNER JOIN LOJAS_VAREJO DD (NOLOCK)
		ON DD.CODIGO_FILIAL = B.CODIGO_FILIAL	
	INNER JOIN FILIAIS D (NOLOCK)
		ON D.FILIAL = DD.FILIAL
	INNER JOIN CADASTRO_CLI_FOR E (NOLOCK)
		ON D.CLIFOR = E.CLIFOR 		
	WHERE	A.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND A.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
			AND (E.UF = @UF or @UF IS NULL)
				AND (B.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)
					 AND C.VENDEDOR IS NULL		
						AND B.VENDEDOR IS NOT NULL

	--Ajusta LojaVendaVendedores da Troca
	INSERT INTO LOJA_VENDA_VENDEDORES
		(CODIGO_FILIAL, TICKET, DATA_VENDA, ID_VENDEDOR, VENDEDOR, COMISSAO)
	SELECT
		DISTINCT A.CODIGO_FILIAL, A.TICKET, A.DATA_VENDA, ISNULL(A.ID_VENDEDOR,0), B.VENDEDOR, B.COMISSAO 
	FROM
		LOJA_VENDA_TROCA A   (NOLOCK)
	INNER JOIN LOJA_VENDA B	 (NOLOCK)
		ON A.CODIGO_FILIAL = B.CODIGO_FILIAL AND A.TICKET = B.TICKET AND A.DATA_VENDA = B.DATA_VENDA 
	LEFT JOIN LOJA_VENDA_VENDEDORES C (NOLOCK)
		ON A.CODIGO_FILIAL = C.CODIGO_FILIAL AND A.TICKET = C.TICKET AND A.DATA_VENDA = C.DATA_VENDA AND ISNULL(A.ID_VENDEDOR,0) = ISNULL(C.ID_VENDEDOR,0) 
	INNER JOIN LOJAS_VAREJO DD (NOLOCK)
		ON DD.CODIGO_FILIAL = B.CODIGO_FILIAL
	INNER JOIN FILIAIS D (NOLOCK)
		ON D.FILIAL = DD.FILIAL
	INNER JOIN CADASTRO_CLI_FOR E (NOLOCK)
		ON D.CLIFOR = E.CLIFOR 		
	WHERE	A.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND A.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
				AND (E.UF = @UF or @UF IS NULL)
					AND (B.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)			
						 AND C.VENDEDOR IS NULL	 AND B.VENDEDOR IS NOT NULL	
		
    -- Variaveis Cursor Validação de quebra de tickets		
	DECLARE @CODIGO_FILIAL_CUR VARCHAR(6), 	
			@FILIAL_CUR VARCHAR(25),	
			@TERMINAL_CUR CHAR(3),
			@MIN_TICKET VARCHAR(8), 
			@MAX_TICKET VARCHAR(8),
			@DIA_CUR INT,
			@MES_CUR INT,
			@ANO_CUR INT
			
	SELECT		CODIGO_FILIAL				= B.CODIGO_FILIAL ,
				FILIAL						= RTRIM(FF.FILIAL),
				EMPRESA						= F.EMPRESA,
				UF							= G.UF,
				DIA							= DATEPART (DAY,B.DATA_VENDA)	,
				MES							= DATEPART (MONTH,B.DATA_VENDA)	,
				ANO							= DATEPART (YEAR,B.DATA_VENDA)	,				
				TICKET						= B.TICKET		,
				TERMINAL					= B.TERMINAL	,				
				TOTAL_VALOR_PAGO			= SUM(B.VALOR_PAGO),
				TOTAL_VALOR_TICKET			= SUM(B.VALOR_TIKET) ,
				TOTAL_VALOR_VENDA_BRUTA		= SUM(B.VALOR_VENDA_BRUTA),
				QTDE_TOTAL					= SUM(B.QTDE_TOTAL),
				TOTAL_VALOR_TROCA			= SUM(B.VALOR_TROCA),
				QTDE_TOTAL_TROCA			= SUM(B.QTDE_TROCA_TOTAL),
				TOTAL_VENDA					= SUM(A.TOTAL_VENDA),
				TOTAL_VENDA_DESCONTO		= SUM(A.TOTAL_VENDA + A.DESCONTO_PGTO),
				TOTAL_VENDA_PARCELAS		= SUM(C.VALOR_TOTAL_PARCELAS),
				TOTAL_VENDA_ITEM			= SUM(D.VALOR_TOTAL_PRODUTOS),
				QTDE_TOTAL_ITEM				= SUM(D.QTDE_TOTAL_PRODUTOS),
				TOTAL_VALOR_TROCA_ITEM		= SUM(E.VALOR_TOTAL_TROCA),
				QTDE_TOTAL_TROCA_ITEM		= SUM(E.QTDE_TOTAL_PRODUTO_TROCA)
	into #tmpCalculaVendasDetalhes
	FROM  LOJA_VENDA_PGTO A (NOLOCK)
	INNER JOIN LOJA_VENDA  B (NOLOCK)
	ON B.CODIGO_FILIAL = A.CODIGO_FILIAL 
	AND B.TERMINAL = A.TERMINAL 
	AND B.LANCAMENTO_CAIXA = A.LANCAMENTO_CAIXA 
	INNER JOIN 
	(
			SELECT	A.CODIGO_FILIAL			as CODIGO_FILIAL, 
					A.TERMINAL				as TERMINAL, 
					A.LANCAMENTO_CAIXA		as LANCAMENTO_CAIXA,  
					SUM(VALOR)				as VALOR_TOTAL_PARCELAS 
			FROM LOJA_VENDA_PARCELAS A (NOLOCK)
			INNER JOIN LOJA_VENDA B (NOLOCK)
			ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 
				AND A.TERMINAL = B.TERMINAL 
				AND A.LANCAMENTO_CAIXA = B.LANCAMENTO_CAIXA 			
			JOIN LOJAS_VAREJO FF (NOLOCK)
				ON FF.CODIGO_FILIAL = A.CODIGO_FILIAL
			JOIN FILIAIS F (NOLOCK)
				ON F.FILIAL = FF.FILIAL
			JOIN CADASTRO_CLI_FOR G (NOLOCK)
				ON F.CLIFOR = G.CLIFOR
			
			WHERE B.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND B.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
						AND (G.UF = @UF or @UF IS NULL)
							AND (B.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)								
									AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)	
						
			GROUP BY	A.CODIGO_FILIAL, 
						A.TERMINAL, 
						A.LANCAMENTO_CAIXA 
	)C
	ON C.CODIGO_FILIAL = B.CODIGO_FILIAL 
	AND C.TERMINAL = B.TERMINAL 
	AND C.LANCAMENTO_CAIXA = B.LANCAMENTO_CAIXA 

	INNER JOIN
	(
			SELECT	A.CODIGO_FILIAL				AS CODIGO_FILIAL, 
					A.DATA_VENDA				As DATA_VENDA, 
					A.TICKET					As TICKET, 
					C.TERMINAL					As TERMINAL,
					SUM(QTDE * PRECO_LIQUIDO)   As VALOR_TOTAL_PRODUTOS,
					SUM(QTDE) 					As QTDE_TOTAL_PRODUTOS
			FROM LOJA_VENDA_PRODUTO A (NOLOCK)	
			INNER JOIN LOJA_VENDA B (NOLOCK)
			ON A.CODIGO_FILIAL = B.CODIGO_FILIAL
				AND A.TICKET = B.TICKET 
				AND A.DATA_VENDA = B.DATA_VENDA
			INNER JOIN LOJA_VENDA_PGTO C (NOLOCK)
				ON B.CODIGO_FILIAL = C.CODIGO_FILIAL 
				AND B.LANCAMENTO_CAIXA = C.LANCAMENTO_CAIXA 
				AND B.TERMINAL = C.TERMINAL 
			INNER JOIN LOJAS_VAREJO FF (NOLOCK)
				ON A.CODIGO_FILIAL = FF.CODIGO_FILIAL
			INNER JOIN FILIAIS F (NOLOCK)
				ON FF.FILIAL = F.FILIAL
			INNER JOIN CADASTRO_CLI_FOR G (NOLOCK)
				ON F.CLIFOR = G.CLIFOR
			
			WHERE B.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND B.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 				
						AND (G.UF = @UF or @UF IS NULL)
							AND (B.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)								
									AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)				
				
			GROUP BY	A.CODIGO_FILIAL, 
						A.TICKET, 
						A.DATA_VENDA, 
						C.TERMINAL 
	 ) D
	 
	ON D.CODIGO_FILIAL = B.CODIGO_FILIAL 
	AND D.TICKET = B.TICKET 
	AND D.DATA_VENDA = B.DATA_VENDA
	AND D.TERMINAL = b.TERMINAL 	
	LEFT JOIN 
	(
		SELECT	A.CODIGO_FILIAL				as CODIGO_FILIAL, 
				TICKET						as TICKET, 
				DATA_VENDA					as DATA_VENDA, 
				SUM(PRECO_LIQUIDO * QTDE )	as VALOR_TOTAL_TROCA,
				SUM(QTDE )					as QTDE_TOTAL_PRODUTO_TROCA	
		FROM LOJA_VENDA_TROCA A (NOLOCK)
		JOIN LOJAS_VAREJO FF (NOLOCK)
			ON FF.CODIGO_FILIAL = A.CODIGO_FILIAL
		JOIN FILIAIS F (NOLOCK)
			ON F.FILIAL = FF.FILIAL
		JOIN CADASTRO_CLI_FOR G (NOLOCK)
		ON F.CLIFOR = G.CLIFOR		
		WHERE A.DATA_VENDA >= @DATA_MOVIMENTO_INICIAL AND A.DATA_VENDA <= @DATA_MOVIMENTO_FINAL	 
					AND (G.UF = @UF or @UF IS NULL)
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)							
								AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)
								
		GROUP BY	A.CODIGO_FILIAL, 
					TICKET, 
					DATA_VENDA
	)E

	ON B.CODIGO_FILIAL = E.CODIGO_FILIAL 
	AND B.TICKET = E.TICKET
	AND B.DATA_VENDA = E.DATA_VENDA 
	
	JOIN LOJAS_VAREJO FF (NOLOCK)
		ON FF.CODIGO_FILIAL = B.CODIGO_FILIAL
	JOIN FILIAIS F (NOLOCK)
		ON F.FILIAL = FF.FILIAL
	JOIN CADASTRO_CLI_FOR G (NOLOCK)
	ON F.CLIFOR = G.CLIFOR
	
	LEFT JOIN LJ_ETL_CONFERENCIA H (NOLOCK)
	ON FF.CODIGO_FILIAL = H.CODIGO_FILIAL 
	AND FF.FILIAL = H.FILIAL 
	AND B.DATA_VENDA = H.DATA_MOVIMENTO
	
	WHERE A.DATA >= @DATA_MOVIMENTO_INICIAL AND A.DATA <= @DATA_MOVIMENTO_FINAL	 
				AND (G.UF = @UF or @UF IS NULL)
					AND (B.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)						
							AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)
								AND H.DATA_MOVIMENTO IS NULL
		
	GROUP BY	B.CODIGO_FILIAL, 
				FF.FILIAL, 
				F.EMPRESA, 
				G.UF,
				DATEPART (DAY,B.DATA_VENDA)	,
				DATEPART (MONTH,B.DATA_VENDA),
				DATEPART (YEAR,B.DATA_VENDA),				
				B.DATA_VENDA, 
				B.TICKET ,
				B.TERMINAL

	--Cria tabela temporaria com registros por filial, dia e terminal
	SELECT  A.CODIGO_FILIAL, 
			FILIAL = RTRIM(A.FILIAL),
			A.TERMINAL,
			A.EMPRESA,
			A.UF,			
			A.DIA,
			A.MES,
			A.ANO  
	into #tmpCalculaVendasDiaTerminal		
	FROM #tmpCalculaVendasDetalhes A
	GROUP BY	A.CODIGO_FILIAL, 
				A.FILIAL,
				A.TERMINAL, 
				A.EMPRESA,
				A.UF, 
				A.DIA,
				A.MES,
				A.ANO 
	
	--Cria tabela temporaria com registros por dia	
	SELECT  A.CODIGO_FILIAL, 
			FILIAL = RTRIM(A.FILIAL),
			A.EMPRESA,
			A.UF,			
			A.DIA,
			A.MES,
			A.ANO  
	into #tmpCalculaVendasDia			
	FROM #tmpCalculaVendasDiaTerminal A
	GROUP BY	A.CODIGO_FILIAL, 
				A.FILIAL,
				A.EMPRESA,
				A.UF, 
				A.DIA,
				A.MES,
				A.ANO  
	
	--Cria tabela temporaria com registros por Mes
	SELECT  A.CODIGO_FILIAL, 
			FILIAL = RTRIM(A.FILIAL),		
			A.EMPRESA, 
			A.UF,	
			A.MES,
			A.ANO  
	into #tmpCalculaVendasMes
	FROM #tmpCalculaVendasDia A
	GROUP BY	A.CODIGO_FILIAL, 
				A.FILIAL,		
				A.EMPRESA, 
				A.UF,	
				A.MES,
				A.ANO  	
				 
	--Deleta os registros da tabela LJ_ETL_MONITOR_DETALHES
	DELETE A FROM LJ_ETL_MONITOR_DETALHES A (NOLOCK)
	INNER JOIN #tmpCalculaVendasDia B
		ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 		
		AND A.DIA = B.DIA 
		AND A.MES = B.MES 
		AND A.ANO = B.ANO 
	
	--Atualiza os registros que serão reconferidos
	UPDATE A SET
			A.DIA1 =  CASE WHEN B.DIA1  = 0 THEN A.DIA1  ELSE B.DIA1  END ,
			A.DIA2 =  CASE WHEN B.DIA2  = 0 THEN A.DIA2  ELSE B.DIA2  END ,
			A.DIA3 =  CASE WHEN B.DIA3  = 0 THEN A.DIA3  ELSE B.DIA3  END ,
			A.DIA4 =  CASE WHEN B.DIA4  = 0 THEN A.DIA4  ELSE B.DIA4  END ,
			A.DIA5 =  CASE WHEN B.DIA5  = 0 THEN A.DIA5  ELSE B.DIA5  END ,
			A.DIA6 =  CASE WHEN B.DIA6  = 0 THEN A.DIA6  ELSE B.DIA6  END ,
			A.DIA7 =  CASE WHEN B.DIA7  = 0 THEN A.DIA7  ELSE B.DIA7  END ,
			A.DIA8 =  CASE WHEN B.DIA8  = 0 THEN A.DIA8  ELSE B.DIA8  END ,
			A.DIA9 =  CASE WHEN B.DIA9  = 0 THEN A.DIA9  ELSE B.DIA9  END ,
			A.DIA10 = CASE WHEN B.DIA10 = 0 THEN A.DIA10 ELSE B.DIA10 END ,
			A.DIA11 = CASE WHEN B.DIA11 = 0 THEN A.DIA11 ELSE B.DIA11 END ,
			A.DIA12 = CASE WHEN B.DIA12 = 0 THEN A.DIA12 ELSE B.DIA12 END ,
			A.DIA13 = CASE WHEN B.DIA13 = 0 THEN A.DIA13 ELSE B.DIA13 END ,
			A.DIA14 = CASE WHEN B.DIA14 = 0 THEN A.DIA14 ELSE B.DIA14 END ,
			A.DIA15 = CASE WHEN B.DIA15 = 0 THEN A.DIA15 ELSE B.DIA15 END ,
			A.DIA16 = CASE WHEN B.DIA16 = 0 THEN A.DIA16 ELSE B.DIA16 END ,
			A.DIA17 = CASE WHEN B.DIA17 = 0 THEN A.DIA17 ELSE B.DIA17 END ,
			A.DIA18 = CASE WHEN B.DIA18 = 0 THEN A.DIA18 ELSE B.DIA18 END ,
			A.DIA19 = CASE WHEN B.DIA19 = 0 THEN A.DIA19 ELSE B.DIA19 END ,
			A.DIA20 = CASE WHEN B.DIA20 = 0 THEN A.DIA20 ELSE B.DIA20 END ,
			A.DIA21 = CASE WHEN B.DIA21 = 0 THEN A.DIA21 ELSE B.DIA21 END ,
			A.DIA22 = CASE WHEN B.DIA22 = 0 THEN A.DIA22 ELSE B.DIA22 END ,
			A.DIA23 = CASE WHEN B.DIA23 = 0 THEN A.DIA23 ELSE B.DIA23 END ,
			A.DIA24 = CASE WHEN B.DIA24 = 0 THEN A.DIA24 ELSE B.DIA24 END ,
			A.DIA25 = CASE WHEN B.DIA25 = 0 THEN A.DIA25 ELSE B.DIA25 END ,
			A.DIA26 = CASE WHEN B.DIA26 = 0 THEN A.DIA26 ELSE B.DIA26 END ,
			A.DIA27 = CASE WHEN B.DIA27 = 0 THEN A.DIA27 ELSE B.DIA27 END ,
			A.DIA28 = CASE WHEN B.DIA28 = 0 THEN A.DIA28 ELSE B.DIA28 END ,
			A.DIA29 = CASE WHEN B.DIA29 = 0 THEN A.DIA29 ELSE B.DIA29 END ,
			A.DIA30 = CASE WHEN B.DIA30 = 0 THEN A.DIA30 ELSE B.DIA30 END ,
			A.DIA31 = CASE WHEN B.DIA31 = 0 THEN A.DIA31 ELSE B.DIA31 END 	
	FROM LJ_ETL_MONITOR A		
	INNER JOIN 
	(
		SELECT 	A.CODIGO_FILIAL, 
				FILIAL = RTRIM(A.FILIAL), 
				A.EMPRESA, 
				A.MES, 
				A.ANO,
				DIA1 =  MAX(A.DIA1  ) ,
				DIA2 =  MAX(A.DIA2  ) ,
				DIA3 =	MAX(A.DIA3  ) ,
				DIA4 =	MAX(A.DIA4  ) ,
				DIA5 =	MAX(A.DIA5  ) ,
				DIA6 =	MAX(A.DIA6  ) ,
				DIA7 =	MAX(A.DIA7  ) ,
				DIA8 =	MAX(A.DIA8  ) ,
				DIA9 =	MAX(A.DIA9  ) ,
				DIA10 =	MAX(A.DIA10 ) ,
				DIA11 =	MAX(A.DIA11 ) ,
				DIA12 =	MAX(A.DIA12 ) ,
				DIA13 =	MAX(A.DIA13 ) ,
				DIA14 =	MAX(A.DIA14 ) ,
				DIA15 =	MAX(A.DIA15 ) ,
				DIA16 =	MAX(A.DIA16 ) ,
				DIA17 =	MAX(A.DIA17 ) ,
				DIA18 =	MAX(A.DIA18 ) ,
				DIA19 =	MAX(A.DIA19 ) ,
				DIA20 =	MAX(A.DIA20 ) ,
				DIA21 =	MAX(A.DIA21 ) ,
				DIA22 =	MAX(A.DIA22 ) ,
				DIA23 = MAX(A.DIA23 ) ,
				DIA24 = MAX(A.DIA24 ) ,
				DIA25 = MAX(A.DIA25 ) ,
				DIA26 = MAX(A.DIA26 ) ,
				DIA27 = MAX(A.DIA27 ) ,
				DIA28 = MAX(A.DIA28 ) ,
				DIA29 = MAX(A.DIA29 ) ,
				DIA30 = MAX(A.DIA30 ) ,
				DIA31 = MAX(A.DIA31 ) 
		FROM			 
		(				 
			SELECT	A.CODIGO_FILIAL,
					FILIAL = RTRIM(A.FILIAL), 
					A.EMPRESA,
					A.UF,
					DIA = MIN(A.DIA),
					A.MES,
					A.ANO,
					DIA1 =  CASE WHEN DIA = 1 THEN  2 ELSE 0 END,
					DIA2 =  CASE WHEN DIA = 2 THEN  2 ELSE 0 END,
					DIA3 =  CASE WHEN DIA = 3 THEN  2 ELSE 0 END,
					DIA4 =  CASE WHEN DIA = 4 THEN  2 ELSE 0 END,
					DIA5 =  CASE WHEN DIA = 5 THEN  2 ELSE 0 END,
					DIA6 =  CASE WHEN DIA = 6 THEN  2 ELSE 0 END,
					DIA7 =  CASE WHEN DIA = 7 THEN  2 ELSE 0 END,
					DIA8 =  CASE WHEN DIA = 8 THEN  2 ELSE 0 END,
					DIA9 =  CASE WHEN DIA = 9 THEN  2 ELSE 0 END,
					DIA10 = CASE WHEN DIA = 10 THEN 2 ELSE 0 END,
					DIA11 = CASE WHEN DIA = 11 THEN 2 ELSE 0 END,
					DIA12 = CASE WHEN DIA = 12 THEN 2 ELSE 0 END,
					DIA13 = CASE WHEN DIA = 13 THEN 2 ELSE 0 END,
					DIA14 = CASE WHEN DIA = 14 THEN 2 ELSE 0 END,
					DIA15 = CASE WHEN DIA = 15 THEN 2 ELSE 0 END,
					DIA16 = CASE WHEN DIA = 16 THEN 2 ELSE 0 END,
					DIA17 = CASE WHEN DIA = 17 THEN 2 ELSE 0 END,
					DIA18 = CASE WHEN DIA = 18 THEN 2 ELSE 0 END,
					DIA19 = CASE WHEN DIA = 19 THEN 2 ELSE 0 END,
					DIA20 = CASE WHEN DIA = 20 THEN 2 ELSE 0 END,
					DIA21 = CASE WHEN DIA = 21 THEN 2 ELSE 0 END,
					DIA22 = CASE WHEN DIA = 22 THEN 2 ELSE 0 END,
					DIA23 = CASE WHEN DIA = 23 THEN 2 ELSE 0 END,
					DIA24 = CASE WHEN DIA = 24 THEN 2 ELSE 0 END,
					DIA25 = CASE WHEN DIA = 25 THEN 2 ELSE 0 END,
					DIA26 = CASE WHEN DIA = 26 THEN 2 ELSE 0 END,
					DIA27 = CASE WHEN DIA = 27 THEN 2 ELSE 0 END,
					DIA28 = CASE WHEN DIA = 28 THEN 2 ELSE 0 END,
					DIA29 = CASE WHEN DIA = 29 THEN 2 ELSE 0 END,
					DIA30 = CASE WHEN DIA = 30 THEN 2 ELSE 0 END,
					DIA31 = CASE WHEN DIA = 31 THEN 2 ELSE 0 END
			FROM #tmpCalculaVendasDia A			
			GROUP  BY	A.CODIGO_FILIAL,
						A.FILIAL,
						A.EMPRESA ,
						A.UF,	
						A.DIA,					
						A.MES,
						A.ANO	 
			) A	
		GROUP BY	A.CODIGO_FILIAL , 
					A.FILIAL, 
					A.EMPRESA, 
					A.MES, 
					A.ANO
	) B
	ON A.CODIGO_FILIAL =  B.CODIGO_FILIAL
	AND A.FILIAL = B.FILIAL 	
	AND A.MES = B.MES 
	AND A.ANO = B.ANO
			 		
	--Cria a base dos registros que serão conferidos
	INSERT INTO LJ_ETL_MONITOR 
	SELECT	A.CODIGO_FILIAL,
			FILIAL = RTRIM(A.FILIAL),			
			A.EMPRESA,
			A.UF,
			DIA = MIN(A.DIA),
			A.MES,
			A.ANO,
			DIA1 =   MAX(A.DIA1 ),DIA2 =   MAX(A.DIA2 ),DIA3 =   MAX(A.DIA3 ),DIA4 =   MAX(A.DIA4 ),
			DIA5 =   MAX(A.DIA5 ),DIA6 =   MAX(A.DIA6 ),DIA7 =   MAX(A.DIA7 ),DIA8 =   MAX(A.DIA8 ),
			DIA9 =   MAX(A.DIA9 ),DIA10 =  MAX(A.DIA10),DIA11 =  MAX(A.DIA11),DIA12 =  MAX(A.DIA12),DIA13 =  MAX(A.DIA13),
			DIA14 =  MAX(A.DIA14),DIA15 =  MAX(A.DIA15),DIA16 =  MAX(A.DIA16),DIA17 =  MAX(A.DIA17),DIA18 =  MAX(A.DIA18),
			DIA19 =  MAX(A.DIA19),DIA20 =  MAX(A.DIA20),DIA21 =  MAX(A.DIA21),DIA22 =  MAX(A.DIA22),DIA23 =  MAX(A.DIA23),
			DIA24 =  MAX(A.DIA24),DIA25 =  MAX(A.DIA25),DIA26 =  MAX(A.DIA26),DIA27 =  MAX(A.DIA27),DIA28 =  MAX(A.DIA28),
			DIA29 =  MAX(A.DIA29),DIA30 =  MAX(A.DIA30),DIA31 =  MAX(A.DIA31)
	FROM 
	(
		SELECT	A.CODIGO_FILIAL,
				FILIAL = RTRIM(A.FILIAL), 
				A.EMPRESA,
				A.UF,
				DIA = MIN(A.DIA),
				A.MES,
				A.ANO,
				DIA1 =  CASE WHEN DIA = 1 THEN  2 ELSE 0 END,
				DIA2 =  CASE WHEN DIA = 2 THEN  2 ELSE 0 END,
				DIA3 =  CASE WHEN DIA = 3 THEN  2 ELSE 0 END,
				DIA4 =  CASE WHEN DIA = 4 THEN  2 ELSE 0 END,
				DIA5 =  CASE WHEN DIA = 5 THEN  2 ELSE 0 END,
				DIA6 =  CASE WHEN DIA = 6 THEN  2 ELSE 0 END,
				DIA7 =  CASE WHEN DIA = 7 THEN  2 ELSE 0 END,
				DIA8 =  CASE WHEN DIA = 8 THEN  2 ELSE 0 END,
				DIA9 =  CASE WHEN DIA = 9 THEN  2 ELSE 0 END,
				DIA10 = CASE WHEN DIA = 10 THEN 2 ELSE 0 END,
				DIA11 = CASE WHEN DIA = 11 THEN 2 ELSE 0 END,
				DIA12 = CASE WHEN DIA = 12 THEN 2 ELSE 0 END,
				DIA13 = CASE WHEN DIA = 13 THEN 2 ELSE 0 END,
				DIA14 = CASE WHEN DIA = 14 THEN 2 ELSE 0 END,
				DIA15 = CASE WHEN DIA = 15 THEN 2 ELSE 0 END,
				DIA16 = CASE WHEN DIA = 16 THEN 2 ELSE 0 END,
				DIA17 = CASE WHEN DIA = 17 THEN 2 ELSE 0 END,
				DIA18 = CASE WHEN DIA = 18 THEN 2 ELSE 0 END,
				DIA19 = CASE WHEN DIA = 19 THEN 2 ELSE 0 END,
				DIA20 = CASE WHEN DIA = 20 THEN 2 ELSE 0 END,
				DIA21 = CASE WHEN DIA = 21 THEN 2 ELSE 0 END,
				DIA22 = CASE WHEN DIA = 22 THEN 2 ELSE 0 END,
				DIA23 = CASE WHEN DIA = 23 THEN 2 ELSE 0 END,
				DIA24 = CASE WHEN DIA = 24 THEN 2 ELSE 0 END,
				DIA25 = CASE WHEN DIA = 25 THEN 2 ELSE 0 END,
				DIA26 = CASE WHEN DIA = 26 THEN 2 ELSE 0 END,
				DIA27 = CASE WHEN DIA = 27 THEN 2 ELSE 0 END,
				DIA28 = CASE WHEN DIA = 28 THEN 2 ELSE 0 END,
				DIA29 = CASE WHEN DIA = 29 THEN 2 ELSE 0 END,
				DIA30 = CASE WHEN DIA = 30 THEN 2 ELSE 0 END,
				DIA31 = CASE WHEN DIA = 31 THEN 2 ELSE 0 END
		FROM #tmpCalculaVendasDia A
		GROUP  BY	A.CODIGO_FILIAL,
					A.FILIAL,
					A.EMPRESA ,
					A.UF,
					A.DIA,										
					A.MES,
					A.ANO	 
	) A
	WHERE NOT EXISTS (SELECT TOP 1 1 FROM LJ_ETL_MONITOR AA 
						WHERE A.CODIGO_FILIAL = AA.CODIGO_FILIAL 
						AND A.FILIAL  = AA.FILIAL 
						AND A.EMPRESA = AA.EMPRESA 	
						AND A.MES = AA.MES AND A.ANO = AA.ANO )
	GROUP BY A.CODIGO_FILIAL,
			 A.FILIAL, 
			 A.EMPRESA,
			 A.UF,
			 A.MES,
			 A.ANO

	--========================================Inicio Validação dos Valores de Ticktes=================================================
	
	-- VALIDA INCONSISTENCIAS NOS VALORES DAS VENDAS
	INSERT INTO LJ_ETL_MONITOR_DETALHES 
		(	ORIGEM,
			CODIGO_FILIAL,
			FILIAL, 
			DIA,
			MES, 
			ANO, 
			TERMINAL, 
			TICKET,  
			STATUS_MOVIMENTO,
			MENSAGEM
		)
	SELECT		''1 - Loja'',
			    A.CODIGO_FILIAL, 
				FILIAL = RTRIM(A.FILIAL),
				A.DIA,
				A.MES,
				A.ANO ,
				A.TERMINAL,
				A.TICKET, 
				STATUS_MOVIMENTO	= 6,
				MENSAGEM			= ''Inconsistência nos valores da venda.''
	FROM #TMPCALCULAVENDASDETALHES	A
	WHERE   A.TOTAL_VALOR_PAGO != A.TOTAL_VENDA  
			OR A.TOTAL_VENDA != A.TOTAL_VENDA_PARCELAS 
				OR A.TOTAL_VALOR_TICKET != TOTAL_VENDA_DESCONTO 
					OR A.TOTAL_VALOR_VENDA_BRUTA != A.TOTAL_VENDA_ITEM 
						OR A.QTDE_TOTAL != A.QTDE_TOTAL_ITEM  
							OR A.TOTAL_VALOR_TROCA != A.TOTAL_VALOR_TROCA_ITEM 
								OR A.QTDE_TOTAL_TROCA != A.QTDE_TOTAL_TROCA_ITEM
	
	--========================================Fim Validação dos Valores de Ticktes=================================================
	
	--=============================Inicio Validação de Vendedor da Troca e Vendedor do Produto=====================================
	
	--Valida Vendedor Produto
	INSERT INTO LJ_ETL_MONITOR_DETALHES 
		(	ORIGEM, 
		    CODIGO_FILIAL,
			FILIAL, 
			DIA,
			MES, 
			ANO, 
			TERMINAL, 
			TICKET,  
			STATUS_MOVIMENTO,
			MENSAGEM
		)
	SELECT		''1 - Loja'',
				A.CODIGO_FILIAL, 
				FILIAL = RTRIM(A.FILIAL),
				A.DIA,
				A.MES,
				A.ANO ,
				A.TERMINAL,
				A.TICKET, 
				STATUS_MOVIMENTO	= 6,
				MENSAGEM			= ''Inconsistência nos valores da venda. (Vendedor do Produto)''
	FROM #TMPCALCULAVENDASDETALHES	A
	INNER JOIN LOJA_VENDA_PRODUTO B
		ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 
		AND A.TICKET = B.TICKET
		AND A.DIA = DATEPART(DAY, B.DATA_VENDA)
		AND A.MES = DATEPART(MONTH, B.DATA_VENDA)
		AND A.ANO = DATEPART(YEAR, B.DATA_VENDA)
	LEFT JOIN LOJA_VENDA_VENDEDORES C
		ON B.CODIGO_FILIAL = C.CODIGO_FILIAL
		AND B.DATA_VENDA = C.DATA_VENDA
		AND B.TICKET = C.TICKET
		AND B.ID_VENDEDOR = C.ID_VENDEDOR	
	WHERE  C.ID_VENDEDOR IS NULL

	--Valida vendedor da Troca
	INSERT INTO LJ_ETL_MONITOR_DETALHES 
		(	ORIGEM, 
			CODIGO_FILIAL,
			FILIAL, 
			DIA,
			MES, 
			ANO, 
			TERMINAL, 
			TICKET,  
			STATUS_MOVIMENTO,
			MENSAGEM
		)
	SELECT		''1 - Loja'',
				A.CODIGO_FILIAL, 
				FILIAL = RTRIM(A.FILIAL),
				A.DIA,
				A.MES,
				A.ANO ,
				A.TERMINAL,
				A.TICKET, 
				STATUS_MOVIMENTO	= 6,
				MENSAGEM			= ''Inconsistência nos valores da venda. (Vendedor da Troca)''
	FROM #TMPCALCULAVENDASDETALHES	A
	INNER JOIN LOJA_VENDA_TROCA B
		ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 
		AND A.TICKET = B.TICKET
		AND A.DIA = DATEPART(DAY, B.DATA_VENDA)
		AND A.MES = DATEPART(MONTH, B.DATA_VENDA)
		AND A.ANO = DATEPART(YEAR, B.DATA_VENDA)
	LEFT JOIN LOJA_VENDA_VENDEDORES C
		ON B.CODIGO_FILIAL = C.CODIGO_FILIAL
		AND B.DATA_VENDA = C.DATA_VENDA
		AND B.TICKET = C.TICKET
		AND B.ID_VENDEDOR = C.ID_VENDEDOR	
	WHERE  C.ID_VENDEDOR IS NULL
		
	--=============================Fim Validação de Vendedor da Troca e Vendedor do Produto=====================================
	
	--========================================Inicio Validação de Venda Cupom e Redução Z=================================================

	-- Alimenta a Procedure através da Procedure LX_LJ_GERA_MOVIMENTO_ECF

	If Object_id (''LX_LJ_GERA_MOVIMENTO_ECF'', ''P'') Is Not Null 
	Begin
	
		Declare @CodigoFilial Char(6),
				@IdEquipamento varchar(20),
				@DataMovimento datetime,
				@TerminalControleFiscal char(3)
	
		Declare curGeraMovimentoEcf cursor for

		SELECT	LOJA_CONTROLE_FISCAL.CODIGO_FILIAL, 
				LOJA_CONTROLE_FISCAL.ID_EQUIPAMENTO, 
				LOJA_CONTROLE_FISCAL.DATA_FISCAL,
				LOJA_CONTROLE_FISCAL.TERMINAL
		FROM 
			LOJA_CONTROLE_FISCAL
		INNER JOIN #tmpCalculaVendasDia
			ON LOJA_CONTROLE_FISCAL.CODIGO_FILIAL = #tmpCalculaVendasDia.CODIGO_FILIAL
			AND DATEPART(DAY,	LOJA_CONTROLE_FISCAL.DATA_FISCAL)	= #tmpCalculaVendasDia.DIA 
			AND DATEPART(MONTH, LOJA_CONTROLE_FISCAL.DATA_FISCAL)	= #tmpCalculaVendasDia.MES 
			AND DATEPART(YEAR,	LOJA_CONTROLE_FISCAL.DATA_FISCAL)	= #tmpCalculaVendasDia.ANO  

		WHERE 
			DATA_FISCAL >= @DATA_MOVIMENTO_INICIAL AND DATA_FISCAL <= @DATA_MOVIMENTO_FINAL

		OPEN curGeraMovimentoEcf
	
		FETCH NEXT FROM curGeraMovimentoEcf into @CodigoFilial, @IdEquipamento, @DataMovimento, @TerminalControleFiscal

		WHILE @@FETCH_STATUS = 0
		BEGIn

			PRINT ''Executando procedure LX_LJ_GERA_MOVIMENTO_ECF - Código Filial:'' 
				+ @CodigoFilial + '' - Terminal: '' 
				+ @TerminalControleFiscal + '' - Id_Equipamento: ''
				+ @IdEquipamento + '' - Data Movimento: '' 
				+   RIGHT(''00'' + CONVERT(VARCHAR(2), DATEPART(DAY,@DataMovimento)), 2) + ''/'' +  RIGHT(''00'' + CONVERT(VARCHAR(2), DATEPART(MONTH,@DataMovimento)), 2) + ''/'' + CONVERT(CHAR(4),  DATEPART(YEAR,@DataMovimento) )

			BEGIN TRY

				EXEC LX_LJ_GERA_MOVIMENTO_ECF @CodigoFilial, @IdEquipamento, @DataMovimento, null	
			
			END TRY
			BEGIN CATCH
			
				PRINT ''''
				PRINT ''Ocorreu o seguinte erro ao executar a procedure do Mapa Resumo (LX_LJ_GERA_MOVIMENTO_ECF): '' + ERROR_MESSAGE()
				PRINT ''Erro registrado na tabela LJ_ETL_MONITOR_DETALHES''
				PRINT ''''

				INSERT INTO LJ_ETL_MONITOR_DETALHES 
						(ORIGEM, CODIGO_FILIAL, FILIAL, DIA, MES, ANO, TERMINAL, TICKET,  STATUS_MOVIMENTO, MENSAGEM)
				VALUES	(''1 - Loja'', @CodigoFilial, '''', DAY(@DataMovimento), MONTH(@DataMovimento), YEAR(@DataMovimento), @TerminalControleFiscal, '''', 6, ''Ocorreu o seguinte erro ao executar a procedure do Mapa Resumo (LX_LJ_GERA_MOVIMENTO_ECF): '' + ERROR_MESSAGE())

			END CATCH

			FETCH NEXT FROM curGeraMovimentoEcf into @CodigoFilial, @IdEquipamento, @DataMovimento, @TerminalControleFiscal

		END

		CLOSE  curGeraMovimentoEcf
		DEALLOCATE curGeraMovimentoEcf

	End
	---

	--Efetua o calculo de total de venda bruta e total de venda liquida		
	SELECT
			LFC.CODIGO_FILIAL, 
			FILIAL = RTRIM(LFC.FILIAL),
			DIA = DATEPART(DAY, LFC.DATA_VENDA),
			MES = DATEPART(MONTH, LFC.DATA_VENDA),
			ANO = DATEPART(YEAR, LFC.DATA_VENDA),
			LFC.TERMINAL,
			TOTAL_BRUTO_VENDA =	 SUM(VALOR_VENDA_BRUTA), 
			TOTAL_LIQUIDO_VENDA	= SUM(VALOR_LIQUIDO_TOTAL) 
	into #tmpLfEcfItem
	FROM
		(SELECT
			CODIGO_FILIAL,
			FILIAL, 
			DATA_VENDA,
			TERMINAL, 
			VALOR_VENDA_BRUTA	= SUM(VALOR_VENDA_BRUTA),
			PRECO_BRUTO			= SUM(PRECO_BRUTO),  
			VALOR_CANCELADO		= SUM(VALOR_CANCELADO), 
			VALOR_DESCONTO		= SUM(VALOR_DESCONTO),
			VALOR_LIQUIDO_TOTAL = SUM(VALOR_LIQUIDO_TOTAL),
			ICMS 			
		FROM 
			(
				SELECT 
					'''' AS TOT_CF, A.CODIGO_FILIAL, A.FILIAL, A.TERMINAL, A.DATA_VENDA, A.LANCAMENTO_CAIXA, A.TICKET, A.ALIQUOTA_ICMS AS ICMS, 
					A.QTDE, A.PRECO_BRUTO, A.VALOR_VENDA_BRUTA, A.VALOR_LIQUIDO_TOTAL, A.VALOR_DESCONTO, A.VALOR_ACRESCIMO, A.QTDE_CANCELADA, A.VALOR_CANCELADO, A.ID_EQUIPAMENTO
				FROM
					LJ_LF_ECF_ITEM A		
				INNER JOIN #tmpCalculaVendasDiaTerminal B
				ON	A.FILIAL = B.FILIAL 
					AND A.TERMINAL = B.TERMINAL 					
					AND DATEPART(DAY, A.DATA_VENDA) = B.DIA 
					AND DATEPART(MONTH, A.DATA_VENDA) = B.MES
					AND DATEPART(YEAR, A.DATA_VENDA) = B.ANO
			) A
		GROUP BY 
			CODIGO_FILIAL, FILIAL,  DATA_VENDA, TERMINAL, ICMS
			) LFC
	GROUP BY 
		LFC.CODIGO_FILIAL,LFC.FILIAL, LFC.DATA_VENDA, LFC.TERMINAL
	
	INSERT INTO LJ_ETL_MONITOR_DETALHES 
	(ORIGEM, CODIGO_FILIAL,FILIAL, DIA,MES, ANO, TERMINAL, STATUS_MOVIMENTO,MENSAGEM)
	
	SELECT ''1 - Loja'',
		   A.CODIGO_FILIAL, 
		   FILIAL = RTRIM(A.FILIAL),
		   A.DIA,
		   A.MES,
		   A.ANO ,
		   A.TERMINAL,		   
		   STATUS_MOVIMENTO	= 6,		   
		   MENSAGEM			= CASE WHEN B.CODIGO_FILIAL IS NULL 
										THEN ''Redução Z Não Encontrada.''  
												ELSE ''Há divergências entre o movimento e a redução Z'' END
	FROM  #tmpLfEcfItem A
	LEFT JOIN 	LOJA_CONTROLE_FISCAL b(NOLOCK)
	ON A.CODIGO_FILIAL = B.CODIGO_FILIAL  
		AND A.TERMINAL = B.TERMINAL 
		AND A.DIA = DATEPART(DAY, B.DATA_FISCAL)
		AND A.MES = DATEPART(MONTH, B.DATA_FISCAL)
		AND A.ANO = DATEPART(YEAR, B.DATA_FISCAL)	
	WHERE  (B.TOTAL_BRUTO != 0 OR B.CODIGO_FILIAL IS NULL )	  AND
	    
		(ABS(CAST(ISNULL(B.TOTAL_BRUTO,0) /*+ ISNULL(B.TOTAL_ACRESCIMO, 0)*/ AS DECIMAL(14,2)) - 
			CAST(ISNULL(A.TOTAL_BRUTO_VENDA,0) AS DECIMAL(14,2))) > 0.99 )
		
		OR (ABS(CAST(ISNULL(B.TOTAL_BRUTO,0) /*+ ISNULL(B.TOTAL_ACRESCIMO,0)*/ - ISNULL(B.TOTAL_CANCELADO,0) - 
			ISNULL(B.TOTAL_DESCONTO,0) AS DECIMAL(14,2)) - CAST(ISNULL(A.TOTAL_LIQUIDO_VENDA,0) AS DECIMAL(14,2))) > 0.99 )	
		
		
	--========================================Fim Validação de Venda Cupom e Redução Z=================================================
	
	--========================================Inicio Validação do processamento do ETL=================================================
	
	INSERT INTO LJ_ETL_MONITOR_DETALHES 
	(CODIGO_FILIAL,FILIAL, DIA,MES, ANO,STATUS_MOVIMENTO,MENSAGEM,ID_ETL_ARQUIVO,ID_ETL_PROCESSO,DATA_PROCESSO, ORIGEM)	
	
	SELECT A.CODIGO_FILIAL, 
		   FILIAL = RTRIM(A.FILIAL),
		   A.DIA,
		   A.MES,
		   A.ANO ,		   	   
		   STATUS_MOVIMENTO	= 
		   CASE WHEN C.COD_RETORNO = -2 THEN 3
				WHEN B.PROCESSADO  != 3 THEN 4
				WHEN C.COD_RETORNO = -1 THEN 5 END,
		   MENSAGEM	= CASE WHEN C.ID_ETL_ARQUIVO IS NULL THEN ''Arquivo aguardando processamento''  ELSE C.CRITICA_PROCESSO  END,
		   ISNULL(B.ID_ETL_ARQUIVO, 0),
		   ISNULL(C.ID_ETL_PROCESSO, 0),
		   C.DATA_HORA_PROCESSO,
		   ORIGEM = ''1 - Loja'' 
	FROM #tmpCalculaVendasDia A
	INNER JOIN LJ_ETL_ARQUIVO B (NOLOCK)
	ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 
		AND A.DIA = DATEPART(DAY, DATA_HORA_CRIACAO )
			AND A.MES = DATEPART(MONTH, DATA_HORA_CRIACAO )
				AND A.ANO = DATEPART(YEAR, DATA_HORA_CRIACAO )
	LEFT JOIN LJ_ETL_PROCESSO C (NOLOCK)
		ON C.ID_ETL_ARQUIVO = B.ID_ETL_ARQUIVO 
	INNER JOIN LJ_LX_ETL_TIPO D (NOLOCK)
		ON B.ID_ETL_TIPO = D.ID_ETL_TIPO 
	WHERE ( C.COD_RETORNO  = - 1 OR C.COD_RETORNO = -2 OR B.PROCESSADO != 3) 
		AND D.ORIGEM = 1
	
	--========================================Fim Validação do processamento do ETL=================================================
		
	--========================================Inicio Validação de Quebra de Tickets=================================================
	
	DECLARE CUR_LOJAS CURSOR FAST_FORWARD FOR
		
	SELECT 
		A.CODIGO_FILIAL, 
		B.FILIAL,		
		DATEPART(DAY, DATA_VENDA ) DIA,
		DATEPART(MONTH, DATA_VENDA) MES,
		DATEPART(YEAR , DATA_VENDA) ANO,
		MIN(RIGHT(REPLICATE(''0'', 8) + CONVERT(VARCHAR, CONVERT(INT, A.TICKET)), 8)), 
		MAX(RIGHT(REPLICATE(''0'', 8) + CONVERT(VARCHAR, CONVERT(INT, A.TICKET)), 8))
	FROM 
		LOJA_VENDA A (NOLOCK)
	INNER JOIN #tmpCalculaVendasDia B			
	ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 				
			AND DATEPART(DAY, DATA_VENDA)  = B.DIA
				AND DATEPART(MONTH, DATA_VENDA) = B.MES	
					AND DATEPART(YEAR , DATA_VENDA) = B.ANO 
	WHERE  ISNUMERIC(A.TICKET) = 1 AND LEN(RTRIM(A.TICKET)) = 8
		
	GROUP BY 
		A.CODIGO_FILIAL, 
		B.FILIAL,		
		DATEPART(DAY, DATA_VENDA) ,
		DATEPART(MONTH, DATA_VENDA),
		DATEPART(YEAR , DATA_VENDA)	
	HAVING
		CONVERT(INT, MAX(RIGHT(REPLICATE(''0'', 8) + 
		CONVERT(VARCHAR, CONVERT(INT, TICKET)), 8))) - 
		CONVERT(INT, MIN(RIGHT(REPLICATE(''0'', 8) + 
		CONVERT(VARCHAR, CONVERT(INT, TICKET)), 8))) <= 1500
	ORDER BY 
		A.CODIGO_FILIAL, 
		B.FILIAL, 		
		DATEPART(DAY, DATA_VENDA) ,
		DATEPART(MONTH, DATA_VENDA),
		DATEPART(YEAR , DATA_VENDA)

	DECLARE @RESULTADO TABLE 
		(CODIGO_FILIAL VARCHAR(6), FILIAL VARCHAR(25), DIA INT, MES INT, ANO INT, TICKET VARCHAR(8))

	OPEN CUR_LOJAS
	FETCH NEXT FROM CUR_LOJAS INTO @CODIGO_FILIAL_CUR, @FILIAL_CUR, @DIA_CUR, @MES_CUR, @ANO_CUR, @MIN_TICKET, @MAX_TICKET

	WHILE @@FETCH_STATUS = 0
	BEGIN
		WHILE @MIN_TICKET < @MAX_TICKET
		BEGIN
			IF NOT EXISTS 
			(SELECT 1 FROM LOJA_VENDA (NOLOCK) 
					WHERE CODIGO_FILIAL = @CODIGO_FILIAL_CUR 						
							AND TICKET = @MIN_TICKET 
								AND DATEPART(DAY, DATA_VENDA) = @DIA_CUR 
									AND DATEPART(MONTH, DATA_VENDA) = @MES_CUR
										AND DATEPART(YEAR , DATA_VENDA) = @ANO_CUR)
					
				INSERT INTO @RESULTADO
					(CODIGO_FILIAL, FILIAL, DIA, MES, ANO, TICKET)
				VALUES
					(@CODIGO_FILIAL_CUR,@FILIAL_CUR, @DIA_CUR, @MES_CUR , @ANO_CUR , @MIN_TICKET)
					
			SELECT @MIN_TICKET = RIGHT(REPLICATE(''0'', 8) + CONVERT(VARCHAR, CONVERT(INT, @MIN_TICKET) + 1), 8)
		END

		FETCH NEXT FROM CUR_LOJAS INTO @CODIGO_FILIAL_CUR, @FILIAL_CUR, @DIA_CUR, @MES_CUR, @ANO_CUR, @MIN_TICKET, @MAX_TICKET
	END

	CLOSE CUR_LOJAS
	DEALLOCATE CUR_LOJAS
	
	INSERT INTO LJ_ETL_MONITOR_DETALHES  
	(ORIGEM, CODIGO_FILIAL, FILIAL, DIA, MES, ANO, TICKET, STATUS_MOVIMENTO, MENSAGEM)
	SELECT ''1 - Loja'',
		   A.CODIGO_FILIAL, 
		   FILIAL = RTRIM(A.FILIAL),		   
		   A.DIA,
		   A.MES,
		   A.ANO ,	   	 
		   A.TICKET,  
		   STATUS_MOVIMENTO	= 6	   ,
		   MENSAGEM = ''Ticket não encontrado no banco de dados.''
	FROM @RESULTADO A
	ORDER BY A.TICKET
	 
	--========================================Fim Validação de Quebra de Tickets=================================================
	
	--========================================Inicio Grava conferencia=================================================
	INSERT INTO LJ_ETL_CONFERENCIA 		
	SELECT	A.CODIGO_FILIAL,
			A.FILIAL,
			DATA_MOVIMENTO = CONVERT(VARCHAR(4),A.ANO) + RIGHT(''00'' + CONVERT(VARCHAR(2),A.MES ), 2) + RIGHT(''00'' + CONVERT(VARCHAR(2),A.DIA), 2)
	FROM #tmpCalculaVendasDia A 
	LEFT JOIN 
	(
		SELECT	A.CODIGO_FILIAL,
				A.FILIAL, 
				A.DIA, 
				A.MES, 
				A.ANO 
		FROM LJ_ETL_MONITOR_DETALHES A (NOLOCK)
		GROUP BY	A.CODIGO_FILIAL,
					A.FILIAL, 
					A.DIA, 
					A.MES, 
					A.ANO    
	) B
	ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 		 
		AND A.DIA = B.DIA
			AND A.MES = B.MES 
				AND A.ANO = B.ANO 
	
	LEFT JOIN LJ_ETL_CONFERENCIA C (NOLOCK)
	ON A.CODIGO_FILIAL = C.CODIGO_FILIAL 		
			AND A.DIA = DATEPART(DAY, C.DATA_MOVIMENTO)
				AND A.MES = DATEPART(MONTH, C.DATA_MOVIMENTO)
					AND A.ANO = DATEPART(YEAR, C.DATA_MOVIMENTO)
					
	WHERE B.CODIGO_FILIAL IS NULL  AND B.DIA IS NULL AND B.MES IS NULL AND B.ANO IS NULL
			AND C.CODIGO_FILIAL IS NULL AND C.FILIAL IS NULL AND C.DATA_MOVIMENTO IS NULL
	
	--========================================Fim Grava conferencia=================================================
		
	--Agrupa os registros conferidos e com critica e alimenta a tabela LJ_ETL_MONITOR	
	
	UPDATE A
		SET     A.DIA1 =    CASE WHEN ISNULL(B.DIA1  ,0) = 0 THEN ISNULL(A.DIA1  ,0)  ELSE ISNULL(B.DIA1  , 0) END,
				A.DIA2 = 	CASE WHEN ISNULL(B.DIA2  ,0) = 0 THEN ISNULL(A.DIA2  ,0)  ELSE ISNULL(B.DIA2  , 0) END,
				A.DIA3 = 	CASE WHEN ISNULL(B.DIA3  ,0) = 0 THEN ISNULL(A.DIA3  ,0)  ELSE ISNULL(B.DIA3  , 0) END,
				A.DIA4 = 	CASE WHEN ISNULL(B.DIA4  ,0) = 0 THEN ISNULL(A.DIA4  ,0)  ELSE ISNULL(B.DIA4  , 0) END,
				A.DIA5 = 	CASE WHEN ISNULL(B.DIA5  ,0) = 0 THEN ISNULL(A.DIA5  ,0)  ELSE ISNULL(B.DIA5  , 0) END,
				A.DIA6 = 	CASE WHEN ISNULL(B.DIA6  ,0) = 0 THEN ISNULL(A.DIA6  ,0)  ELSE ISNULL(B.DIA6  , 0) END,
				A.DIA7 = 	CASE WHEN ISNULL(B.DIA7  ,0) = 0 THEN ISNULL(A.DIA7  ,0)  ELSE ISNULL(B.DIA7  , 0) END,
				A.DIA8 = 	CASE WHEN ISNULL(B.DIA8  ,0) = 0 THEN ISNULL(A.DIA8  ,0)  ELSE ISNULL(B.DIA8  , 0) END,
				A.DIA9 = 	CASE WHEN ISNULL(B.DIA9  ,0) = 0 THEN ISNULL(A.DIA9  ,0)  ELSE ISNULL(B.DIA9  , 0) END,
				A.DIA10 =	CASE WHEN ISNULL(B.DIA10 ,0) = 0 THEN ISNULL(A.DIA10 ,0)  ELSE ISNULL(B.DIA10 , 0) END,
				A.DIA11 =	CASE WHEN ISNULL(B.DIA11 ,0) = 0 THEN ISNULL(A.DIA11 ,0)  ELSE ISNULL(B.DIA11 , 0) END,
				A.DIA12 =	CASE WHEN ISNULL(B.DIA12 ,0) = 0 THEN ISNULL(A.DIA12 ,0)  ELSE ISNULL(B.DIA12 , 0) END,
				A.DIA13 =	CASE WHEN ISNULL(B.DIA13 ,0) = 0 THEN ISNULL(A.DIA13 ,0)  ELSE ISNULL(B.DIA13 , 0) END,
				A.DIA14 =	CASE WHEN ISNULL(B.DIA14 ,0) = 0 THEN ISNULL(A.DIA14 ,0)  ELSE ISNULL(B.DIA14 , 0) END,
				A.DIA15 =	CASE WHEN ISNULL(B.DIA15 ,0) = 0 THEN ISNULL(A.DIA15 ,0)  ELSE ISNULL(B.DIA15 , 0) END,
				A.DIA16 =	CASE WHEN ISNULL(B.DIA16 ,0) = 0 THEN ISNULL(A.DIA16 ,0)  ELSE ISNULL(B.DIA16 , 0) END,
				A.DIA17 =	CASE WHEN ISNULL(B.DIA17 ,0) = 0 THEN ISNULL(A.DIA17 ,0)  ELSE ISNULL(B.DIA17 , 0) END,
				A.DIA18 =	CASE WHEN ISNULL(B.DIA18 ,0) = 0 THEN ISNULL(A.DIA18 ,0)  ELSE ISNULL(B.DIA18 , 0) END,
				A.DIA19 =	CASE WHEN ISNULL(B.DIA19 ,0) = 0 THEN ISNULL(A.DIA19 ,0)  ELSE ISNULL(B.DIA19 , 0) END,
				A.DIA20 =	CASE WHEN ISNULL(B.DIA20 ,0) = 0 THEN ISNULL(A.DIA20 ,0)  ELSE ISNULL(B.DIA20 , 0) END,
				A.DIA21 =	CASE WHEN ISNULL(B.DIA21 ,0) = 0 THEN ISNULL(A.DIA21 ,0)  ELSE ISNULL(B.DIA21 , 0) END,
				A.DIA22 =	CASE WHEN ISNULL(B.DIA22 ,0) = 0 THEN ISNULL(A.DIA22 ,0)  ELSE ISNULL(B.DIA22 , 0) END,
				A.DIA23 =	CASE WHEN ISNULL(B.DIA23 ,0) = 0 THEN ISNULL(A.DIA23 ,0)  ELSE ISNULL(B.DIA23 , 0) END,
				A.DIA24 =	CASE WHEN ISNULL(B.DIA24 ,0) = 0 THEN ISNULL(A.DIA24 ,0)  ELSE ISNULL(B.DIA24 , 0) END,
				A.DIA25 =	CASE WHEN ISNULL(B.DIA25 ,0) = 0 THEN ISNULL(A.DIA25 ,0)  ELSE ISNULL(B.DIA25 , 0) END,
				A.DIA26 =	CASE WHEN ISNULL(B.DIA26 ,0) = 0 THEN ISNULL(A.DIA26 ,0)  ELSE ISNULL(B.DIA26 , 0) END,
				A.DIA27 =	CASE WHEN ISNULL(B.DIA27 ,0) = 0 THEN ISNULL(A.DIA27 ,0)  ELSE ISNULL(B.DIA27 , 0) END,
				A.DIA28 =	CASE WHEN ISNULL(B.DIA28 ,0) = 0 THEN ISNULL(A.DIA28 ,0)  ELSE ISNULL(B.DIA28 , 0) END,
				A.DIA29 =	CASE WHEN ISNULL(B.DIA29 ,0) = 0 THEN ISNULL(A.DIA29 ,0)  ELSE ISNULL(B.DIA29 , 0) END,
				A.DIA30 =	CASE WHEN ISNULL(B.DIA30 ,0) = 0 THEN ISNULL(A.DIA30 ,0)  ELSE ISNULL(B.DIA30 , 0) END,
				A.DIA31 =	CASE WHEN ISNULL(B.DIA31 ,0) = 0 THEN ISNULL(A.DIA31 ,0)  ELSE ISNULL(B.DIA31 , 0) END
	FROM LJ_ETL_MONITOR A	
	LEFT JOIN 
	(
		SELECT	A.CODIGO_FILIAL , A.FILIAL , A.EMPRESA, A.UF,  A.MES , A.ANO ,
				DIA1 =   MAX(DIA1 ),DIA2 =   MAX(DIA2 ),DIA3 =   MAX(DIA3 ),DIA4 =   MAX(DIA4 ),
				DIA5 =   MAX(DIA5 ),DIA6 =   MAX(DIA6 ),DIA7 =   MAX(DIA7 ),DIA8 =   MAX(DIA8 ),
				DIA9 =   MAX(DIA9 ),DIA10 =  MAX(DIA10),DIA11 =  MAX(DIA11),DIA12 =  MAX(DIA12),DIA13 =  MAX(DIA13),
				DIA14 =  MAX(DIA14),DIA15 =  MAX(DIA15),DIA16 =  MAX(DIA16),DIA17 =  MAX(DIA17),DIA18 =  MAX(DIA18),
				DIA19 =  MAX(DIA19),DIA20 =  MAX(DIA20),DIA21 =  MAX(DIA21),DIA22 =  MAX(DIA22),DIA23 =  MAX(DIA23),
				DIA24 =  MAX(DIA24),DIA25 =  MAX(DIA25),DIA26 =  MAX(DIA26),DIA27 =  MAX(DIA27),DIA28 =  MAX(DIA28),
				DIA29 =  MAX(DIA29),DIA30 =  MAX(DIA30),DIA31 =  MAX(DIA31)
		FROM 
		(
					
			--SELECT	FF.CODIGO_FILIAL,
			--		FF.FILIAL, 
			--		F.EMPRESA,
			--		G.UF,
			--		MES = DATEPART(MONTH, A.DATA),
			--		ANO = DATEPART(YEAR, A.DATA),
			--		DIA1 =  CASE WHEN DATEPART(DAY, A.DATA) = 1 THEN 1 ELSE 0 END,
			--		DIA2 =  CASE WHEN DATEPART(DAY, A.DATA) = 2 THEN 1 ELSE 0 END,
			--		DIA3 =  CASE WHEN DATEPART(DAY, A.DATA) = 3 THEN 1 ELSE 0 END,
			--		DIA4 =  CASE WHEN DATEPART(DAY, A.DATA) = 4 THEN 1 ELSE 0 END,
			--		DIA5 =  CASE WHEN DATEPART(DAY, A.DATA) = 5 THEN 1 ELSE 0 END,
			--		DIA6 =  CASE WHEN DATEPART(DAY, A.DATA) = 6 THEN 1 ELSE 0 END,
			--		DIA7 =  CASE WHEN DATEPART(DAY, A.DATA) = 7 THEN 1 ELSE 0 END,
			--		DIA8 =  CASE WHEN DATEPART(DAY, A.DATA) = 8 THEN 1 ELSE 0 END,
			--		DIA9 =  CASE WHEN DATEPART(DAY, A.DATA) = 9 THEN 1 ELSE 0 END,
			--		DIA10 =  CASE WHEN DATEPART(DAY, A.DATA) = 10 THEN 1 ELSE 0 END,
			--		DIA11 =  CASE WHEN DATEPART(DAY, A.DATA) = 11 THEN 1 ELSE 0 END,
			--		DIA12 =  CASE WHEN DATEPART(DAY, A.DATA) = 12 THEN 1 ELSE 0 END,							
			--		DIA13 =  CASE WHEN DATEPART(DAY, A.DATA) = 13 THEN 1 ELSE 0 END,
			--		DIA14 =  CASE WHEN DATEPART(DAY, A.DATA) = 14 THEN 1 ELSE 0 END,
			--		DIA15 =  CASE WHEN DATEPART(DAY, A.DATA) = 15 THEN 1 ELSE 0 END,
			--		DIA16 =  CASE WHEN DATEPART(DAY, A.DATA) = 16 THEN 1 ELSE 0 END,
			--		DIA17 =  CASE WHEN DATEPART(DAY, A.DATA) = 17 THEN 1 ELSE 0 END,
			--		DIA18 =  CASE WHEN DATEPART(DAY, A.DATA) = 18 THEN 1 ELSE 0 END,
			--		DIA19 =  CASE WHEN DATEPART(DAY, A.DATA) = 19 THEN 1 ELSE 0 END,		
			--		DIA20 =  CASE WHEN DATEPART(DAY, A.DATA) = 20 THEN 1 ELSE 0 END,
			--		DIA21 =  CASE WHEN DATEPART(DAY, A.DATA) = 21 THEN 1 ELSE 0 END,
			--		DIA22 =  CASE WHEN DATEPART(DAY, A.DATA) = 22 THEN 1 ELSE 0 END,
			--		DIA23 =  CASE WHEN DATEPART(DAY, A.DATA) = 23 THEN 1 ELSE 0 END,
			--		DIA24 =  CASE WHEN DATEPART(DAY, A.DATA) = 24 THEN 1 ELSE 0 END,
			--		DIA25 =  CASE WHEN DATEPART(DAY, A.DATA) = 25 THEN 1 ELSE 0 END,
			--		DIA26 =  CASE WHEN DATEPART(DAY, A.DATA) = 26 THEN 1 ELSE 0 END,
			--		DIA27 =  CASE WHEN DATEPART(DAY, A.DATA) = 27 THEN 1 ELSE 0 END,
			--		DIA28 =  CASE WHEN DATEPART(DAY, A.DATA) = 28 THEN 1 ELSE 0 END,
			--		DIA29 =  CASE WHEN DATEPART(DAY, A.DATA) = 29 THEN 1 ELSE 0 END,
			--		DIA30 =  CASE WHEN DATEPART(DAY, A.DATA) = 30 THEN 1 ELSE 0 END,																		
			--		DIA31 =  CASE WHEN DATEPART(DAY, A.DATA) = 31 THEN 1 ELSE 0 END
			--FROM LJ_LOJA_FECHADA A
						
			--JOIN LOJAS_VAREJO FF (NOLOCK)
			--	ON FF.CODIGO_FILIAL = A.CODIGO_FILIAL									
			--JOIN FILIAIS F (NOLOCK)
			--	ON FF.FILIAL = F.FILIAL 			
			--JOIN CADASTRO_CLI_FOR G (NOLOCK)
			--ON F.CLIFOR = G.CLIFOR
			
			--WHERE A.DATA >= @DATA_MOVIMENTO_INICIAL AND A.DATA <= @DATA_MOVIMENTO_FINAL
			--			AND (G.UF = @UF or @UF IS NULL)
			--				AND (F.COD_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)								
			--					AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)
		
			--UNION
		
			SELECT	B.CODIGO_FILIAL,
					B.FILIAL, 
					B.EMPRESA,
					B.UF,
					A.MES,
					A.ANO,
					DIA1 =  CASE WHEN A.DIA = 1 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA2 =  CASE WHEN A.DIA = 2 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA3 =  CASE WHEN A.DIA = 3 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA4 =  CASE WHEN A.DIA = 4 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA5 =  CASE WHEN A.DIA = 5 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA6 =  CASE WHEN A.DIA = 6 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA7 =  CASE WHEN A.DIA = 7 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA8 =  CASE WHEN A.DIA = 8 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA9 =  CASE WHEN A.DIA = 9 THEN  MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA10 = CASE WHEN A.DIA = 10 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA11 = CASE WHEN A.DIA = 11 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA12 = CASE WHEN A.DIA = 12 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA13 = CASE WHEN A.DIA = 13 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA14 = CASE WHEN A.DIA = 14 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA15 = CASE WHEN A.DIA = 15 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA16 = CASE WHEN A.DIA = 16 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA17 = CASE WHEN A.DIA = 17 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA18 = CASE WHEN A.DIA = 18 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA19 = CASE WHEN A.DIA = 19 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA20 = CASE WHEN A.DIA = 20 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA21 = CASE WHEN A.DIA = 21 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA22 = CASE WHEN A.DIA = 22 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA23 = CASE WHEN A.DIA = 23 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA24 = CASE WHEN A.DIA = 24 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA25 = CASE WHEN A.DIA = 25 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA26 = CASE WHEN A.DIA = 26 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA27 = CASE WHEN A.DIA = 27 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA28 = CASE WHEN A.DIA = 28 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA29 = CASE WHEN A.DIA = 29 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA30 = CASE WHEN A.DIA = 30 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END,
					DIA31 = CASE WHEN A.DIA = 31 THEN MAX(STATUS_MOVIMENTO) ELSE 0 END
			FROM LJ_ETL_MONITOR_DETALHES A
			INNER JOIN #tmpCalculaVendasDia B			
			ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 	
			AND A.FILIAL = B.FILIAL 					
				AND A.DIA = B.DIA
				AND A.MES = B.MES
				AND A.ANO = B.ANO
			
			GROUP BY B.CODIGO_FILIAL,
					 B.FILIAL ,					 
					 B.EMPRESA,
					 B.UF,
					 A.MES,
					 A.ANO,
					 A.DIA 
			UNION
			
			SELECT	FF.CODIGO_FILIAL,
					FF.FILIAL, 	
					F.EMPRESA,
					G.UF, 				
					MES = DATEPART(MONTH,A.DATA_MOVIMENTO),
					ANO = DATEPART(YEAR,A.DATA_MOVIMENTO),					
					DIA1 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 1 THEN  7 ELSE 0 END,
					DIA2 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 2 THEN  7 ELSE 0 END,
					DIA3 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 3 THEN  7 ELSE 0 END,
					DIA4 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 4 THEN  7 ELSE 0 END,
					DIA5 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 5 THEN  7 ELSE 0 END,
					DIA6 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 6 THEN  7 ELSE 0 END,
					DIA7 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 7 THEN  7 ELSE 0 END,
					DIA8 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 8 THEN  7 ELSE 0 END,
					DIA9 =  CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 9 THEN  7 ELSE 0 END,
					DIA10 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 10 THEN 7 ELSE 0 END,
					DIA11 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 11 THEN 7 ELSE 0 END,
					DIA12 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 12 THEN 7 ELSE 0 END,
					DIA13 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 13 THEN 7 ELSE 0 END,
					DIA14 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 14 THEN 7 ELSE 0 END,
					DIA15 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 15 THEN 7 ELSE 0 END,
					DIA16 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 16 THEN 7 ELSE 0 END,
					DIA17 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 17 THEN 7 ELSE 0 END,
					DIA18 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 18 THEN 7 ELSE 0 END,
					DIA19 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 19 THEN 7 ELSE 0 END,
					DIA20 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 20 THEN 7 ELSE 0 END,
					DIA21 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 21 THEN 7 ELSE 0 END,
					DIA22 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 22 THEN 7 ELSE 0 END,
					DIA23 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 23 THEN 7 ELSE 0 END,
					DIA24 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 24 THEN 7 ELSE 0 END,
					DIA25 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 25 THEN 7 ELSE 0 END,
					DIA26 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 26 THEN 7 ELSE 0 END,
					DIA27 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 27 THEN 7 ELSE 0 END,
					DIA28 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 28 THEN 7 ELSE 0 END,
					DIA29 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 29 THEN 7 ELSE 0 END,
					DIA30 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 30 THEN 7 ELSE 0 END,
					DIA31 = CASE WHEN DATEPART(DAY, DATA_MOVIMENTO) = 31 THEN 7 ELSE 0 END
			FROM LJ_ETL_CONFERENCIA  A (NOLOCK)
						
			JOIN LOJAS_VAREJO FF (NOLOCK)
				ON FF.CODIGO_FILIAL = A.CODIGO_FILIAL						
								 
			JOIN FILIAIS F (NOLOCK)
				ON FF.FILIAL = F.FILIAL
			
			JOIN CADASTRO_CLI_FOR G (NOLOCK)
				ON F.CLIFOR = G.CLIFOR
			
			WHERE A.DATA_MOVIMENTO >= @DATA_MOVIMENTO_INICIAL AND A.DATA_MOVIMENTO <= @DATA_MOVIMENTO_FINAL		   
					AND (G.UF = @UF or @UF IS NULL)
						AND (FF.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)								
							AND (F.EMPRESA = @EMPRESA OR @EMPRESA IS NULL)
			
			
			GROUP BY FF.CODIGO_FILIAL,
					 FF.FILIAL, 
					 F.EMPRESA, 
					 A.DATA_MOVIMENTO,
					 G.UF
				 
		) A
		GROUP BY	A.CODIGO_FILIAL,
					A.FILIAL, 
					A.EMPRESA,
					A.UF, 					 
					A.MES,
					A.ANO
				 
	) B
	ON A.CODIGO_FILIAL = B.CODIGO_FILIAL 
	AND A.FILIAL = B.FILIAL 	
	AND A.EMPRESA = B.EMPRESA 
	AND A.UF = B.UF
	AND A.MES = B.MES
	AND A.ANO = B.ANO
	
		
	SET NOCOUNT OFF
	SET ANSI_WARNINGS ON

END TRY
BEGIN CATCH

    DECLARE @ERRORMESSAGE  NVARCHAR(4000),
            @ERRORSEVERITY INT,
            @ERRORSTATE INT

    SELECT	@ERRORMESSAGE = ERROR_MESSAGE(),
            @ERRORSEVERITY = ERROR_SEVERITY(),
            @ERRORSTATE = ERROR_STATE()

    RAISERROR ( @ERRORMESSAGE, @ERRORSEVERITY, @ERRORSTATE )

    SELECT
        @ERRORMESSAGE,
        @ERRORSEVERITY,
        @ERRORSTATE

END CATCH
')
GO
/*
------------------------------------------------------------------------------------------------------
-- CRIAÇÃO DA PROCEDURE LX_LJ_ETL_ATUALIZA_VERSAO_ARQUIVO
------------------------------------------------------------------------------------------------------
*/

If Object_id ('LX_LJ_ETL_ATUALIZA_VERSAO_ARQUIVO', 'P') Is Not Null 
  Drop Procedure LX_LJ_ETL_ATUALIZA_VERSAO_ARQUIVO; 
GO
IF NOT EXISTS ( SELECT 1 FROM sys.tables t
            JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('Faturamento', 'Empresa') AND s.name = 'dbo'
)
BEGIN
    RAISERROR('ERRO: Estrutura incompatível com o banco do LinxERP.', 16, 1)
    RETURN
END
EXEC('
CREATE PROCEDURE [dbo].[LX_LJ_ETL_ATUALIZA_VERSAO_ARQUIVO]
@CODIGO_FILIAL AS CHAR(6),
@VERSAO AS VARCHAR(10)
AS
BEGIN

	BEGIN TRY

		DECLARE @QTD INT = 0
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			UPDATE TOP (10000) LJ_ETL_ARQUIVO
							SET          VERSAO = @VERSAO
							WHERE  CODIGO_FILIAL = @CODIGO_FILIAL
										AND PROCESSADO = 1
										AND VERSAO <> @VERSAO

			SET @QTD = @@rowcount
		END

	END TRY
	BEGIN CATCH

		DECLARE @ErrorMessage NVARCHAR(4000)
					DECLARE @ErrorSeverity INT
					DECLARE @ErrorState INT

		SELECT       @ErrorMessage = ERROR_MESSAGE(),
							@ErrorSeverity = ERROR_SEVERITY(),
							@ErrorState = ERROR_STATE()

		RAISERROR (
							@ErrorMessage, -- Message text.
							@ErrorSeverity, -- Severity.
							@ErrorState -- State.
						)

	END CATCH

END
')
GO
/*
------------------------------------------------------------------------------------------------------
-- CRIAÇÃO DA PROCEDURE LX_LJ_ETL_LIMPEZA_TABELAS
------------------------------------------------------------------------------------------------------
*/

IF Object_id ('LX_LJ_ETL_LIMPEZA_TABELAS', 'P') Is Not Null 
  DROP PROCEDURE LX_LJ_ETL_LIMPEZA_TABELAS;
GO
IF NOT EXISTS ( SELECT 1 FROM sys.tables t
            JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('Faturamento', 'Empresa') AND s.name = 'dbo'
)
BEGIN
    RAISERROR('ERRO: Estrutura incompatível com o banco do LinxERP.', 16, 1)
    RETURN
END
EXEC('
CREATE PROCEDURE [dbo].[LX_LJ_ETL_LIMPEZA_TABELAS]
@CODIGO_FILIAL VARCHAR(6)
AS
BEGIN

	BEGIN TRY

		DECLARE @QTD INT = 0

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_ARQUIVO
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_ARQUIVO A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_ESTATISTICA
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_ESTATISTICA A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_ESTATISTICA_ARQUIVO
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_ESTATISTICA_ARQUIVO A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_REQUISICAO_LOJA
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_REQUISICAO_LOJA A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_LOG
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_LOG A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

		/*
		-- APAGA OS REGISTROS DA TABELA LJ_ETL_LOG_STATUS
		*/
		SET @QTD = 1

		WHILE ( @QTD > 0 )
		BEGIN

			DELETE TOP (500) A
				FROM	LJ_ETL_LOG_STATUS A
						INNER JOIN LJ_ETL_VERSAO_LOJA B ON B.CODIGO_FILIAL = A.CODIGO_FILIAL
				WHERE	B.INATIVO = 1
						AND (A.CODIGO_FILIAL = @CODIGO_FILIAL OR @CODIGO_FILIAL IS NULL)

			SET @QTD = @@rowcount
		END

	END TRY
	BEGIN CATCH

		DECLARE @ErrorMessage NVARCHAR(4000)
					DECLARE @ErrorSeverity INT
					DECLARE @ErrorState INT

		SELECT       @ErrorMessage = ERROR_MESSAGE(),
							@ErrorSeverity = ERROR_SEVERITY(),
							@ErrorState = ERROR_STATE()

		RAISERROR (
							@ErrorMessage, -- Message text.
							@ErrorSeverity, -- Severity.
							@ErrorState -- State.
						)

	END CATCH

END
')
GO
IF EXISTS (SELECT 1 FROM SYS.OBJECTS WHERE NAME = 'LJ_ETL_GERA_DADOS_FFC')
BEGIN
  DROP PROCEDURE [DBO].[LJ_ETL_GERA_DADOS_FFC] 
END
GO
IF NOT EXISTS ( SELECT 1 FROM sys.tables t
            JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('Faturamento', 'Empresa') AND s.name = 'dbo'
)
BEGIN
    RAISERROR('ERRO: Estrutura incompatível com o banco do LinxERP.', 16, 1)
    RETURN
END
EXEC('
CREATE PROCEDURE LJ_ETL_GERA_DADOS_FFC  (@CODIGO_FILIAL VARCHAR(6), @DATA_MOVIMENTO DATETIME)
AS 
BEGIN
	DECLARE @STATUSLOJA AS INT, @SDATA CHAR(08)
	SELECT @STATUSLOJA =
				CASE WHEN DAY(@DATA_MOVIMENTO) = 1 THEN DIA_1
					 WHEN DAY(@DATA_MOVIMENTO) = 2 THEN DIA_2
					 WHEN DAY(@DATA_MOVIMENTO) = 3 THEN DIA_3
					 WHEN DAY(@DATA_MOVIMENTO) = 4 THEN DIA_4
					 WHEN DAY(@DATA_MOVIMENTO) = 5 THEN DIA_5
					 WHEN DAY(@DATA_MOVIMENTO) = 6 THEN DIA_6
					 WHEN DAY(@DATA_MOVIMENTO) = 7 THEN DIA_7
					 WHEN DAY(@DATA_MOVIMENTO) = 8 THEN DIA_8
					 WHEN DAY(@DATA_MOVIMENTO) = 9 THEN DIA_9
					 WHEN DAY(@DATA_MOVIMENTO) = 10 THEN DIA_10
					 WHEN DAY(@DATA_MOVIMENTO) = 11 THEN DIA_11
					 WHEN DAY(@DATA_MOVIMENTO) = 12 THEN DIA_12
					 WHEN DAY(@DATA_MOVIMENTO) = 13 THEN DIA_13
					 WHEN DAY(@DATA_MOVIMENTO) = 14 THEN DIA_14
					 WHEN DAY(@DATA_MOVIMENTO) = 15 THEN DIA_15
					 WHEN DAY(@DATA_MOVIMENTO) = 16 THEN DIA_16
					 WHEN DAY(@DATA_MOVIMENTO) = 17 THEN DIA_17
					 WHEN DAY(@DATA_MOVIMENTO) = 18 THEN DIA_18
					 WHEN DAY(@DATA_MOVIMENTO) = 19 THEN DIA_19
					 WHEN DAY(@DATA_MOVIMENTO) = 20 THEN DIA_20
					 WHEN DAY(@DATA_MOVIMENTO) = 21 THEN DIA_21
					 WHEN DAY(@DATA_MOVIMENTO) = 22 THEN DIA_22
					 WHEN DAY(@DATA_MOVIMENTO) = 23 THEN DIA_23
					 WHEN DAY(@DATA_MOVIMENTO) = 24 THEN DIA_24
					 WHEN DAY(@DATA_MOVIMENTO) = 25 THEN DIA_25
					 WHEN DAY(@DATA_MOVIMENTO) = 26 THEN DIA_26
					 WHEN DAY(@DATA_MOVIMENTO) = 27 THEN DIA_27
					 WHEN DAY(@DATA_MOVIMENTO) = 28 THEN DIA_28
					 WHEN DAY(@DATA_MOVIMENTO) = 29 THEN DIA_29
					 WHEN DAY(@DATA_MOVIMENTO) = 30 THEN DIA_30
					 WHEN DAY(@DATA_MOVIMENTO) = 31 THEN DIA_31	END
		FROM W_ETL_MONITORIA A WHERE A.CODIGO_FILIAL = @CODIGO_FILIAL
		AND ANO = YEAR(@DATA_MOVIMENTO) AND MES = MONTH(@DATA_MOVIMENTO)

	SET @SDATA = CONVERT(CHAR(10), GETDATE(),112)

	IF OBJECT_ID(''LX_FFC_GRAVA_STATUS_MONITOR'') IS NOT NULL  --SUSTSP-2388	
	BEGIN
		IF @STATUSLOJA IS NULL OR @STATUSLOJA > 0
			Exec DBO.LX_FFC_GRAVA_STATUS_MONITOR 0,0,@CODIGO_FILIAL, @SDATA, @SDATA, 30,''DIVERGENCIA ETL'',''ETL'',NULL,NULL,NULL
		ELSE
			Exec DBO.LX_FFC_GRAVA_STATUS_MONITOR 0,0,@CODIGO_FILIAL, @SDATA, @SDATA, 99,null,''ETL'',NULL,NULL,NULL
	END
END
')
GO
IF EXISTS (SELECT 1 FROM SYS.OBJECTS WHERE NAME = 'LX_ETL_CONTROL_ARQUIVO')
BEGIN
  DROP PROCEDURE [DBO].[LX_ETL_CONTROL_ARQUIVO] 
END
GO
IF NOT EXISTS ( SELECT 1 FROM sys.tables t
            JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.name IN ('Faturamento', 'Empresa') AND s.name = 'dbo'
)
BEGIN
    RAISERROR('ERRO: Estrutura incompatível com o banco do LinxERP.', 16, 1)
    RETURN
END
EXEC('
CREATE PROCEDURE LX_ETL_CONTROL_ARQUIVO
AS 
BEGIN   
	BEGIN TRANSACTION	
		BEGIN TRY
			DECLARE @USA_LINXETL_EXPURGO_DADOS BIT = 0
			SELECT @USA_LINXETL_EXPURGO_DADOS = CASE WHEN UPPER(ISNULL(DBO.FX_PARAMETRO_LOJA(''ETL_ATIVA_EXPURGO'', null), ''''))  = ''.T.'' THEN 1 ELSE 0 END
			
			DECLARE @TRACE_LOG BIT = 0
			SELECT @TRACE_LOG = CASE WHEN UPPER(ISNULL(DBO.FX_PARAMETRO_LOJA(''ETL_HABILITA_TRACE'', null), ''''))  = ''.T.'' THEN 1 ELSE 0 END
			
			DECLARE @QTD_REG_EXPURGO INT
			SELECT @QTD_REG_EXPURGO = COUNT(*) FROM LJ_ETL_ARQUIVO_PROCESSADO

			IF @USA_LINXETL_EXPURGO_DADOS = 0
			begin 
				IF @TRACE_LOG = 1
				BEGIN
					print ''Gravando log de execução''
				END

				INSERT INTO [dbo].[LJ_ETL_LOG]            
				(
					[METODO]
					,[ERRO]
					,[DATA_HORA_LOG]           
				)
				 VALUES
				(
					''LX_ETL_CONTROL_ARQUIVO''
					,''Parametro ETL_ATIVA_EXPURGO esta desabilitado ou não existe no banco. A rotina de expurgo não foi executada. ''
					,getdate()           
				)
			end
			ELSE IF @QTD_REG_EXPURGO = 0
			BEGIN
				IF @TRACE_LOG = 1
				BEGIN
					print ''Gravando log de execução''
				END
			    

				INSERT INTO [dbo].[LJ_ETL_LOG]            
				(
					[METODO]
					,[ERRO]
					,[DATA_HORA_LOG]           
				)
				 VALUES
				(
					''LX_ETL_CONTROL_ARQUIVO''
					,''EXECUTOU A PROC LX_ETL_CONTROL_ARQUIVO COM SUCESSO, MAS A TABELA LJ_ETL_ARQUIVO_PROCESSADO ESTA VAZIA.''
					,getdate()                
				)
			END
			ELSE
			begin
				print ''Removendo tabela temporaria #LJ_ETL_ARQUIVO''
				/*Verificação se a Tabela temporária #LJ_ETL_ARQUIVO existe e se tem algum registro caso tenha vai dropar ela*/
				IF OBJECT_ID(''tempdb..#LJ_ETL_ARQUIVO'') IS NOT NULL
				BEGIN
					DROP TABLE #LJ_ETL_ARQUIVO;
				END

				IF @TRACE_LOG = 1
				BEGIN
					print ''Criando e incluindo dados na tabela temporaria #LJ_ETL_ARQUIVO''
				END
				
				SELECT *
				INTO #LJ_ETL_ARQUIVO
				FROM LJ_ETL_ARQUIVO A
				WHERE NOT EXISTS (
					SELECT 1
					FROM LJ_ETL_ARQUIVO_PROCESSADO B
					WHERE B.ID_ETL_ARQUIVO = A.ID_ETL_ARQUIVO
				);

				/*Verificação se a Tabela temporária #LJ_ETL_ARQUIVO existe e se tem algum registro, caso tenha vai dropar ela*/
				IF @TRACE_LOG = 1
				BEGIN
					print ''Removendo tabela temporaria #LJ_ETL_PROCESSO''
				END
				
				IF OBJECT_ID(''tempdb..#LJ_ETL_PROCESSO'') IS NOT NULL
				BEGIN
					DROP TABLE #LJ_ETL_PROCESSO;
				END
	
				IF @TRACE_LOG = 1
				BEGIN
					print ''Criando e incluindo dados na tabela temporaria #LJ_ETL_PROCESSO''
				END				
				/*Criação da Tabela temporária #LJ_ETL_ARQUIVO*/
				SELECT *
				INTO #LJ_ETL_PROCESSO
				FROM LJ_ETL_PROCESSO A
				WHERE NOT EXISTS (
					SELECT 1
					FROM LJ_ETL_ARQUIVO_PROCESSADO B
					WHERE B.ID_ETL_ARQUIVO = A.ID_ETL_ARQUIVO
				);

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Removendo as constraints da tabela LJ_ETL_ARQUIVO''
				END
				ALTER TABLE LJ_ETL_ARQUIVO NOCHECK CONSTRAINT FK_LJ_ETL_ARQUIVO_LJ_LX_ETL_TIPO
				ALTER TABLE LJ_ETL_ARQUIVO NOCHECK CONSTRAINT FK_LJ_ETL_ARQUIVO_LOJAS_VAREJO
				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Removendo FK da tabela LJ_ETL_ARQUIVO_PROCESSADO''
				END				
				ALTER TABLE LJ_ETL_ARQUIVO_PROCESSADO DROP CONSTRAINT FK_LJ_ETL_ARQUIVO_PROCESSADO
				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Removendo FK da tabela LJ_ETL_PROCESSO''
				END				
				ALTER TABLE LJ_ETL_PROCESSO DROP CONSTRAINT XFK2590_LJ_ETL_PROCESSO

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Removendo PK da tabela LJ_ETL_ARQUIVO''
				END	
				ALTER TABLE LJ_ETL_ARQUIVO DROP CONSTRAINT PK_LJ_ETL_ARQUIVO	
	
				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Limpando tabela LJ_ETL_PROCESSO''
				END	
				TRUNCATE TABLE LJ_ETL_PROCESSO

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Limpando tabela LJ_ETL_ARQUIVO''
				END	
				TRUNCATE TABLE LJ_ETL_ARQUIVO	

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Limpando tabela LJ_ETL_ARQUIVO_PROCESSADO''
				END	
				TRUNCATE TABLE LJ_ETL_ARQUIVO_PROCESSADO
	
				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando conteudo da tabela LJ_ETL_ARQUIVO - Arquivos não processados ou processados com Erro''
				END	
				SET IDENTITY_INSERT LJ_ETL_ARQUIVO ON

				INSERT INTO LJ_ETL_ARQUIVO ( ID_ETL_TIPO,CODIGO_FILIAL,ID_ETL_ARQUIVO,DATA_HORA_CRIACAO,XML_ARQUIVO,PROCESSADO,DATA_HORA_PROXIMO_PROCESSO,VERSAO,
				PREFIXO_ERP_ORIGEM,ID_MSG_ENSEMBLE,PRIORIDADE,DATA_HORA_INICIO,QTDE_REGISTROS)
				SELECT ID_ETL_TIPO,CODIGO_FILIAL,ID_ETL_ARQUIVO,DATA_HORA_CRIACAO,XML_ARQUIVO,PROCESSADO,DATA_HORA_PROXIMO_PROCESSO,VERSAO,
				PREFIXO_ERP_ORIGEM,ID_MSG_ENSEMBLE,PRIORIDADE,DATA_HORA_INICIO,QTDE_REGISTROS
				FROM #LJ_ETL_ARQUIVO 	
	
				SET IDENTITY_INSERT LJ_ETL_ARQUIVO OFF	

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando conteudo da tabela LJ_ETL_PROCESSO - Arquivos não processados ou processados com Erro''
				END	
				INSERT INTO LJ_ETL_PROCESSO ( ID_ETL_ARQUIVO,DATA_HORA_PROCESSO,COD_RETORNO,CRITICA_PROCESSO)
				SELECT ID_ETL_ARQUIVO,DATA_HORA_PROCESSO,COD_RETORNO,CRITICA_PROCESSO
				FROM #LJ_ETL_PROCESSO

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando as constraints da tabela LJ_ETL_ARQUIVO''
				END
				ALTER TABLE LJ_ETL_ARQUIVO CHECK CONSTRAINT FK_LJ_ETL_ARQUIVO_LJ_LX_ETL_TIPO
				ALTER TABLE LJ_ETL_ARQUIVO CHECK CONSTRAINT FK_LJ_ETL_ARQUIVO_LOJAS_VAREJO	
	
				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando a PK da tabela LJ_ETL_ARQUIVO''
				END
				DECLARE @PK_LJ_ETL_ARQUIVO VARCHAR(50)

				SELECT @PK_LJ_ETL_ARQUIVO = CONSTRAINT_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS WHERE TABLE_NAME = ''LJ_ETL_ARQUIVO''AND CONSTRAINT_TYPE = ''PRIMARY KEY''

				IF ISNULL(@PK_LJ_ETL_ARQUIVO,'''') <> ''PK_LJ_ETL_ARQUIVO''
				BEGIN
					ALTER TABLE LJ_ETL_ARQUIVO ADD CONSTRAINT PK_LJ_ETL_ARQUIVO PRIMARY KEY (ID_ETL_ARQUIVO)
				END

				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando a FK da tabela LJ_ETL_PROCESSO''
				END
				ALTER TABLE LJ_ETL_PROCESSO ADD CONSTRAINT XFK2590_LJ_ETL_PROCESSO FOREIGN KEY (ID_ETL_ARQUIVO) REFERENCES LJ_ETL_ARQUIVO (ID_ETL_ARQUIVO)


				
				IF @TRACE_LOG = 1
				BEGIN
					print ''Restaurando a FK da tabela LJ_ETL_ARQUIVO_PROCESSADO''
				END
				ALTER TABLE [dbo].[LJ_ETL_ARQUIVO_PROCESSADO]  WITH CHECK ADD  CONSTRAINT [FK_LJ_ETL_ARQUIVO_PROCESSADO] FOREIGN KEY([ID_ETL_ARQUIVO])
				REFERENCES [dbo].[LJ_ETL_ARQUIVO] ([ID_ETL_ARQUIVO])
				ON DELETE CASCADE

				ALTER TABLE [dbo].[LJ_ETL_ARQUIVO_PROCESSADO] CHECK CONSTRAINT [FK_LJ_ETL_ARQUIVO_PROCESSADO]
	
				IF @TRACE_LOG = 1
				BEGIN
					print ''Gravando log de execução na tabela LJ_ETL_LOG''
				END				
				/*Inserindo log de execução */
				INSERT INTO [dbo].[LJ_ETL_LOG]            
				(
					[METODO]
					,[ERRO]
					,[DATA_HORA_LOG]           
				)
				 VALUES
				( 
					''LX_ETL_CONTROL_ARQUIVO''
					,''EXECUTOU A PROC LX_ETL_CONTROL_ARQUIVO - Controle dos registros das tabelas LJ_ETL_ARQUIVO, LJ_ETL_PROCESSO LJ_ETL_ARQUIVO_PROCESSADO''
					,getdate()           
				)	
			end

			COMMIT

		END TRY 
		BEGIN CATCH
			ROLLBACK

			IF @TRACE_LOG = 1
			BEGIN
				print ''Gravando log de execução na tabela LJ_ETL_LOG''
			END		
			/*Inserindo log de exceção de  execução */
			INSERT INTO [dbo].[LJ_ETL_LOG]            
			(
				[METODO]
				,[ERRO]
				,[DATA_HORA_LOG]           
			)
				VALUES
			(
				''LX_ETL_CONTROL_ARQUIVO''
				,''Falha na execução da Procedure: '' + ERROR_MESSAGE() + '' Linha: '' + str(ERROR_LINE(),10,0)
				,getdate()           
			)
		END CATCH 

END
')
GO
