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


-- =====================================================
-- ЗАПРОС 1: NPO
-- =====================================================

WITH filtered_sharers AS (
   SELECT
       s.id    AS id,
       ps.name AS pensionName,
       cc.name AS iv_name
   FROM ourpension.sharer s
   JOIN ourpension.contract c
       ON c.id = s.contract_id
   JOIN ourpension.pension_scheme ps
       ON ps.id = s.scheme_id
   JOIN ourpension.sharer_class_history sch
       ON sch.sharer_id = s.id AND sch.end_date IS NULL
   JOIN ourpension.contract_classes cc
       ON cc.id = sch.class_id
   WHERE c.service_type = 'NPO'
),

relevant_accounts AS (
   SELECT
       a.id    AS account_id,
       fs.pensionName,
       fs.iv_name
   FROM filtered_sharers fs
   JOIN back_office.account a
       ON a.owner_sharer_id = fs.id
   JOIN back_office.account_type at
       ON a.account_type_id = at.id
   JOIN back_office.account_type_group atg
       ON at.account_type_group_id = atg.id
   WHERE atg.mnemonics != 'ВЗ'
),

balance_data AS (
   SELECT
       ra.pensionName,
       ra.iv_name,
       SUM(CASE WHEN '2026-05-01' BETWEEN b.start_date AND b.end_date
                THEN b.total_credit - b.total_debit END) AS balance_begin_sum,
       SUM(CASE WHEN '2026-06-01' BETWEEN b.start_date AND b.end_date
                THEN b.total_credit - b.total_debit END) AS balance_end_sum
   FROM relevant_accounts ra
   JOIN back_office.balance b ON b.account_id = ra.account_id
   GROUP BY ra.pensionName, ra.iv_name
),

ops_npo AS (
   SELECT
       ra.pensionName,
       ra.iv_name,
       SUM(CASE WHEN ot.code = 'DEPOSIT_ENROLLMENT'
                THEN t.value END)                                    AS deposit_enrollment,
       SUM(CASE WHEN ot.code = 'NPO_PENSION_CONTRIB_RETURN'
                THEN t.value END)                                    AS npo_pension_contrib_return,
       SUM(CASE WHEN ot.code = 'PAYMENT_PENSION'
                THEN t.value END)                                    AS payment_pension,
       SUM(CASE WHEN ot.code IN ('PAYMENT_TERMINATED', 'NPO_NDFL_REDEMPTION')
                THEN t.value END)                                    AS payment_terminated,
       SUM(CASE WHEN ot.code IN ('PAYMENT_INHERITED', 'NPO_NDFL_SUCCESSOR')
                THEN t.value END)                                    AS succesor_sum,
       SUM(CASE WHEN ot.code IN (
               'NPO_RETURN_NDFL_NONSTATE_PENSION', 'NPO_RETURN_REDEMPTION_SUM',
               'NPO_RETURN_NDFL_REDEMPTION',       'NPO_RETURN_SUCCESSOR_PAYMENT',
               'NPO_RETURN_NDFL_SUCCESSOR',        'NPO_RETURN_HEIRS_PAYMENT',
               'NPO_RETURN_NDFL_HEIRS')
                THEN t.value END)                                    AS npo_returns,
       SUM(CASE WHEN ot.code = 'TRANSFER_TO_INSURED_FUND_RESERVE'
                THEN t.value END)                                    AS transfer_to_insured_fund_reserve,
       SUM(CASE WHEN ot.code = 'TRANSFER_FROM_INSURED_FUND_RESERVE'
                THEN t.value END)                                    AS transfer_from_insured_fund_reserve,
       SUM(CASE WHEN ot.code = 'NPO_TARGET_CONTRIBUTIONS'
                THEN t.value END)                                    AS npo_target_contributions,
       SUM(CASE WHEN ot.code = 'TRANSFER_TO_INSURED_FUND_RESERVE_OPS'
                THEN t.value END)                                    AS transfer_to_insured_fund_reserve_ops,
       SUM(CASE WHEN ot.code = 'PENSION_INVESTMENT_REVENUE_ENROLLMENT_PR'
                THEN t.value END)                                    AS pension_investment_revenue_enrollment_pr
   FROM relevant_accounts ra
   JOIN back_office."transaction" t   ON t.credit_account_id = ra.account_id
   JOIN back_office.operation o       ON o.id = t.operation_id
   JOIN back_office.operation_type ot ON o.operation_type_id = ot.id
   WHERE o.effective_date BETWEEN '2026-05-01' AND '2026-06-01'
     AND ot.code IN (
         'DEPOSIT_ENROLLMENT',                'NPO_PENSION_CONTRIB_RETURN',
         'PAYMENT_PENSION',                   'PAYMENT_TERMINATED',
         'NPO_NDFL_REDEMPTION',               'NPO_NDFL_SUCCESSOR',
         'PAYMENT_INHERITED',                 'NPO_NDFL_HEIRS',
         'NPO_RETURN_NDFL_NONSTATE_PENSION',  'NPO_RETURN_REDEMPTION_SUM',
         'NPO_RETURN_NDFL_REDEMPTION',        'NPO_RETURN_SUCCESSOR_PAYMENT',
         'NPO_RETURN_NDFL_SUCCESSOR',         'NPO_RETURN_HEIRS_PAYMENT',
         'NPO_RETURN_NDFL_HEIRS',             'TRANSFER_TO_INSURED_FUND_RESERVE',
         'TRANSFER_FROM_INSURED_FUND_RESERVE','NPO_TARGET_CONTRIBUTIONS',
         'TRANSFER_TO_INSURED_FUND_RESERVE_OPS',
         'PENSION_INVESTMENT_REVENUE_ENROLLMENT_PR'
     )
   GROUP BY ra.pensionName, ra.iv_name
),

