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

4.6 KiB
Raw Permalink Blame History

Категории расходов и доходов (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:

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 (добавлен алиас):

ALTER TABLE accounts
  ADD COLUMN alias TEXT;

При создании нового счёта:

  • Если алиас задан пользователем — сохраняем его в accounts.alias.
  • Если пользователь пропустил ввод алиаса — можно задать временный ("Счёт 1", "Счёт 2") и предложить изменить его позже в настройках.