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


WITH unv_code AS (
    SELECT id
    FROM report.smev_register_codes
    WHERE short_name = 'УНВ'
    ORDER BY id
    LIMIT 1
),
params AS (
    SELECT
        CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS integer) - 1 AS target_year
)
INSERT INTO report.smev_register (
    id,
    smev_register_type_code,
    smev_register_codes_id,
    "year",
    "date",
    "type",
    sample_status
)
SELECT
    nextval('report.smev_register_id_sequence'),
    'УНВ',
    uc.id,
    p.target_year,
    CURRENT_DATE,
    'OUT',
    'Сформирован'
FROM unv_code uc
CROSS JOIN params p
WHERE NOT EXISTS (
    SELECT 1
    FROM report.smev_register r
    WHERE r.smev_register_type_code = 'УНВ'
      AND r."year" = p.target_year
      AND r.sample_status IS DISTINCT FROM 'Удалён'
);



WITH params AS (
    SELECT
        CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS integer) - 1 AS target_year
),
target_registry AS (
    SELECT r.id
    FROM report.smev_register r
    CROSS JOIN params p
    WHERE r.smev_register_type_code = 'УНВ'
      AND r."year" = p.target_year
      AND r.sample_status IS DISTINCT FROM 'Удалён'
    ORDER BY r.id DESC
    LIMIT 1
),
annual_contracts AS (
    SELECT
        s.client_id,
        s.contract_id
    FROM report.unv_annual_setting s
    CROSS JOIN params p
    WHERE s.annual_deduction_flag = 1

      /* Автоматическое включение начинается со следующего периода */
      AND s.selected_tax_period < p.target_year
),
contributions AS (
    SELECT
        ac.client_id,
        ac.contract_id,
        ind.insurance_number AS snils,
        c.service_type AS contract_type,
        SUM(t.value) AS contributions_amount
    FROM annual_contracts ac
    JOIN back_office.incoming_order io
        ON io.individual_id = ac.client_id
       AND io.contract_id = ac.contract_id
    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
    JOIN ourpension.contract c
        ON c.id = ac.contract_id
    JOIN ourpension.individual ind
        ON ind.id = ac.client_id
    CROSS JOIN params p
    WHERE io.payment_return IS NOT TRUE
      AND CAST(EXTRACT(YEAR FROM io.date) AS integer) = p.target_year
      AND (
            (c.service_type = 'NPO' AND at.mnemonics = 'ИПС_ФЛ')
            OR
            (c.service_type = 'PDS' AND at.mnemonics = 'ПДС СВ')
          )
      AND NULLIF(TRIM(ind.insurance_number), '') IS NOT NULL
      AND NOT EXISTS (
          SELECT 1
          FROM ourpension.application_death_info adi
          WHERE adi.individual_id = ind.id
            AND adi.accepted IS NOT NULL
      )
    GROUP BY
        ac.client_id,
        ac.contract_id,
        ind.insurance_number,
        c.service_type
    HAVING SUM(t.value) > 0
)
INSERT INTO report.unv_registry_item (
    registry_id,
    client_id,
    snils,
    contract_id,
    contract_type,
    tax_period_year,
    contributions_amount,
    annual_deduction_flag
)
SELECT
    tr.id,
    c.client_id,
    c.snils,
    c.contract_id,
    c.contract_type,
    CAST(p.target_year AS smallint),
    c.contributions_amount,
    1
FROM target_registry tr
CROSS JOIN contributions c
CROSS JOIN params p
WHERE NOT EXISTS (
    SELECT 1
    FROM report.unv_registry_item existing_item
    WHERE existing_item.registry_id = tr.id
      AND existing_item.client_id = c.client_id
      AND existing_item.contract_id = c.contract_id
      AND existing_item.tax_period_year =
          CAST(p.target_year AS smallint)
);