SELECT  r.nome_empresa,
  r.cod_conta_financeira,
  r.conta_financeira,
  r.numero_documento,
  r.nome,
  r.data_despesa_receita,
  r.data_emissao,
  r.categoria_despesa_receita,
  r.cod_tipo_despesa,
   r.classificacao_despesa_receita,
  r.tipo_despesa,
  r.observacao,
  r.valor_despesa_receita,
  r.data_aprovacao,
  r.nome_aprovador,
  r.data_origem_despesa,
  r.tipo_origem_despesa,
  r.nome_lancamento,
  r.data_lancamento AS data_lancamento
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 / A Vista
  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,
    dr.data_despesa_receita AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    tf.observacao,
    SUM(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)
  AND tdr.id_tipo_despesa_receita IN (:IdTipoDespesaEspecificoMultEsc)
  AND cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND tpt.valor_amortizado_recalculado > 0 

  GROUP BY se.nome,cf.codigo,cf.denominacao,dr.numero_documento,p.nome,tpt.data_liquidacao,
	dr.data_despesa_receita,tdr.codigo,tdr.denominacao,tdr.classificacao_despesa_receita,
	tf.observacao,dr.data_aprovacao,us.nome,tf.data_documento_origem,tc.tipo_liquidacao,
	ul.nome,dr.data_lancamento,cdr.denominacao
  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,
    nfe.emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  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,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.acrescimo_financeiro > 0
  UNION ALL
  --Despesas Financeiras / Juros de Cobrança Pago
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.juros_cobranca > 0
  UNION ALL
  --Despesas Financeiras / Multa de Cobrança Paga
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.multa_cobranca > 0
  UNION ALL
  --Despesas Financeiras / Desconto Financeiro Concedido
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.desconto_financeiro > 0
  UNION ALL
  --Despesas Financeiras / Desconto Cobrança Concedido
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.desconto_cobranca > 0
  UNION ALL
  --Despesas Financeiras / Taxa de Administração Paga
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.valor_taxa_administracao > 0
  UNION ALL
  --Despesas Financeiras / Tarifa de Transação Paga
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.tarifa_transacao > 0
  UNION ALL
  --Despesas Financeiras / Retenção Tributária Descontada
  SELECT  se.nome AS nome_empresa,
    CAST('' AS TEXT) AS cod_conta_financeira,
    CAST('' AS TEXT) AS conta_financeira,
    tf.numero_titulo AS numero_documento,
    p.nome,
    tf.data_liquidacao,
    tf.data_emissao AS data_emissao,
    tdr.codigo AS cod_tipo_despesa,
    tdr.denominacao AS tipo_despesa,
	tdr.classificacao_despesa_receita,
    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)
    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 cdr.id_categoria_despesa_receita IN (:IdCategoriaDespesa)
  AND tdr.classificacao_despesa_receita IN (:idClassificacaoDespesaReceita)
  AND (:IdCentroResultado = -1)
  AND tf.retencao_tributaria > 0
) AS r