UC-WLT-004. Холдер смотрит баланс и историю операций
Назначение
Описывает сценарий просмотра кошелька: агент видит раздельные балансы «агентские комиссии» и
«реферальные комиссии» и историю операций по каждому счёту («сколько мне причитается и ещё не
выплачено»); партнёр — накопления по реферальной программе; руководитель агентства — балансы своих
агентов; оператор ПИН — все счета платформы. Связан с контекстом wallet.
Metadata
| Поле | Значение |
|---|---|
| ID | UC-WLT-004 |
| Контекст | wallet (см. docs/06-services/wallet/) |
| Тип | основной |
| Статус | draft |
Актор
| Поле | Значение |
|---|---|
| Роль | Агент / Партнёр (основной поток); Руководитель агентства / Администратор платформы (альтернативные) |
| Permissions / scope | wallet.balance.view-own + wallet.transactions.view-own (холдер); wallet.team.view (руководитель, scope = организация); wallet.accounts.view-all (ПИН, платформенный scope) |
| Tenant | вне tenant-модели: счета пользователей user-centric (баланс агента переживает смену агентства, ADR-0061 п.5) |
| Record-level | холдер видит только счета, где он — HolderUserId; руководитель — счёт своей компании и AgentCommission-счета агентов текущего состава (ростер — по display-реплике холдеров) |
Предусловие
- Пользователь авторизован и имеет соответствующий permission.
- По холдеру существуют счета (созданы lazy при первом кредите); если кредитов ещё не было — кошелёк показывает нулевое состояние без счетов (не ошибка).
Триггер
| Поле | Значение |
|---|---|
| Источник | UI |
| Триггерящий элемент | раздел «Кошелёк» в ЛК (агент/партнёр); раздел вознаграждений агентства; admin-реестр счетов |
Основной Поток
- Холдер открывает «Кошелёк» в ЛК.
- Интерфейс запрашивает балансы (get-my-wallet.md,
GET /api/v1/my/wallet); система отдаёт счета холдера раздельно по видам (wallet-account.md):AgentCommissionиReferralCommission— отдельные суммы, без смешения. - Холдер видит по каждому счёту: вид, баланс (
Balance), валюту. - Холдер открывает историю счёта; интерфейс запрашивает страницу операций
(list-my-wallet-transactions.md,
GET /api/v1/my/wallet/transactions) с фильтрами: вид счёта, вид операции (WalletOperationKind), период; сортировка — по моменту проведения (новые сверху), пагинация. - Система отдаёт проводки счёта из журнала (ledger-transaction.md):
вид операции, направление (зачисление/списание), сумма, баланс после операции (
BalanceAfter), момент бизнес-факта. - Холдер сопоставляет операции с ЛК-статусами вознаграждений: кредит появился после подтверждения получения денег, списание — после выплаты поручения.
Альтернативные Потоки
A1. Руководитель агентства (wallet.team.view)
- Руководитель открывает балансы вознаграждений команды.
- Система отдаёт (list-agency-agent-balances.md): счёт
AgencyCommissionсвоей компании и балансыAgentCommission-счетов агентов текущего состава (ростер — по локальной display-реплике холдеров user-display-replica.md, без синхронногоidentityна read-path; лаг реплики — устаревший ростер, косметика). Подписи (ФИО агентов, название агентства) — из той же реплики. Балансы user-centric: руководитель видит весь остаток счёта агента, включая накопленное в прежних агентствах; разрез «сколько должно именно наше агентство» — свободныеAgent-строки распределений вrewards. - Реферальные балансы агентов (
ReferralCommission) и истории их счетов руководителю не отдаются — партнёрская программа персональна; детализация «за что начислено» — вrewardsпо своим permissions.
A2. Оператор/админ ПИН (wallet.accounts.view-all)
- Оператор открывает admin-реестр счетов (list-wallet-accounts.md):
все счета с фильтрами по виду и холдеру, включая системные
PlatformSettlement(транзит; баланс<= 0, интерпретация знака — wallet-account.md, INV-WLT-3) иPlatformRevenue(доход ПИН). - По счёту доступен полный журнал транзакций, включая причины
Adjustment/Correction.
A3. Кошелёк ещё пуст
- У холдера не было ни одного кредита — счета не создавались (lazy).
- Система отдаёт пустой список счетов; интерфейс показывает нулевые балансы и подсказку «начисления появятся после подтверждения получения денег по вашим сделкам».
Постусловие
- Состояние системы не изменено (чтение).
- Показанные балансы согласованы с журналом:
Balance= Σ кредитов − Σ дебетов проводок счёта; последняя операция истории несётBalanceAfter, равный текущему балансу.
Возможные Ошибки
| Код | HTTP | Условие | Поведение клиента |
|---|---|---|---|
WALLET_ACCOUNT_NOT_FOUND | 404 | Запрошена история счёта, не принадлежащего актору / несуществующего (record-level fail closed) | Вернуться к списку своих счетов |
Acceptance Criteria
| # | Критерий | Проверка |
|---|---|---|
| AC1 | Given агент с кредитами по сделкам и по рефералке, When он открывает кошелёк, Then он видит два раздельных баланса (AgentCommission, ReferralCommission), суммы не смешаны | UI/интеграционный тест |
| AC2 | Given история счёта, When холдер листает страницы, Then каждая операция показывает вид, направление, сумму и BalanceAfter; последняя операция сходится с текущим балансом | интеграционный тест |
| AC3 | Given холдер, When он запрашивает историю чужого счёта, Then отказ 404 (record-level, fail closed) | негативный тест |
| AC4 | Given агент сменил агентство, When он открывает кошелёк, Then его балансы и история сохранены (user-centric счета) | тест смены агентства (ADR-0061 п.5) |
| AC5 | Given руководитель агентства, When он открывает балансы команды, Then видны счёт агентства и AgentCommission-балансы агентов текущего состава; ReferralCommission-балансы и агенты чужих агентств не видны | тест A1 |
| AC6 | Given холдер без единого кредита, When он открывает кошелёк, Then показано нулевое состояние без ошибки | тест A3 |
Обратные ссылки
Автоссылки: где используется этот документ.
- API (1): GET /api/v1/platform/wallet/accounts/{accountId}/ledger — Журнал проводок счёта
- Use Cases (1): UC-WLT-005. Оператор ПИН смотрит журнал проводок счёта (сверка)
- registries (1): Реестр use cases и user stories PIN
- index.md (1): Wallet Service
Связанные Документы
- Domain entity: wallet-account.md (счета, permissions),
ledger-transaction.md (журнал,
BalanceAfter). - API методы: get-my-wallet.md, list-my-wallet-transactions.md, list-agency-agent-balances.md, list-wallet-accounts.md; реестр и общие модели — api/README.md.
- Наполнение балансов: UC-WLT-001 (кредиты), UC-WLT-002 (дебеты), UC-WLT-003 (корректировки).
- ADR-0065, ADR-0061 п.5.