-- Detalhe - SQL DEMONSTRAR TODOS TITULOS FINANCEIROS
WITH range_mes AS (
SELECT
	*
  FROM generate_series(1, 12) as mes
	
	WHERE 
	(CASE WHEN extract('YEAR' From current_date) <= CAST(:Ano AS INTEGER) THEN mes between 1 and extract('MONTH' From current_date) 
	ELSE TRUE END)
),

tmp_saldo_banco as (
SELECT 
cf.codigo,
cf.denominacao,
ms.mes,

(CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
		TO_CHAR(TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD'),'DD-MM-YYYY')
	WHEN :DiaMesEspecifica = 0 AND :MesTodos <> 0 THEN
		TO_CHAR(TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD('01',2,'0'),'YYYYMMDD'),'DD-MM-YYYY')
	ELSE 
		'Inicial Mês'
END) AS data_saldo_inicial, 

(SELECT	
	COALESCE(SUM(mf.valor_movimento * (POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))) * 2 - 1)),0) AS data_saldo_inicial
	FROM	movimento_financeiro AS mf
	INNER JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)	
	WHERE	
	(CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END) <=  --Verifica se utilizar data_movimento ou data_conciliacao 
	(CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
	
		TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') - 1 
	ELSE 
		DATE(date_trunc('MONTH',TO_DATE(CAST(CAST(:Ano AS INTEGER) AS VARCHAR)||CAST(ms.mes AS VARCHAR),'YYYYMM')) - INTERVAL '1 day')
	END)
	AND	mf.id_conta_financeira = cf.id_conta_financeira -- AND mf.id_empresa IN 

) as saldo_banco_inicial,

(CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
		TO_CHAR(TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') ,'DD-MM-YYYY')
	WHEN :DiaMesEspecifica = 0 AND :MesTodos <> 0 THEN
		TO_CHAR(DATE(date_trunc('MONTH',TO_DATE(CAST(CAST(:Ano AS INTEGER) AS VARCHAR)||CAST(:MesTodos AS VARCHAR),'YYYYMM'))  + interval '1 month' - interval '1 day'), 'DD-MM-YYYY')
	ELSE 
		'Final Mês'
END) AS data_saldo_final ,
(SELECT	
	COALESCE(SUM(mf.valor_movimento * (POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))) * 2 - 1)),0) AS data_saldo_final
	FROM	movimento_financeiro AS mf
	INNER JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)	
	WHERE	(CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END) <=  --Verifica se utilizar data_movimento ou data_conciliacao 
	(CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
	
		TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') 
	ELSE 
		DATE(date_trunc('MONTH',TO_DATE(CAST(CAST(:Ano AS INTEGER) AS VARCHAR)||CAST(ms.mes AS VARCHAR),'YYYYMM'))  + interval '1 month' - interval '1 day')
	END)
	AND	mf.id_conta_financeira = cf.id_conta_financeira -- AND mf.id_empresa IN 

) as saldo_banco_final
FROM  conta_financeira AS cf,
range_mes AS ms

WHERE cf.id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2
AND :ConsolidadoDetalhado = 1

),
         

tmp_titulo_financeiro AS (

-- ESPECIE MOVIMENTO CAIXA
SELECT	

	se.id_empresa,
	se.codigo AS codigo_empresa,
	se.nome AS nome_empresa,
	ms.mes,
	NULL AS codigo_credor_devedor,
	NULL AS credor_devedor,
	2 AS pagar_receber, --TITULO A RECEBER
	mf.id_movimento_financeiro,
	0 AS id_titulo_financeiro,
	0 AS id_titulo_filho,
	0 AS id_titulo_pai,
	mf.documento_origem AS numero_titulo,
	mf.observacao,
	1 AS numero_parcela,
	mf.data_movimento AS data_emissao,
	mf.data_movimento AS data_vencimento,
	mf.data_movimento AS data_liquidacao,
	mf.data_conciliacao,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_principal,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_titulo,
	0 AS valor_taxa_administracao,
	0 AS tarifa_transacao,
	0 AS total_acrescimo,
	0 AS total_desconto,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_recebido,	
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_liquidado,	
	'Registrado' AS situacao_titulo,
	100 AS natureza_titulo_codigo,
	'Sangrias' AS natureza_titulo,
	tmf.entrada_saida,
	'Dinheiro' AS forma_recebimento,
	cf.denominacao AS denominacao_conta,
	tmf.denominacao,
	0 AS classificacao_despesa_receita,
	2526603 AS id_categoria_despesa_receita,
    '1. RECEITA OPERACIONAL' AS denominacao_categoria,
	0 AS total_titulos_filho,
	cf.id_conta_financeira
	
FROM movimento_venda_terminal AS mvt
	INNER JOIN especie_movimento_venda  AS emv ON (mvt.id_movimento_venda_terminal = emv.id_movimento_venda_terminal )
	INNER JOIN movimento_financeiro AS mf ON (mf.id_movimento_financeiro  = emv.id_movimento_entrada)
	INNER JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)
	INNER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = mf.id_conta_financeira)
	LEFT OUTER JOIN pessoa AS p ON (p.id_pessoa = mf.id_pessoa_origem)
	LEFT OUTER JOIN sis_usuario AS uc ON (uc.id_usuario = mf.id_usuario_conciliacao)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = mf.id_empresa)
	,range_mes AS ms
