GET /api/v1/platform/wallet/accounts/{accountId}/ledger — Журнал проводок счёта
Назначение
Отдаёт оператору ПИН постраничный журнал проводок произвольного счёта кошелька — холдерского
(AgentCommission / ReferralCommission / AgencyCommission) или системного (PlatformSettlement /
PlatformRevenue). В отличие от истории личного кошелька (../user/list-my-wallet-transactions.md),
platform-журнал не ограничен холдером и раскрывает служебные атрибуты проводки: причину ручной операции
(Adjustment) или отмены (Correction), актора ручной операции, направление и баланс-после. Рабочий
инструмент финансового контроля: разбор инцидентов рассинхрона (ADR-0021), проверка счёта перед
корректировкой (create-wallet-adjustment.md) и после неё, аудит движения
средств по системным счетам.
Metadata
| Поле | Значение |
|---|---|
| Сервис/контекст | wallet |
| API area | platform |
| Feature group | platform-wallet |
| Статус | draft |
| Документ | docs/06-services/wallet/api/platform/list-account-ledger.md |
Актор и доступ
| Проверка | Значение |
|---|---|
| Actor type | Operator(Admin) (оператор ПИН) |
| Auth policy / Permissions | wallet.accounts.view-all |
| Scope (RBAC) | платформа |
| Record-level | нет — оператор видит журнал любого счёта, включая системные |
| Audit | read-sensitive: обращения к журналу логируются (актор, AccountId, фильтры — без сумм) |
HTTP-контракт
| Поле | Значение |
|---|---|
| Method | GET |
| Route | /api/v1/platform/wallet/accounts/{accountId}/ledger |
| Success status | 200 |
| Correlation | сквозной trace через заголовок traceparent |
Входные данные / параметры запроса
| Поле | Источник | Тип | Обязательность | Валидация / Ограничения |
|---|---|---|---|---|
AccountId | route | Guid | Да | счёт журнала; несуществующий → WALLET_ACCOUNT_NOT_FOUND |
OperationKind | query | string? (enum WalletOperationKind) | Нет | фильтр по виду операции (../../domain/ledger-transaction.md); не указан — все виды |
From | query | DateTimeOffset? | Нет | фильтр по OccurredAt >= From |
To | query | DateTimeOffset? | Нет | фильтр по OccurredAt < To; при обеих границах From < To |
Page / PageSize | query | int | Нет | paging — ../README.md |
Модель ответа WalletLedgerEntryModel (страница)
Строка журнала — проводка данного счёта (LedgerEntryEntity) вместе с атрибутами её транзакции
(LedgerTransactionEntity — дом полей: ../../domain/ledger-transaction.md).
В отличие от WalletTransactionModel (../README.md), дебет и кредит разнесены по
отдельным полям (бухгалтерский вид), а причина и актор раскрыты — только для platform-area.
| Поле | Тип | Обязательность | Источник | Описание |
|---|---|---|---|---|
EntryId | Guid | Да | LedgerEntryEntity.Id | Идентификатор проводки. |
TransactionId | Guid | Да | LedgerTransactionEntity.Id | Транзакция журнала (одна транзакция может дать несколько проводок; в журнале счёта видна только его проводка). |
OperationKind | string (enum WalletOperationKind) | Да | OperationKind | CommissionCredit / ReferralCredit / PayoutDebit / Adjustment / Correction. |
SourceId | Guid | Да | SourceId | Ссылка-основание («источник-сделка»): id начисления / реферального начисления / позиции поручения / исходной транзакции (Correction) / ключ корректировки (Adjustment) — карта по видам операций в ../../domain/ledger-transaction.md. Отдаётся как непрозрачная ссылка; расшифровка основания — в rewards по своим permissions. |
Debit | decimal? | Нет (null, если проводка — Credit) | проводка счёта | Сумма списания со счёта (Direction = Debit); scale 2, всегда > 0. |
Credit | decimal? | Нет (null, если проводка — Debit) | проводка счёта | Сумма зачисления на счёт (Direction = Credit); scale 2, всегда > 0. Ровно одно из Debit/Credit заполнено. |
BalanceAfter | decimal | Да | LedgerEntryEntity.BalanceAfter | Сальдо счёта сразу после проводки (зафиксировано при проведении); scale 2. |
CurrencyId | short | Да | счёт | Валюта сумм строки (handbook/domain/snapshots.md); RUB-only (ADR-0048). |
Comment | string? | Нет (null, кроме Adjustment/Correction) | LedgerTransactionEntity.Comment | Причина ручной операции (Reason оператора у Adjustment) или отмены источника (CancelReason у Correction). |
ActorUserId | Guid? | Нет (null у системных операций) | ActorUserId | ПИН-оператор, выполнивший ручную операцию (Adjustment). |
CorrectedTransactionId | Guid? | Нет (null, кроме Correction) | CorrectedTransactionId | Компенсируемая исходная транзакция (у Correction). |
OccurredAt | DateTimeOffset | Да | OccurredAt | Момент бизнес-факта операции (получение денег / выплата / корректировка). |
RecordedAt | DateTimeOffset | Да | RecordedAt | Момент проведения в журнале. |
Сортировка — RecordedAt по убыванию (свежие сверху); внутри одинакового момента — по EntryId
(стабильный порядок страниц).
Алгоритм
- Проверить permission и существование счёта: счёта нет →
WALLET_ACCOUNT_NOT_FOUND(404). - Проверить фильтры:
OperationKindвне enum /From >= To/ paging вне диапазонов →ValidationError. - Выбрать проводки этого счёта из журнала по фильтру периода и вида операции, присоединить атрибуты их
транзакций (
OperationKind,SourceId,Comment,ActorUserId,CorrectedTransactionId,OccurredAt,RecordedAt), спроецировать вWalletLedgerEntryModel(Debit/CreditпоDirection,BalanceAfter— зафиксированный при проведении) и вернуть страницу. - Журнал append-only (../../domain/ledger-transaction.md,
INV-WLT-6): история не меняется задним числом; исправления видны отдельными строками
Correction/Adjustment, а не правкой прежних проводок.
Ошибки и failure modes
| Код | HTTP | Условие |
|---|---|---|
WALLET_ACCOUNT_NOT_FOUND | 404 | Счёта с указанным AccountId не существует. |
Прочее — общие ошибки области (../README.md): ValidationError (400), UNAUTHORIZED
(401), FORBIDDEN (403).
Совместимость и наблюдаемость
- Новые значения
WalletOperationKindи optional-поля модели — additive: клиент показывает неизвестный вид операции как «прочее», не падая. - Logs: актор,
AccountId, фильтры без сумм; metrics: латентность p95, частота обращений к журналу (wallet_platform_ledger_reads_total); traces —traceparent.
Обратные ссылки
Автоссылки: где используется этот документ.
- API (1): Wallet API — реестр операций и общие контрактные модели
- Use Cases (1): UC-WLT-005. Оператор ПИН смотрит журнал проводок счёта (сверка)
- registries (1): Реестр API-методов PIN
Связанные документы
- Журнал и проводки: ../../domain/ledger-transaction.md; счета: ../../domain/wallet-account.md.
- Реестр счетов (выбор
AccountId): list-wallet-accounts.md; корректировка: create-wallet-adjustment.md. - История личного кошелька (holder-view): ../user/list-my-wallet-transactions.md.
- Сценарий: ../../use-cases/UC-WLT-004-holder-views-balance-and-history.md (поток A2 — оператор ПИН).
- Общие модели и ошибки: ../README.md; ADR-0021 — разбор рассинхронов.