Кейс — Промокоды

Проектирование раздела «Промокоды» в B2B продукте

2026 UX Designer / Business Analyst

Задача

Спроектировать новый раздел управления промокодами в личном кабинете для администраторов и менеджеров. B2B-платформа для проверки контрагентов, финансового анализа и подбора финансирования. Пользователи: компании (проверяют контрагентов, продают долги), финансовые организации (ищут клиентов), партнеры (банки, факторинговые, инвестиционные компании).

Техническое задание

На старте было только общее описание внешнего вида, основных экранов (таблица промокодов и форма создания) от менеджера, основанное на запросе клиента. Полная бизнес-логика, статусная модель, правила переходов и обработка ошибок требовалось проработать в процессе проектирования.

Моя роль

  • Полное проектирование бизнес-логики и механики раздела «Промокоды»
  • Выявление и закрытие неопределённостей
  • Проектирование статусной модели и правил переходов между статусами
  • Разработка детальной спецификации валидаций, ошибок формы и системных сценариев
  • Создание прототипов высокого уровня и User Flow
  • Подготовка полной документации для передачи в разработку

Ограничения

В компании нет аналитики и не проводят исследования и тестирования

В условиях ограничения работала в формате:

  • Прорабатывала сценарии через вопросы к заказчику
  • Закладывала защиту от ошибок на уровне логики
1. Почему мы не показываем историю редактирования и блокировок (кто и когда заблокировал / редактировал промокод)?
Заказчик не захотел отслеживать историю блокировок и изменений — в текущем процессе администрирования это не влияет на принятие решений. Основной приоритет — простота и скорость разработки. Если потребуется аудит в будущем, логи можно будет выгружать отдельно или добавить историю в следующей версии. Пока оставили в бэклог.
2. Почему именно "Заблокировать", а не "Поставить на паузу"?
Потому что по сути это выполняет функцию паузы — заблокированный промокод можно разблокировать в любой момент, и он вернётся в прежний статус (если срок и лимит позволяют). Термин "блокировка" привычнее для администраторов B2B-систем и не добавляет лишних сущностей в статусную модель.
3. Может ли пользователь редактировать чужие промокоды?
Да, может. В системе нет разделения прав на уровне "свой/чужой" между менеджерами одной компании. Все менеджеры компании видят и могут редактировать все промокоды. Это упрощает администрирование и не требует дополнительной логики разграничения доступа.
4. Должен ли партнер (поле в таблице) быть ссылкой?
Нет. В системе нет страниц партнеров.
5. Можно ли редактировать промокод в статусе "Заблокирован"?
Да, можно. Промокод может попасть в статус "Заблокирован" по любой причине, и без права редактирования пришлось бы создавать новый промокод вместо того, чтобы просто исправить текущий.
6. Можно ли редактировать промокод в статусе "Истек"?
Да, можно изменить срок годности и количество активаций. Скидку менять нельзя, потому что это основное условие, которое помнят пользователи. Если уменьшить срок или лимит, промокод останется в статусе "Истек" (условия стали жестче). Если увеличить - статус сменится на "Действует".
7. При каких условиях промокод получает статус "Истек"?
Когда истек срок годности, или закончилось количество активаций, или и то, и другое.
8. "Удалить" - это архив или безвозвратное удаление?
Безвозвратное удаление. Архив потребовал бы отдельной логики восстановления, что увеличило срок разработки.
9. Можно ли удалить активный промокод, который используется?
Да. У администратора должна быть возможность экстренно остановить промокод.
10. Можно ли редактировать условия активного промокода?
Да, но только срок и кол-во активаций. Остальное нет, потому что пользователи уже могли скопировать код и рассчитывать на определенные условия.
11. Нужно ли уведомлять пользователей об изменении условий и об удалении промокода?
Да, в личном кабинете или в уведомлениях.
12. Пользователь придумывает название сам или автогенерация?
Придумывает сам. Заказчик хотел осмысленные названия, а не случайный набор символов. Автогенерацию посчитали избыточной для первой версии.
13. Что делать при неуникальном названии - предлагать варианты или просто ошибку?
Просто ошибку с сообщением "Такое название уже существует". Предлагать варианты - дополнительная логика, не критичная для первого запуска.
14. По каким причинам администратор блокирует промокод?
По желанию, причины не фиксируем. Блокировка - это ручное действие.
15. Один пользователь может иметь несколько промокодов?
В требованиях нет ограничений, значит может. Вопрос остался открытым, реализовали базовое поведение. Если понадобится ограничение, добавим позже.
16. Можно ли использовать один промокод несколько раз?
Нет, иначе промокод превращается в бесконечную скидку. Одна активация на пользователя.
17. Можно ли передать промокод другому пользователю?
Прямого запрета нет. Промокод не привязан к конкретному пользователю, так как это потребовало бы дополнительной логики. Если появятся злоупотребления, доработаем.
18. Есть ли минимальная сумма для применения промокода?
Нет, в текущих требованиях этого нет. Добавление такой проверки усложнило бы логику расчетов.
19. Совмещается ли скидка по промокоду с другими скидками (при оплате тарифа)?
Да, применяется максимальная из доступных скидок.
20. При разблокировке восстанавливается старый статус, который был до блокировки?
Да, если промокод был действующим, таким и останется (если срок не истек за время блокировки).
21. Какие ограничения по сроку годности промокода?
Срок действия 1 день - 1 год с момента создания. Меньше дня не имеет смысла, больше года системное ограничение, чтобы не копить "вечные" промокоды.
22. Какие ограничения по количеству активаций?
От 1 до 9999 активаций. Больше 10 тысяч - нагрузка на базу.
23. Какие ограничения по длине и формату названия промокода?
3-30 символов. Только латиница, цифры и нижнее подчеркивание (_). Русские буквы, пробелы, спецсимволы и эмодзи запрещены, чтобы не было проблем на бэке и при поиске.
24. Есть ли лимит на количество промокодов для одного менеджера / в системе вообще?
Нет ограничений по количеству на менеджера. Системный лимит - 10 тысяч активных промокодов одновременно. При превышении выдается ошибка и предложение удалить неиспользуемые. Это защита от спама и нагрузки на БД.
25. Как проверяется уникальность названия промокода?
Проверка на бэкенде при создании и редактировании. Название должно быть уникальным среди всех промокодов (не только менеджера, а во всей системе). При попытке создать дубль - ошибка с сообщением. Регистр не учитывается: SUMMER и summer - это одно и то же.
26. Что происходит с промокодом при удалении менеджера?
Промокод остается в системе, но привязка к менеджеру обнуляется. В таблице поле "Партнер" пустое или "Удален".
27. Нужна ли автоматизация создания промокодов?
Для первой версии нет. Только ручное создание через интерфейс. Если клиенты запросят автоматизацию, то добавим.

