-- Despesas Pagas - Período
-- ResumoDespesa
SELECT	r.nome_empresa,
	r.categoria_despesa_receita,
	r.cod_tipo_despesa,
	r.tipo_despesa,
	SUM(r.valor_despesa_receita) AS valor_despesa_receita
FROM	(
WITH RECURSIVE tmp_pagamento_titulos(id_titulo_raiz, 
		id_titulo_financeiro, 
		id_titulo_filho, 
		id_titulo_pai, 
		valor_titulo, 
		situacao, 
		data_liquidacao, 
		id_conta_liquidacao,
		juros_cobranca, 
		multa_cobranca, 
		desconto_cobranca, 
		retencao_tributaria, 
		valor_liquidado, 
		valor_ajuste,
		valor_recebido,
		valor_amortizado,
		valor_residual,
		valor_titulo_recalculado,
		valor_amortizado_recalculado,
		valor_residual_recalculado) AS 
	(
		SELECT	tf.id_titulo_financeiro AS id_titulo_raiz,
		tf.id_titulo_financeiro,
		tf.id_titulo_filho,
		tf.id_titulo_pai,		
		tf.valor_titulo,
		tf.situacao,
		tf.data_liquidacao,
		tf.id_conta_liquidacao,
		tf.juros_cobranca,
		tf.multa_cobranca,
		tf.desconto_cobranca,
		tf.retencao_tributaria,
		tf.valor_liquidado,
		(tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria) AS valor_ajuste,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_liquidado 
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_recebido,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria) 
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_amortizado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_titulo - (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) 
		ELSE 
			tf.valor_titulo 
		END) AS DECIMAL(12,2)) AS valor_residual,
		tf.valor_titulo AS valor_titulo_recalculado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria) 
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_amortizado_recalculado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_titulo - (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) 
		ELSE 
			tf.valor_titulo 
		END) AS DECIMAL(12,2)) AS valor_residual_recalculado
		FROM	titulo_financeiro tf
		INNER JOIN (
				SELECT DISTINCT pdr.id_titulo_financeiro
				FROM	despesa_receita AS dr
				INNER JOIN parcela_despesa_receita AS pdr ON (pdr.id_despesa_receita = dr.id_despesa_receita)
				INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = dr.id_tipo_despesa_receita)
				WHERE dr.id_empresa IN (:IdEmpresaMultSlc)
				AND dr.data_despesa_receita <= :DataFinal
				AND tdr.despesa_receita = 1
				AND dr.situacao IN (2,3)
				AND dr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
				AND (:IdCentroResultado = -1 OR EXISTS(SELECT 1 FROM rateio_despesa_receita WHERE id_despesa_receita = dr.id_despesa_receita AND id_centro_resultado = :IdCentroResultado))
				UNION ALL

				SELECT DISTINCT pnfe.id_titulo_financeiro
				FROM	nota_fiscal_entrada AS nfe
				INNER JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
				INNER JOIN parcela_nfe AS pnfe ON (pnfe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
				INNER JOIN despesa_receita AS dr ON (dr.id_despesa_receita = infe.id_despesa)
				WHERE nfe.id_empresa IN (:IdEmpresaMultSlc)
				AND nfe.entrada <= :DataFinal
				AND nfe.situacao = 1
				AND dr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
				AND (:IdCentroResultado = -1 OR EXISTS(SELECT 1 FROM rateio_despesa_receita WHERE id_despesa_receita = dr.id_despesa_receita AND id_centro_resultado = :IdCentroResultado))
			) AS tmp_titulos ON (tmp_titulos.id_titulo_financeiro = tf.id_titulo_financeiro)
		UNION ALL
		SELECT	t.id_titulo_raiz,
		tf.id_titulo_financeiro,
		tf.id_titulo_filho,
		tf.id_titulo_pai,		
		tf.valor_titulo,
		tf.situacao,
		tf.data_liquidacao,
		tf.id_conta_liquidacao,
		tf.juros_cobranca,
		tf.multa_cobranca,
		tf.desconto_cobranca,
		tf.retencao_tributaria,
		tf.valor_liquidado,
		(tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria) AS valor_ajuste,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_liquidado 
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_recebido,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria) 
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_amortizado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			tf.valor_titulo - (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) 
		ELSE 
			tf.valor_titulo 
		END) AS DECIMAL(12,2)) AS valor_residual,
		CAST((CASE WHEN t.situacao = 8 THEN
			COALESCE((tf.valor_titulo * t.valor_residual_recalculado) / NULLIF(t.valor_residual, 0), (tf.valor_titulo * t.valor_residual_recalculado))
		ELSE 
			t.valor_residual_recalculado 
		END) AS DECIMAL(12,2)) AS valor_titulo_recalculado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			(CASE WHEN t.situacao = 8 THEN
				COALESCE(((tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) * (t.valor_residual_recalculado / NULLIF(t.valor_residual, 0))), (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria))) 
			ELSE 
				COALESCE((((tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) / NULLIF(tf.valor_titulo, 0)) * t.valor_residual_recalculado), (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)))
			END)
		ELSE 
			0.00 
		END) AS DECIMAL(12,2)) AS valor_amortizado_recalculado,
		CAST((CASE WHEN tf.situacao IN (2, 3) THEN
			(CASE WHEN t.situacao = 8 THEN
				COALESCE(((tf.valor_titulo - (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria))) * (t.valor_residual_recalculado / NULLIF(t.valor_residual, 0))), (tf.valor_titulo - (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria))))
			ELSE 
				(t.valor_residual_recalculado - COALESCE((((tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria)) / NULLIF(tf.valor_titulo, 0)) * t.valor_residual_recalculado), (tf.valor_liquidado - (tf.juros_cobranca + tf.multa_cobranca - tf.desconto_cobranca - tf.retencao_tributaria))))
			END)
		ELSE 
			(CASE WHEN t.situacao = 8 THEN
				COALESCE((tf.valor_titulo * t.valor_residual_recalculado) / NULLIF(t.valor_residual, 0), (tf.valor_titulo * t.valor_residual_recalculado)) 
			ELSE
				t.valor_residual_recalculado 
			END)
		END) AS DECIMAL(12,2)) AS valor_residual_recalculado
		FROM	titulo_financeiro as tf,
		tmp_pagamento_titulos as t
		WHERE (tf.id_titulo_financeiro = t.id_titulo_filho OR tf.id_titulo_pai = t.id_titulo_financeiro)
	)

	--Despesas Parceladas
	SELECT	se.nome AS nome_empresa,
		cf.codigo AS cod_conta_financeira,
		cf.denominacao AS conta_financeira,
		dr.numero_documento,
		p.nome,
		tpt.data_liquidacao AS data_despesa_receita,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tpt.valor_amortizado_recalculado AS valor_despesa_receita,
		DATE(dr.data_aprovacao) AS data_aprovacao,
		us.nome AS nome_aprovador,
		tf.data_documento_origem AS data_origem_despesa,
		CAST(CASE WHEN tc.tipo_liquidacao = 5 THEN 'Despesas à Vista' ELSE 'Despesas Parceladas' END AS TEXT) AS tipo_origem_despesa,
		ul.nome AS nome_lancamento,
		DATE(dr.data_lancamento) AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	tmp_pagamento_titulos AS tpt
		INNER JOIN titulo_financeiro AS tf ON (tf.id_titulo_financeiro = tpt.id_titulo_raiz)
		INNER JOIN parcela_despesa_receita AS pdr ON (pdr.id_titulo_financeiro = tf.id_titulo_financeiro)
		INNER JOIN tipo_cobranca AS tc ON (tc.id_tipo_cobranca = pdr.id_tipo_cobranca)
		INNER JOIN despesa_receita AS dr ON (dr.id_despesa_receita = pdr.id_despesa_receita)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = dr.id_tipo_despesa_receita)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
		INNER JOIN pessoa AS p ON (p.id_pessoa = dr.id_pessoa)
		INNER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tpt.id_conta_liquidacao)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = dr.id_empresa)
		LEFT OUTER JOIN sis_usuario AS us ON(us.id_usuario = dr.id_usuario_aprovador)
		LEFT OUTER JOIN sis_usuario AS ul ON(ul.id_usuario = dr.id_usuario_lancamento)
	WHERE tpt.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tpt.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	UNION ALL
	-- Despesas por Nota Fiscal de Entrada
	SELECT	se.nome AS nome_empresa,
		cf.codigo AS cod_conta_financeira,
		cf.denominacao AS conta_financeira,
		CAST(nfe.numero AS VARCHAR(20)) AS numero_documento,
		p.nome,
		tpt.data_liquidacao AS data_despesa_receita,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		ROUND((tpt.valor_amortizado_recalculado) * COALESCE((infe.total_produto + infe.icms_substituicao) / NULLIF((nfe.total_produto + nfe.icms_substituicao), 0), (infe.total_produto + infe.icms_substituicao)), 2) AS valor_despesa_receita,
		CAST(NULL AS DATE) AS data_aprovacao,
		'' AS nome_aprovador,
		tf.data_documento_origem AS data_origem_despesa,
		CAST('Despesas Parceladas' AS TEXT) AS tipo_origem_despesa,
		ul.nome AS nome_lancamento,
		DATE(nfe.data_lancamento) AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	tmp_pagamento_titulos AS tpt
		INNER JOIN titulo_financeiro AS tf ON (tf.id_titulo_financeiro = tpt.id_titulo_raiz)
		INNER JOIN parcela_nfe AS pnfe ON (pnfe.id_titulo_financeiro = tf.id_titulo_financeiro)
		INNER JOIN nota_fiscal_entrada AS nfe ON (nfe.id_nota_fiscal_entrada = pnfe.id_nota_fiscal_entrada)
		INNER JOIN item_nfe AS infe ON (infe.id_nota_fiscal_entrada = nfe.id_nota_fiscal_entrada)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = infe.id_tipo_despesa)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
		INNER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tpt.id_conta_liquidacao)
		INNER JOIN pessoa AS p ON (p.id_pessoa = nfe.id_fornecedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = nfe.id_empresa)
		LEFT OUTER JOIN sis_usuario AS ul ON(ul.id_usuario = nfe.id_usuario_lancamento)
	WHERE tpt.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tpt.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1 OR EXISTS(SELECT 1 FROM rateio_despesa_receita WHERE id_despesa_receita = infe.id_despesa AND id_centro_resultado = :IdCentroResultado))
	UNION ALL
	--Despesas Financeiras / Acréscimo Financeiro Pago
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.acrescimo_financeiro AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -1)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 1
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.acrescimo_financeiro > 0
	UNION ALL
	--Despesas Financeiras / Juros de Cobrança Pago
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.juros_cobranca AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -2)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 1
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.juros_cobranca > 0
	UNION ALL
	--Despesas Financeiras / Multa de Cobrança Paga
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.multa_cobranca AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -3)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 1
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.multa_cobranca > 0
	UNION ALL
	--Despesas Financeiras / Desconto Financeiro Concedido
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.desconto_financeiro AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -4)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 2
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.desconto_financeiro > 0
	UNION ALL
	--Despesas Financeiras / Desconto Cobrança Concedido
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.desconto_cobranca AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -5)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 2
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.desconto_cobranca > 0
	UNION ALL
	--Despesas Financeiras / Taxa de Administração Paga
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.valor_taxa_administracao AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -6)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 2
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.valor_taxa_administracao > 0
	UNION ALL
	--Despesas Financeiras / Tarifa de Transação Paga
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.tarifa_transacao AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -7)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 2
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.tarifa_transacao > 0
	UNION ALL
	--Despesas Financeiras / Retenção Tributária Descontada
	SELECT	se.nome AS nome_empresa,
		COALESCE(cf.codigo, '') AS cod_conta_financeira,
		COALESCE(cf.denominacao, '') AS conta_financeira,
		tf.numero_titulo AS numero_documento,
		p.nome,
		tf.data_liquidacao,
		tdr.codigo AS cod_tipo_despesa,
		tdr.denominacao AS tipo_despesa,
		tf.observacao,
		tf.retencao_tributaria AS total_despesa,
		CAST(NULL AS TIMESTAMP) AS data_aprovacao,
		CAST(NULL AS VARCHAR(50)) AS nome,
		data_documento_origem AS data_origem_despesa,
		CAST('Despesas Financeiras' AS TEXT) AS tipo_origem_despesa,
		CAST(NULL AS VARCHAR(50)) AS nome_lancamento,
		tf.data_lancamento AS data_lancamento,
		cdr.denominacao AS categoria_despesa_receita
	FROM	titulo_financeiro AS tf
		INNER JOIN pessoa AS p ON (p.id_pessoa = tf.id_credor_devedor)
		INNER JOIN sis_empresa AS se ON (se.id_empresa = tf.id_empresa)
		INNER JOIN tipo_despesa_receita AS tdr ON (tdr.id_tipo_despesa_receita = -8)
		LEFT OUTER JOIN conta_financeira AS cf ON (cf.id_conta_financeira = tf.id_conta_liquidacao)
		INNER JOIN categoria_despesa_receita AS cdr ON (cdr.id_categoria_despesa_receita = tdr.id_categoria_despesa_receita)
	WHERE tf.id_empresa IN (:IdEmpresaMultSlc)
	AND tf.data_liquidacao BETWEEN :DataInicial AND :DataFinal
	AND tf.pagar_receber = 2
	AND tf.situacao IN (2, 3)
	AND tf.id_conta_liquidacao IN (:IdContaFinanceiraMultEsc)
	AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
	AND (:IdCentroResultado = -1)
	AND tf.retencao_tributaria > 0	
) AS r
GROUP BY 1,2,3,4
HAVING SUM(r.valor_despesa_receita) != 0;