Процесс
Бронирование: hold, оплата и календарь
Бронь создаётся только после атомарной проверки интервала и подтверждённой оплаты. Hold освобождается по тайм-ауту, а позднее платёжное событие не создаёт конфликт.
Последовательность
Основной и альтернативный потоки
Схема показывает только ключевые события; детали ошибок перечислены ниже.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Все действия на портале демонстрационные. Внешние системы не вызываются.
Состояния
Машина состояний
Недопустимые переходы должны блокироваться проверками, а не только интерфейсом.
На узком экране прокручивается по горизонтали
Отрисовываем схему…
Неопределённый результат команды не должен превращаться в успех.
Шаги процесса
1
Выбор интервала
Пользователь выбирает дату, начало и длительность; система строит слоты с шагом и буфером.
Актор: Водитель
2
Проверка конфликтов
Проверяются подтверждённые брони, технические окна и доступность порта.
Актор: Backend
3
Создание hold
Слот временно удерживается, возвращается срок действия и цена.
Актор: Backend
4
Демонстрационная оплата
Пользователь видит успех, отказ или ожидание; реальный платёж не выполняется.
Актор: Водитель
5
Атомарное подтверждение
При активном hold и свободном слоте создаются бронь, платёж и проводка.
Актор: Backend
6
Позднее событие
Если слот уже занят, создаётся возврат/сверка, а не вторая бронь.
Актор: Backend
Правила
- Один интервал порта — одна подтверждённая бронь.
- Технический буфер 15 минут — рабочее допущение.
- Hold не блокирует слот бесконечно.
- Возврат из платёжной страницы не считается подтверждением.
- До D02 автоматическое удержание за неявку выключено.
Отказы и граничные случаи
| Случай | Поведение | Денежный эффект | Тест |
|---|---|---|---|
| Две заявки одновременно | Одна подтверждается, вторая получает SLOT_CONFLICT и не теряет средства. | Нет списания у проигравшего. | AT-02 |
| Hold истёк до webhook | Слот освобождён; поздний платёж уходит на возврат/сверку. | Возврат или сверка, без второй брони. | AT-02, AT-04 |
| Оплата отклонена | Бронь не создаётся, hold остаётся активным до истечения. | Нет проводки. | AT-03 |
Платежи: пополнение, резервы и возвраты