Почти любая сущность в системе живёт по статусам: заявка, заказ, документ, платёж. Если статусную модель не описать, появляются вопросы в духе “а почему отменённый заказ снова стал ‘В работе’?”.
✅ Из чего состоит статусная модель
🔵список статусов и что каждый означает
🔵разрешённые переходы между статусами
🔵кто или что запускает переход (пользователь, система, интеграция, таймер)
🔵условия перехода
🔵что происходит при переходе (уведомление, списание, запись в историю)
✅ Пример: заказ в интернет-магазине
Статусы: NEW → PAID → IN_DELIVERY → DELIVERED
Отдельные ветки:
🔵NEW → CANCELLED (клиент отменил или не оплатил)
🔵PAID → CANCELLED (отмена с возвратом денег)
Описание одного перехода:
🔵Переход: NEW → PAID
🔵Кто: платёжный сервис
🔵Условие: получен успешный статус оплаты
🔵Что происходит: клиенту уходит email с чеком, заказ передаётся на склад
✅ Как оформить
🔵таблица переходов в Confluence: из какого статуса, в какой, кто, условие, действия
🔵диаграмма состояний (UML State Machine) в Miro или draw.io для наглядности
Таблица удобна разработчикам и тестировщикам, диаграмма - для обсуждения с бизнесом.
✅ Вопросы, которые стоит задать
🔵Какие статусы финальные и из них нельзя выйти?
🔵Можно ли вернуться на шаг назад? Кто это может сделать?
🔵Что если сущность “зависла” в статусе? Нужен ли автоматический переход?
🔵Видит ли клиент те же статусы, что и сотрудник, или у него упрощённые названия?
🔵Какие отчёты, уведомления и интеграции завязаны на статусы?
Пример автоматического перехода:
Если заказ в статусе NEW не оплачен 30 минут, система переводит его в CANCELLED и снимает резерв товара.
❗️ Частые ошибки
🔵статусы смешаны с признаками: “Срочный” - это не статус, а атрибут
🔵описаны только разрешённые переходы, а запрещённые никто не проверяет
🔵в разных системах один статус называется по-разному
🔵нет таймаутов, и сущности годами висят в промежуточных статусах
💡 Итог: статусная модель - это скелет логики системы. Когда переходы, условия и действия описаны заранее, разработка идёт без сюрпризов, а отчёты и уведомления работают предсказуемо.