7.0 KiB
7.0 KiB
Аналитика прибыльности брокерского счёта
Дата: 2026-06-24 Статус: реализовано Эпик: Портфель брокера
Цель
Дать пользователю брокерского счёта T-Bank отдельный раздел, где можно увидеть агрегированную аналитику прибыльности портфеля: сколько всего было вложено (нетто), сколько получено (дивиденды + купоны) и общую доходность.
Пользовательский результат
Пользователь может:
- открыть вкладку
Аналитикавнутри брокерского счёта; - увидеть, сколько всего денег было внесено на счёт (пополнения);
- увидеть, сколько всего денег было выведено со счёта;
- увидеть нетто-вложения (пополнения минус выводы);
- увидеть сумму полученных дивидендов;
- увидеть сумму полученных купонов;
- увидеть общую сумму полученного дохода (дивиденды + купоны);
- увидеть доходность в процентах от нетто-вложений.
Область изменений
Фича относится только к брокерским счетам T-Bank и включает:
- новый backend endpoint
GET /api/v1/broker/accounts/:accountId/analytics; - новый сервис
BrokerAnalyticsServiceс агрегацией через raw SQL; - новую вкладку
Аналитикав навигации брокерского счёта; - страницу аналитики с отображением вложений, полученного дохода и сводки.
Требования
1. Источники данных
- Все данные агрегируются из таблицы
BrokerOperation. - Для расчёта вложений используются операции с типами пополнений (
OPERATION_TYPE_INPUTи аналоги) и выводов (OPERATION_TYPE_OUTPUTи аналоги). - Для расчёта полученного дохода используются операции с типами дивидендов (
OPERATION_TYPE_DIVIDEND,OPERATION_TYPE_DIV_EXT) и купонов (OPERATION_TYPE_COUPON). - Данные считаются «навсегда»: без фильтра по дате, за всё время существования счёта.
- Аналитика read-only и не изменяет данные.
2. Endpoint
GET /api/v1/broker/accounts/:accountId/analytics— возвращает агрегированные показатели.- Кешируется с TTL 5 минут (как существующие broker-эндпоинты).
- При отсутствии счёта возвращает 404.
3. Показатели
Endpoint возвращает:
| Поле | Описание |
|---|---|
totalDeposits |
Сумма всех пополнений счёта |
totalWithdrawn |
Сумма всех выводов со счёта |
netInvested |
totalDeposits − totalWithdrawn (нетто-вложения) |
totalDividends |
Сумма полученных дивидендов |
totalCoupons |
Сумма полученных купонов |
totalReceived |
totalDividends + totalCoupons |
totalReturnPercent |
(totalReceived / netInvested) × 100, если netInvested > 0, иначе null |
currency |
Валюта (RUB) |
4. Агрегация
- Запрос выполняется одним агрегирующим запросом к таблице
BrokerOperation. - Из выборки исключаются операции с
payment IS NULL. - Учитываются только исполненные операции (state =
OPERATION_STATE_EXECUTEDилиnull).
5. Вкладка
- В навигации брокерского счёта появляется вкладка
Аналитикарядом сСобытия. - Вкладка использует
useBrokerAccountContext()для полученияaccountId. - Страница показывает три блока:
- Вложено — пополнения, выводы, нетто-итог
- Получено — дивиденды, купоны, итог
- Сводка — нетто-вложения, полученный доход, доходность в процентах
6. Пустые состояния и ошибки
- Если аналитика недоступна (нет операций), показывается пустое состояние.
- Если нетто-вложения равны нулю,
totalReturnPercentне показывается. - Ошибка загрузки не ломает навигацию счёта.
Ограничения
- Фича работает только внутри маршрутов
/broker/:accountId/*. - Ручные портфели
PortfolioModuleне входят в область фичи. - Фича не учитывает налоги, комиссии и валютную конвертацию.
- Фича не учитывает нереализованную прибыль/убыток по текущим позициям.
- Доходность считается только по полученным выплатам (дивиденды + купоны), без учёта изменения цены бумаг.
Acceptance Criteria
- На странице брокерского счёта есть вкладка
Аналитика. - Вкладка показывает нетто-вложения (пополнения минус выводы).
- Вкладка показывает сумму полученных дивидендов.
- Вкладка показывает сумму полученных купонов.
- Вкладка показывает общую сумму полученного дохода.
- Доходность в процентах отображается, если нетто-вложения > 0.
- Данные кешируются на 5 минут.
- Пустое состояние отображается при отсутствии данных.
- Ошибка загрузки не ломает навигацию.
Вне области фичи
- учёт налогов и комиссий;
- нереализованная прибыль/убыток по текущим позициям;
- ручные портфели;
- мультивалютность;
- графики и визуализация динамики;
- экспорт данных.