WHERE	(mf.id_empresa = :IdEmpresaNaoObrigatorio OR :IdEmpresaNaoObrigatorio = -1)
-- AND	mf.id_conta_financeira = 642230

AND EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = ms.mes --Verifica se utilizar data_movimento ou data_conciliacao 
AND EXTRACT('YEAR' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)) = CAST(:Ano AS INTEGER) 

AND tmf.entrada_saida = 1 -- entrada_saida = 1 - Entrada
AND (CASE WHEN :MesTodos = 0 THEN TRUE 
ELSE EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = :MesTodos END)

AND :ConsolidadoDetalhado = 1
-- < condicao verificar somente um dia do mes
AND (CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') = 
(CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)

ELSE TRUE  END)
-- <! condicao verificar somente um dia do mes	

	UNION ALL
-- SANGRIAS MOVIMENTO CAIXA	
SELECT	

	se.id_empresa,
	se.codigo AS codigo_empresa,
	se.nome AS nome_empresa,
	ms.mes,
	NULL AS codigo_credor_devedor,
	NULL AS credor_devedor,
	2 AS pagar_receber, --TITULO A RECEBER
	mf.id_movimento_financeiro,
	0 AS id_titulo_financeiro,
	0 AS id_titulo_filho,
	0 AS id_titulo_pai,
	mf.documento_origem AS numero_titulo,
	mf.observacao,
	1 AS numero_parcela,
	mf.data_movimento AS data_emissao,
	mf.data_movimento AS data_vencimento,
	mf.data_movimento AS data_liquidacao,
	mf.data_conciliacao,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_principal,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_titulo,
	0 AS valor_taxa_administracao,
	0 AS tarifa_transacao,
	0 AS total_acrescimo,
	0 AS total_desconto,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_recebido,	
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_liquidado,	
	'Registrado' AS situacao_titulo,
	100 AS natureza_titulo_codigo,
	'Sangrias' AS natureza_titulo,
	tmf.entrada_saida,
	'Dinheiro' AS forma_recebimento,
	cf.denominacao AS denominacao_conta,
	tmf.denominacao,
	0 AS classificacao_despesa_receita,
	2526603 AS id_categoria_despesa_receita,
    '1. RECEITA OPERACIONAL' AS denominacao_categoria,
	0 AS total_titulos_filho,
	cf.id_conta_financeira
	
FROM movimento_venda_terminal AS mvt
	INNER JOIN movimento_numerario_terminal AS mnt ON (mvt.id_movimento_venda_terminal = mnt.id_movimento_venda_terminal )
	INNER JOIN movimento_financeiro AS mf ON (mf.id_movimento_financeiro  = mnt.id_movimento_financeiro_destino)
	INNER JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)
	INNER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = mf.id_conta_financeira)
	LEFT OUTER JOIN pessoa AS p ON (p.id_pessoa = mf.id_pessoa_origem)
	LEFT OUTER JOIN sis_usuario AS uc ON (uc.id_usuario = mf.id_usuario_conciliacao)
	INNER JOIN sis_empresa AS se ON (se.id_empresa = mf.id_empresa)
	,range_mes AS ms
WHERE	(mf.id_empresa = :IdEmpresaNaoObrigatorio OR :IdEmpresaNaoObrigatorio = -1)
-- AND	mf.id_conta_financeira = 642230
AND EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = ms.mes  --Verifica se utilizar data_movimento ou data_conciliacao 
AND EXTRACT('YEAR' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)) = CAST(:Ano AS INTEGER)
AND mnt.tipo_movimento = 1 AND tmf.entrada_saida = 1 --tipo_movimento = 1 - Sangria, entrada_saida = 1 - Entrada
AND (CASE WHEN :MesTodos = 0 THEN TRUE 
ELSE EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = :MesTodos END)
AND :ConsolidadoDetalhado = 1
-- < condicao verificar somente um dia do mes
AND (CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') = 
(CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)
ELSE TRUE  END)
-- <! condicao verificar somente um dia do mes
	
	UNION ALL
	
-- TITULOS FINANCEIROS