npo_detail AS (
   SELECT
       bd.pensionName,
       bd.iv_name,
       bd.balance_begin_sum,
       COALESCE(o.deposit_enrollment, 0)                       AS deposit_enrollment,
       COALESCE(o.npo_pension_contrib_return, 0)               AS npo_pension_contrib_return,
       COALESCE(o.payment_pension, 0)                          AS payment_pension,
       COALESCE(o.payment_terminated, 0)                       AS payment_terminated,
       COALESCE(o.succesor_sum, 0)                             AS succesor_sum,
       COALESCE(o.npo_returns, 0)                              AS npo_returns,
       COALESCE(o.payment_pension, 0)
           + COALESCE(o.payment_terminated, 0)
           + COALESCE(o.succesor_sum, 0)
           - COALESCE(o.npo_returns, 0)                        AS total,
       COALESCE(o.transfer_to_insured_fund_reserve, 0)         AS transfer_to_insured_fund_reserve,
       COALESCE(o.transfer_from_insured_fund_reserve, 0)       AS transfer_from_insured_fund_reserve,
       COALESCE(o.npo_target_contributions, 0)                 AS npo_target_contributions,
       COALESCE(o.transfer_to_insured_fund_reserve_ops, 0)     AS transfer_to_insured_fund_reserve_ops,
       COALESCE(o.pension_investment_revenue_enrollment_pr, 0) AS pension_investment_revenue_enrollment_pr,
       bd.balance_end_sum
   FROM balance_data bd
   LEFT JOIN ops_npo o
       ON o.pensionName = bd.pensionName AND o.iv_name = bd.iv_name
   WHERE bd.iv_name IN ('Инвестиционный', 'Страховой')
),

