Привет, я Наталия

Портфолио: Промокоды в B2B | UX/UI проект
2026
Промокоды. Нужно было спроектировать раздел управления промокодами в личном кабинете — для администраторов и менеджеров. Пользователи системы: компании, финансовые организации, партнеры (банки, факторинговые и инвестиционные компании).
Задача
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 000 активных промокодов. При превышении — ошибка и предложение удалить неиспользуемые.
25. Как проверяется уникальность названия промокода?
Проверка на бэкенде. Название должно быть уникальным во всей системе, не только у конкретного менеджера. Регистр не учитывается: SUMMER и summer — одно и то же.
26. Что происходит с промокодом при удалении менеджера?
Промокод остается в системе, привязка к менеджеру обнуляется. В таблице поле "Партнер" будет пустым или с пометкой "Удален".
27. Нужна ли автоматизация создания промокодов?
Для первой версии нет, только ручное создание. Автоматизацию добавим, если клиенты запросят.
28. Зачем блокировать истекшие промокоды?
Блокировать истекший промокод — избыточное действие, он и так уже не работает.

UserFlow

Прототипы

Контекстное меню
Стандартный вид
Пустое состояние
Фильтр
Поиск без результатов
Поиск с результатами
Выбор 1
Выбор 2
Выбор 3
Экран 10
Экран 11
Экран 12
×

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

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

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

ДействиеСтатус(ы) промокодаТекст уведомления
Удалить (один)Действует"Удалить промокод? Промокод действует прямо сейчас. После удаления он станет недоступен и его нельзя будет восстановить."
Заблокировать (один)Действует"Заблокировать промокод? Промокод действует прямо сейчас. После блокировки он станет недоступен."
Удалить (один)Истек / Заблокирован"Удалить промокод? После удаления его нельзя будет восстановить."
Удалить (несколько)Все "Действует""Удалить промокоды (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 на экране всех промокодов
Сессия истекла (пользователь вышел из системы)"Ваша сессия истекла. Пожалуйста, войдите снова для создания промокода."Перенаправление на страницу входа, с сохранением введенных данных
Блокировка создания из-за технических работ (плановый даунтайм)"Система на техническом обслуживании до [время]. Создание промокодов временно недоступно."Показ уведомления на экране промокодов, указание планового времени окончания работ

Результат

Раздел согласован клиентом без правок и ушел в разработку. Удалось заранее закрыть сценарии, которые иначе всплыли бы уже на стороне разработчиков. В итоге получилась рабочая система:

  • ✓ С четкой статусной моделью и правилами переходов
  • ✓ С покрытыми массовыми действиями и пограничными сценариями
  • ✓ Со спецификацией валидаций и ошибок
  • ✓ С прототипами и документацией для разработки

Другие проекты

Редизайн личного кабинета
Дашборд для финансового аналитика
Онбординг B2B-клиентов