UserFlow

Прототипы

Контекстное меню
Стандартный вид
Пустое состояние
Фильтр
Поиск без результатов
Поиск с результатами
Выбор 1
Выбор 2
Выбор 3
Экран 10
Экран 11
Экран 12
Экран 13
Экран 14
Экран 15
Экран 16
Экран 17
Экран 18
Экран 19
Экран 20
Экран 21
Экран 22
Экран 23
Экран 24
Экран 25
Экран 26
Экран 27
Экран 28
Экран 29
Экран 30
Экран 31
Экран 32
Экран 33
UserFlow

Условия статусов промокода

СтатусУсловиеПримечание
ДействуетПромокод создан, срок действия не просрочен, лимит активаций не превышен
ИстекПросрочен срок действия И/ИЛИ превышен лимит активацийНаступает автоматически
ЗаблокированПромокод был в любом статусе, блокировка по желанию администратораМожно разблокировать
РазблокированПромокод сохраняет статус, который был до блокировки«Истек» → «Истек»
«Действует» → «Действует», если позволяют срок и лимит

Действия в таблице «Промокоды»

ДействиеСтатус(ы) промокодаТекст уведомления
Удалить (один)Действует«Удалить промокод? Промокод действует прямо сейчас. После удаления он станет недоступен и его нельзя будет восстановить.»
Заблокировать (один)Действует«Заблокировать промокод? Промокод действует прямо сейчас. После блокировки он станет недоступен.»
Удалить (один)Истек / Заблокирован«Удалить промокод? После удаления его нельзя будет восстановить.»
Удалить (несколько)Все «Действует»«Удалить промокоды (N)? Промокоды действуют прямо сейчас. После удаления они станут недоступны и их нельзя будет восстановить.»
Заблокировать (несколько)Все «Действует»«Заблокировать промокоды (N)? Промокоды действуют прямо сейчас. После блокировки они станут недоступны.»
Удалить (несколько)Смешанные«Удалить промокоды (N)? Выбранные промокоды будут удалены и их нельзя будет восстановить. Действующие промокоды станут недоступны.»
Заблокировать (несколько)Смешанные«Заблокировать промокоды (N)? Выбранные промокоды будут заблокированы. Действующие промокоды станут недоступны.»
Разблокировать (несколько)Смешанные«Разблокировать промокоды (N)? Выбранные промокоды будут разблокированы.»

