Автомобиль возвращают в 12:00, а следующая аренда начинается в 12:00. На бумаге интервалы не пересекаются. На площадке машину ещё нужно осмотреть, сфотографировать и подготовить к выдаче. Поэтому проверка доступности начинается с двух вопросов: что именно занимает время автомобиля и как система сравнивает эти интервалы.
Ниже — учебный разбор для владельца автопроката, администратора и разработчика. Все обозначения машин и броней вымышленные. Это не история внедрения у клиента и не обещание, что конкретная CRM автоматически выполняет каждую из описанных проверок.
1. Сначала определите ресурс
Проверять нужно конкретный автомобиль, а не только модель. Две одинаковые машины могут выдаваться одновременно разным клиентам. Две записи на один автомобиль — уже возможный конфликт. В таблице или системе каждой машине нужен устойчивый идентификатор, который не меняется при переименовании карточки.
Возьмём машину A-01. Бронь B-01 начинается 10 октября в 10:00 и заканчивается 12 октября в 12:00. Если следующая запись относится к A-02, совпадение дат не является конфликтом A-01. Если к A-01 — сравниваем сроки.
2. Договоритесь о границах интервала
Удобная техническая модель — интервал, в котором начало включено, а конец исключён: [начало, конец). При такой модели запись до 12:00 и запись с 12:00 формально не пересекаются. Но эта договорённость подходит только тогда, когда время подготовки уже учтено отдельно.
Для двух интервалов A и B проверка выглядит так: начало A меньше конца B И начало B меньше конца A. Если оба условия выполнены, есть пересечение. Простая проверка «дата начала новой брони попала внутрь старой» недостаточна: новая аренда может полностью охватить старую и начаться раньше неё.
Пример 1. B-02: 12 октября, 11:30–15:00. Она пересекается с B-01 на полчаса.Пример 2. B-03: 9 октября, 09:00 — 13 октября, 09:00. Она полностью охватывает B-01, хотя начинается вне её срока.Пример 3. B-04: 12 октября, 12:00–15:00. По выбранной модели прямого пересечения нет. Остаётся проверить подготовку.
3. Добавьте время, когда машина занята вне договора
Если после возврата нужен час на осмотр и подготовку, ресурс занят до 13:00. B-04 тогда нельзя считать свободной выдачей в 12:00. В рабочей модели полезно различать срок аренды и срок занятости автомобиля. Иначе час подготовки приходится каждый раз держать в голове.
Продолжительность подготовки зависит от процесса проката. Час в примере — условное число, а не рекомендация для любого бизнеса. Перегон между точками, мойка или ремонт могут потребовать другого времени. Важно, чтобы выбранное правило было видно сотрудникам и одинаково применялось при новой записи и при переносе существующей.
4. Решите, какие состояния блокируют машину
Отменённая запись обычно не должна занимать ресурс так же, как подтверждённая. Но временная бронь может удерживать машину, пока клиент завершает оформление. Это решение нужно зафиксировать: какие состояния считаются занятостью, сколько действует удержание и кто может его снять.
В проверочный набор стоит включить отмену, перенос на другую машину и изменение срока. После переноса старый автомобиль должен освобождаться по принятому правилу, а новый — проверяться заново. Простого добавления новой строки недостаточно, если старая продолжает выглядеть активной.
5. Повторите проверку перед сохранением
Два сотрудника могут открыть свободный автомобиль одновременно. Оба увидят доступность, а затем почти одновременно сохранят разные брони. Проверка только в интерфейсе не решает такую ситуацию. Разработчику нужно обеспечить согласованное сохранение на сервере: конкретный способ зависит от базы данных и устройства приложения.
Это требование к проектированию и тестированию, а не утверждение о механизме AUTO555. Проверять его лучше отдельно: создать две конкурирующие записи в тестовой среде и убедиться, что обе не подтверждаются на один ресурс в пересекающиеся сроки.
6. Проверьте понятность отказа
Сообщение «ошибка» не объясняет, что произошло. Полезный отказ показывает автомобиль, конфликтующую запись и время, которое уже занято. Тогда оператор может предложить другую машину или другой срок, не перебирая весь список вручную.
На скриншоте показан реальный список броней в демо AUTO555. Он помогает рассмотреть состав данных: автомобиль, арендатор, даты, стоимость и статус. Сам по себе снимок не доказывает, как устроена серверная проверка пересечений. Демонстрационные записи вымышленные.
Что проверить перед переходом из таблицы
Составьте маленький набор из шести ситуаций: частичное пересечение, полное вложение, соприкосновение границ, подготовка после возврата, отмена и одновременное сохранение. Для каждой заранее запишите ожидаемый результат. Такой набор помогает обсуждать систему на языке своего процесса, а не только по виду календаря и списку функций.
Автор: Виталий Левицкий, «Левицкий Концепт», разработчик AUTO555. Сайт продукта: https://auto555.ru/. Публичная демонстрация с учебными данными: https://app.auto555.ru/demo. В статье приведён общий способ проверки интервалов; наличие конкретной автоматической проверки в выбранной системе нужно проверять отдельно.
