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


-- Сначала отбираем операции начисления
charge_operations AS MATERIALIZED (
    SELECT
        o.id AS operation_id,
        o.ops_assignee_decision_id AS decision_id
    FROM target_decisions d
    JOIN back_office.operation o
        ON o.ops_assignee_decision_id = d.id
    JOIN back_office.operation_type ot
        ON ot.id = o.operation_type_id
    WHERE ot.code = 'CHARGE_FROM_RESERVE'
      AND o.approved IS NOT NULL
      AND o.deleted IS NULL
      AND o.effective_date <= current_date
),

-- Получаем проводки отдельно для каждой отобранной операции
charged AS (
    SELECT
        co.decision_id,
        sum(t.value) AS amount
    FROM charge_operations co

    CROSS JOIN LATERAL (
        SELECT
            tr.credit_account_id,
            tr.value
        FROM back_office.transaction tr
        WHERE tr.operation_id = co.operation_id
        OFFSET 0
    ) t

    JOIN back_office.account ca
        ON ca.id = t.credit_account_id
    JOIN back_office.account_type cat
        ON cat.id = ca.account_type_id

    WHERE cat.mnemonics = 'НВ ПП ОПС'
    GROUP BY co.decision_id
),