Перейти к содержанию

Каталог акций

Каталог акций — стартовый экран раздела «Акции». Это таблица всех акций программы с серверным поиском, фильтрами и сортировкой по всей базе, выбором строк и массовыми действиями. Из каталога оператор создаёт акцию, открывает её для правки или чтения, запускает, приостанавливает, архивирует, удаляет, копирует («Сохранить как»), проставляет метки и переносит акции между контурами.

Доступ

Просмотр каталога и экспорт — право 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», «Выгружена акция {код}».

Импорт акций

Мастер «Импорт акций» из трёх шагов: Файл → Предпросмотр → Результат.

  1. Файл. Перетащите или выберите JSON-файл, полученный кнопкой экспорта. Под полем — «В файле N акций». Если файл не похож на выгрузку акций — «Файл не похож на выгрузку акций. Выберите файл, полученный кнопкой «Экспорт»». Кнопка «Предпросмотр».
  2. Предпросмотр. Сервер прогоняет импорт по настоящим правилам переноса, ничего не записывая («Проверка выполнена на сервере по правилам переноса. Ничего ещё не создано.»). Отчёт: «Будет создано: N» (коды), «Будет пропущено: N» (коды — «уже есть в этом контуре»), «С ошибками: N» (код и причина). Если создавать нечего — «Создавать нечего: все акции из файла уже есть в этом контуре», кнопка «Применить» недоступна. «Назад» возвращает к выбору файла.
  3. Результат. «Импорт завершён»: «Создано», «Пропущено», «С ошибками».

Правила переноса

  • Акция опознаётся по коду. Акция, код которой уже есть в целевом контуре, пропускается, а не перезаписывается; повтор той же загрузки ничего не меняет. Вторая запись с тем же кодом внутри файла тоже попадает в пропущенные.
  • Отсутствующая акция создаётся черновиком с сохранением кода. Статус, идентификаторы, версия, даты и признак архива не переносятся. Уникальность названия при импорте не проверяется.
  • Каждая акция проверяется полной валидацией создания (механика, период, приоритет, параметры, ограничения) и импортируется отдельно: ошибка одной не прерывает остальные. Частая причина ошибки — в целевом контуре ещё нет механики акции; предпросмотр показывает это до применения.
  • Метки переносятся значениями: существующие находятся без учёта регистра, недостающие заводятся в справочнике меток вместе с акцией, одной транзакцией.
  • Условия (Условия акции) переносятся значениями. Записи 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). Действия жизненного цикла над одной акцией — в Жизненном цикле.