Загрузка данных


cte_ps as (
    select
        1 as cid,
        row_number() over (
            order by
                g.uidpensionscheme,
                g.pension_scheme_id,
                g.uidsubtypeactivity,
                g.strategy_id
        ) as pid,

        coalesce(
            ps_id.name,
            ps_uid.name,
            case
                when g.pension_scheme_id is null
                 and nullif(btrim(g.uidpensionscheme), '') is null
                then 'Пенсионная схема не указана'
                else 'Пенсионная схема не сопоставлена'
            end
        ) as name,

        coalesce(
            st_id.name,
            st_uid.name,
            case
                when g.strategy_id is null
                 and nullif(btrim(g.uidsubtypeactivity), '') is null
                then 'Стратегия не указана'
                else 'Стратегия не сопоставлена'
            end
        ) as strateg,

        g.svfa_рu,
        g.ВВА_рu,
        g.ivfa_рu,
        g.svfa_bu,
        g.ВВА_bu,
        g.ivfa_bu

    from (
        select
            rd.pension_scheme_id,
            rd.uidpensionscheme,
            rd.strategy_id,
            rd.uidsubtypeactivity,

            sum(
                case
                    when rd.account = '38302'
                     and coalesce(rd.contract_class_code, 'INS') = 'INS'
                    then abs(
                        coalesce(rd.sum_dt_pu, 0)
                        - coalesce(rd.sum_ct_pu, 0)
                    )
                end
            ) as svfa_рu,

            sum(
                case
                    when rd.account = '38902'
                    then abs(
                        coalesce(rd.sum_dt_pu, 0)
                        - coalesce(rd.sum_ct_pu, 0)
                    )
                end
            ) as ВВА_рu,

            sum(
                case
                    when rd.account in (
                        '39002', '39022', '39023', '39024'
                    )
                     and coalesce(rd.contract_class_code, 'INV') = 'INV'
                    then abs(
                        coalesce(rd.sum_dt_pu, 0)
                        - coalesce(rd.sum_ct_pu, 0)
                    )
                end
            ) as ivfa_рu,

            sum(
                case
                    when rd.account = '38302'
                     and coalesce(rd.contract_class_code, 'INS') = 'INS'
                    then abs(
                        coalesce(rd.sum_dt_bu, 0)
                        - coalesce(rd.sum_ct_bu, 0)
                    )
                end
            ) as svfa_bu,

            sum(
                case
                    when rd.account = '38902'
                    then abs(
                        coalesce(rd.sum_dt_bu, 0)
                        - coalesce(rd.sum_ct_bu, 0)
                    )
                end
            ) as ВВА_bu,

            sum(
                case
                    when rd.account in (
                        '39002', '39022', '39023', '39024'
                    )
                     and coalesce(rd.contract_class_code, 'INV') = 'INV'
                    then abs(
                        coalesce(rd.sum_dt_bu, 0)
                        - coalesce(rd.sum_ct_bu, 0)
                    )
                end
            ) as ivfa_bu

        from back_office.report_conformity_pu_bu_detail rd
        where rd.report_conformity_pu_bu_id = $P{id}
          and rd.account in (
              '38302', '38902', '39002',
              '39022', '39023', '39024'
          )
        group by
            rd.pension_scheme_id,
            rd.uidpensionscheme,
            rd.strategy_id,
            rd.uidsubtypeactivity
    ) g

    left join prod_line.pens_scheme ps_id
        on ps_id.id = g.pension_scheme_id

    left join prod_line.hb_invest_strategy st_id
        on st_id.id = g.strategy_id

    left join lateral (
        select max(ps.name) as name
        from prod_line.pens_scheme ps
        where g.pension_scheme_id is null
          and nullif(
              lower(btrim(cast(ps.uid_1c as text))), ''
          ) = nullif(
              lower(btrim(g.uidpensionscheme)), ''
          )
        having count(*) = 1
    ) ps_uid on true

    left join lateral (
        select max(st.name) as name
        from prod_line.hb_invest_strategy st
        where g.strategy_id is null
          and nullif(
              lower(btrim(cast(st.uid_1c as text))), ''
          ) = nullif(
              lower(btrim(g.uidsubtypeactivity)), ''
          )
        having count(*) = 1
    ) st_uid on true
),