

WITH prudential_sources AS (
    SELECT 
        COALESCE(a.codigo, l.codigo) as codigo,
        a.instituicao as nome_instituicao_historico,
        COALESCE(a.data_base, l.data_base) as data_base,
        a.disponibilidades,
        a.aplicacoes_interfinanceiras_liquidez,
        a.tvm_e_instrumentos_financeiros_derivativos as tvm_derivativos,
        a.operacoes_de_credito,
        a.provisao_operacoes_de_credito,
        a.operacoes_de_credito_liquidas_provisao,
        a.arrendamento_mercantil_a_receber,
        a.imobilizado_de_arrendamento,
        a.credores_antecipacao_valor_residual,
        a.provisao_arrendamento_mercantil,
        a.arrendamento_mercantil_liquido_de_provisao,
        a.outros_creditos_liquido_de_provisao,
        a.outros_ativos_realizaveis,
        a.permanente_ajustado,
        a.ativo_total_ajustado,
        a.ativo_total,
        
        -- Detalhes Passivos (Prudential version with accents on some cols)
        l.depositos_vista,
        l.depositos_poupanca,
        l.depositos_interfinanceiros,
        l.depositos_a_prazo,
        l.conta_de_pagamento_pre_paga,
        l.depositos_outros,
        l.deposito_total as depositos,
        l."obrigações_operações_compromissadas" as captacoes_mercado_aberto,
        l.letras_de_credito_imobiliario,
        l.letras_de_credito_agronegocio,
        l.letras_financeiras,
        l.obrigacoes_titulos_e_valores_mobiliarios_exterior,
        l.outros_recursos_de_aceites_e_emissao_de_titulos,
        l.recursos_de_aceites_e_emissao_de_titulos as recursos_aceites_cambiais,
        l.obrigacoes_emprestimos_e_repasses as obrigacoes_emprestimos_repasses,
        l.captacoes,
        l.instrumentos_derivativos as obrigacoes_por_instr_financeiros_derivativos,
        l."outras_obrigações" as outras_obrigacoes,
        l."passivo_circulante_exigível_a_longo_prazo" as passivo_circulante_exigivel_longo_prazo,
        l.patrimonio_liquido
    FROM (
        SELECT
            codigo,
            instituicao,
            data_base,
            disponibilidades,
            aplicacoes_interfinanceiras_liquidez,
            tvm_e_instrumentos_financeiros_derivativos,
            operacoes_de_credito,
            provisao_operacoes_de_credito,
            operacoes_de_credito_liquidas_provisao,
            arrendamento_mercantil_a_receber,
            imobilizado_de_arrendamento,
            credores_antecipacao_valor_residual,
            provisao_arrendamento_mercantil,
            arrendamento_mercantil_liquido_de_provisao,
            outros_creditos_liquido_de_provisao,
            outros_ativos_realizaveis,
            permanente_ajustado,
            ativo_total_ajustado,
            ativo_total
        FROM "silver"."main"."prudential_conglomerates_assets"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY ativo_total DESC NULLS LAST, codigo) = 1
    ) a
    FULL OUTER JOIN (
        SELECT
            codigo,
            data_base,
            depositos_vista,
            depositos_poupanca,
            depositos_interfinanceiros,
            depositos_a_prazo,
            conta_de_pagamento_pre_paga,
            depositos_outros,
            deposito_total,
            "obrigações_operações_compromissadas",
            letras_de_credito_imobiliario,
            letras_de_credito_agronegocio,
            letras_financeiras,
            obrigacoes_titulos_e_valores_mobiliarios_exterior,
            outros_recursos_de_aceites_e_emissao_de_titulos,
            recursos_de_aceites_e_emissao_de_titulos,
            obrigacoes_emprestimos_e_repasses,
            captacoes,
            instrumentos_derivativos,
            "outras_obrigações",
            "passivo_circulante_exigível_a_longo_prazo",
            patrimonio_liquido
        FROM "silver"."main"."prudential_conglomerates_liabilities"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY deposito_total DESC NULLS LAST, codigo) = 1
    ) l
      ON a.codigo = l.codigo AND a.data_base = l.data_base
),

