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


INSERT INTO report.smev_register (
    id,
    smev_register_type_code,
    smev_register_codes_id,
    "year",
    "date",
    "type",
    sample_status,
    guid
)
SELECT
    nextval('report.smev_register_id_sequence'),
    'УНВ',
    (SELECT id FROM report.smev_register_codes WHERE short_name = 'УНВ'),
    CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - n,
    CURRENT_DATE,
    'OUT',
    'Сформирован',
    CAST(uuid_in(md5(random()::text)::cstring) AS varchar)
FROM (VALUES (1), (2), (3)) AS t(n)
WHERE NOT EXISTS (
    SELECT 1
    FROM report.smev_register r
    WHERE r."year" = CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - n
      AND r.smev_register_type_code = 'УНВ'
      AND r.sample_status <> 'Удалён'
)







INSERT INTO report.unv_registry_item (
    registry_id,
    client_id,
    snils,
    contract_id,
    contract_type,
    tax_period_year,
    contributions_amount
)
WITH
newly_created AS (
    SELECT id, "year" AS tax_period_year
    FROM report.smev_register
    WHERE smev_register_type_code = 'УНВ'
      AND "year" IN (
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 1,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 2,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 3
      )
      AND id NOT IN (SELECT DISTINCT registry_id FROM report.unv_registry_item)
),
dead_individuals AS (
    SELECT DISTINCT individual_id
    FROM ourpension.application_death_info
    WHERE accepted IS NOT NULL
      AND individual_id IS NOT NULL
),
npo_contributions AS (
    SELECT
        io.contract_id,
        io.individual_id,
        CAST(EXTRACT(YEAR FROM io.date) AS int)  AS contribution_year,
        SUM(t.value)                              AS contributions_amount
    FROM back_office.incoming_order io
    JOIN back_office.incoming_order_operation ioo
        ON ioo.incoming_order_id = io.id
    JOIN back_office.operation o
        ON o.id = ioo.operation_id
    JOIN back_office."transaction" t
        ON t.operation_id = ioo.operation_id
    JOIN back_office.account a
        ON a.id = t.credit_account_id
    JOIN back_office.account_type at
        ON at.id = a.account_type_id
    WHERE at.mnemonics = 'ИПС_ФЛ'
      AND io.payment_return = false
      AND CAST(EXTRACT(YEAR FROM io.date) AS int) IN (
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 1,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 2,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 3
      )
      AND io.contract_id IS NOT NULL
    GROUP BY
        io.contract_id,
        io.individual_id,
        CAST(EXTRACT(YEAR FROM io.date) AS int)
),
pds_contributions AS (
    SELECT
        io.contract_id,
        io.individual_id,
        CAST(EXTRACT(YEAR FROM io.date) AS int)  AS contribution_year,
        SUM(t.value)                              AS contributions_amount
    FROM back_office.incoming_order io
    JOIN back_office.incoming_order_operation ioo
        ON ioo.incoming_order_id = io.id
    JOIN back_office.operation o
        ON o.id = ioo.operation_id
    JOIN back_office."transaction" t
        ON t.operation_id = ioo.operation_id
    JOIN back_office.account a
        ON a.id = t.credit_account_id
    JOIN back_office.account_type at
        ON at.id = a.account_type_id
    WHERE at.mnemonics = 'ПДС СВ'
      AND io.payment_return = false
      AND CAST(EXTRACT(YEAR FROM io.date) AS int) IN (
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 1,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 2,
          CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS int) - 3
      )
      AND io.contract_id IS NOT NULL
    GROUP BY
        io.contract_id,
        io.individual_id,
        CAST(EXTRACT(YEAR FROM io.date) AS int)
),
npo_result AS (
    SELECT
        nc.id                       AS registry_id,
        ind.id                      AS client_id,
        ind.insurance_number        AS snils,
        c.id                        AS contract_id,
        CAST('NPO' AS varchar)      AS contract_type,
        npo.contribution_year       AS tax_period_year,
        npo.contributions_amount
    FROM npo_contributions npo
    JOIN newly_created nc           ON nc.tax_period_year = npo.contribution_year
    JOIN ourpension.contract c      ON c.id = npo.contract_id
    JOIN ourpension.individual ind  ON ind.id = npo.individual_id
    WHERE c.service_type = 'NPO'
      AND ind.insurance_number IS NOT NULL
      AND ind.insurance_number <> ''
      AND ind.id NOT IN (SELECT individual_id FROM dead_individuals)
),
pds_result AS (
    SELECT
        nc.id                       AS registry_id,
        ind.id                      AS client_id,
        ind.insurance_number        AS snils,
        c.id                        AS contract_id,
        CAST('PDS' AS varchar)      AS contract_type,
        pds.contribution_year       AS tax_period_year,
        pds.contributions_amount
    FROM pds_contributions pds
    JOIN newly_created nc           ON nc.tax_period_year = pds.contribution_year
    JOIN ourpension.contract c      ON c.id = pds.contract_id
    JOIN ourpension.individual ind  ON ind.id = pds.individual_id
    WHERE c.service_type = 'PDS'
      AND ind.insurance_number IS NOT NULL
      AND ind.insurance_number <> ''
      AND ind.id NOT IN (SELECT individual_id FROM dead_individuals)
)
SELECT * FROM npo_result
UNION ALL
SELECT * FROM pds_result