Процесс
Инциденты и восстановление
Неопределённость — отдельное состояние, а не успех. Каждый случай имеет денежный эффект, событие аудита, восстановление и тест.
Последовательность
Основной и альтернативный потоки
Схема показывает только ключевые события; детали ошибок перечислены ниже.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Все действия на портале демонстрационные. Внешние системы не вызываются.
Состояния
Машина состояний
Недопустимые переходы должны блокироваться проверками, а не только интерфейсом.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Неопределённый результат команды не должен превращаться в успех.
Шаги процесса
1
Обнаружение
Тайм-аут, расхождение, ошибка кассы, устаревшая телеметрия или ролевой отказ.
Актор: Система
2
Классификация
Тип, важность, связанный объект и correlation ID.
Актор: Backend
3
Безопасное состояние
Запрет опасных действий, сохранение денежного следа и истории.
Актор: Backend
4
Разбор
Оператор/поддержка видят временную шкалу и связанные записи.
Актор: Оператор
5
Восстановление
Повтор безопасной операции, сверка или компенсирующая запись.
Актор: Оператор
6
Закрытие
Причина, действие и результат попадают в аудит.
Актор: Система
Правила
- Не превращать неопределённость в успешное состояние.
- Не терять денежный след.
- Не повторять внешнюю команду без проверки предыдущего результата.
- Не менять исторический расчёт.
- Сохранять ID и контекст для поддержки.
Отказы и граничные случаи
| Случай | Поведение | Денежный эффект | Тест |
|---|---|---|---|
| Клиент не получил ответ Start | Проверить состояние до повторной команды. | Резерв не списывается без подтверждения. | AT-05 |
| Ошибка кассы | История сохранена, чек в очереди. | Списание сохранено, документ дорабатывается. | AT-11 |
| Попытка действия вне роли | FORBIDDEN, действие не меняет состояние. | Нет изменений. | AT-12 |
| Порт выведен из эксплуатации | Инцидент, проверка будущих броней, уведомление. | Возвраты по правилам D02. | AT-10, AT-12 |
Каталог отказов
| Событие | Состояние | Запрещено | Восстановление | Тест |
|---|---|---|---|---|
| Телефон потерял сеть во время активной зарядки | ACTIVE на сервере | Считать сессию завершённой | После сети запросить серверное состояние | AT-09 |
| Backend временно недоступен | Неизвестно | Показывать успех | Повторить безопасно, показать correlation ID | AT-05 |
| CSMS не отвечает на Start | COMMAND_PENDING | Создавать вторую команду | Проверить состояние команды | AT-05 |
| Статус порта устарел | STALE | ACTIVE/Start | Обновить статус, поддержка | AT-05 |
| QR относится к другому порту | Проверка | Запуск | Выбрать порт вручную | AT-05 |
| Несовместимый разъём | Проверка | Start | Другой автомобиль/порт | AT-05 |
| Две заявки на один интервал | SLOT_CONFLICT | Двойное подтверждение | Одна бронь, вторая без списания | AT-02 |
| Hold истёк перед webhook | EXPIRED | Создавать конфликтующую бронь | Возврат/сверка | AT-04 |
| Платёж подтверждён, слот занят | RECONCILIATION | Вторая бронь | Возврат, инцидент | AT-04 |
| Повторный webhook | CONFIRMED | Новая проводка | Идемпотентный ответ | AT-04 |
| Повторный Start/Stop | Активная операция | Дубль команды | Вернуть существующий результат | AT-04 |
| Stop при разрыве сети | STOP_REQUESTED | FINISHED без подтверждения | Проверить состояние | AT-08 |
| Финальные измерения задержались | STOPPING | Подставлять сумму | Ожидание/сверка | AT-08 |
| Счётчик не растёт или расходится | ACTIVE/STOPPING | Считать успешным | Инцидент и сверка | AT-08 |
| Приложение переустановлено | ACTIVE | Терять сессию | Восстановить после входа | AT-09 |
| Push отключён | Событие есть | Скрывать in-app | In-app уведомление | AT-13 |
| Предыдущая машина занимает место | AWAITING_RELEASE | Зелёный «свободно» | Предупреждение/поддержка | AT-10 |
| Касса вернула ошибку | FINISHED, receipt error | Удалять сессию | Очередь повтора | AT-11 |
| Платёж в промежуточном статусе | PENDING | Зачислять баланс | Проверка webhook | AT-03 |
| Администратор вне роли | FORBIDDEN | Выполнять действие | Отказ и аудит | AT-12 |
| Тариф меняется во время сессии | ACTIVE | Переписывать снимок | Будущая версия | AT-12 |
| Поддержка меняет проводку | FORBIDDEN | Редактировать историю | Эскалация администратору | AT-12 |
| Порт выведен при будущей брони | MAINTENANCE | Игнорировать бронь | Инцидент, связь с клиентом | AT-10 |