prudential AS (
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        'Conglomerado Prudencial' as tipo_consolidado,
        -- Ativos
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        -- Passivos Detalhados
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        (ativo_total - patrimonio_liquido) as passivo_total
    FROM prudential_sources
),

financial_sources AS (
    SELECT 
        COALESCE(a.codigo, l.codigo) as codigo,
        a.instituicao as nome_instituicao_historico,
        COALESCE(a.data_base, l.data_base) as data_base,
        a.disponibilidades,
        a.aplicacoes_interfinanceiras_liquidez,
        a.tvm_e_instrumentos_financeiros_derivativos as tvm_derivativos,
        a.operacoes_de_credito,
        a.provisao_operacoes_de_credito,
        a.operacoes_de_credito_liquidas_provisao,
        a.arrendamento_mercantil_a_receber,
        a.imobilizado_de_arrendamento,
        a.credores_antecipacao_valor_residual,
        a.provisao_arrendamento_mercantil,
        a.arrendamento_mercantil_liquido_de_provisao,
        a.outros_creditos_liquido_de_provisao,
        a.outros_ativos_realizaveis,
        a.permanente_ajustado,
        a.ativo_total_ajustado,
        a.ativo_total,
        
        -- Detalhes Passivos
        l.depositos_vista,
        l.depositos_poupanca,
        l.depositos_interfinanceiros,
        l.depositos_a_prazo,
        l.conta_de_pagamento_pre_paga,
        l.depositos_outros,
        l.deposito_total as depositos,
        l.obrigacoes_operacoes_compromissadas as captacoes_mercado_aberto,
        l.letras_de_credito_imobiliario,
        l.letras_de_credito_agronegocio,
        l.letras_financeiras,
        l.obrigacoes_titulos_e_valores_mobiliarios_exterior,
        l.outros_recursos_de_aceites_e_emissao_de_titulos,
        l.recursos_de_aceites_e_emissao_de_titulos as recursos_aceites_cambiais,
        l.obrigacoes_emprestimos_e_repasses as obrigacoes_emprestimos_repasses,
        l.captacoes,
        l.instrumentos_derivativos as obrigacoes_por_instr_financeiros_derivativos,
        l.outras_obrigacoes,
        l.passivo_circulante_exigivel_a_longo_prazo as passivo_circulante_exigivel_longo_prazo,
        l.patrimonio_liquido
    FROM (
        SELECT
            codigo,
            instituicao,
            data_base,
            disponibilidades,
            aplicacoes_interfinanceiras_liquidez,
            tvm_e_instrumentos_financeiros_derivativos,
            operacoes_de_credito,
            provisao_operacoes_de_credito,
            operacoes_de_credito_liquidas_provisao,
            arrendamento_mercantil_a_receber,
            imobilizado_de_arrendamento,
            credores_antecipacao_valor_residual,
            provisao_arrendamento_mercantil,
            arrendamento_mercantil_liquido_de_provisao,
            outros_creditos_liquido_de_provisao,
            outros_ativos_realizaveis,
            permanente_ajustado,
            ativo_total_ajustado,
            ativo_total
        FROM "silver"."main"."financial_conglomerates_assets"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY ativo_total DESC NULLS LAST, codigo) = 1
    ) a
    FULL OUTER JOIN (
        SELECT
            codigo,
            data_base,
            depositos_vista,
            depositos_poupanca,
            depositos_interfinanceiros,
            depositos_a_prazo,
            conta_de_pagamento_pre_paga,
            depositos_outros,
            deposito_total,
            obrigacoes_operacoes_compromissadas,
            letras_de_credito_imobiliario,
            letras_de_credito_agronegocio,
            letras_financeiras,
            obrigacoes_titulos_e_valores_mobiliarios_exterior,
            outros_recursos_de_aceites_e_emissao_de_titulos,
            recursos_de_aceites_e_emissao_de_titulos,
            obrigacoes_emprestimos_e_repasses,
            captacoes,
            instrumentos_derivativos,
            outras_obrigacoes,
            passivo_circulante_exigivel_a_longo_prazo,
            patrimonio_liquido
        FROM "silver"."main"."financial_conglomerates_liabilities"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY deposito_total DESC NULLS LAST, codigo) = 1
    ) l
      ON a.codigo = l.codigo AND a.data_base = l.data_base
),