SELECT   distinct

	se.id_empresa,
	se.codigo AS codigo_empresa,
	se.nome AS nome_empresa,
	ms.mes,
	p.codigo AS codigo_credor_devedor,
	p.nome AS credor_devedor,
	tf.pagar_receber,
	-- < id_movimento_financeiro
	(CASE 
		WHEN tf.situacao = 11 THEN (
		SELECT mc.id_movimento_financeiro FROM movimento_cheque AS mc -- Situacao 11 = Reapresentado
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND mc.id_conta_movimento IS NOT NULL ORDER BY mc.id_movimento_cheque DESC LIMIT 1)
											
		WHEN tf.situacao = 4 THEN ( -- Situacao 4 = Depositado
		SELECT dp.id_movimento_financeiro FROM movimento_cheque AS mc 
		LEFT OUTER JOIN deposito_cheque AS dp ON (mc.id_deposito_cheque = dp.id_deposito_cheque)
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND dp.id_conta_financeira IS NOT NULL ORDER BY dp.id_deposito_cheque DESC LIMIT 1)
		
		-- WHEN natureza_titulo IN (106,117) THEN td.id_movimento_liquidacao
	
	ELSE mf.id_movimento_financeiro END)  AS id_movimento_financeiro,
	-- <! id_movimento_financeiro
	tf.id_titulo_financeiro,
	tf.id_titulo_filho,
	tf.id_titulo_pai,
	tf.numero_titulo,
	mf.observacao,
	tf.numero_parcela,
	tf.data_emissao,
	tf.data_vencimento,
	tf.data_liquidacao,
	mf.data_conciliacao,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_principal,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_titulo,
	tf.valor_taxa_administracao,
	tf.tarifa_transacao,
	(tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca) AS total_acrescimo,
	(tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria) AS total_desconto,
	/*-- < valor_recebido
	(CASE
		WHEN tf.situacao = 10 THEN 0
		ELSE
		(CASE 
			WHEN tf.situacao = 3 AND tf.id_titulo_filho IS NULL THEN tf.valor_principal 
			- COALESCE((SELECT SUM(tf2.valor_principal) FROM titulo_financeiro AS tf2 WHERE tf.id_titulo_financeiro = tf2.id_titulo_pai ),0)
		
			WHEN tf.situacao = 3 AND tf.id_titulo_filho IS NOT NULL THEN tf.valor_principal 
			- COALESCE((SELECT SUM(tf2.valor_principal) FROM titulo_financeiro AS tf2 WHERE tf.id_titulo_filho = tf2.id_titulo_pai ),0)
		
			ELSE tf.valor_principal  END
		) 
	END)*/
	(CASE WHEN tmf.entrada_saida = 1
	THEN
	(tf.valor_liquidado
        +(tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria)
        - (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca))
		
		ELSE
		(tf.valor_liquidado
        +(tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria)
        - (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca)) * -1
		
		END
		) AS valor_recebido,
	-- <! valor_recebido
	tf.valor_liquidado,
	ovl.titulo AS situacao_titulo,
	tf.natureza_titulo AS natureza_titulo_codigo,
	ovl1.titulo AS natureza_titulo,
	(CASE 
		WHEN tf.situacao IN(4,11)  THEN 1 -- Verifica se 4	DEPOSITADO, 11	REAPRESENTADO OU Adiantamento de Cliente, Pagamento Antecipado com Regime Competencia
		ELSE tmf.entrada_saida END ) AS entrada_saida,
	COALESCE(ef.denominacao, '') AS forma_recebimento,
	-- < denominacao_conta
	(CASE 
		WHEN tf.situacao = 11 THEN (
		SELECT cf2.denominacao FROM movimento_cheque AS mc -- Situação 11 = Reapresentado
		LEFT OUTER JOIN conta_financeira AS cf2 ON (cf2.id_conta_financeira = mc.id_conta_movimento)
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND mc.id_conta_movimento IS NOT NULL ORDER BY mc.id_movimento_cheque DESC LIMIT 1)
													
		WHEN tf.situacao = 4 THEN ( -- Situcao 4 = Depositado
		SELECT cf2.denominacao FROM movimento_cheque AS mc 
		LEFT OUTER JOIN deposito_cheque AS dp ON (mc.id_deposito_cheque = dp.id_deposito_cheque)
		LEFT OUTER JOIN conta_financeira AS cf2 ON (dp.id_conta_financeira = cf2.id_conta_financeira)
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND dp.id_conta_financeira IS NOT NULL ORDER BY dp.id_deposito_cheque DESC LIMIT 1)
		/*
		WHEN natureza_titulo IN (106,117) THEN (SELECT cf2.denominacao FROM conta_financeira AS cf2 
		WHERE  tf.id_conta_li =  cf2.id_conta_financeira)
		*/
		ELSE cf.denominacao END)  AS denominacao_conta,
	-- <! denominacao_conta
	tdr.denominacao AS denominacao,
    tdr.classificacao_despesa_receita,
	cdr.id_categoria_despesa_receita,
    cdr.denominacao AS denominacao_categoria,
	(SELECT COUNT(*) FROM titulo_financeiro WHERE id_titulo_pai = tf.id_titulo_financeiro) AS total_titulos_filho,
	-- < id_conta_financeira
	(CASE 
		WHEN tf.situacao = 11 THEN (SELECT cf2.id_conta_financeira FROM movimento_cheque AS mc 
		LEFT OUTER JOIN conta_financeira AS cf2 ON (cf2.id_conta_financeira = mc.id_conta_movimento)
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND mc.id_conta_movimento IS NOT NULL ORDER BY mc.id_movimento_cheque DESC LIMIT 1)
												
		WHEN tf.situacao = 4 THEN (
		SELECT cf2.id_conta_financeira FROM movimento_cheque AS mc 
		LEFT OUTER JOIN deposito_cheque AS dp ON (mc.id_deposito_cheque = dp.id_deposito_cheque)
		LEFT OUTER JOIN conta_financeira AS cf2 ON (dp.id_conta_financeira = cf2.id_conta_financeira)
		WHERE  tf.id_titulo_financeiro =  mc.id_titulo_financeiro 
		AND dp.id_conta_financeira IS NOT NULL ORDER BY dp.id_deposito_cheque DESC LIMIT 1)
	
		-- WHEN natureza_titulo IN (106,117) THEN (tf.id_conta_liquidacao)
	
		ELSE cf.id_conta_financeira END)  AS id_conta_financeira
	-- <! id_conta_financeira
