# Категории расходов и доходов (MVP) ## Базовый список категорий Используются следующие категории для классификации транзакций: - Продукты - Авто - Здоровье - Арчи - ЖКХ - Дом - Проезд - Одежда - Химия - Косметика - Инвестиции - Развлечения - Общепит - Штрафы - Налоги - Подписки - Перевод - Наличные - Подарки - Спорт - Отпуск - Техника - Поступления Особенности: - Категории на данном этапе одноуровневые (без подкатегорий). - Категории используются как для фильтрации и аналитики, так и для правил авто-категоризации. - Категория `Перевод` используется для переводов (в т.ч. между своими счетами и на другие счета). - Категория `Инвестиции` предназначена для операций, связанных с брокерским счётом/ценными бумагами. - Категория `Поступления` используется для всех видов доходов (зарплата, кешбэк и др.), пока без детализации. ## Таблица `categories` (PostgreSQL) Для хранения категорий используется отдельная таблица `categories`. Рекомендуемая структура: - `id BIGSERIAL PRIMARY KEY` — идентификатор категории. - `name TEXT NOT NULL` — отображаемое имя категории (из списка выше). - `type TEXT NOT NULL` — тип категории: - `"expense"` — расходная категория; - `"income"` — доходная категория; - `"transfer"` — категории для переводов/движений между собственными счетами. - `is_active BOOLEAN NOT NULL DEFAULT TRUE` — используется ли категория. - `is_category_confirmed BOOLEAN NOT NULL DEFAULT FALSE` — подтверждена ли категория пользователем. - `comment TEXT` — пользовательский комментарий (например, по маркетплейсам). Рекомендуемый DDL: ```sql CREATE TABLE categories ( id BIGSERIAL PRIMARY KEY, name TEXT NOT NULL, type TEXT NOT NULL, is_active BOOLEAN NOT NULL DEFAULT TRUE ); ALTER TABLE categories ADD CONSTRAINT chk_categories_type CHECK (type IN ('expense', 'income', 'transfer')); ALTER TABLE transactions ADD COLUMN is_category_confirmed BOOLEAN NOT NULL DEFAULT FALSE; ALTER TABLE transactions ADD COLUMN comment TEXT; ``` Привязка к транзакциям: - В таблице `transactions` поле `category_id` является внешним ключом на `categories(id)`. - При авто- или ручной категоризации транзакции записывается соответствующий `category_id`. ## Алиасы счетов - При первом появлении нового счёта (новая комбинация `bank + account_number`) после загрузки выписки SPA предлагает пользователю ввести человекочитаемый алиас: например, `"Текущий"`, `"Накопительный"`, `"Брокерский"`. - Алиас хранится в таблице `accounts` в отдельном поле, например `alias TEXT`. - В таблице истории операций на фронтенде вместо номера счёта показывается `alias` (с возможностью при наведении/по клику увидеть полный номер). Изменённая таблица `accounts` (добавлен алиас): ```sql ALTER TABLE accounts ADD COLUMN alias TEXT; ``` При создании нового счёта: - Если алиас задан пользователем — сохраняем его в `accounts.alias`. - Если пользователь пропустил ввод алиаса — можно задать временный (`"Счёт 1"`, `"Счёт 2"`) и предложить изменить его позже в настройках.