# Категории расходов и доходов (MVP) ## Базовый список категорий Используются следующие категории для классификации транзакций: | Категория | type | |---|---| | Продукты | expense | | Авто | expense | | Здоровье | expense | | Арчи | expense | | ЖКХ | expense | | Дом | expense | | Проезд | expense | | Одежда | expense | | Химия | expense | | Косметика | expense | | Инвестиции | transfer | | Развлечения | expense | | Общепит | expense | | Штрафы | expense | | Налоги | expense | | Подписки | expense | | Перевод | transfer | | Наличные | expense | | Подарки | expense | | Спорт | expense | | Отпуск | expense | | Техника | expense | | Поступления | income | Особенности: - Категории на данном этапе одноуровневые (без подкатегорий). - Категории используются как для фильтрации и аналитики, так и для правил авто-категоризации. - Категория `Перевод` используется для переводов (в т.ч. между своими счетами и на другие счета). - Категория `Инвестиции` предназначена для операций, связанных с брокерским счётом/ценными бумагами. - Категория `Поступления` используется для всех видов доходов (зарплата, кешбэк и др.), пока без детализации. ## Таблица `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` — используется ли категория. Рекомендуемый 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')); ``` Поля `is_category_confirmed` и `comment` относятся к таблице `transactions` (см. `edit_and_rules.md`). Привязка к транзакциям: - В таблице `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"`) и предложить изменить его позже в настройках.