Планирование
Планирование — движок бронирования. Он отвечает на один вопрос: занят ли ресурс в этот интервал. На нём стоит и запись клиента к мастеру, и аренда оборудования, и групповое занятие, и заселение в номер.
Модуль Календарь — интерфейс поверх этого движка: визуальное расписание с перетаскиванием. Сам движок отвечает за правила и целостность.
Ресурс
Ресурс — то, что бронируется. Четыре типа:
| Тип | Что это | Пример |
|---|---|---|
staff | Человек | Мастер, врач, тренер |
seat | Место | Кресло, столик, кабинет |
unit | Юнит | Номер, коворкинг-место |
equipment | Оборудование | Инструмент, велосипед, техника |
У ресурса настраиваются:
- Вместимость — 1 для индивидуального, N для группового занятия;
- Рабочие окна — по дням недели, когда ресурс вообще доступен;
- Буфер — сколько минут нужно между бронями (уборка, подготовка);
- Минимальная длительность брони;
- Навыки и услуги — какие услуги ресурс оказывает. Если список пуст, ресурс универсален; как только в нём появилась хоть одна услуга, записывать можно только на неё.
Бронь
Бронь — интервал на ресурсе. Её статус: создана, подтверждена, состоялась, клиент не пришёл, отменена.
Источник брони фиксируется отдельно: завёл сотрудник, клиент записался сам по публичной ссылке или бронь пришла из интеграции. Это нужно, чтобы понимать, откуда приходит поток.
Бронь может ссылаться на клиента, услугу каталога, сделку и объект обслуживания. Ничего из этого не обязательно: минимальная бронь — это ресурс и интервал.
Мультиресурсные брони
Одна запись может занимать несколько ресурсов сразу — например, мастера и кресло. Основной ресурс хранится в самой брони, остальные добавляются к ней списком. Проверка занятости идёт по всем.
Групповые занятия
Если вместимость ресурса больше единицы, к брони добавляются участники со своими статусами: записан, пришёл, не пришёл, отменил. Так ведутся групповые тренировки и мастер-классы.
Повторы
Регулярные записи описываются правилом повторения: занятие каждый вторник, ТО раз в квартал. Из правила брони генерируются на горизонт вперёд; серию можно ограничить датой окончания.
Тарифы
Цена брони считается по тарифам. Тариф задаёт цену за час, за сутки или фиксированную за бронь и может быть привязан к ресурсу, к услуге либо к их паре. Сезонный тариф ограничивается датами.
Когда под бронь подходит несколько тарифов, выбирается самый специфичный из действующих, а при равенстве — с наибольшим приоритетом. Это позволяет держать базовый прайс и накрывать его сезонными исключениями, ничего не переписывая.
Предоплата и неявки
Чтобы бороться с неявками, у брони есть депозит со своим состоянием: не требуется, требуется, получен, возвращён, удержан. Удержанный депозит уходит в прочие доходы — это отдельная операция, а не «потерянные» деньги.
Прокат
Для аренды бронь дополняется выдачей и возвратом. Обе операции атомарны: два сотрудника не выдадут один и тот же экземпляр дважды. При возврате депозит либо возвращается, либо удерживается, а сама аренда может превратиться в продажу.
Лист ожидания
Если свободных слотов нет, клиент попадает в лист ожидания на ресурс и интервал. Когда слот освобождается, видно, кому его предложить.
Уборка
Для юнитов ведётся состояние уборки: готов, требует уборки, в работе. Задачи на уборку создаются автоматически после выезда и не дают заселить неподготовленный номер.
Связь с другими модулями
- Календарь — визуальное расписание и перетаскивание броней.
- Каталог — услуга задаёт длительность и цену.
- Клиенты — история записей и напоминания.
- Касса — оплата брони чеком.
- Сделки — выезд мастера как бронь на исполнителе.
Типовые сценарии
- Записать клиента к конкретному мастеру с учётом его навыков и буфера.
- Поставить регулярное занятие на весь сезон одним правилом.
- Выдать оборудование в прокат под залог и принять обратно.
- Поднять тариф на выходные, не трогая будни.