Перейти к основному содержимому

GET /api/v1/platform/wallet/accounts — Реестр счетов кошелька

Назначение

Отдаёт оператору ПИН постраничный реестр всех счетов кошелька — холдерских (AgentCommission / ReferralCommission / AgencyCommission) и системных (PlatformSettlement / PlatformRevenue) — с текущими балансами. Рабочий инструмент финансового контроля: поиск счёта холдера перед корректировкой (create-wallet-adjustment.md), просмотр системных остатков, разбор инцидентов рассинхрона (ADR-0021).

Metadata

ПолеЗначение
Сервис/контекстwallet
API areaplatform
Feature groupplatform-wallet
Статусdraft
Документdocs/06-services/wallet/api/platform/list-wallet-accounts.md

Актор и доступ

ПроверкаЗначение
Actor typeOperator(Admin) (оператор ПИН)
Auth policy / Permissionswallet.accounts.view-all
Scope (RBAC)платформа
Auditread-sensitive: обращения к реестру логируются (актор, фильтры — без сумм)

HTTP-контракт

ПолеЗначение
MethodGET
Route/api/v1/platform/wallet/accounts
Success status200
Correlationсквозной trace через заголовок traceparent

Входные данные / параметры запроса

ПолеИсточникТипОбязательностьВалидация / Ограничения
HolderUserIdqueryGuid?Нетфильтр по пользователю-холдеру
HolderCompanyIdqueryGuid?Нетфильтр по компании-холдеру; взаимоисключим с HolderUserId (оба заданы → ValidationError)
Kindquerystring? (enum WalletAccountKind)НетAgentCommission / ReferralCommission / AgencyCommission / PlatformSettlement / PlatformRevenue
Page / PageSizequeryintНетpaging — ../README.md

Модель ответа WalletAccountModel (страница)

Расширение WalletBalanceModel (../README.md) полями холдера и служебными атрибутами — только для platform-area.

ПолеТипОбязательностьИсточникОписание
AccountIdGuidДаWalletAccountEntity.IdИдентификатор счёта.
AccountKindstring (enum WalletAccountKind)ДаAccountKindВид счёта.
HolderUserIdGuid?Нет (null у системных и компанейских)HolderUserIdПользователь-холдер.
HolderCompanyIdGuid?Нет (null у системных и пользовательских)HolderCompanyIdКомпания-холдер.
HolderDisplayNamestring?Нетdisplay-реплика (user-display-replica.md)Подпись холдера: DisplayName по HolderUserId (холдерский пользовательский счёт) либо CompanyName по HolderCompanyId (счёт агентства). null у системных счетов и пока холдер не реплицирован (клиент показывает id). Резолв из локальной реплики, без синхронного identity.
BalancedecimalДаBalanceТекущий баланс (scale 2); системные счета могут быть отрицательными.
CurrencyIdshortДаCurrencyIdВалюта счёта (handbook/domain/snapshots.md); RUB-only.
CreatedAtDateTimeOffsetДаCreatedAtМомент lazy-создания счёта (первая кредитующая проводка).
LastTransactionAtDateTimeOffset?НетжурналМомент последней проводки счёта.

Сортировка — CreatedAt по убыванию; при заданном холдере — по AccountKind.

Алгоритм

Тривиальное чтение реестра: проверить permission и фильтры (HolderUserId/HolderCompanyId взаимоисключимы, Kind из enum — иначе ValidationError), выбрать счета по фильтрам, подтянуть подписи холдеров из display-реплики (DisplayName/CompanyName, без синхронного identity), спроецировать в WalletAccountModel, вернуть страницу. Холдерские счета появляются в реестре lazy — после первой кредитующей проводки; системные — при первом обращении проводок. Отсутствие строки реплики → HolderDisplayName = null, не ошибка.

Ошибки и failure modes

Только общие ошибки области (../README.md): ValidationError (400), UNAUTHORIZED (401), FORBIDDEN (403).

Совместимость и наблюдаемость

  • Новые значения AccountKind и optional-поля модели — additive.
  • Logs: актор + фильтры без сумм; metrics: латентность p95, частота обращений (wallet_platform_registry_reads_total); traces — traceparent.

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы