docs: adds rules and agents specs

This commit is contained in:
Anton
2026-02-27 19:08:55 +03:00
commit 9551b93a09
12 changed files with 1151 additions and 0 deletions

98
docs/backlog/category.md Normal file
View File

@@ -0,0 +1,98 @@
# Категории расходов и доходов (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"`) и предложить изменить его позже в настройках.