-- Dados -  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 = 0

),
         

tmp_titulo_financeiro AS (

     -- PIX ADATIVE 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,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_principal,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_titulo,
        0 AS valor_taxa_administracao,
        0 AS tarifa_transacao,
        0 AS total_acrescimo,
        0 AS total_desconto,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_recebido,	
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_liquidado,	
        'Registrado' AS situacao_titulo,
        100 AS natureza_titulo_codigo,
        'Pix Adaptive' AS natureza_titulo,
        tmf.entrada_saida,
        'Pix Adaptive' 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_financeiro AS mf 
        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 AND -- entrada_saida = 1 - Entrada
    (cf.transitoria = 'N' AND tmf.id_tipo_movimento_financeiro = 8547113)
    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 = 0
    -- < 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


    -- 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,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_principal,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_titulo,
        0 AS valor_taxa_administracao,
        0 AS tarifa_transacao,
        0 AS total_acrescimo,
        0 AS total_desconto,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_recebido,	
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) 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 = 0
    -- < 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,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_principal,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_titulo,
        0 AS valor_taxa_administracao,
        0 AS tarifa_transacao,
        0 AS total_acrescimo,
        0 AS total_desconto,
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) AS valor_recebido,	
        mf.valor_movimento * ((POSITION(CAST('1' AS CHAR) IN CAST(tmf.entrada_saida AS CHAR(1))))) 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 = 0
    -- < 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,
        tf.valor_principal,
        tf.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)*/
        (tf.valor_liquidado
        +(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)) 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 = 0
        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,106,117,214, 201,202,203,204,205, 213, 221, 109, 116, 101, 109, 116,108,209) 
    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
        
        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) --2526603 1. RECEITA OPERACIONAL ,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,
        mf.valor_movimento,
        mf.id_conta_financeira,
        cf.denominacao as nome_conta,
        tmf.entrada_saida,
        (CASE WHEN :ConsolidadoDetalhado = 0 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 
            COUNT(mc.id_movimento_cheque) AS sequencia  
  
        FROM movimento_cheque AS mc
        LEFT JOIN deposito_cheque AS dp ON dp.id_deposito_cheque = mc.id_deposito_cheque

        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
            WHERE  mc.id_titulo_financeiro = 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 TRUE
    ,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 = 0 
    -- < 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'
),