Ошибки и сценарии формы «Создать промокод»

Действие пользователяКакое правило нарушеноТекст ошибки
Не ввел ничегоНет уведомлений
Ничего не ввел, нажал «Создать»Длина названия (пусто)Не соблюдено условие «От 5 до 50 символов»
Ввел название, проверкаУникальностьЕсли уникальный: соблюдено условие
Если неуникальный: не соблюдено условие «Уникальный промокод»
Ввел название более 50 символовДлина >50Не соблюдено условие «От 5 до 50 символов»
Ввел название с русскими буквами/спец.символами/эмодзи (длина 5-50)Недопустимые символыСоблюдено «От 5 до 50», но не соблюдено «Латинские буквы и цифры» и «Без эмодзи, спец.символов и пробелов (кроме _)»
Ввел скидку 0, дробное, отрицательное, >100Не 1–99 целое«Укажите целое число от 1 до 99»
Ввел количество активаций 0 или >9999Не 1–9999«Укажите число от 1 до 9 999»
Ввел срок действия раньше сегодняРаньше сегодня«Срок действия не должен заканчиваться ранее сегодняшнего дня»
Ввел срок действия более 5 летБольше 5 лет«Срок действия не должен быть более 5 лет»
Все поля валидны, нажал «Создать»«Промокод успешно создан»

Пограничные и системные ошибки при создании промокода

СценарийТекст ошибки (тост)Действие системы
Другой администратор параллельно создал промокод с таким же названием (race condition)«Промокод с таким названием уже существует. Придумайте другой.»Toast на экране всех промокодов
Потеря соединения с интернетом во время создания«Нет соединения с интернетом. Промокод не сохранен. Проверьте подключение и повторите попытку.»Toast на экране всех промокодов
Сервер не отвечает (таймаут более 30 секунд)«Сервер не отвечает. Попробуйте позже или обратитесь в поддержку.»Toast на экране всех промокодов
Внутренняя ошибка сервера (500)«Произошла техническая ошибка. Промокод не создан. Мы уже работаем над исправлением.»Логирование ошибки, показ кода обращения в поддержку
У пользователя нет прав на создание промокодов«У вас недостаточно прав для создания промокодов. Обратитесь к администратору.»Toast на экране всех промокодов
Превышен лимит активных промокодов в системе«Достигнут лимит активных промокодов (1000). Удалите неиспользуемые перед созданием новых.»Toast на экране всех промокодов. Блокировка кнопки "Создать"
Некорректный формат данных от сервера«Не удалось обработать ответ сервера. Попробуйте обновить страницу.»Toast на экране всех промокодов
Сессия истекла (пользователь вышел из системы)«Ваша сессия истекла. Пожалуйста, войдите снова для создания промокода.»Перенаправление на страницу входа, с сохранением введенных данных
Блокировка создания из-за технических работ (плановый даунтайм)«Система на техническом обслуживании до [время]. Создание промокодов временно недоступно.»Показ уведомления на экране промокодов, указание планового времени окончания работ

Результат

Раздел был полностью согласован клиентом без правок и передан в разработку. Минимизировалось кол-во ошибок и проблемных сценариев, которые бы привели к повторным задачам и правкам. Появилась продуманная система управления промокодами, включающая:

  • Чёткую статусную модель с правилами автоматических и ручных переходов
  • Полную обработку всех сценариев и массовых действий
  • Детальное описание ошибок и валидаций
  • Готовые прототипы и документацию
Made on
Tilda