FROM	titulo_financeiro AS tf 
	LEFT JOIN pessoa AS p ON (tf.id_credor_devedor = p.id_pessoa)
	LEFT JOIN tipo_cobranca AS tc ON (tc.id_tipo_cobranca = tf.id_tipo_cobranca)
	LEFT JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
	LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
	LEFT OUTER JOIN movimento_financeiro AS mf ON (mf.id_movimento_financeiro = tf.id_movimento_liquidacao)
	LEFT OUTER JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)
	LEFT OUTER JOIN especie_financeira AS ef ON (ef.id_especie_financeira = mf.id_especie_financeira)
	LEFT JOIN sis_opcao_lista_valor AS ovl ON (ovl.id = tf.situacao AND ovl.id_lista_valor = 'CEDBEA3BCD98445F98C29C5DAC4B809D')
	LEFT JOIN sis_opcao_lista_valor AS ovl1 ON (ovl1.id = tf.natureza_titulo AND ovl1.id_lista_valor = 'C043EFC0EDD5414995003170978F8878')
	
	LEFT JOIN parcela_despesa_receita AS pdr ON (pdr.id_titulo_financeiro = tf.id_titulo_financeiro)
    LEFT JOIN despesa_receita AS dr ON (dr.id_despesa_receita = pdr.id_despesa_receita)
    LEFT JOIN tipo_despesa_receita AS tdr ON (dr.id_tipo_despesa_receita = tdr.id_tipo_despesa_receita)
    LEFT JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	,range_mes AS ms
	
	WHERE (tf.id_empresa = :IdEmpresaNaoObrigatorio OR :IdEmpresaNaoObrigatorio = -1)
	AND :ConsolidadoDetalhado = 1
	AND
	(CASE WHEN :RegimeCompetenciaCaixa = 2 THEN -- Regime Caixa
		(tf.situacao IN (2,3,4,11, 10)  --  10 - Liquidado Por Troca De Título 
		 AND tf.natureza_titulo IN (100,106,117,214, 201,202,203,204,205, 213, 221, 109, 116, 101, 109, 116,108,209) 
		 AND cf.transitoria = 'N')
	ELSE( -- Regime Competencia
			tf.tipo_titulo IN(1) AND tf.natureza_titulo NOT IN (115)-- 1 Original, 5 Troca de Titulo, 115 Mutuo a Pagar
		)
	END)
	
	AND
	
	--data liquidação
	-- < condição para regime caixa ou competencia
	(CASE WHEN :RegimeCompetenciaCaixa = 2 THEN --  2 Regime Caixa
		(EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE tf.data_liquidacao END))  = ms.mes 
		 AND EXTRACT('YEAR' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE tf.data_liquidacao END)) = CAST(:Ano AS INTEGER)
			AND (CASE WHEN :MesTodos = 0 THEN TRUE 
				ELSE EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE tf.data_liquidacao END))  = :MesTodos END
			)
		)
	ELSE -- 1 Regime Competencia
		(EXTRACT('MONTH' FROM tf.data_emissao)  = ms.mes 
		AND EXTRACT('YEAR' FROM tf.data_emissao) = CAST(:Ano AS INTEGER)
			AND (CASE WHEN :MesTodos = 0 THEN TRUE 
				ELSE EXTRACT('MONTH' FROM tf.data_emissao)  = :MesTodos END
			)
		)
	END)
	-- < ! condição para regime caixa ou competencia
	
	AND 
	-- < condicao verificar somente um dia do mes
	(CASE 	
		WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
		TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') = 
		(CASE WHEN :RegimeCompetenciaCaixa = 2 THEN (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE tf.data_liquidacao END) ELSE tf.data_emissao END) -- seleciona o campo data_liquidacao ou data_emissao
		ELSE TRUE  END
	)
	-- <! condicao verificar somente um dia do mes


