FROM ourpension.ops_pension_assignment_application opaa
JOIN ourpension.sharer s
ON s.id = opaa.sharer_id
JOIN ourpension.contract c
ON c.id = s.contract_id
AND c.service_type = 'OPS'
JOIN ourpension.individual i
ON i.id = s.individual_id
LEFT JOIN ourpension.address a
ON a.id = i.registration_address_id
LEFT JOIN ourpension.payment_type pt
ON pt.code = opaa.payment_way
LEFT JOIN ourpension.decision_payment_type dpt
ON dpt.code = opaa.decision_payment_type_code
-- Первое проведённое решение об установлении пенсии
JOIN LATERAL (
SELECT opd.decision_payment_type_code
FROM back_office.ops_payment_decision opd
WHERE opd.ops_pension_assignment_application_id = opaa.id
AND opd.decision_type_code = 'УСТН'
AND opd.accepted IS NOT NULL
AND opd.date <= CAST(:date_of_application AS date)
ORDER BY opd.date ASC
LIMIT 1
) first_decision ON true
-- СПВ по справочнику решений
JOIN ourpension.decision_payment_type pension_type
ON pension_type.code = first_decision.decision_payment_type_code
AND pension_type.code = '02'
LEFT JOIN ourpension.application_individual_bank_detail aibd
ON aibd.id = opaa.bank_detail_id
LEFT JOIN ourpension.bankru br
ON br.bic = aibd.bic
WHERE opaa.accepted IS NOT NULL
AND opaa.canceled IS NULL
AND opaa.rejected IS NULL
AND opaa.appeal_date <= CAST(:date_of_application AS date)
-- Статус счёта на конечную дату отчёта
AND EXISTS (
SELECT 1
FROM ourpension.sharer_statuses_history ssh
WHERE ssh.sharer_id = s.id
AND ssh.code = 'CA0'
AND CAST(:date_of_application AS date)
BETWEEN ssh.status_date AND ssh.status_end_date
)
-- Наличие записи о количестве выплат к этой дате
AND EXISTS (
SELECT 1
FROM back_office.ops_number_of_payments np
WHERE np.contract_id = c.id
AND np.effective_date <= CAST(:date_of_application AS date)
)
-- Реквизиты проведены до даты БР включительно
AND (
CAST(:br_date AS date) IS NULL
OR aibd.accepted::date <= CAST(:br_date AS date)
)