npo_total AS (
   SELECT
       iv_name,
       'Итого'                                               AS pensionName,
       SUM(balance_begin_sum)                                AS balance_begin_sum,
       SUM(deposit_enrollment)                               AS deposit_enrollment,
       SUM(npo_pension_contrib_return)                       AS npo_pension_contrib_return,
       SUM(payment_pension)                                  AS payment_pension,
       SUM(payment_terminated)                               AS payment_terminated,
       SUM(succesor_sum)                                     AS succesor_sum,
       SUM(npo_returns)                                      AS npo_returns,
       SUM(total)                                            AS total,
       SUM(transfer_to_insured_fund_reserve)                 AS transfer_to_insured_fund_reserve,
       SUM(transfer_from_insured_fund_reserve)               AS transfer_from_insured_fund_reserve,
       SUM(npo_target_contributions)                         AS npo_target_contributions,
       SUM(transfer_to_insured_fund_reserve_ops)             AS transfer_to_insured_fund_reserve_ops,
       SUM(pension_investment_revenue_enrollment_pr)         AS pension_investment_revenue_enrollment_pr,
       SUM(balance_end_sum)                                  AS balance_end_sum
   FROM npo_detail
   GROUP BY iv_name
)

SELECT * FROM npo_detail
UNION ALL
SELECT * FROM npo_total
WHERE iv_name IN ('Инвестиционный', 'Страховой');



-- =====================================================
-- ЗАПРОС 2: PDS
-- =====================================================

WITH filtered_sharers AS (
    SELECT
        s.id    AS id,
        ps.name AS pensionName,
        cc.name AS iv_name
    FROM ourpension.sharer s
    JOIN ourpension.contract c
        ON c.id = s.contract_id
    JOIN ourpension.pension_scheme ps
        ON ps.id = s.scheme_id
    JOIN ourpension.sharer_class_history sch
        ON sch.sharer_id = s.id AND sch.end_date IS NULL
    JOIN ourpension.contract_classes cc
        ON cc.id = sch.class_id
    WHERE c.service_type = 'PDS'
),

relevant_accounts AS (
    SELECT
        a.id    AS account_id,
        fs.pensionName,
        fs.iv_name
    FROM filtered_sharers fs
    JOIN back_office.account a
        ON a.owner_sharer_id = fs.id
    JOIN back_office.account_type at
        ON a.account_type_id = at.id
    JOIN back_office.account_type_group atg
        ON at.account_type_group_id = atg.id
    WHERE atg.mnemonics != 'ВЗ'
),

balance_data AS (
    SELECT
        ra.pensionName,
        ra.iv_name,
        SUM(CASE WHEN '2026-05-01' BETWEEN b.start_date AND b.end_date
                 THEN b.total_credit - b.total_debit END) AS balance_begin_sum,
        SUM(CASE WHEN '2026-06-01' BETWEEN b.start_date AND b.end_date
                 THEN b.total_credit - b.total_debit END) AS balance_end_sum
    FROM relevant_accounts ra
    JOIN back_office.balance b ON b.account_id = ra.account_id
    GROUP BY ra.pensionName, ra.iv_name
),