resultado AS (

    SELECT
    'SALDO INICIAL DAS CONTAS FINANCEIRAS' AS tipo,
    1000 AS ordenacao,
    'SALDO INICIAL' AS sessao_relatorio,
    denominacao AS subsessao_relatorio,
    data_saldo_inicial AS natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (saldo_banco_inicial) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (saldo_banco_inicial) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (saldo_banco_inicial) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (saldo_banco_inicial) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (saldo_banco_inicial) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (saldo_banco_inicial) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (saldo_banco_inicial) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (saldo_banco_inicial) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (saldo_banco_inicial) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (saldo_banco_inicial) ELSE 0 END) AS outubro,
    SUM(CASE WHEN mes = 11 THEN (saldo_banco_inicial) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (saldo_banco_inicial) ELSE 0 END) AS dezembro,
    SUM(saldo_banco_inicial) AS informacao_anual
    FROM tmp_saldo_banco WHERE :RegimeCompetenciaCaixa = 2 
    AND (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1)
    GROUP BY codigo,denominacao, data_saldo_inicial

    UNION ALL 


    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (valor_recebido) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (valor_recebido) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (valor_recebido) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (valor_recebido) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (valor_recebido) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (valor_recebido) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (valor_recebido) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (valor_recebido) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (valor_recebido) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (valor_recebido) ELSE 0 END) AS outubro,
    SUM(CASE WHEN mes = 11 THEN (valor_recebido) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (valor_recebido) ELSE 0 END) AS dezembro,
    SUM(valor_recebido) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (valor_recebido) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (valor_recebido) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (valor_recebido) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (valor_recebido) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (valor_recebido) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (valor_recebido) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (valor_recebido) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (valor_recebido) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (valor_recebido) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (valor_recebido) ELSE 0 END) AS outubro,
    SUM(CASE WHEN mes = 11 THEN (valor_recebido) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (valor_recebido) ELSE 0 END) AS dezembro,
    SUM(valor_recebido) AS informacao_anual
    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
    GROUP BY denominacao_categoria, denominacao,natureza_titulo --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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (total_desconto) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (total_desconto) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (total_desconto) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (total_desconto) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (total_desconto) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (total_desconto) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (total_desconto) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (total_desconto) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (total_desconto) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (total_desconto) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (total_desconto) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (total_desconto) ELSE 0 END) AS dezembro,
    SUM(total_desconto) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (total_acrescimo) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (total_acrescimo) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (total_acrescimo) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (total_acrescimo) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (total_acrescimo) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (total_acrescimo) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (total_acrescimo) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (total_acrescimo) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (total_acrescimo) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (total_acrescimo) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (total_acrescimo) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (total_acrescimo) ELSE 0 END) AS dezembro,
    SUM(total_acrescimo) AS informacao_anual
    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. RECEITA FINANCEIRA
    AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    ROUND(SUM(CASE WHEN mes = 1  THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2) AS janeiro,
    ROUND(SUM(CASE WHEN mes = 2 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS fevereiro,
    ROUND(SUM(CASE WHEN mes = 3 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS marco,
    ROUND(SUM(CASE WHEN mes = 4 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS abril,
    ROUND(SUM(CASE WHEN mes = 5 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS maio,
    ROUND(SUM(CASE WHEN mes = 6 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS junho,
    ROUND(SUM(CASE WHEN mes = 7 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido)  ELSE 0 END),2) AS julho,
    ROUND(SUM(CASE WHEN mes = 8 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido)  ELSE 0 END),2) AS agosto,
    ROUND(SUM(CASE WHEN mes = 9 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS setembro,
    ROUND(SUM(CASE WHEN mes = 10 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido)  ELSE 0 END),2) AS outubro,
    ROUND(SUM(CASE WHEN mes = 11 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido) ELSE 0 END),2)  AS novembro,
    ROUND(SUM(CASE WHEN mes = 12 THEN COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido)  ELSE 0 END),2) AS dezembro,
    ROUND(SUM(COALESCE(tf.valor_recebido * (infe.total_produto / NULLIF(nfe.total_produto, 0)), tf.valor_recebido)),2)  AS informacao_anual
    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
    GROUP BY ci.denominacao,  natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (valor_taxa_administracao) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (valor_taxa_administracao) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (valor_taxa_administracao) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (valor_taxa_administracao) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (valor_taxa_administracao) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (valor_taxa_administracao) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (valor_taxa_administracao) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (valor_taxa_administracao) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (valor_taxa_administracao) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (valor_taxa_administracao) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (valor_taxa_administracao) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (valor_taxa_administracao) ELSE 0 END) AS dezembro,
    SUM(valor_taxa_administracao) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (tarifa_transacao) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (tarifa_transacao) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (tarifa_transacao) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (tarifa_transacao) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (tarifa_transacao) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (tarifa_transacao) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (tarifa_transacao) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (tarifa_transacao) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (tarifa_transacao) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (tarifa_transacao) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (tarifa_transacao) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (tarifa_transacao) ELSE 0 END) AS dezembro,
    SUM(tarifa_transacao) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (total_desconto) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (total_desconto) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (total_desconto) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (total_desconto) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (total_desconto) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (total_desconto) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (total_desconto) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (total_desconto) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (total_desconto) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (total_desconto) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (total_desconto) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (total_desconto) ELSE 0 END) AS dezembro,
    SUM(total_desconto) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (total_acrescimo) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (total_acrescimo) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (total_acrescimo) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (total_acrescimo) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (total_acrescimo) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (total_acrescimo) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (total_acrescimo) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (total_acrescimo) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (total_acrescimo) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (total_acrescimo) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (total_acrescimo) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (total_acrescimo) ELSE 0 END) AS dezembro,
    SUM(total_acrescimo) AS informacao_anual
    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
    GROUP BY natureza_titulo

    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,
    natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (valor_recebido) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (valor_recebido) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (valor_recebido) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (valor_recebido) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (valor_recebido) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (valor_recebido) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (valor_recebido) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (valor_recebido) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (valor_recebido) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (valor_recebido) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (valor_recebido) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (valor_recebido) ELSE 0 END) AS dezembro,
    SUM(valor_recebido) AS informacao_anual
    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
    GROUP BY denominacao_categoria, denominacao,natureza_titulo

    UNION ALL 

    SELECT
    tipo,
    ordenacao,
    receita_despesa AS sessao_relatorio,
    nome_movimento AS subsessao_relatorio,
    '' AS natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (valor_movimento) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (valor_movimento) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (valor_movimento) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (valor_movimento) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (valor_movimento) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (valor_movimento) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (valor_movimento) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (valor_movimento) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (valor_movimento) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (valor_movimento) ELSE 0 END) AS oQutubro,
    SUM(CASE WHEN mes = 11 THEN (valor_movimento) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (valor_movimento) ELSE 0 END) AS dezembro,
    SUM(valor_movimento) AS informacao_anual
    FROM tmp_movimento_financeiro AS mf
    WHERE (id_categoria_despesa_receita = :IdCategoriaReceitaNaoObrigatorio OR id_categoria_despesa_receita =:IdCategoriaDespesaNaoObrigatorio
    OR  10999 =:IdCategoriaDespesaNaoObrigatorio OR  11081 =:IdCategoriaReceitaNaoObrigatorio OR (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1))
    AND id_conta_financeira IN (:IdContaFinanceiraAtivaFluxo) AND :RegimeCompetenciaCaixa = 2
    GROUP BY tipo, ordenacao, receita_despesa, nome_movimento

    UNION ALL

    SELECT
    'SALDO FINAL DAS CONTAS FINANCEIRAS' AS tipo,
    5000 AS ordenacao,
    'SALDO FINAL' AS sessao_relatorio,
    denominacao AS subsessao_relatorio,
    data_saldo_final AS natureza_titulo,
    'S1' AS totalizador,
    SUM(CASE WHEN mes = 1  THEN (saldo_banco_final) ELSE 0 END) AS janeiro,
    SUM(CASE WHEN mes = 2 THEN (saldo_banco_final) ELSE 0 END) AS fevereiro,
    SUM(CASE WHEN mes = 3 THEN (saldo_banco_final) ELSE 0 END) AS marco,
    SUM(CASE WHEN mes = 4 THEN (saldo_banco_final) ELSE 0 END) AS abril,
    SUM(CASE WHEN mes = 5 THEN (saldo_banco_final) ELSE 0 END) AS maio,
    SUM(CASE WHEN mes = 6 THEN (saldo_banco_final) ELSE 0 END) AS junho,
    SUM(CASE WHEN mes = 7 THEN (saldo_banco_final) ELSE 0 END) AS julho,
    SUM(CASE WHEN mes = 8 THEN (saldo_banco_final) ELSE 0 END) AS agosto,
    SUM(CASE WHEN mes = 9 THEN (saldo_banco_final) ELSE 0 END) AS setembro,
    SUM(CASE WHEN mes = 10 THEN (saldo_banco_final) ELSE 0 END) AS outubro,
    SUM(CASE WHEN mes = 11 THEN (saldo_banco_final) ELSE 0 END) AS novembro,
    SUM(CASE WHEN mes = 12 THEN (saldo_banco_final) ELSE 0 END) AS dezembro,
    SUM(saldo_banco_final) AS informacao_anual
    FROM tmp_saldo_banco WHERE :RegimeCompetenciaCaixa = 2
    AND (:IdCategoriaDespesaNaoObrigatorio = -1 AND :IdCategoriaReceitaNaoObrigatorio = -1)
    GROUP BY codigo,denominacao, data_saldo_final

    ORDER BY  ordenacao, sessao_relatorio, subsessao_relatorio
)

SELECT * FROM resultado