financial AS (
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        'Conglomerado Financeiro' as tipo_consolidado,
        -- Ativos
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        -- Passivos Detalhados
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        (ativo_total - patrimonio_liquido) as passivo_total
    FROM financial_sources
),

individual_sources AS (
    SELECT 
        COALESCE(a.codigo, l.codigo) as codigo,
        a.instituicao as nome_instituicao_historico,
        COALESCE(a.data_base, l.data_base) as data_base,
        a.disponibilidades,
        a.aplicacoes_interfinanceiras_liquidez,
        a.tvm_e_instrumentos_financeiros_derivativos as tvm_derivativos,
        a.operacoes_de_credito,
        a.provisao_operacoes_de_credito,
        a.operacoes_de_credito_liquidas_provisao,
        a.arrendamento_mercantil_a_receber,
        a.imobilizado_de_arrendamento,
        a.credores_antecipacao_valor_residual,
        a.provisao_arrendamento_mercantil,
        a.arrendamento_mercantil_liquido_de_provisao,
        a.outros_creditos_liquido_de_provisao,
        a.outros_ativos_realizaveis,
        a.permanente_ajustado,
        a.ativo_total_ajustado,
        a.ativo_total,
        
        -- Detalhes Passivos
        l.depositos_vista,
        l.depositos_poupanca,
        l.depositos_interfinanceiros,
        l.depositos_a_prazo,
        l.conta_de_pagamento_pre_paga,
        l.depositos_outros,
        l.deposito_total as depositos,
        l.obrigacoes_operacoes_compromissadas as captacoes_mercado_aberto,
        l.letras_de_credito_imobiliario,
        l.letras_de_credito_agronegocio,
        l.letras_financeiras,
        l.obrigacoes_titulos_e_valores_mobiliarios_exterior,
        l.outros_recursos_de_aceites_e_emissao_de_titulos,
        l.recursos_de_aceites_e_emissao_de_titulos as recursos_aceites_cambiais,
        l.obrigacoes_emprestimos_e_repasses as obrigacoes_emprestimos_repasses,
        l.captacoes,
        l.instrumentos_derivativos as obrigacoes_por_instr_financeiros_derivativos,
        l.outras_obrigacoes,
        l.passivo_circulante_exigivel_a_longo_prazo as passivo_circulante_exigivel_longo_prazo,
        l.patrimonio_liquido
    FROM (
        SELECT
            codigo,
            instituicao,
            data_base,
            disponibilidades,
            aplicacoes_interfinanceiras_liquidez,
            tvm_e_instrumentos_financeiros_derivativos,
            operacoes_de_credito,
            provisao_operacoes_de_credito,
            operacoes_de_credito_liquidas_provisao,
            arrendamento_mercantil_a_receber,
            imobilizado_de_arrendamento,
            credores_antecipacao_valor_residual,
            provisao_arrendamento_mercantil,
            arrendamento_mercantil_liquido_de_provisao,
            outros_creditos_liquido_de_provisao,
            outros_ativos_realizaveis,
            permanente_ajustado,
            ativo_total_ajustado,
            ativo_total
        FROM "silver"."main"."individual_institutions_assets"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY ativo_total DESC NULLS LAST, codigo) = 1
    ) a
    FULL OUTER JOIN (
        SELECT
            codigo,
            data_base,
            depositos_vista,
            depositos_poupanca,
            depositos_interfinanceiros,
            depositos_a_prazo,
            conta_de_pagamento_pre_paga,
            depositos_outros,
            deposito_total,
            obrigacoes_operacoes_compromissadas,
            letras_de_credito_imobiliario,
            letras_de_credito_agronegocio,
            letras_financeiras,
            obrigacoes_titulos_e_valores_mobiliarios_exterior,
            outros_recursos_de_aceites_e_emissao_de_titulos,
            recursos_de_aceites_e_emissao_de_titulos,
            obrigacoes_emprestimos_e_repasses,
            captacoes,
            instrumentos_derivativos,
            outras_obrigacoes,
            passivo_circulante_exigivel_a_longo_prazo,
            patrimonio_liquido
        FROM "silver"."main"."individual_institutions_liabilities"
        QUALIFY ROW_NUMBER() OVER (PARTITION BY codigo, data_base ORDER BY deposito_total DESC NULLS LAST, codigo) = 1
    ) l
      ON a.codigo = l.codigo AND a.data_base = l.data_base
),

