export default {
    name: '2025-07-10T14-13-43.swift-table-extension.sql',
    run: ({ sql }) => sql `
alter table accounter_schema.poalim_swift_account_transactions
    add swift_instruction_code_23e text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_exchange_rate_36 text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_account_with_institution_57 text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_senders_to_receiver_information_72 text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_regulatory_reporting_77b text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_ordering_customer_50k text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_ordering_institution_52d text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_beneficiary_customer_59 text;

alter table accounter_schema.poalim_swift_account_transactions
    add swift_remittance_information_70 text;

create or replace function accounter_schema.insert_poalim_swift_transaction_handler() returns trigger
    language plpgsql
as
$$
DECLARE
    merged_id          UUID;
    account_id_var     UUID;
    owner_id_var       UUID;
    charge_id_var      UUID = NULL;
    transaction_amount NUMERIC;
    fee_amount         NUMERIC;
    currency_code      accounter_schema.currency;
    transaction_id_var UUID = NULL;
BEGIN
    transaction_amount := CASE
                              WHEN NEW.swift_currency_instructed_amount_33b <> ' ' THEN REPLACE(
                                      RIGHT(NEW.swift_currency_instructed_amount_33b,
                                            LENGTH(NEW.swift_currency_instructed_amount_33b) - 3), ',',
                                      '.')::NUMERIC
                              ELSE REPLACE(
                                      RIGHT(NEW.swift_value_date_currency_amount_32a,
                                            LENGTH(NEW.swift_value_date_currency_amount_32a) - 9), ',',
                                      '.')::NUMERIC END;
    fee_amount := transaction_amount - REPLACE(
            RIGHT(NEW.swift_value_date_currency_amount_32a, LENGTH(NEW.swift_value_date_currency_amount_32a) - 9), ',',
            '.')::NUMERIC;
    currency_code := CASE
                         WHEN NEW.swift_currency_instructed_amount_33b <> ' '
                             THEN LEFT(NEW.swift_currency_instructed_amount_33b, 3)::accounter_schema.currency
                         ELSE RIGHT(LEFT(NEW.swift_value_date_currency_amount_32a,
                                         9), 3)::accounter_schema.currency END;

    IF (fee_amount > 0) THEN
        -- Create merged raw transactions record:
        INSERT INTO accounter_schema.transactions_raw_list (poalim_swift_id)
        VALUES (NEW.id)
        RETURNING id INTO merged_id;

        -- get account and owner IDs
        SELECT INTO account_id_var, owner_id_var id,
                                                 owner
        FROM accounter_schema.financial_accounts
        WHERE account_number = NEW.account_number::TEXT;

        IF (account_id_var IS NULL) THEN
            RAISE EXCEPTION 'Account not found for account number: %', NEW.account_number;
        END IF;

        -- check if matching charge exists for source:
        SELECT t.charge_id
        INTO charge_id_var
        FROM (SELECT formatted_value_date, event_details, id, currency, event_amount
              FROM accounter_schema.poalim_foreign_account_transactions) AS s
                 LEFT JOIN accounter_schema.transactions_raw_list tr
                           ON COALESCE(tr.poalim_ils_id, tr.poalim_foreign_id) = s.id
                 LEFT JOIN accounter_schema.transactions t
                           ON tr.id = t.source_id
        WHERE t.charge_id IS NOT NULL
            AND s.formatted_value_date = NEW.formatted_start_date
            AND currency_code = s.currency
            AND (s.event_details LIKE '%' || TRIM(LEFT(NEW.charge_party_name, 13)) || '%'
                AND NEW.amount::NUMERIC = s.event_amount)
           OR (transaction_amount * -1 = s.event_amount);

        -- if no match, create new charge
        IF (charge_id_var IS NULL) THEN
            INSERT INTO accounter_schema.charges (owner_id)
            VALUES (owner_id_var)
            RETURNING id INTO charge_id_var;
        END IF;

        -- create new transaction for fee
        INSERT INTO accounter_schema.transactions (account_id, charge_id, source_id, source_description, currency,
                                                   event_date, debit_date, amount, current_balance, business_id, is_fee,
                                                   source_reference, counter_account, source_origin, origin_key)
        VALUES (account_id_var,
                charge_id_var,
                merged_id,
                CONCAT_WS(' ',
                          'Swift Fee:',
                          NEW.charge_party_name,
                          NEW.reference_number,
                          NEW.swift_remittance_information_70
                ),
                currency_code,
                NEW.formatted_start_date::DATE,
                NEW.formatted_start_date::DATE,
                fee_amount * -1,
                0,
                NULL,
                TRUE,
                NEW.reference_number,
                'SWIFT',
                'POALIM',
                NEW.id)
        RETURNING id INTO transaction_id_var;
    END IF;
    RETURN NEW;
END;
$$;
`,
};
//# sourceMappingURL=2025-07-10T14-13-43.swift-table-extension.js.map