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


SELECT
    opaa.id,
    opaa.number,
    opaa.appeal_date,
    opaa.registration,
    opaa.accepted,

    -- Тип заявления / выплаты
    opaa.ops_payment_type_code,
    opaa.decision_payment_type_code,
    dpt.code AS found_decision_payment_type,

    -- Банковские реквизиты
    opaa.bank_detail_id,
    opaa.bank_account_id,

    aibd.id AS found_bank_detail_id,
    aibd.personal_account,
    aibd.bic,
    aibd.accepted AS bank_detail_accepted,

    -- Адрес
    opaa.address_id AS application_address_id,
    i.registration_address_id AS individual_registration_address_id,
    a.id AS found_registration_address_id,

    -- Решения
    (
        SELECT count(*)
        FROM back_office.ops_payment_decision opd
        WHERE opd.ops_pension_assignment_application_id = opaa.id
    ) AS decision_count,

    (
        SELECT max(opd.accepted)
        FROM back_office.ops_payment_decision opd
        WHERE opd.ops_pension_assignment_application_id = opaa.id
    ) AS decision_accepted,

    -- Диагностика именно текущего отчета
    CASE
        WHEN s.id IS NULL
            THEN 'НЕ ПОПАДЕТ: нет sharer'
        WHEN c.id IS NULL
            THEN 'НЕ ПОПАДЕТ: нет contract'
        WHEN i.id IS NULL
            THEN 'НЕ ПОПАДЕТ: нет individual'
        WHEN a.id IS NULL
            THEN 'НЕ ПОПАДЕТ: нет registration_address'
        WHEN dpt.code IS NULL
            THEN 'НЕ ПОПАДЕТ: decision_payment_type_code не найден'
        WHEN aibd.id IS NULL
            THEN 'НЕ ПОПАДЕТ: bank_detail_id отсутствует/не найден'
        WHEN aibd.accepted IS NULL
            THEN 'НЕ ПОПАДЕТ: aibd.accepted IS NULL'
        ELSE
            'ПО УСЛОВИЯМ ОТЧЕТА ДОЛЖНО ПОПАДАТЬ'
    END AS report_diagnostic

FROM ourpension.ops_pension_assignment_application opaa

LEFT JOIN ourpension.sharer s
    ON s.id = opaa.sharer_id

LEFT JOIN ourpension.contract c
    ON c.id = s.contract_id

LEFT JOIN ourpension.individual i
    ON i.id = c.individual_id

LEFT JOIN ourpension.address a
    ON a.id = i.registration_address_id

LEFT JOIN ourpension.decision_payment_type dpt
    ON dpt.code = opaa.decision_payment_type_code

LEFT JOIN ourpension.application_individual_bank_detail aibd
    ON aibd.id = opaa.bank_detail_id

WHERE opaa.ops_payment_type_code = '01'
  AND opaa.appeal_date BETWEEN :start_date AND :end_date

ORDER BY opaa.appeal_date DESC, opaa.id DESC;