Каталог акций¶
Каталог акций — стартовый экран раздела «Акции». Это таблица всех акций программы с серверным поиском, фильтрами и сортировкой по всей базе, выбором строк и массовыми действиями. Из каталога оператор создаёт акцию, открывает её для правки или чтения, запускает, приостанавливает, архивирует, удаляет, копирует («Сохранить как»), проставляет метки и переносит акции между контурами.
Доступ
Просмотр каталога и экспорт — право LOYALTY_PROMOTION_READ. Изменяющие действия (создание,
отмена запуска, пауза, архивирование, удаление, копия, метки, импорт) — LOYALTY_PROMOTION_WRITE,
запуск — отдельное право LOYALTY_PROMOTION_ACTIVATE. Без нужного права пункты меню и кнопки панели
не показываются. Колонка и фильтр «Метки» требуют ещё LOYALTY_PROMOTION_LABEL_READ, см.
Метки акций.
Панель инструментов¶
| Элемент | Назначение |
|---|---|
| Поле поиска «Поиск по названию, коду или пользователю» | Подстрока без учёта регистра по названию, коду акции и отображаемому имени автора или последнего изменившего. Одной строкой находятся все акции конкретного маркетолога. |
| Переключатель «Показать архивные» | Включает в выборку архивные акции (см. Архив). |
| Шестерёнка (тултип «Настроить таблицу») | Состав и порядок колонок. |
| Иконка загрузки (тултип «Загрузить акции из файла») | Мастер «Импорт акций», см. Импорт. Требует права записи. |
| Иконка выгрузки | Экспорт: без выделения — «Выгрузить все акции в файл», с выделением — «Выгрузить выбранные акции: N». |
| Кнопка «Создать акцию» | Открывает форму новой акции, см. Создание и редактирование акции. |
Таблица¶
Колонки по умолчанию:
| Колонка | Содержимое | Сортировка | Фильтр |
|---|---|---|---|
| (глазик) | Служебная колонка — открывает быстрый просмотр. В настройке таблицы не участвует. | — | — |
| Название | Название акции в одну строку, полное — в тултипе. | да | — |
| Код | Код акции вида PR-00001; клик копирует значение («Скопировано: …»). Обязательная колонка — скрыть нельзя. |
да | — |
| Тип | Группа акции из справочника «Группы акций»; пусто — «—». | да | множественный выбор из справочника |
| Метки | Метки акции чипсами. | — | множественный выбор из справочника меток + способ совпадения |
| Дата создания | Дата создания. | да | диапазон дат |
| Период действия | Начало и окончание с точным временем. | да (по дате начала) | диапазон дат — пересечение с периодом акции |
| Статус | Тег статуса; у архивной рядом тег «В архиве». | да | множественный выбор из пяти статусов |
| Автор | Пользователь, создавший акцию (из учётной записи). | да (по имени) | множественный выбор |
| Изменил | Последний изменивший; не менялась после создания — «—». | да (по имени) | множественный выбор |
Скрытые по умолчанию колонки (включаются в настройке таблицы):
| Колонка | Содержимое | Сортировка | Фильтр |
|---|---|---|---|
| Механика | Название механики. | да (по коду) | множественный выбор |
| Приоритет | Число; меньше — выше. | да | — |
| Совмещение | «Совмещается» / «Только одна». | да | «Совмещается», «Только одна» |
| Версия | Номер версии акции (тултип: «Номер версии акции. Новая версия создаётся вместо редактирования запущенной акции»). | да | — |
| ID | Технический идентификатор; клик копирует. | да | — |
| Дата начала | Дата начала периода. | да | диапазон — по самой дате начала |
| Дата окончания | Дата окончания периода. | да | диапазон — по самой дате окончания |
| Статус согласования | «В работе», «На согласовании», «Согласована», «Отклонена». Колонка есть, только если на стенде включено согласование запуска (см. Согласование запуска); стоит сразу после «Статуса». | да | множественный выбор из четырёх значений |
| Применений | Сколько раз применилась эта версия акции. | — | — |
| Начислено | Сколько баллов начислено по этой версии акции. | — | — |
| Расход бюджета | Израсходовано бюджета в деньгах — по всей линии версий акции, начисления минус сторно. | — | — |
У статуса «Запланирована» тултип «Запустится автоматически {дата}», у «Завершена» — «Период акции закончился».
Статистика в строке каталога
Применения и начисленное считаются по версии акции, расход бюджета — по линии версий, потому что бюджет задаётся линии. «Расход бюджета» совпадает со строкой «Израсходовано … из …» в карточке акции. У акции без применений — нули. Сортировки по этим колонкам нет. Подробнее — в статистике акций.
Статусы и архив¶
Статус отражает, что происходит с акцией по существу. Подробно переходы описаны в Жизненном цикле.
| Код | Подпись | Смысл |
|---|---|---|
DRAFT |
Черновик | заведена, не запущена |
SCHEDULED |
Запланирована | запуск подтверждён, ждёт даты начала и запустится сама |
ACTIVE |
Активна | применяется к событиям в пределах периода |
PAUSED |
Пауза | временно не применяется, может быть возобновлена |
COMPLETED |
Завершена | период закончился; терминальный статус |
Архив — не статус, а независимый обратимый признак archived. Архивная акция сохраняет свой
статус (например, «Пауза» с тегом «В архиве»), не участвует в расчёте начислений и не редактируется.
Прежнего статуса ARCHIVED больше нет: при обновлении такие акции получили признак архива и статус
«Пауза», поэтому после «Разархивировать» они сами не начнут применяться — нужен явный «Запустить».
Архивные акции¶
По умолчанию каталог показывает только неархивные акции. Переключатель «Показать архивные» возвращает всю базу: архивные идут первым блоком с заголовком «Архивные», за ними — блок «Остальные». Внутри блоков действует выбранная сортировка.
Поиск, фильтры и сортировка¶
Поиск, фильтры и сортировка выполняются на сервере по всей базе, а не по загруженной странице; любое изменение возвращает на первую страницу.
- Фильтры задаются в заголовках колонок. Значения внутри одной колонки соединяются по «ИЛИ», фильтры разных колонок — по «И».
- Фильтр «Метки» — множественный выбор из справочника меток и способ совпадения: «Любая из выбранных» (по умолчанию, акция несёт хотя бы одну метку) или «Все выбранные». Если метку сохранённого фильтра удалили из справочника, в фильтре она показывается как «Удалённая метка» (тултип «Метка удалена из справочника. Снимите её с фильтра.»).
- Период действия отбирает акции, чей период пересекается с диапазоном; Дата начала и Дата окончания — по самой границе.
- Сортировка множественная: каждый клик по заголовку добавляет колонку к действующей сортировке (цикл «по возрастанию → по убыванию → не участвует»), приоритет — порядок добавления. По умолчанию — «Дата создания» по убыванию. Пустые значения (тип, автор, изменивший) всегда в конце.
Постраничная навигация: размер страницы 10, 15 или 20 (по умолчанию 20), счётчик «Показано X–Y из N».
Вид каталога запоминается
Состав, порядок и ширина колонок, фильтры (включая способ совпадения меток), сортировка, строка поиска, переключатель архивных, номер и размер страницы сохраняются в браузере пользователя и восстанавливаются при следующем открытии.
Выбор строк и открытие акции¶
| Действие | Результат |
|---|---|
| Клик по строке или чекбоксу | Выбор строки. Выделение накапливается между страницами и сохраняется при смене поиска, фильтров и сортировки. |
| Двойной клик | При праве записи и если акцию можно править на месте — форма редактирования; иначе — карточка акции в режиме чтения. Архивная всегда открывается для чтения. |
| Правый клик | Контекстное меню действий. |
| Глазик | Быстрый просмотр. |
Быстрый просмотр¶
Боковая панель только для чтения, заголовок — название акции. Разделы: Основное (код, тип, статус, период), Настройки (механика, приоритет, совмещение), Ограничения (условия акции строками по условиям в порядке вкладки «Условия», исключения — «кроме: …»; без условий — «Без ограничений»), Бюджет и лимиты («Бюджет акции», «Израсходовано», «Макс. бонус за начисление»), Авторство (автор и изменивший с датой), Версия (номер версии и ID). В разделе «Ограничения» выводятся справочные значения, сумма чека и дополнительные условия; теги клиента, участие в акциях и условия по клиенту видны на странице акции (см. Условия акции). Закрывается кнопкой «Закрыть» и ничего не сохраняет.
Действия над акциями¶
Действия доступны из контекстного меню строки и из плавающей панели массовых действий (появляется внизу экрана при выборе строк: «Выбрано: N», кнопки действий, «Снять выделение»).
Цель действия зависит от выделения: панель действует на все выбранные акции; меню строки, входящей в выделение, — тоже на всё выделение («Выбрано акций: N» в заголовке меню); меню строки вне выделения — только на эту строку. Пункт показывается, только если действие применимо ко всем целям сразу; одиночные действия при нескольких целях скрыты.
| Действие | Когда доступно | Цели | Результат |
|---|---|---|---|
| Редактировать | акцию можно править на месте (см. правило правки) | одна | форма редактирования |
| Открыть для чтения | всегда | одна | карточка акции |
| Запустить | Черновик (при включённом согласовании — только согласованный), Пауза; нужно право LOYALTY_PROMOTION_ACTIVATE |
одна или несколько | период идёт — «Активна», период в будущем — «Запланирована» |
| Отменить запуск | Запланирована | одна или несколько | «Черновик» |
| Приостановить | Активна | одна или несколько | «Пауза» |
| Проставить метки… / Снять метки… | любой статус, в том числе архив; нужна ещё роль LOYALTY_PROMOTION_LABEL_READ |
одна или несколько | см. Метки акций |
| Сохранить как… | любой статус | одна | новый черновик-копия |
| Экспортировать | всегда (право чтения) | одна или несколько | JSON-файл |
| Архивировать | акция не в архиве | одна или несколько | признак архива, статус не меняется |
| Разархивировать | акция в архиве | одна или несколько | признак архива снят |
| Удалить | Черновик, Запланирована (архивность не важна) | одна или несколько | акция удаляется безвозвратно; акция, входящая в программу лояльности, не удаляется |
Если на стенде включено согласование запуска, «Запустить» у черновика появляется только после согласования акции; нетронутая пауза возобновляется без него. Как отправить акцию на согласование — в разделе «Согласование запуска».
Акцию, которая входит в программу лояльности (привязана к конфигурации программы и это её единственная версия), удалить нельзя: пункт «Удалить» неактивен с тултипом «Акция входит в программу лояльности. Снимите привязку в настройках программы, затем удалите». Если все выбранные акции такие, кнопки «Удалить» на панели нет; в смешанном выделении привязанные акции попадают в отчёт с причиной «Входит в программу — сначала снимите привязку».
Подтверждение и результат¶
Запуск, отмена запуска, пауза, архивирование, разархивирование и удаление выполняются только после модалки подтверждения — даже для одной акции. В модалке — список целей (код, название, статус) с чекбоксами и счётчик, например «Будет запущено: N, пропущено: M»; снятые чекбоксы исключают акцию из операции. У удаления кнопка красная и пометка «Действие необратимо».
| Действие | Заголовок | Кнопка |
|---|---|---|
| Запустить | «Запуск акции» / «Запуск акций» | «Да, запустить» |
| Отменить запуск | «Отмена запуска акции» / «Отмена запуска акций» | «Да, отменить запуск» |
| Приостановить | «Приостановка акции» / «Приостановка акций» | «Да, приостановить» |
| Архивировать | «Архивирование акции» / «Архивирование акций» | «Да, заархивировать» |
| Разархивировать | «Возврат из архива» / «Возврат из архива акций» | «Да, разархивировать» |
| Удалить | «Удаление акции» / «Удаление акций» | «Да, удалить» |
Несколько акций обрабатываются одним запросом, поштучно и без общей транзакции: успешно обработанные акции не откатываются, если часть упала. Пока запрос выполняется, открыто окно «Выполняется операция» — «Не закрывайте страницу, пока операция не завершится.» При полном успехе — сообщение («Запущено акций: N», «Запущено акций: N, запланировано: M», «Архивировано акций: N» и т. п.). При частичном — окно «Обработано N из M» с таблицей «Акция» / «Причина» и пометкой «Успешно обработанные акции остаются обработанными — изменения не откатываются.»; выделение остаётся на неуспешных акциях, список перечитывается.
Ограничение пакета
Один массовый запрос жизненного цикла принимает не более 500 акций. Проставление и снятие меток — до 10 000 акций и до 200 меток за раз.
Сохранить как¶
Модалка «Сохранить как копию»: поле «Название копии», предзаполненное «‹название› (копия)» (если занято — «(копия 2)» и далее), кнопка «Создать копию». Создаётся независимая копия — новый черновик с новым кодом, собственной линией версий и нулевой статистикой; исходная акция не меняется. Копия получает параметры, ограничения, лимит участий и условия исходной акции, но не получает метки — это новая кампания. Условие, скрытое в «Настройке акции», в копию тоже не переносится — после копирования показывается «Условие «X» скрыто в настройке акции и не перенесено в копию». Название акции уникально (без учёта регистра) между разными акциями; занятое название — ошибка под полем «Акция с таким названием уже существует».
Экспорт¶
Экспорт выгружает выбранные акции (или все, включая архивные, если ничего не выбрано) в JSON-файл
обычным скачиванием браузера. Имя файла: одна акция — promotion_<код>_<ГГГГ-ММ-ДД>_<ЧЧмм>.json,
несколько или все — promotions_<ГГГГ-ММ-ДД>_<ЧЧмм>.json. Сообщения: «Выгружены все акции: N»,
«Выгружено акций: N», «Выгружена акция {код}».
Импорт акций¶
Мастер «Импорт акций» из трёх шагов: Файл → Предпросмотр → Результат.
- Файл. Перетащите или выберите JSON-файл, полученный кнопкой экспорта. Под полем — «В файле N акций». Если файл не похож на выгрузку акций — «Файл не похож на выгрузку акций. Выберите файл, полученный кнопкой «Экспорт»». Кнопка «Предпросмотр».
- Предпросмотр. Сервер прогоняет импорт по настоящим правилам переноса, ничего не записывая («Проверка выполнена на сервере по правилам переноса. Ничего ещё не создано.»). Отчёт: «Будет создано: N» (коды), «Будет пропущено: N» (коды — «уже есть в этом контуре»), «С ошибками: N» (код и причина). Если создавать нечего — «Создавать нечего: все акции из файла уже есть в этом контуре», кнопка «Применить» недоступна. «Назад» возвращает к выбору файла.
- Результат. «Импорт завершён»: «Создано», «Пропущено», «С ошибками».
Правила переноса¶
- Акция опознаётся по коду. Акция, код которой уже есть в целевом контуре, пропускается, а не перезаписывается; повтор той же загрузки ничего не меняет. Вторая запись с тем же кодом внутри файла тоже попадает в пропущенные.
- Отсутствующая акция создаётся черновиком с сохранением кода. Статус, идентификаторы, версия, даты и признак архива не переносятся. Уникальность названия при импорте не проверяется.
- Каждая акция проверяется полной валидацией создания (механика, период, приоритет, параметры, ограничения) и импортируется отдельно: ошибка одной не прерывает остальные. Частая причина ошибки — в целевом контуре ещё нет механики акции; предпросмотр показывает это до применения.
- Метки переносятся значениями: существующие находятся без учёта регистра, недостающие заводятся в справочнике меток вместе с акцией, одной транзакцией.
- Условия (Условия акции) переносятся значениями. Записи
criteria— кодами: значения справочников должны быть опубликованы в целевом контуре, а само условие — показываться в «Настройке акции» целевого контура (дополнительное — заведено с тем же кодом и способом), иначе акция попадает в ошибки. Уровни клиента должны существовать в конфигурации программы целевого контура. Теги и метки условий — значениями (недостающие заводятся), акции — кодом корневой версии. Ссылка на акцию из того же файла разрешается; если акцию не найти ни в файле, ни в контуре, импортируемая акция не создаётся — ошибка с кодомpromotion_audience_unresolved. - Файл старого формата (без описания, меток или условий) импортируется с пустыми значениями этих полей;
файл, выгруженный до перехода на список
criteria(со старым полемscope), — с конвертацией условий.
Ошибки действий¶
Каталог показывает собственные тексты по коду ошибки.
| Код | HTTP | Текст / когда |
|---|---|---|
promotion_status_invalid |
409 | «Акция уже в другом статусе — список обновлён»: переход не разрешён из текущего статуса |
promotion_not_found |
404 | «Акция не найдена — список обновлён» |
promotion_not_editable |
409 | правка акции, которую нельзя править на месте |
promotion_not_deletable |
409 | «Удалить можно только черновик или запланированную акцию» |
promotion_in_use |
409 | удаление последней версии акции, выбранной в условиях работающей акции |
promotion_name_taken |
409 | «Акция с таким названием уже существует» |
promotion_audience_unresolved |
400 | «Акцию нельзя запустить: в условиях есть значения, удалённые из справочника.» |
promotion_mechanic_not_configured |
409 | «Настройки этой механики ещё не заведены — акцию на ней пока не собрать. Обратитесь к администратору»: запуск акции на механике без параметров |
promotion_points_subaccount_invalid |
422 | «Акцию нельзя запустить: тип начисляемых баллов недоступен. Откройте акцию и выберите другой на вкладке «Механика»» |
approval_required |
409 | «Акция не согласована. Отправьте её на согласование.»: при включённом согласовании — запуск несогласованного черновика или паузы, поправленной после запуска |
access_denied |
403 | при запуске — «У вас нет права запускать акции.» |
promotion_bound_to_config |
422 | «Акция входит в программу «X». Снимите привязку в настройках программы, затем удалите»; в отчёте массового удаления — «Входит в программу — сначала снимите привязку» |
promotion_concurrent_update |
409 | только в отчёте массовой операции: акцию одновременно изменили (другой пользователь или автоматический переход по дате) |
REST API¶
| Метод и путь | Право | Назначение |
|---|---|---|
GET /v1/promotions |
LOYALTY_PROMOTION_READ |
Каталожная выборка: search, множественные status, approvalStatus, group, mechanicCode, stacking, createdBy, updatedBy, labelId + labelMatch=ANY\|ALL; периоды createdFrom/To, activeFrom/To (пересечение), startsFrom/To, endsFrom/To; archived=true — вся база, архивные первыми; sort=поле,asc\|desc (повторяемый), page, size |
GET /v1/promotions/authors |
LOYALTY_PROMOTION_READ |
Авторы и изменившие — опции фильтров «Автор»/«Изменил» |
GET /v1/promotions/{id} |
LOYALTY_PROMOTION_READ |
Акция по идентификатору |
POST /v1/promotions/{id}/copy |
LOYALTY_PROMOTION_WRITE |
«Сохранить как»; тело {name} необязательно |
DELETE /v1/promotions/{id} |
LOYALTY_PROMOTION_WRITE |
Удаление (только черновик и запланированная, не входящая в программу лояльности), ответ 204 |
POST /v1/promotions/bulk-{activate\|pause\|unschedule\|archive\|unarchive\|delete} |
LOYALTY_PROMOTION_WRITE; bulk-activate — LOYALTY_PROMOTION_ACTIVATE |
Массовое действие: тело {ids[]} (до 500), ответ {succeeded[{id, promotionCode, promotionName}], scheduled[], errors[{id, code, reason, promotionCode, promotionName}]} |
GET /v1/admin/promotions/export?ids= |
LOYALTY_PROMOTION_READ |
Экспорт выбранных или всех акций в бандл |
POST /v1/admin/promotions/import?dryRun=true\|false |
LOYALTY_PROMOTION_WRITE |
Импорт бандла; dryRun=true — предпросмотр без записи. Ответ {created[], skipped[], errors[{code, reason, errorCode}], dryRun} |
Сортировка возможна по полям name, code, group, createdAt, updatedAt, startsAt, endsAt,
status, approvalStatus, mechanicCode, priority, stacking, revision, id, createdBy,
updatedBy. В строках списка приходят archived, editable (готовое решение сервера, можно ли
править на месте), labels, createdBy/updatedBy ({id, displayName}), criteria,
approvalStatus, boundToConfig (удаление будет отклонено привязкой к конфигурации программы) и
статистика: applications и bonusMinor — по версии, budgetSpentMinor — по линии версий. Условия
audience в строках списка не передаются (audience = null). Действия жизненного цикла над одной
акцией — в Жизненном цикле.