WITH detalhes_titulos AS (

    SELECT
        :DataFinal AS mes,
        p.codigo AS codigo_credor_devedor,
        p.nome AS credor_devedor,
        tf.data_emissao,
        tf.data_vencimento,
        tf.numero_titulo,
        tf.data_liquidacao,
        tf.valor_titulo AS valor_principal,
        (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca) AS total_acrescimo,
        (tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria + tf.valor_taxa_administracao + tf.tarifa_transacao) AS total_desconto,
        se.nome AS nome_empresa, 
        tf.id_titulo_financeiro,
        tf.pagar_receber, -- 1 - Pagar, 2 - Receber
        tf.natureza_titulo as codigo_natureza_titulo,
        tf.tipo_titulo,
        tf.situacao,
        ovl1.titulo AS natureza_titulo,
        CASE WHEN tf.valor_liquidado > 0 THEN tf.valor_liquidado ELSE
        (tf.valor_titulo
        - (tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria + tf.valor_taxa_administracao + tf.tarifa_transacao)
        + (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca)) END AS valor_titulo
    FROM titulo_financeiro AS tf 
    INNER JOIN sis_empresa AS se ON se.id_empresa = tf.id_empresa
    LEFT JOIN pessoa AS p ON (tf.id_credor_devedor = p.id_pessoa)
    LEFT JOIN sis_opcao_lista_valor AS ovl1 ON (ovl1.id = tf.natureza_titulo AND ovl1.id_lista_valor = 'C043EFC0EDD5414995003170978F8878')

    WHERE tf.id_empresa IN (:IdEmpresaMultSlc) 
    AND tf.data_vencimento <= :DataFinal AND	(tf.situacao IN (1, 9) OR tf.data_liquidacao > :DataFinal) AND 
    (tf.natureza_titulo IN (:NaturezaTituloReceberMultEscTodos) OR tf.natureza_titulo IN (:NaturezaTituloPagarMultEscTodos))


    UNION ALL

    SELECT
        date_trunc('month',CAST(:DataFinal AS DATE)) - INTERVAL'1 day' AS MES,
        p.codigo AS codigo_credor_devedor,
        p.nome AS credor_devedor,
        tf.data_emissao,
        tf.data_vencimento,
        tf.numero_titulo,
        tf.data_liquidacao,
        tf.valor_titulo AS valor_principal,
        (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca) AS total_acrescimo,
        (tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria + tf.valor_taxa_administracao + tf.tarifa_transacao) AS total_desconto,
        se.nome AS nome_empresa, 
        tf.id_titulo_financeiro,
        tf.pagar_receber, -- 1 - Pagar, 2 - Receber
        tf.natureza_titulo as codigo_natureza_titulo,
        tf.tipo_titulo,
        tf.situacao,
        ovl1.titulo AS natureza_titulo,
        CASE WHEN tf.valor_liquidado > 0 THEN tf.valor_liquidado ELSE
        (tf.valor_titulo
        - (tf.desconto_financeiro + tf.desconto_cobranca + tf.retencao_tributaria + tf.valor_taxa_administracao + tf.tarifa_transacao)
        + (tf.acrescimo_financeiro + tf.juros_cobranca + tf.multa_cobranca)) END AS valor_titulo
    FROM titulo_financeiro AS tf 
    INNER JOIN sis_empresa AS se ON se.id_empresa = tf.id_empresa
    LEFT JOIN sis_opcao_lista_valor AS ovl1 ON (ovl1.id = tf.natureza_titulo AND ovl1.id_lista_valor = 'C043EFC0EDD5414995003170978F8878')
    LEFT JOIN pessoa AS p ON (tf.id_credor_devedor = p.id_pessoa)
    WHERE tf.id_empresa IN (:IdEmpresaMultSlc) 
    AND tf.data_vencimento <= date_trunc('month',CAST(:DataFinal AS DATE)) - INTERVAL'1 day' AND	(tf.situacao IN (1, 9) OR tf.data_liquidacao > date_trunc('month',CAST(:DataFinal AS DATE)) - INTERVAL'1 day')
    AND (tf.natureza_titulo IN (:NaturezaTituloReceberMultEscTodos) OR tf.natureza_titulo IN (:NaturezaTituloPagarMultEscTodos))
    ORDER BY MES, nome_empresa, pagar_receber, natureza_titulo, data_vencimento
)

SELECT * FROM detalhes_titulos