Определите, что именно занимает клиент
Онлайн-запись начинается с правил занятости, а не с вида календаря. Услуга может требовать сотрудника, кабинета, оборудования или нескольких ресурсов одновременно. Для условного учебного центра индивидуальное занятие занимает преподавателя и аудиторию; групповое — ещё и одно из доступных мест. Это примеры для обсуждения, а не результаты выполненных проектов. Для каждой услуги запишите длительность, необходимые ресурсы, перерывы до и после, допустимое количество участников и рабочие часы. Уточните, может ли администратор делать исключения. Если эти правила остаются только в голове сотрудника, красивый календарь будет показывать время, которое бизнес не всегда способен предоставить.
Различайте свободное время, удержание и подтверждение
Показанный свободный интервал ещё не означает созданную запись. Пока клиент вводит контакты, другой человек или администратор может выбрать то же время. Поэтому нужно определить момент, когда место действительно закрепляется, и сообщение для клиента, которому оно уже недоступно. Если используется временное удержание, согласуйте его срок и условия освобождения. Если запись требует подтверждения сотрудника, прямо назовите её предварительной. Не смешивайте ожидание ответа и подтверждённый визит. Полезно нарисовать переходы: запрос, подтверждение, перенос, отмена, завершение и неявка. Для каждого перехода укажите, кто его выполняет и освобождает ли он ресурс.
Проверяйте конкуренцию за одно место
Ключевой приёмочный сценарий: два человека почти одновременно выбирают последний свободный интервал. Ожидаемый результат должен быть определён заранее: только одна подтверждённая запись, второй клиент видит понятное предложение выбрать другое время. Проверка занятости лишь на открытой странице для этого недостаточна. Документация PostgreSQL описывает ограничения данных, включая уникальность и ограничения исключения. Конкретную защиту от пересекающихся записей разработчик выбирает под модель ресурса. В требованиях владельцу достаточно зафиксировать правило: система не подтверждает несовместимые записи, даже когда запросы приходят одновременно. Для группы проверяется допустимое число участников, а не просто уникальность времени начала.
Согласуйте время, которое увидит каждый участник
Для очной услуги логично явно показывать время места проведения. Для онлайн-встречи клиент может находиться в другой стране. Запишите, какую временную зону использует расписание, как она обозначается в форме и что попадёт в подтверждение. Не оставляйте одинокое «15:00», если его можно понять по-разному. IANA поддерживает базу временных зон и обновляет её при изменении правил местного времени. В проекте полезно использовать именованные зоны и поддерживать эти данные актуальными. Отдельно проверьте встречи, которые для участников приходятся на разные календарные даты. Русская и узбекская версии должны одинаково ясно показывать дату, время и место услуги.
Опишите отмену и перенос как отдельные операции
Для переноса нужно проверить новое время и согласованно изменить старую запись. Нежелателен промежуточный результат, при котором прежнее место уже потеряно, а новое получить не удалось. Определите, сохраняется ли первоначальная запись при неуспешном переносе, и как клиент узнаёт окончательный результат. Укажите, кто может отменять визит, когда освобождается место и кому отправляется уведомление. Правила предоплаты и возврата, если они нужны, согласуйте отдельно; календарь сам их не определяет. Напоминания должны опираться на актуальную запись: после отмены не следует отправлять приглашение на прежнее время. История изменений поможет администратору разобраться, кто и что изменил.
Подготовьте проверку перед открытием записи
Соберите небольшой набор испытаний: одновременный выбор последнего места, повторное нажатие подтверждения, перенос на занятое время, отмена перед напоминанием, выходной сотрудника и участники из разных временных зон. Проверьте также ручную запись администратором: она должна учитывать те же ограничения ресурсов. Назначьте человека, который меняет расписание и разбирает спорные ситуации. Решите, где сотрудники увидят актуальные записи при недоставленном уведомлении. Для обсуждения сервиса со мной подготовьте список услуг и несколько сложных ситуаций из своего процесса без персональных данных клиентов. По ним можно определить модель расписания, нужные состояния записи и понятные критерии приёмки.
Вопросы заказчиков
Можно ли записывать клиентов и через сайт, и вручную?
Да, если оба способа используют общий учёт занятости и одинаковые правила ресурсов. Отдельная несинхронизированная таблица создаёт риск противоречий.
Нужна ли временная бронь при заполнении формы?
Это зависит от сценария. Если она нужна, определите срок, условия продления и освобождения. Для короткой формы можно рассмотреть проверку и закрепление места при подтверждении.
Нужно ли сразу подключать оплату?
Только если она необходима для вашего процесса. Платёж добавляет отдельные состояния и ошибки, поэтому его связь с подтверждением и отменой записи нужно описать явно.