ops_pds AS (
    SELECT
        ra.pensionName,
        ra.iv_name,
        SUM(CASE WHEN ot.code = 'PDS_OPS_ENROLLMENT_PDS'
                 THEN t.value END)                                   AS pds_enrollment,
        SUM(CASE WHEN ot.code = 'DS_DEPOSIT_ENROLLMENT'
                 THEN t.value END)                                   AS pds_deposit_enrollment,
        SUM(CASE WHEN ot.code = 'PDS_DEPOSIT_ENROLLMENT_FOR_EMPLOYER'
                 THEN t.value END)                                   AS pds_deposit_enrollment_for_employer,
        SUM(CASE WHEN ot.code = 'PDS_GOS_ENROLLMENT'
                 THEN t.value END)                                   AS pds_gos_enrollment,
        SUM(CASE WHEN ot.code = 'PDS_SAVINGS_CONTRIB_RETURN'
                 THEN t.value END)                                   AS pds_savings_contrib_return,
        SUM(CASE WHEN ot.code IN ('PDS_EV_PAYMENT', 'PDS_NDFL_LUMP_SUM_PAYMENT')
                 THEN t.value END)                                   AS pds_ev_payment,
        SUM(CASE WHEN ot.code IN ('PDS_REDEMPTION_PAYMENT', 'PDS_NDFL_REDEMPTION_PAYMENT')
                 THEN t.value END)                                   AS pds_redemption_payment,
        SUM(CASE WHEN ot.code IN ('PDS_SUCCESSOR_PAYMENT', 'PDS_NDFL_SUCCESSOR_PAYMENT')
                 THEN t.value END)                                   AS pds_successor_payment,
        SUM(CASE WHEN ot.code IN ('PDS_PENSION_PAYMENT', 'PDS_NDFL_PENSION_PAYMENT')
                 THEN t.value END)                                   AS pds_pension_payment,
        SUM(CASE WHEN ot.code = 'PDS_REDEMPTION_PAYMENT_TO_NP'
                 THEN t.value END)                                   AS pds_redemption_payment_to_np,
        SUM(CASE WHEN ot.code IN (
                'PDS_RETURN_PAYMENT',             'PDS_RETURN_LUMP_SUM_PAYMENT',
                'PDS_RETURN_NDFL_LUMP_SUM',       'PDS_RETURN_PERIODIC_PAYMENT',
                'PDS_RETURN_NDFL_PERIODIC',       'PDS_RETURN_NDFL_REDEMPTION_LOSS',
                'PDS_RETURN_REDEMPTION_LIFELONG', 'PDS_RETURN_SUCCESSOR_PAYMENT',
                'PDS_RETURN_NDFL_SUCCESSOR',      'PDS_RETURN_REDEMPTION_SUM',
                'PDS_RETURN_NDFL_REDEMPTION')
                 THEN t.value END)                                   AS pds_returns,
        SUM(CASE WHEN ot.code = 'TRANSFER_TO_INSURED_FUND_RESERVE'
                 THEN t.value END)                                   AS transfer_to_insured_fund_reserve,
        SUM(CASE WHEN ot.code = 'PDS_TRANSFER_FROM_INSURED_FUND_RESERVE'
                 THEN t.value END)                                   AS transfer_from_insured_fund_reserve,
        SUM(CASE WHEN ot.code = 'PDS_PENSION_INVESTMENT_REVENUE_ENROLLMENT'
                 THEN t.value END)                                   AS financial_result
    FROM relevant_accounts ra
    JOIN back_office."transaction" t   ON t.credit_account_id = ra.account_id
    JOIN back_office.operation o       ON o.id = t.operation_id
    JOIN back_office.operation_type ot ON o.operation_type_id = ot.id
    WHERE o.effective_date BETWEEN '2026-05-01' AND '2026-06-01'
      AND ot.code IN (
          'PDS_OPS_ENROLLMENT_PDS',              'DS_DEPOSIT_ENROLLMENT',
          'PDS_DEPOSIT_ENROLLMENT_FOR_EMPLOYER', 'PDS_GOS_ENROLLMENT',
          'PDS_SAVINGS_CONTRIB_RETURN',          'PDS_EV_PAYMENT',
          'PDS_NDFL_LUMP_SUM_PAYMENT',           'PDS_REDEMPTION_PAYMENT',
          'PDS_NDFL_REDEMPTION_PAYMENT',         'PDS_SUCCESSOR_PAYMENT',
          'PDS_NDFL_SUCCESSOR_PAYMENT',          'PDS_PENSION_PAYMENT',
          'PDS_NDFL_PENSION_PAYMENT',            'PDS_REDEMPTION_PAYMENT_TO_NP',
          'PDS_RETURN_PAYMENT',                  'PDS_RETURN_LUMP_SUM_PAYMENT',
          'PDS_RETURN_NDFL_LUMP_SUM',            'PDS_RETURN_PERIODIC_PAYMENT',
          'PDS_RETURN_NDFL_PERIODIC',            'PDS_RETURN_NDFL_REDEMPTION_LOSS',
          'PDS_RETURN_REDEMPTION_LIFELONG',      'PDS_RETURN_SUCCESSOR_PAYMENT',
          'PDS_RETURN_NDFL_SUCCESSOR',           'PDS_RETURN_REDEMPTION_SUM',
          'PDS_RETURN_NDFL_REDEMPTION',          'TRANSFER_TO_INSURED_FUND_RESERVE',
          'PDS_TRANSFER_FROM_INSURED_FUND_RESERVE',
          'PDS_PENSION_INVESTMENT_REVENUE_ENROLLMENT'
      )
    GROUP BY ra.pensionName, ra.iv_name
),

