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


with base as (
    select
        c.id as contract_id,
        c.service_type,
        c.date as contract_date,
        sh.id as sharer_id,
        sh.sharer_id_1c
    from ourpension.application_termination_contract atc
        join ourpension.sharer sh on atc.sharer_id = sh.id
        join ourpension.contract c on c.id = sh.contract_id
    where atc.id = :p_application_termination_contract_id
),

sum_by_year(year, value) as (
    select
        cast(date_part('year', t.period_date) as integer) as year,
        sum(t.amount) as value
    from base b
        join mgr.ft_dwh_get__pension_account_operation(
            cast(
                '{"p_sPensionAccountId":"' || b.sharer_id_1c ||
                '", "p_sServiceType":"' || b.service_type || '"}'
                as jsonb
            )
        ) t on true
    where case
        when b.service_type = 'NPO'
            then t.operation_type_name in ('Ч/з банк', 'От работодателя')
        when b.service_type = 'PDS'
            then t.operation_type_name = 'Сберегательные взносы'
        else false
    end
    group by cast(date_part('year', t.period_date) as integer)
)

select
    m_nv.year,
    'NONE' as type,
    coalesce(sum_by_year.value, 0::numeric) as sum_income,
    null::numeric as sum_tax_deduction,
    null::date as date,
    m_nv.value as max_tax_deduction
from base b
    join ourpension.max_year_tax_deduction m_nv
        on m_nv.year = :p_year
    left join sum_by_year
        on sum_by_year.year = m_nv.year
        and sum_by_year.value >= 0
where m_nv.year >= cast(date_part('year', b.contract_date) as integer)
order by m_nv.year;