docs: adds rules and agents specs
This commit is contained in:
98
docs/backlog/category.md
Normal file
98
docs/backlog/category.md
Normal 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"`) и предложить изменить его позже в настройках.
|
||||
Reference in New Issue
Block a user