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


WITH report_sharers AS (

    /* Старая ветка отчета */
    SELECT opaa.sharer_id
    FROM ourpension.ops_pension_assignment_application opaa
    WHERE opaa.ops_payment_type_code = '01'
      AND opaa.appeal_date BETWEEN DATE '2025-01-01' AND DATE '2025-01-31'

    UNION

    /* Новая ветка отчета */
    SELECT opaa.sharer_id
    FROM back_office.ops_payment_decision opd
    JOIN ourpension.ops_pension_assignment_application opaa
        ON opaa.id = opd.ops_pension_assignment_application_id
    WHERE opd.decision_payment_type_code IN ('01', '16')
      AND opd.accepted IS NOT NULL
      AND opd.date BETWEEN DATE '2025-01-01' AND DATE '2025-01-31'
      AND opd.rejected IS NULL
      AND opd.canceled IS NULL
),

ev_operations AS (
    SELECT o.id
    FROM back_office.operation o
    WHERE o.operation_type_id IN (35, 37, 112, 173)
      AND o.effective_date >= DATE '2025-01-01'
      AND o.effective_date < DATE '2025-02-01'
),

payment_sharers AS (

    SELECT da.owner_sharer_id AS sharer_id
    FROM ev_operations eo
    JOIN back_office.transaction t
        ON t.operation_id = eo.id
    JOIN back_office.account da
        ON da.id = t.debit_account_id
    LEFT JOIN back_office.account ca
        ON ca.id = t.credit_account_id
    WHERE da.owner_sharer_id IS NOT NULL
      AND da.owner_sharer_id <> COALESCE(ca.owner_sharer_id, -1)

    UNION

    SELECT ca.owner_sharer_id AS sharer_id
    FROM ev_operations eo
    JOIN back_office.transaction t
        ON t.operation_id = eo.id
    JOIN back_office.account ca
        ON ca.id = t.credit_account_id
    WHERE ca.owner_sharer_id IS NOT NULL
)

SELECT
    count(*) AS report_sharers,

    count(*) FILTER (
        WHERE ps.sharer_id IS NOT NULL
    ) AS with_payment_in_january,

    count(*) FILTER (
        WHERE ps.sharer_id IS NULL
    ) AS without_payment_in_january

FROM report_sharers rs
LEFT JOIN payment_sharers ps
    ON ps.sharer_id = rs.sharer_id;