Расходы одной карты по категории: выборка и сумма за период #16

Open
opened 2026-09-14 06:23:17 +03:00 by codex-bot · 0 comments
Owner

Задача

Пользователь открывает категорию расходов внутри конкретной банковской карты и видит покупки за выбранный период и их общую сумму.

Нужна серверная выборка для этой страницы. Сейчас журнал карты поддерживает период и пагинацию, но не фильтрацию по категории; существующий список расходов для выбора исходной покупки возврата имеет другое назначение.

Согласованное поведение

  • Область выборки: одна карта и одна категория текущего пользователя.
  • В список и итог входят только неудалённые расходы.
  • Возвраты, пополнения и переводы не входят ни в список, ни в итог.
  • Период определяется календарными датами, обе границы включены.
  • Итог считается по всей выборке до пагинации, а не по возвращённой странице.

Пример расчёта

Операция Сумма Участие в новом итоге
Покупка в выбранной категории 1 000 ₽ +1 000 ₽
Возврат по этой покупке 300 ₽ Не учитывается
Итого 1 000 ₽

Существующая сводка карты продолжает учитывать возвраты и в этом примере показывает 700 ₽. Разница намеренная; её расчёт менять не требуется.

Критерии приёмки

  • API позволяет получить расходы по карте, категории и периоду с пагинацией.
  • Записи другой карты или категории, удалённые записи и другие виды операций исключены.
  • Итог и количество записей относятся ко всей отфильтрованной выборке и не меняются при переключении страниц.
  • При отсутствии расходов возвращаются пустой список, нулевое количество и сумма 0 ₽; период только с возвратами также даёт 0 ₽.
  • Сортировка соответствует журналу карты: дата, время создания и ID по убыванию.
  • Денежные вычисления сохраняют существующую точность и контракт Money.
  • Проверяется принадлежность и карты, и категории пользователю; чужие и отсутствующие сущности обрабатываются по действующему контракту ошибок без раскрытия чужих данных.
  • Переименование категории не ломает выборку по её стабильному ID; возвращается актуальное название.
  • История архивной карты доступна для просмотра.
  • Валидация периода и пагинации соответствует существующим правилам банковского журнала.
  • Текущие запросы журнала, сводки и выбора покупки для возврата сохраняют прежнее поведение.
  • Backend-owned OpenAPI обновлён; предоставлен snapshot для frontend и выполнена проверка контракта.

Проверка

Покрыть фильтрацию при наличии других карт и категорий, обе границы периода, сумму по нескольким страницам, пустую выборку, частичный/полный возврат без уменьшения расходов, точные суммы в копейках и изоляцию пользователей. Проверить переименование категории и просмотр архивной карты.

Выполнить применимые проверки по backend/AGENTS.md и npm run verify; команды и результаты приложить к PR.

Точки входа в реализацию

  • src/modules/banking/bank-cards/application/bank-operations.service.ts — существующий журнал.
  • src/modules/banking/bank-cards/presentation/bank-cards.controller.ts — HTTP API.
  • src/modules/banking/bank-cards/infrastructure/bank-cards.repository.ts — доступ к данным.
  • test/bank-cards.e2e-spec.ts — существующие поведенческие проверки.

Выбрать минимальное совместимое расширение у существующего владельца. Точный endpoint и DTO определить при реализации; универсальный аналитический API не требуется.

Вне объёма

Объединение нескольких карт, изменение расчёта существующей сводки, операции записи, графики и сравнения периодов.

Связи

Потребитель: frontend #12 — страница расходов категории внутри банковской карты. Backend-контракт необходим для его интеграции.