-- <! condicao verificar somente um dia do mes
ORDER BY  nome_empresa,
	data_emissao,
	natureza_titulo	
/*
TIPO_MOVIMENTO_FINANCEIRO
-entrada_saida
1 - Entrada
2 - Saída'

TITULO_FINANCEIRO
-pagar_receber   1 - Pagar   2 - Receber

-situacao
   1 - Aberto 
   2 - Liquidado 
   3 - Liquidado Parcialmente 
   4 - Depositado (Restrito apenas a cheques) 
   5 - Devolvido (Restrito apenas a cheques) 
   6 - Aguardando Aprovação Pagamento 
   7 - Agrupado 
   8 - Desmembrado 
   9 - Rascunho 
   10 - Liquidado Por Troca De Título 
   11 - Reapresentado 
   12 - Reservado 
   13 - Cancelado
 
 -tipo_titulo
 1	ORIGINAL
 2	RESIDUAL - Título restante de uma liquidação parcial
 3	MEMBRAMENTO - Título gerado quando se agrupa outros títulos
 4	DESMEMBRAMENTO - Título gerado quando se negocia/parcela um título
 5	TROCA DE TÍTULO - Título originário de uma troca de título

IN (100,106,117,214, 215,201,202,203,204,205, 213)) 
 -natureza_titulo
 100 - Sangria
 101 - Compra a Prazo
 106 - Adiantamento de Clientes
 107 - Diferença de Caixa Positiva
 108 - Captação de Recursos
 109 - Despesas
 110 - Adiantamento de Funcionários
 111 - Saldo Credor de Funcionário
 112 - Fatura de Pagamento SAF
 114 - Ticket
 115 - Mútuo a Pagar
 116 - Conhecimento Frete
 117 - Pagamento Antecipado
 201 - Venda a Prazo
 202 - Cartão de Crédito
 203 - Cartão de Débito
 204 - Cheque a Vista
 205 - Cheque Pré-Datado
 206 - Adiantamento a Fornecedores
 207 - Diferença de Caixa Negativa
 208 - Aplicação de Recursos
 209 - Receitas
 210 - Adiantamento a Funcionários
 211 - Saldo Devedor de Funcionário
 212 - Fatura de Recebimento SAF
 213 - Vale Frete
 214 - Lote de Ticket
 215 - Mútuo a Receber
 220 - Vale Motorista
 221 - Fatura Global
 222 - Baixa de Pagamento Antecipado

*/
),