individual AS (
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        'Instituicao Individual' as tipo_consolidado,
        -- Ativos
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        -- Passivos Detalhados
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        (ativo_total - patrimonio_liquido) as passivo_total
    FROM individual_sources
),

unificacao AS (
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        tipo_consolidado,
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        passivo_total
    FROM prudential
    UNION ALL
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        tipo_consolidado,
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        passivo_total
    FROM financial
    UNION ALL
    SELECT
        codigo,
        nome_instituicao_historico,
        data_base,
        tipo_consolidado,
        disponibilidades,
        aplicacoes_interfinanceiras_liquidez,
        tvm_derivativos,
        operacoes_de_credito,
        provisao_operacoes_de_credito,
        operacoes_de_credito_liquidas_provisao,
        arrendamento_mercantil_a_receber,
        imobilizado_de_arrendamento,
        credores_antecipacao_valor_residual,
        provisao_arrendamento_mercantil,
        arrendamento_mercantil_liquido_de_provisao,
        outros_creditos_liquido_de_provisao,
        outros_ativos_realizaveis,
        permanente_ajustado,
        ativo_total_ajustado,
        ativo_total,
        depositos_vista,
        depositos_poupanca,
        depositos_interfinanceiros,
        depositos_a_prazo,
        conta_de_pagamento_pre_paga,
        depositos_outros,
        depositos,
        captacoes_mercado_aberto,
        letras_de_credito_imobiliario,
        letras_de_credito_agronegocio,
        letras_financeiras,
        obrigacoes_titulos_e_valores_mobiliarios_exterior,
        outros_recursos_de_aceites_e_emissao_de_titulos,
        recursos_aceites_cambiais,
        obrigacoes_emprestimos_repasses,
        captacoes,
        obrigacoes_por_instr_financeiros_derivativos,
        outras_obrigacoes,
        passivo_circulante_exigivel_longo_prazo,
        patrimonio_liquido,
        passivo_total
    FROM individual
)

SELECT
    
    
        md5(cast(cast(codigo as bigint) as varchar) || tipo_consolidado)
    
 as id_instituicao,
    
    strftime(try_cast(data_base as date), '%Y%m%d')::int
 as id_data,
    tipo_consolidado,
    nome_instituicao_historico,
    
    -- Ativos
    disponibilidades,
    aplicacoes_interfinanceiras_liquidez,
    tvm_derivativos,
    operacoes_de_credito,
    provisao_operacoes_de_credito,
    operacoes_de_credito_liquidas_provisao,
    arrendamento_mercantil_a_receber,
    imobilizado_de_arrendamento,
    credores_antecipacao_valor_residual,
    provisao_arrendamento_mercantil,
    arrendamento_mercantil_liquido_de_provisao,
    outros_creditos_liquido_de_provisao,
    outros_ativos_realizaveis,
    permanente_ajustado,
    ativo_total_ajustado,
    ativo_total,
    
    -- Passivos (Novas Contas Inseridas)
    depositos_vista,
    depositos_poupanca,
    depositos_interfinanceiros,
    depositos_a_prazo,
    conta_de_pagamento_pre_paga,
    depositos_outros,
    depositos,
    captacoes_mercado_aberto,
    letras_de_credito_imobiliario,
    letras_de_credito_agronegocio,
    letras_financeiras,
    obrigacoes_titulos_e_valores_mobiliarios_exterior,
    outros_recursos_de_aceites_e_emissao_de_titulos,
    recursos_aceites_cambiais,
    obrigacoes_emprestimos_repasses,
    captacoes,
    obrigacoes_por_instr_financeiros_derivativos,
    outras_obrigacoes,
    passivo_circulante_exigivel_longo_prazo,
    patrimonio_liquido,
    passivo_total

FROM unificacao