## Задача Пользователь открывает категорию расходов внутри конкретной банковской карты и видит покупки за выбранный период и их общую сумму. Нужна серверная выборка для этой страницы. Сейчас журнал карты поддерживает период и пагинацию, но не фильтрацию по категории; существующий список расходов для выбора исходной покупки возврата имеет другое назначение. ## Согласованное поведение - Область выборки: одна карта и одна категория текущего пользователя. - В список и итог входят только неудалённые расходы. - Возвраты, пополнения и переводы не входят ни в список, ни в итог. - Период определяется календарными датами, обе границы включены. - Итог считается по всей выборке до пагинации, а не по возвращённой странице. ### Пример расчёта | Операция | Сумма | Участие в новом итоге | | --- | ---: | --- | | Покупка в выбранной категории | 1 000 ₽ | +1 000 ₽ | | Возврат по этой покупке | 300 ₽ | Не учитывается | | **Итого** | | **1 000 ₽** | Существующая сводка карты продолжает учитывать возвраты и в этом примере показывает 700 ₽. Разница намеренная; её расчёт менять не требуется. ## Критерии приёмки - [ ] API позволяет получить расходы по карте, категории и периоду с пагинацией. - [ ] Записи другой карты или категории, удалённые записи и другие виды операций исключены. - [ ] Итог и количество записей относятся ко всей отфильтрованной выборке и не меняются при переключении страниц. - [ ] При отсутствии расходов возвращаются пустой список, нулевое количество и сумма 0 ₽; период только с возвратами также даёт 0 ₽. - [ ] Сортировка соответствует журналу карты: дата, время создания и ID по убыванию. - [ ] Денежные вычисления сохраняют существующую точность и контракт Money. - [ ] Проверяется принадлежность и карты, и категории пользователю; чужие и отсутствующие сущности обрабатываются по действующему контракту ошибок без раскрытия чужих данных. - [ ] Переименование категории не ломает выборку по её стабильному ID; возвращается актуальное название. - [ ] История архивной карты доступна для просмотра. - [ ] Валидация периода и пагинации соответствует существующим правилам банковского журнала. - [ ] Текущие запросы журнала, сводки и выбора покупки для возврата сохраняют прежнее поведение. - [ ] Backend-owned OpenAPI обновлён; предоставлен snapshot для frontend и выполнена проверка контракта. ## Проверка Покрыть фильтрацию при наличии других карт и категорий, обе границы периода, сумму по нескольким страницам, пустую выборку, частичный/полный возврат без уменьшения расходов, точные суммы в копейках и изоляцию пользователей. Проверить переименование категории и просмотр архивной карты. Выполнить применимые проверки по backend/AGENTS.md и npm run verify; команды и результаты приложить к PR. ## Точки входа в реализацию - src/modules/banking/bank-cards/application/bank-operations.service.ts — существующий журнал. - src/modules/banking/bank-cards/presentation/bank-cards.controller.ts — HTTP API. - src/modules/banking/bank-cards/infrastructure/bank-cards.repository.ts — доступ к данным. - test/bank-cards.e2e-spec.ts — существующие поведенческие проверки. Выбрать минимальное совместимое расширение у существующего владельца. Точный endpoint и DTO определить при реализации; универсальный аналитический API не требуется. ## Вне объёма Объединение нескольких карт, изменение расчёта существующей сводки, операции записи, графики и сравнения периодов. ## Связи Потребитель: [frontend #12 — страница расходов категории внутри банковской карты](https://git.personal.ksv741.ru/WealthLedger/frontend/issues/12). Backend-контракт необходим для его интеграции.
ksv741 was assigned by codex-bot 2026-09-14 06:23:17 +03:00
codex-bot added the Kind/Feature
Priority
Medium
3
Reviewed
Confirmed
1
labels 2026-09-14 06:25:37 +03:00
ksv741 was unassigned by hermes-agent 2026-10-12 00:04:29 +03:00
codex-bot was assigned by hermes-agent 2026-10-12 00:04:29 +03:00
hermes-agent added this to the Инженерная основа и поставка milestone 2026-10-12 00:04:29 +03:00
hermes-agent added this to the WealthLedger — Delivery Board project 2026-10-12 00:04:29 +03:00
hermes-agent added Kind/Enhancement and removed Kind/Feature labels 2026-10-12 00:04:29 +03:00
hermes-agent added Kind/Feature and removed Kind/Enhancement labels 2026-10-12 00:08:35 +03:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: WealthLedger/backend#16