tmp_movimento_financeiro AS (

SELECT
    DISTINCT
	se.id_empresa,
	se.codigo as codigo_empresa,
	se.nome AS nome_empresa,
	mf.id_movimento_financeiro,
	mf.data_movimento,
	mf.data_conciliacao,
	mf.data_documento_origem,
	mf.observacao,
	ms.mes,
	-- < id_categoria_despesa_receita
	(CASE WHEN tmf.entrada_saida = 1 THEN (CASE WHEN i2.sequencia = 2 THEN 2526603 ELSE 2526604 END) -- 2526604 5. RECEITA NÃO OPERACIONAL, 2526600 6. DESPESA NÃO OPERACIONAL
	ELSE 2526600 END) AS id_categoria_despesa_receita,
	-- <! id_categoria_despesa_receita
	-- < tipo
	(CASE WHEN tmf.entrada_saida = 1 THEN '(+)CONTAS A RECEBER POR DATA DE LIQUIDAÇÃO POR TIPO'
	ELSE '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' END) AS tipo,
	-- < ! tipo
	-- < ordenacao
	(CASE WHEN tmf.entrada_saida = 1 THEN (CASE WHEN i2.sequencia = 2 THEN 1110 ELSE 1210 END)
	ELSE 3120 END) AS ordenacao,
	-- < ! ordenacao
	-- < ! receita_despesa
	(CASE WHEN tmf.entrada_saida = 1 THEN (CASE WHEN i2.sequencia = 2 THEN '1. RECEITA OPERACIONAL' ELSE '5. RECEITA NÃO OPERACIONAL' END)
	ELSE '6. DESPESA NÃO OPERACIONAL' END) AS receita_despesa,
	-- < receita_despesa
	COALESCE( tmf.denominacao, 'TITULOS MOVIMENTO FINANCEIRO') || ' ' || (CASE WHEN tmf.id_tipo_movimento_financeiro IN (6, 45)  THEN COALESCE(mf.observacao,'') ELSE '' END) AS nome_movimento,
	(CASE WHEN tmf.entrada_saida = 1 THEN mf.valor_movimento ELSE mf.valor_movimento * -1 END) AS valor_movimento,
	mf.id_conta_financeira,
	cf.denominacao as nome_conta,
	tmf.entrada_saida,
	(CASE WHEN :ConsolidadoDetalhado = 1 THEN mf.documento_origem
	ELSE 
		COALESCE(mf.documento_origem,'') || (
		SELECT  COALESCE(cfo.denominacao || ' > ' || cfd.denominacao, '') 
			FROM	transferencia_financeira AS tf 
				INNER JOIN movimento_financeiro AS mfo ON (mfo.id_movimento_financeiro = tf.id_movimento_origem)
				INNER JOIN movimento_financeiro AS mfd ON (mfd.id_movimento_financeiro = tf.id_movimento_destino)
				INNER JOIN conta_financeira AS cfo ON (cfo.id_conta_financeira = mfo.id_conta_financeira)
				INNER JOIN conta_financeira AS cfd ON (cfd.id_conta_financeira = mfd.id_conta_financeira)
			WHERE CASE WHEN tmf.entrada_saida = 1 THEN tf.id_movimento_destino = mf.id_movimento_financeiro 
					   ELSE tf.id_movimento_origem = mf.id_movimento_financeiro END
		)
	END) AS documento_origem
FROM movimento_financeiro AS mf 
LEFT JOIN tipo_movimento_financeiro AS tmf ON (tmf.id_tipo_movimento_financeiro = mf.id_tipo_movimento_financeiro)
LEFT JOIN conta_financeira AS cf ON mf.id_conta_financeira = cf.id_conta_financeira
LEFT JOIN sis_empresa AS se ON se.id_empresa = mf.id_empresa
LEFT JOIN LATERAL (
        SELECT 
            ROW_NUMBER () OVER (PARTITION BY tf.id_titulo_financeiro ORDER BY mc.id_movimento_cheque) AS sequencia  
            , mc.id_movimento_cheque
            , COALESCE(mc.id_movimento_financeiro, dp.id_movimento_financeiro, tf.id_movimento_liquidacao) AS id_movimento_financeiro
        FROM movimento_cheque AS mc
        LEFT JOIN deposito_cheque AS dp ON dp.id_deposito_cheque = mc.id_deposito_cheque
        LEFT JOIN titulo_financeiro AS tf ON tf.id_titulo_financeiro = mc.id_titulo_financeiro
        WHERE mc.id_titulo_financeiro IN (

            SELECT mc.id_titulo_financeiro FROM movimento_cheque AS mc
            LEFT JOIN deposito_cheque AS dp ON dp.id_deposito_cheque = mc.id_deposito_cheque
            LEFT JOIN titulo_financeiro AS tf ON tf.id_titulo_financeiro = mc.id_titulo_financeiro
            WHERE tf.id_movimento_liquidacao = mf.id_movimento_financeiro OR dp.id_movimento_financeiro = mf.id_movimento_financeiro OR mc.id_movimento_financeiro = mf.id_movimento_financeiro

        ) 
    ) AS i2 ON i2.id_movimento_financeiro = mf.id_movimento_financeiro
,range_mes AS ms

WHERE :RegimeCompetenciaCaixa = 2 -- Regime de Caixa
AND mf.id_movimento_financeiro NOT IN(select id_movimento_financeiro from tmp_titulo_financeiro WHERE id_movimento_financeiro IS NOT NULL)
AND (mf.id_empresa = :IdEmpresaNaoObrigatorio OR :IdEmpresaNaoObrigatorio = -1)

AND EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = ms.mes 
AND EXTRACT('YEAR' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)) = CAST(:Ano AS INTEGER)

-- AND tmf.entrada_saida = 1 -- entrada_saida = 1 - Entrada
AND (CASE WHEN :MesTodos = 0 THEN TRUE 
	ELSE EXTRACT('MONTH' FROM (CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END))  = :MesTodos END)
AND :ConsolidadoDetalhado = 1 
-- < condicao verificar somente um dia do mes
AND (CASE WHEN :DiaMesEspecifica <> 0 AND :MesTodos <> 0 THEN 
TO_DATE(LPAD(:Ano::text,4,'0')||LPAD(:MesTodos::text,2,'0')||LPAD(:DiaMesEspecifica::text,2,'0'),'YYYYMMDD') = 
(CASE WHEN :DataFluxoCaixa = 2 AND :RegimeCompetenciaCaixa = 2 THEN mf.data_conciliacao ELSE mf.data_movimento END)
ELSE TRUE  END)
-- <! condicao verificar somente um dia do mes	
/*
tmf.denominacao NOT IN (
'LIQUIDAÇÃO DE VENDA A PRAZO' 35
'LANÇAMENTO DE TÍTULO POR TROCA', 640412
'LIQUIDAÇÃO DE FATURAMENTO GLOBAL', 640529
'DEVOLUÇÃO DE CHEQUE' 6
'LIQUIDAÇÃO DE CHEQUE A VISTA' 31
'LIQUIDAÇÃO DE CHEQUE PREDATADO' 32
) */
AND tmf.id_tipo_movimento_financeiro NOT IN (31, 32) 
AND cf.transitoria = 'N'
) 


