Files
family_budget/docs/backlog/category.md
2026-02-27 19:08:55 +03:00

4.6 KiB
Raw Blame History

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

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

ALTER TABLE accounts
  ADD COLUMN alias TEXT;

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

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