-- Очередь классификации категорий
CREATE TABLE IF NOT EXISTS finance.category_jobs (
                                                     id           BIGSERIAL PRIMARY KEY,
                                                     tx_id        INT NOT NULL UNIQUE,                -- одна задача на транзакцию
                                                     status       TEXT NOT NULL DEFAULT 'NEW',        -- NEW | PROCESSING | DONE | FAILED
                                                     attempts     INT  NOT NULL DEFAULT 0,
                                                     created_at   TIMESTAMPTZ NOT NULL DEFAULT NOW(),
                                                     started_at   TIMESTAMPTZ,
                                                     finished_at  TIMESTAMPTZ,
                                                     last_error   TEXT
);

-- Быстрые выборки по статусу
CREATE INDEX IF NOT EXISTS ix_category_jobs_status ON finance.category_jobs(status);

-- (опционально) защита от «зависших» задач
CREATE INDEX IF NOT EXISTS ix_category_jobs_processing_time
    ON finance.category_jobs(started_at)
    WHERE status = 'PROCESSING';