Статистика акций¶
Модуль ведёт сводную проекцию применения акций — счётчики акций по статусам, число применений и
начисленные баллы. Эта проекция обслуживает дашборд «Мониторинг бонусов» и колонки
«Применений» и «Начислено» каталога акций и доступна через REST API. Все операции раздела —
только чтение, право LOYALTY_PROMOTION_READ.
Что измеряется¶
Статистика опирается на факт применения акции к покупке: каждое применение увеличивает счётчик применений соответствующей акции и сумму начисленных по ней баллов. Параллельно считаются акции каталога по статусам.
- Счётчики ведутся по версии акции: новая версия и копия акции начинают с нуля. Сводные суммы
(
totalApplications,totalBonusMinor) складывают все версии. - Сторнированное начисление остаётся применением: счётчик применений назад не отматывается.
Баллы и деньги в минорных единицах
bonusMinor — начисленные баллы в минорных единицах (целое число: 15000 = 150,00 балла).
budgetMinor — бюджет акции в деньгах (минорные единицы рубля): начисление пересчитывается в
деньги по курсу баллов на момент начисления. При курсе балла, равном 1 ₽, значения численно
совпадают.
Где видно в интерфейсе¶
На дашборде «Мониторинг бонусов»:
- карточка «Количество активных акций» — счётчик статуса «Активна»;
- таблица «Топ акций по начислениям» — до 10 акций с наибольшими начислениями; колонки «Акция», «Статус», «Применений», «Начислено», «Бюджет / расход» (бюджет и доля израсходованного).
В каталоге акций — колонки «Применений», «Начислено» и «Расход бюджета». Они скрыты по умолчанию и включаются в настройке таблицы (шестерёнка «Настроить таблицу»); сортировки по ним нет. Быстрый просмотр строки показывает «Бюджет акции» и «Израсходовано».
Точный расход бюджета конкретной акции показывает её карточка — строка «Израсходовано X из Y» (при исчерпании — «Бюджет исчерпан…»); он считается по журналу начислений за вычетом сторно и по всей линии версий акции. См. Ограничения и лимиты акции.
Показатели акций за выбранный период — применения, участники, покупки, выручка, начислено и израсходовано — собраны в разделе «Отчёты», вкладка «Акции».
Одно название — одно число
Колонки каталога и поля ответа по одной акции показывают одни и те же величины: «Применений» и «Начислено» — по версии акции, «Расход бюджета» — по линии версий, потому что бюджет задаётся линии; он же — «Израсходовано» в быстром просмотре и в карточке акции. «Начислено» — баллы, «Расход бюджета» — деньги. У акции без применений — нули, а не прочерк.
Эндпоинты¶
| Метод и путь | Назначение | Право |
|---|---|---|
GET /v1/promotions/stats |
Сводная статистика по всем акциям | LOYALTY_PROMOTION_READ |
GET /v1/promotions/{id}/stats |
Статистика одной акции по её идентификатору | LOYALTY_PROMOTION_READ |
GET /v1/promotions, GET /v1/promotions/{id} |
Статистика в составе акции: строки каталога и ответ по одной акции | LOYALTY_PROMOTION_READ |
Запросы без необходимой роли отклоняются; неизвестный идентификатор акции — 404 promotion_not_found.
Сводная статистика¶
GET /v1/promotions/stats возвращает агрегированную картину по всему каталогу акций.
Структура ответа:
| Поле | Тип | Описание |
|---|---|---|
statusCounts |
объект | Количество акций по статусам (см. ниже) |
totalPromotions |
число | Общее число акций (всех версий) в каталоге |
totalApplications |
число | Суммарное число применений по всем акциям |
totalBonusMinor |
число | Суммарно начислено баллов (минорные единицы) |
top |
массив | До 10 акций с наибольшими начислениями (строки того же вида, что и у одной акции) |
Разбивка по статусам (statusCounts):
| Поле | Описание |
|---|---|
draft |
Черновики |
scheduled |
Запланированные |
active |
Активные |
paused |
На паузе |
completed |
Завершённые |
archived |
Акции с признаком архива |
Архив пересекается со статусами
Архив — не статус, а отдельный признак (Жизненный цикл). Архивная акция на паузе
учтена и в paused, и в archived. Сумма статусов равна общему числу акций; archived к ней не
прибавляется.
{
"statusCounts": {
"draft": 3,
"scheduled": 1,
"active": 12,
"paused": 2,
"completed": 46,
"archived": 40
},
"totalPromotions": 64,
"totalApplications": 18204,
"totalBonusMinor": 9120500,
"top": [
{
"promotionId": 1042,
"name": "Кешбэк 5% на топливо",
"status": "ACTIVE",
"applications": 8120,
"bonusMinor": 4060000,
"budgetMinor": 10000000
}
]
}
Статистика одной акции¶
GET /v1/promotions/{id}/stats возвращает показатели конкретной версии акции.
| Поле | Тип | Описание |
|---|---|---|
promotionId |
число | Идентификатор акции |
name |
строка | Наименование акции |
status |
строка | Текущий статус акции (DRAFT, SCHEDULED, ACTIVE, PAUSED, COMPLETED) |
applications |
число | Число применений акции |
bonusMinor |
число | Начислено баллов по акции (минорные единицы) |
budgetMinor |
число / null |
Бюджет акции в деньгах (минорные единицы); null, если бюджет не задан |
{
"promotionId": 1042,
"name": "Кешбэк 5% на топливо",
"status": "ACTIVE",
"applications": 8120,
"bonusMinor": 4060000,
"budgetMinor": 10000000
}
Бюджет — необязательное поле
Поле budgetMinor может быть пустым (null): акция может действовать без ограничения бюджета.
В этом случае контроль расхода по данной акции не ведётся.
Статистика в составе акции¶
Строки каталога (GET /v1/promotions) и ответ по одной акции (GET /v1/promotions/{id}) несут три
поля статистики. В каталоге они собираются для всей страницы сразу, а не запросом на каждую строку.
| Поле | Тип | Описание |
|---|---|---|
applications |
число | Число применений этой версии акции |
bonusMinor |
число | Начислено баллов по этой версии (минорные единицы) |
budgetSpentMinor |
число | Израсходовано бюджета по всей линии версий — в деньгах (минорные единицы), начисления минус сторно, каждое по курсу на момент начисления |