SELECT
  '(+)CONTAS A RECEBER POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  1110 AS ordenacao,
  '1. RECEITA OPERACIONAL' AS sessao_relatorio,
  'VENDAS' AS subsessao_relatorio,
   codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where natureza_titulo_codigo IN (100,106,117,214, 215,201,202,203,204,205, 213, 221)
AND (2526603 =:IdCategoriaReceitaNaoObrigatorio OR 11066 =:IdCategoriaReceitaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526603 1. RECEITA OPERACIONAL, 11066 4.1.1 RECEITA DE VENDAS
AND ((entrada_saida = 1 AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo)) 
OR (:RegimeCompetenciaCaixa = 1 AND (pagar_receber = 2 OR (natureza_titulo_codigo IN (106,117) AND pagar_receber = 1)))) --pagar_receber, 1 - Pagar, 2 - Receber, 1 :RegimeCompetenciaCaixa = Competencia


UNION ALL 

SELECT DISTINCT
  '(+)CONTAS A RECEBER POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  1210 AS ordenacao,
  denominacao_categoria AS sessao_relatorio,
  denominacao AS subsessao_relatorio,
   codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where natureza_titulo_codigo IN (108,209)  -- 108 - Captação de Recursos, 209 - Receitas
AND (id_categoria_despesa_receita =:IdCategoriaReceitaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))
AND ((entrada_saida = 1 AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo)) OR 
(:RegimeCompetenciaCaixa = 1 AND pagar_receber = 2)) -- 1 :RegimeCompetenciaCaixa = Competencia
 --pagar_receber, 1 - Pagar, 2 - Receber


UNION ALL 

SELECT
  '(+)CONTAS A RECEBER POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  1110 AS ordenacao,
  '1. RECEITA OPERACIONAL' AS sessao_relatorio,
  'DESCONTOS NAS COMPRAS' AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  total_desconto AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where (entrada_saida = 2 AND natureza_titulo_codigo IN (101, 109, 115, 116))    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND total_desconto > 0
