Files
family_budget/docs/backlog/category.md
2026-03-02 00:30:56 +03:00

95 lines
4.6 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Категории расходов и доходов (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"`) и предложить изменить его позже в настройках.