Загрузка данных
EXPLAIN (VERBOSE, COSTS)
WITH ops_sharer(id, individual_death_date) AS MATERIALIZED (
SELECT
s.id,
death_info.death_date
FROM ourpension.sharer s
JOIN ourpension.contract c
ON s.contract_id = c.id
JOIN report.dia_param p
ON true
JOIN LATERAL (
SELECT a.death_date
FROM ourpension.application_death_info a
WHERE a.individual_id = s.individual_id
AND a.accepted IS NOT NULL
AND a.canceled IS NULL
AND a.rejected IS NULL
ORDER BY a.version DESC
LIMIT 1
) death_info ON true
LEFT JOIN LATERAL (
SELECT d.sharer_id
FROM back_office.ops_transfer_details d
JOIN back_office.ops_transfer_register tr
ON tr.id = d.ops_transfer_register_id
JOIN back_office.operation o
ON o.ops_transfer_register_id = tr.id
WHERE d.sharer_id = s.id
AND o.approved IS NOT NULL
AND o.effective_date <= p.report_date
LIMIT 1
) transfer ON true
WHERE c.service_type = 'OPS'
AND death_info.death_date <= p.report_date
AND transfer.sharer_id IS NULL
),
t_balance_all AS (
SELECT
da.owner_sharer_id AS sharer_id,
SUM(t.value) AS balance,
SUM(CASE
WHEN dat.mnemonics IN (
'ОПС', 'ОПС ГВ', 'ОПС КП', 'Р ПП ОПС'
)
THEN t.value ELSE 0
END) AS ops,
SUM(CASE
WHEN dat.mnemonics IN (
'ОПС ИД', 'ОПС ФР', 'Р ПП ОПС ИД'
)
THEN t.value ELSE 0
END) AS ops_id,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС Г', 'ДПС Г ГВ', 'ДПС Г КП', 'Р ПП ДПС Г'
)
THEN t.value ELSE 0
END) AS dps_g,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС Г ИД', 'ДПС Г ФР', 'Р ПП ДПС Г ИД'
)
THEN t.value ELSE 0
END) AS dps_g_id,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС Л', 'ДПС Л ГВ', 'ДПС Л КП', 'Р ПП ДПС Л'
)
THEN t.value ELSE 0
END) AS dps_l,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС Л ИД', 'ДПС Л ФР', 'Р ПП ДПС Л ИД'
)
THEN t.value ELSE 0
END) AS dps_l_id,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС МК', 'ДПС МК ГВ', 'ДПС МК КП', 'Р ПП ДПС МК'
)
THEN t.value ELSE 0
END) AS dps_mk,
SUM(CASE
WHEN dat.mnemonics IN (
'ДПС МК ИД', 'ДПС МК ФР', 'Р ПП ДПС МК ИД'
)
THEN t.value ELSE 0
END) AS dps_mk_id
FROM ops_sharer s
JOIN back_office.account da
ON da.owner_sharer_id = s.id
JOIN back_office.account_type dat
ON dat.id = da.account_type_id
JOIN back_office.transaction t
ON t.debit_account_id = da.id
JOIN back_office.account ca
ON t.credit_account_id = ca.id
JOIN back_office.account_type cat
ON cat.id = ca.account_type_id
WHERE dat.mnemonics IN (
'ОПС', 'ОПС ГВ', 'ОПС КП', 'Р ПП ОПС',
'ОПС ИД', 'ОПС ФР', 'Р ПП ОПС ИД',
'ДПС Г', 'ДПС Г ГВ', 'ДПС Г КП', 'Р ПП ДПС Г',
'ДПС Г ИД', 'ДПС Г ФР', 'Р ПП ДПС Г ИД',
'ДПС Л', 'ДПС Л ГВ', 'ДПС Л КП', 'Р ПП ДПС Л',
'ДПС Л ИД', 'ДПС Л ФР', 'Р ПП ДПС Л ИД',
'ДПС МК', 'ДПС МК ГВ', 'ДПС МК КП', 'Р ПП ДПС МК',
'ДПС МК ИД', 'ДПС МК ФР', 'Р ПП ДПС МК ИД'
)
AND cat.mnemonics IN ('Р ОПС', 'Р ОПС ИД')
GROUP BY da.owner_sharer_id
UNION ALL
SELECT
ca.owner_sharer_id AS sharer_id,
-SUM(t.value) AS balance,
-SUM(CASE
WHEN cat.mnemonics IN (
'ОПС', 'ОПС ГВ', 'ОПС КП', 'Р ПП ОПС'
)
THEN t.value ELSE 0
END) AS ops,
-SUM(CASE
WHEN cat.mnemonics IN (
'ОПС ИД', 'ОПС ФР', 'Р ПП ОПС ИД'
)
THEN t.value ELSE 0
END) AS ops_id,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС Г', 'ДПС Г ГВ', 'ДПС Г КП', 'Р ПП ДПС Г'
)
THEN t.value ELSE 0
END) AS dps_g,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС Г ИД', 'ДПС Г ФР', 'Р ПП ДПС Г ИД'
)
THEN t.value ELSE 0
END) AS dps_g_id,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС Л', 'ДПС Л ГВ', 'ДПС Л КП', 'Р ПП ДПС Л'
)
THEN t.value ELSE 0
END) AS dps_l,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС Л ИД', 'ДПС Л ФР', 'Р ПП ДПС Л ИД'
)
THEN t.value ELSE 0
END) AS dps_l_id,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС МК', 'ДПС МК ГВ', 'ДПС МК КП', 'Р ПП ДПС МК'
)
THEN t.value ELSE 0
END) AS dps_mk,
-SUM(CASE
WHEN cat.mnemonics IN (
'ДПС МК ИД', 'ДПС МК ФР', 'Р ПП ДПС МК ИД'
)
THEN t.value ELSE 0
END) AS dps_mk_id
FROM ops_sharer s
JOIN back_office.account ca
ON ca.owner_sharer_id = s.id
JOIN back_office.account_type cat
ON cat.id = ca.account_type_id
JOIN back_office.transaction t
ON t.credit_account_id = ca.id
JOIN back_office.account da
ON t.debit_account_id = da.id
JOIN back_office.account_type dat
ON dat.id = da.account_type_id
WHERE cat.mnemonics IN (
'ОПС', 'ОПС ГВ', 'ОПС КП', 'Р ПП ОПС',
'ОПС ИД', 'ОПС ФР', 'Р ПП ОПС ИД',
'ДПС Г', 'ДПС Г ГВ', 'ДПС Г КП', 'Р ПП ДПС Г',
'ДПС Г ИД', 'ДПС Г ФР', 'Р ПП ДПС Г ИД',
'ДПС Л', 'ДПС Л ГВ', 'ДПС Л КП', 'Р ПП ДПС Л',
'ДПС Л ИД', 'ДПС Л ФР', 'Р ПП ДПС Л ИД',
'ДПС МК', 'ДПС МК ГВ', 'ДПС МК КП', 'Р ПП ДПС МК',
'ДПС МК ИД', 'ДПС МК ФР', 'Р ПП ДПС МК ИД'
)
AND dat.mnemonics IN ('Р ОПС', 'Р ОПС ИД')
GROUP BY ca.owner_sharer_id
)
INSERT INTO report.dia_rops (
id,
dia_register_id,
insurance_number,
sharer_number,
death_date,
ops,
ops_id,
dps_l,
dps_l_id,
dps_g,
dps_g_id,
dps_mk,
dps_mk_id,
total,
sharer_id
)
SELECT
nextval('report.dia_rops_id_sequence'),
currval('report.dia_register_id_sequence'),
i.insurance_number,
s.number,
death_info.death_date,
b.ops,
b.ops_id,
b.dps_l,
b.dps_l_id,
b.dps_g,
b.dps_g_id,
b.dps_mk,
b.dps_mk_id,
b.balance,
s.id
FROM (
SELECT
sharer_id,
SUM(ops) AS ops,
SUM(ops_id) AS ops_id,
SUM(dps_g) AS dps_g,
SUM(dps_g_id) AS dps_g_id,
SUM(dps_l) AS dps_l,
SUM(dps_l_id) AS dps_l_id,
SUM(dps_mk) AS dps_mk,
SUM(dps_mk_id) AS dps_mk_id,
SUM(balance) AS balance
FROM t_balance_all
GROUP BY sharer_id
) b
JOIN ourpension.sharer s
ON s.id = b.sharer_id
JOIN ourpension.individual i
ON s.individual_id = i.id
JOIN LATERAL (
SELECT a.death_date
FROM ourpension.application_death_info a
WHERE a.individual_id = s.individual_id
AND a.accepted IS NOT NULL
AND a.canceled IS NULL
AND a.rejected IS NULL
ORDER BY a.version DESC
LIMIT 1
) death_info ON true
WHERE b.balance <> 0;