AND (2526604 =:IdCategoriaReceitaNaoObrigatorio OR 11081 =:IdCategoriaReceitaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526604 5. RECEITA NÃO OPERACIONAL, 11081 4.2.1 RECEITAS NAO OPERACIONAIS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2

UNION ALL 

SELECT
  '(+)CONTAS A RECEBER POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  1310 AS ordenacao,
  '4. RECEITAS FINANCEIRAS' AS sessao_relatorio,
  'ACRESCIMO/JUROS/MULTA' AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  total_acrescimo AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where (entrada_saida = 1 AND natureza_titulo_codigo IN (100,106,117,214, 215,201,202,203,204,205, 213,221))    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND total_acrescimo > 0
AND (11067 =:IdCategoriaReceitaNaoObrigatorio OR 11067 =:IdCategoriaReceitaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 4. RECEITAS FINANCEIRAS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2

UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3110 AS ordenacao,
  '2. CUSTO DIRETO' AS sessao_relatorio,
  COALESCE(ci.denominacao, 'TITULOS A PAGAR MANUAL') AS subsessao_relatorio,
   
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
   COALESCE(CASE WHEN nfe.total_nota = 0 THEN 0 ELSE ((infe.custo_bruto - (CASE WHEN nfe.frete = 0 THEN  infe.rateio_frete ELSE 0 END)) * tf.valor_recebido / nfe.total_nota) END, tf.valor_recebido) AS valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  COALESCE(CASE WHEN nfe.total_nota = 0 THEN 0 ELSE ((infe.custo_bruto - (CASE WHEN nfe.frete = 0 THEN  infe.rateio_frete ELSE 0 END)) * tf.valor_recebido / nfe.total_nota) END, tf.valor_recebido) AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  tf.observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro AS tf
LEFT JOIN parcela_nfe AS pnfe ON (tf.id_titulo_financeiro = pnfe.id_titulo_financeiro)
LEFT JOIN nota_fiscal_entrada AS nfe ON (pnfe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
LEFT JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
LEFT JOIN item AS it ON (it.id_item = infe.id_item)
LEFT JOIN categoria_item AS ci ON (ci.id_categoria_item = it.id_categoria_item)
LEFT JOIN parcela_despesa_receita AS pdr ON (pdr.id_titulo_financeiro = tf.id_titulo_financeiro)
WHERE  natureza_titulo_codigo IN (101)  -- 101 - Compra a Prazo
AND (2526597 =:IdCategoriaDespesaNaoObrigatorio OR 10991 =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526597	2. CUSTO DIRETO, 10991	3.3.1 DESPESAS COM VENDAS
AND ((entrada_saida = 2 AND tf.id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo)) OR 
(:RegimeCompetenciaCaixa = 1 AND pagar_receber = 1)) -- pagar_receber, 1 - Pagar, 2 - Receber, entrada e conta_financeira ou regime competencia

/*
UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3120 AS ordenacao,
  '3. CUSTO VARIAVEL' AS sessao_relatorio,
  'TAXA ADMINISTRATIVA' AS subsessao_relatorio,
    codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  0 AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where (entrada_saida = 1 AND natureza_titulo_codigo IN (100,106,117,214, 215,201,202,203,204,205, 213,221,106,117))    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND valor_taxa_administracao > 0 AND (2526598 =:IdCategoriaDespesaNaoObrigatorio OR 10992 =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526598 3. CUSTO VARIAVEL, 10992 3.3.2 DESPESAS ADMINISTRATIVAS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2

*/
UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3120 AS ordenacao,
  '3. CUSTO VARIAVEL' AS sessao_relatorio,
  'TARIFA TRANSAÇÃO' AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  0 AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where (entrada_saida = 1 AND natureza_titulo_codigo IN (100,106,117,214, 215,201,202,203,204,205, 213,221,106,117))    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND tarifa_transacao > 0 AND (2526598 =:IdCategoriaDespesaNaoObrigatorio OR 10992 =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526598 3. CUSTO VARIAVEL, 10992 3.3.2 DESPESAS ADMINISTRATIVAS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2


UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3110 AS ordenacao,
  '2. CUSTO DIRETO' AS sessao_relatorio,
  'DESCONTOS CONCEDIDOS' AS subsessao_relatorio,
   codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  (total_desconto * -1) AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where (entrada_saida = 1 AND natureza_titulo_codigo IN (100,106,117,214, 215,201,202,203,204,205, 213,221,106,117))    
AND total_desconto > 0 AND (2526598 =:IdCategoriaDespesaNaoObrigatorio OR 10992 =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526598 3. CUSTO VARIAVEL, 10992 3.3.2 DESPESAS ADMINISTRATIVAS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2


UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3110 AS ordenacao,
  '2. CUSTO DIRETO' AS sessao_relatorio,
  '*Atraso de Fornecedores' AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  0 AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  (total_acrescimo * -1) AS valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
FROM tmp_titulo_financeiro where (entrada_saida = 2 AND natureza_titulo_codigo IN (101, 109, 115, 116,106,117))    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND total_acrescimo > 0 AND (2526598 =:IdCategoriaDespesaNaoObrigatorio OR 10992 =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))-- 2526598 3. CUSTO VARIAVEL, 10992 3.3.2 DESPESAS ADMINISTRATIVAS
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2


UNION ALL 

SELECT
  '(-)CONTAS A PAGAR POR DATA DE LIQUIDAÇÃO POR TIPO' AS tipo,
  3120 AS ordenacao,
  COALESCE(denominacao_categoria,'** OUTRAS SAIDAS')  AS sessao_relatorio,
  COALESCE(denominacao,'TITULOS A PAGAR MANUAL') AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  codigo_credor_devedor,
  credor_devedor,
  numero_titulo,
  data_emissao,
  data_liquidacao,
  valor_principal,
  valor_taxa_administracao,
  tarifa_transacao,
  total_desconto,
  total_acrescimo,
  valor_recebido,
  natureza_titulo,
  entrada_saida,
  denominacao_conta,
  observacao,
  data_conciliacao
  
  FROM tmp_titulo_financeiro where  natureza_titulo_codigo IN (109, 115, 116, 106,117)    -- 109 - Despesas, 115 - Mútuo a Pagar, 116 - Conhecimento Frete
AND (id_categoria_despesa_receita =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1) OR id_categoria_despesa_receita IS NULL)
AND ((entrada_saida = 2 AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo)) 
OR (:RegimeCompetenciaCaixa = 1  AND pagar_receber = 1)) --pagar_receber, 1 - Pagar, 2 - Receber


UNION ALL 

SELECT
  tipo,
  ordenacao,
  receita_despesa AS sessao_relatorio,
  nome_movimento AS subsessao_relatorio,
  codigo_empresa,
  nome_empresa,
  '' AS codigo_credor_devedor,
  '' AS credor_devedor,
  documento_origem AS numero_titulo,
  data_documento_origem AS data_emissao,
  data_movimento AS data_liquidacao,
  valor_movimento AS valor_principal,
  valor_movimento AS valor_taxa_administracao,
  0 AS tarifa_transacao,
  0 AS total_desconto,
  0 AS total_acrescimo,
  valor_movimento AS valor_recebido,
  '' AS natureza_titulo,
  entrada_saida,
  nome_conta AS denominacao_conta,
  observacao,
  data_conciliacao

FROM tmp_movimento_financeiro AS mf
WHERE (id_categoria_despesa_receita =:IdCategoriaReceitaNaoObrigatorio 
OR id_categoria_despesa_receita =:IdCategoriaDespesaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))
AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2




ORDER BY  ordenacao, sessao_relatorio, subsessao_relatorio, denominacao_conta, natureza_titulo,codigo_empresa,data_emissao,numero_titulo
