Загрузка данных
WITH unv_code AS (
SELECT id
FROM report.smev_register_codes
WHERE short_name = 'УНВ'
ORDER BY id
LIMIT 1
)
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,
CAST(:tax_period_year AS integer),
CURRENT_DATE,
'OUT',
'Сформирован'
FROM unv_code uc
WHERE CAST(:tax_period_year AS integer)
BETWEEN CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS integer) - 3
AND CAST(EXTRACT(YEAR FROM CURRENT_DATE) AS integer) - 1
AND NOT EXISTS (
SELECT 1
FROM report.smev_register r
WHERE r.smev_register_type_code = 'УНВ'
AND r."year" = CAST(:tax_period_year AS integer)
AND r.sample_status IS DISTINCT FROM 'Удалён'
);
INSERT INTO report.unv_registry_item (
registry_id,
client_id,
snils,
contract_id,
contract_type,
tax_period_year,
contributions_amount,
annual_deduction_flag
)
WITH target_registry AS (
SELECT r.id
FROM report.smev_register r
WHERE r.smev_register_type_code = 'УНВ'
AND r."year" = CAST(:tax_period_year AS integer)
AND r.sample_status IS DISTINCT FROM 'Удалён'
ORDER BY r.id DESC
LIMIT 1
),
eligible_contract AS (
SELECT
io.individual_id AS client_id,
io.contract_id AS contract_id,
ind.insurance_number AS snils,
c.service_type AS contract_type,
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
JOIN ourpension.contract c
ON c.id = io.contract_id
JOIN ourpension.individual ind
ON ind.id = io.individual_id
WHERE io.individual_id = CAST(:client_id AS integer)
AND io.contract_id = CAST(:contract_id AS integer)
AND io.payment_return IS NOT TRUE
AND CAST(EXTRACT(YEAR FROM io.date) AS integer) =
CAST(:tax_period_year AS integer)
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
io.individual_id,
io.contract_id,
ind.insurance_number,
c.service_type
HAVING SUM(t.value) > 0
)
SELECT
tr.id,
ec.client_id,
ec.snils,
ec.contract_id,
ec.contract_type,
CAST(:tax_period_year AS smallint),
ec.contributions_amount,
CAST(:annual_deduction_flag AS integer)
FROM target_registry tr
CROSS JOIN eligible_contract ec
WHERE NOT EXISTS (
SELECT 1
FROM report.unv_registry_item existing_item
WHERE existing_item.registry_id = tr.id
AND existing_item.client_id = ec.client_id
AND existing_item.contract_id = ec.contract_id
AND existing_item.tax_period_year =
CAST(:tax_period_year AS smallint)
);