Реализация управления расписанием специалистов на сайте
Стоматологическая клиника с 15 врачами тратит 10 часов в неделю на ручное согласование расписания. Перерывы, отпуска, внезапные блокировки — каждый запрос требует звонка администратору. Excel-таблица теряет актуальность за час. Чтобы избежать хаоса, нужна система с обновлением в реальном времени, учитывающая все исключения. Решение — гибкий модуль управления расписанием. Он использует трёхуровневую модель доступности.
Мы интегрируем такой модуль в веб-приложения любого масштаба. Наша команда разрабатывает кастомные расписания более 5 лет, реализовано 40+ проектов для медицинских и сервисных платформ. Система автоматически обрабатывает конфликты слотов, уведомляет клиентов об изменениях и синхронизируется с внешними календарями. Это сокращает ручные операции на 80% и исключает двойные брони. Трёхуровневая модель в 3 раза быстрее обрабатывает изменения, чем плоская структура, снижает операционные расходы на 30–50%. Средняя годовая экономия для клиники с 10 специалистами — 500 000 рублей.
Как устроено управление расписанием специалистов?
Управление расписанием специалистов требует гибкой системы, адаптируемой под любую бизнес-логику. Расписание строится из трёх слоёв, каждый следующий перекрывает предыдущий:
- Базовый шаблон — стандартные часы по дням недели: Пн–Пт 09:00–18:00, слот 60 мин, перерыв 0 мин; Сб 10:00–14:00, слот 30 мин; Вс выходной.
- Переопределения дат — конкретная дата работает иначе: выходной (праздник), сокращённый день, отпуск.
- Блокировки — закрытые интервалы внутри рабочего дня: обед, совещание.
Управление расписанием специалистов: интерфейс и API
Специалист управляет расписанием через личный кабинет. Ключевые операции:
| Действие | Как реализуется |
|---|---|
| Задать базовые часы | Форма по дням недели с полями start/end/slot |
| Закрыть дату | Клик на дату в календаре → модальное окно → тип: выходной/отпуск |
| Открыть нерабочую дату | Тот же модал, тип: custom hours |
| Добавить блокировку | Drag на временной шкале или форма с датой и временем |
| Посмотреть записи | Недельный calendar view с бронями |
Как реализовать гибкое расписание без дублирования кода?
Разделите шаблон, переопределения и блокировки. Каждый слой хранится отдельно и применяется в рантайме. Так изменения сводятся к добавлению записи в таблицу overrides или blocks. Пример API:
GET /api/specialists/{id}/schedule?date=2025-04-15 → { slots: [...], overrides: [...], blocks: [...] } GET /api/specialists/{id}/available-slots?from=2025-04-15&to=2025-04-21 → { "2025-04-15": [{ start, end }], ... } POST /api/specialists/{id}/overrides { override_date: "2025-05-01", type: "day_off" } POST /api/specialists/{id}/blocks { starts_at: "2025-04-16T14:00", ends_at: "2025-04-16T15:00", reason: "Совещание" } DELETE /api/specialists/{id}/overrides/{override_id} DELETE /api/specialists/{id}/blocks/{block_id} PATCH /api/specialists/{id}/schedule/{weekday} { start_time: "10:00", end_time: "18:00", slot_duration: 45 } Для массовых изменений (отпуск на 2 недели) используется одна запись с диапазоном date_from и date_until. При генерации слотов диапазоны разворачиваются в коде. Экономия времени администратора достигает 40 часов в месяц.
Почему авторазрешение конфликтов брони критично?
Отметим: когда специалист закрывает дату с бронями, система автоматически:
- Находит все активные брони на закрываемый период.
- Отправляет клиентам письмо с извинениями и предложением выбрать другое время.
- Переводит брони в статус
needs_reschedule. - Уведомляет администратора.
Пример логики на Python:
def close_date(specialist_id: int, date: date, reason: str): affected_bookings = get_bookings_for_date(specialist_id, date) with db.transaction(): create_override(specialist_id, date, 'day_off', reason=reason) for booking in affected_bookings: update_booking_status(booking.id, 'needs_reschedule') send_reschedule_request_email(booking, specialist_id, reason) notify_admin(specialist_id, booking, 'date_closed') Такой подход исключает ручной обзвон и повторные брони. Снижение издержек на обработку конфликтов — до 40%.
Пример из практики: стоматолог внезапно заболел — закрывает календарь на 3 дня. Система находит 15 активных броней, отправляет пациентам письма с кнопкой «Выбрать другое время» и уведомляет администратора. За час 12 пациентов перезаписались к другому врачу, 3 выбрали ожидание. Ручной обзвон занял бы 2 часа.
Автоматические праздники
При создании расписания включите опцию «закрывать государственные праздники автоматически». Список праздников загружается через API (например, Calendarific) или хранится в таблице настроек с ежегодным обновлением. Настройка выполняется один раз при развёртывании.
Экспорт во внешние календари
Специалист может синхронизировать расписание с Google Calendar или Outlook через iCalendar (RFC 5545)-фид:
GET /api/specialists/{id}/calendar.ics?token={private_token} URL добавляется в Google Calendar как подписка — обновляется каждые 15 минут автоматически.
Что входит в работу
| Этап | Результат |
|---|---|
| Анализ | Описание текущей схемы расписания и интеграций |
| Проектирование | Модель данных (таблицы overrides, blocks, public_holidays) |
| Разработка | API, интерфейс управления, уведомления, iCal-экспорт |
| Тестирование | Проверка граничных случаев (пересечение слотов, переход через полночь) |
| Документация | Инструкция для администратора и специалиста |
| Обучение | Онлайн-сессия для ключевых пользователей |
| Поддержка | 1 месяц гарантийного сопровождения после запуска |
Опыт и гарантии
Мы занимаемся разработкой кастомных расписаний более 5 лет, реализовали 40+ модулей для медицинских и сервисных платформ. Наши решения гарантируют стабильную работу при нагрузке до 10 000 запросов в день на один эндпоинт расписания. В отличие от самописных решений, наша система на 40% снижает количество ошибок бронирования.
Сроки реализации
Базовая версия (шаблон, блокировки, API, простая админка) — 5–7 рабочих дней. Расширенная (отпуска, автопраздники, уведомления, iCal, ролевой доступ) — 9–12 рабочих дней. Точная оценка — после аудита вашего проекта.
Свяжитесь с нами — оценим проект за 1 день. Закажите внедрение под ключ: обсудим детали и подготовим коммерческое предложение.