pds_detail AS (
    SELECT
        bd.pensionName,
        bd.iv_name,
        bd.balance_begin_sum,
        COALESCE(o.pds_enrollment, 0)                      AS pds_enrollment,
        COALESCE(o.pds_deposit_enrollment, 0)              AS pds_deposit_enrollment,
        COALESCE(o.pds_deposit_enrollment_for_employer, 0) AS pds_deposit_enrollment_for_employer,
        COALESCE(o.pds_gos_enrollment, 0)                  AS pds_gos_enrollment,
        COALESCE(o.pds_savings_contrib_return, 0)          AS pds_savings_contrib_return,
        COALESCE(o.pds_ev_payment, 0)                      AS pds_ev_payment,
        COALESCE(o.pds_redemption_payment, 0)              AS pds_redemption_payment,
        COALESCE(o.pds_successor_payment, 0)               AS pds_successor_payment,
        COALESCE(o.pds_pension_payment, 0)                 AS pds_pension_payment,
        COALESCE(o.pds_redemption_payment_to_np, 0)        AS pds_redemption_payment_to_np,
        COALESCE(o.pds_returns, 0)                         AS pds_returns,
        COALESCE(o.transfer_to_insured_fund_reserve, 0)    AS transfer_to_insured_fund_reserve,
        COALESCE(o.transfer_from_insured_fund_reserve, 0)  AS transfer_from_insured_fund_reserve,
        COALESCE(o.financial_result, 0)                    AS financial_result,
        bd.balance_end_sum
    FROM balance_data bd
    LEFT JOIN ops_pds o
        ON o.pensionName = bd.pensionName AND o.iv_name = bd.iv_name
    WHERE bd.iv_name IN ('Инвестиционный', 'Страховой')
),

pds_total AS (
    SELECT
        iv_name,
        'Итого'                                    AS pensionName,
        SUM(balance_begin_sum)                     AS balance_begin_sum,
        SUM(pds_enrollment)                        AS pds_enrollment,
        SUM(pds_deposit_enrollment)                AS pds_deposit_enrollment,
        SUM(pds_deposit_enrollment_for_employer)   AS pds_deposit_enrollment_for_employer,
        SUM(pds_gos_enrollment)                    AS pds_gos_enrollment,
        SUM(pds_savings_contrib_return)            AS pds_savings_contrib_return,
        SUM(pds_ev_payment)                        AS pds_ev_payment,
        SUM(pds_redemption_payment)                AS pds_redemption_payment,
        SUM(pds_successor_payment)                 AS pds_successor_payment,
        SUM(pds_pension_payment)                   AS pds_pension_payment,
        SUM(pds_redemption_payment_to_np)          AS pds_redemption_payment_to_np,
        SUM(pds_returns)                           AS pds_returns,
        SUM(transfer_to_insured_fund_reserve)      AS transfer_to_insured_fund_reserve,
        SUM(transfer_from_insured_fund_reserve)    AS transfer_from_insured_fund_reserve,
        SUM(financial_result)                      AS financial_result,
        SUM(balance_end_sum)                       AS balance_end_sum
    FROM pds_detail
    GROUP BY iv_name
)

SELECT * FROM pds_detail
UNION ALL
SELECT * FROM pds_total
WHERE iv_name IN ('Инвестиционный', 'Страховой');