/База знаний

Работа с визитами

Записи поступают с витрины автоматически или создаются вручную. Все записи одного клиента в один день объединены в визит — это посещение заведения, в которое могут входить одна или несколько услуг.

Что такое визит

Визит — это посещение клиентом заведения в один бизнес-день. Может содержать одну услугу (стрижку) или несколько подряд (стрижку + бороду + укладку). Все услуги визита идут одной строкой в инбоксе и на странице визита, но имеют независимые статусы — одну услугу можно подтвердить, другую оставить в ожидании, третью отменить, и визит при этом продолжает существовать.

Бизнес-день учитывает overnight-смены: если филиал работает с 18:00 до 04:00, то запись на 02:00 относится к «вчерашнему» бизнес-дню. Это автоматика — админу не нужно об этом думать.

Один визит = один день, один филиал, один клиент. Нельзя положить в визит услуги на разные даты или в разные филиалы. Если клиент хочет услугу сегодня и завтра — это два разных визита.

Фильтр по филиалу

В мульти-филиальном тенанте глобальный селектор филиала в сайдбаре фильтрует все экраны раздела «Запись» — таймлайн, список визитов, страницу мастеров и счётчик «Новые» в инбоксе. Переключение филиала немедленно перезагружает данные. Опция «Все филиалы» показывает сводку по всем точкам.

При создании визита филиал выбирается в самом редакторе (отдельный селект рядом с датой) — по умолчанию подставляется текущий филиал из сайдбара. После сохранения визит фиксируется за выбранным филиалом, в режиме редактирования поле становится readonly. Перенести визит в другой филиал пока нельзя (планируется отдельной фичей).

Просмотр визитов

Раздел Запись содержит два вида отображения:

Расписание — таймлайн на день. Колонки — исполнители, строки — временные слоты. Кликните на блок записи — откроется страница визита с этой услугой. Кликните на пустую ячейку — откроется форма создания нового визита с предзаполненной датой, слотом и исполнителем.

На таймлайне:

  • Красная линия с маркером показывает текущий момент. На «сегодняшней» дате таймлайн при открытии автоматически прокручивается так, чтобы линия оказалась по центру. При уходе на карточку визита и возврате назад позиция прокрутки сохраняется.
  • Цвет карточки записи соответствует цвету категории её услуги (настраивается в Услуги → Категории). Карточка показывает время записи (например, 12:30 – 13:45), услугу и категорию; на более высоких карточках добавляются имя клиента, телефон и заметки — чем длиннее запись, тем больше деталей помещается. Неподтверждённые записи полупрозрачны (полупрозрачность сильнее у отменённых).
  • Затенённые слоты — нерабочее время мастера или прошедшие на сегодня моменты (записать в прошлое нельзя).
  • Полоски-«срез» — отдельные нерабочие слоты (например, обеденный перерыв исполнителя).
  • Блок «Отпуск» / «Больничный» / «Обучение» / «Отсутствие» — если у исполнителя на эту дату стоит период отсутствия (карточка сотрудника → вкладка «График» → «Отпуска и отсутствия»), его колонка целиком закрыта блоком с типом и заметкой. Запись на эту дату нельзя ни создать, ни перетащить.
  • Перенос записи мышью (drag & drop) — потяните блок записи на другой слот / другого мастера. Перед сохранением откроется подтверждение «Перенести запись?» с текущим и новым временем — клик «Подтвердить» применяет перенос. Запись с проверкой пересечений и компетенций мастера: если мастер не работает в это время или новый исполнитель не выполняет эту услугу — таймлайн подсветит причину прямо в области переноса. Перенос внутри одного бизнес-дня; для переноса на другой день используйте редактор визита.

Записи — единый инбокс визитов и заявок. Фильтрующие пилюли:

Фильтр Что показывает
Новые Визиты, в которых есть хотя бы одна услуга со статусом «Новая» + заявки «Новая» / «В работе»
Сегодня Визиты с бизнес-днём = сегодня
Неделя Визиты с бизнес-днём в ближайшие 7 дней
Архив Визиты, в которых ВСЕ услуги отменены + заявки «Конвертирована» / «Отклонена»
Все Все визиты и заявки без фильтра по статусу

Нажмите на строку — откроется страница визита или заявки.

Статусы визита и услуг

Статус услуги (отдельной строки в визите):

Новая
Подтверждена
Завершена
Отменена
Статус Когда устанавливается
Новая Услуга только поступила с витрины
Подтверждена Менеджер нажал «Подтвердить»
Завершена Услуга выполнена
Отменена Услуга отменена клиентом или администратором

Статус визита в инбоксе — это агрегат по услугам:

Требует обработки
Подтверждена
Частично
Отменена
Агрегат Когда
Требует обработки В визите есть хотя бы одна услуга со статусом «Новая»
Подтверждена Все услуги либо подтверждены, либо завершены
Частично Часть подтверждена/завершена, часть отменена
Отменена Все услуги отменены

Если включён Автоподтверждение в настройках — новые записи сразу получают статус «Подтверждена», и визит сразу попадает в инбокс как «Подтверждённый».

Автоматические переходы (по каждой услуге отдельно):

  • Услуги «Новая», у которых время окончания прошло более 15 минут назад, автоматически переводятся в «Отменена» с пометкой «no_show».
  • Услуги «Подтверждена» спустя 30 минут после окончания → «Завершена».
  • Системные переходы записываются в журнал событий с пометкой «Система».

Действия из инбокса

Для визитов, требующих внимания, в колонке действий показываются кнопки:

  • Принять — переводит все «Новые» услуги визита в «Подтверждена».
  • Отменить — открывает диалог с полем «Причина отмены» (необязательно). Все не-«Завершённые» услуги визита переходят в «Отменена».

Полностью отменённые визиты показывают только кнопку → Открыть для перехода на страницу.

Для заявок:

  • В работу — менеджер берёт заявку в работу.
  • Отклонить — статус «Отклонена» (с подтверждением).

Уведомления

Счётчик в навигации показывает количество визитов с активными услугами «Новая» + заявок «Новая» / «В работе». Обновляется в режиме реального времени без перезагрузки страницы. Email и Telegram-уведомления настраиваются в Настройки → Уведомления.

Напоминания клиенту в Telegram

Клиент настраивает напоминания один раз в своём профиле на витрине (Личный кабинет → Профиль): до 3 напоминаний на выбор — за 30 минут, 1 час, 2 часа, 3 часа, 1 день или 2 дня до начала. Эти настройки применяются ко всем будущим записям автоматически: при онлайн-записи сервис создаёт напоминания, и за указанное время бот присылает клиенту сообщение с услугой, датой и временем.

После успешной записи клиент видит блок «Напоминание в Telegram» с подсказкой по состоянию: если напоминания настроены — что и когда придёт; если нет — ссылку в профиль; если клиент не вошёл — предложение войти (чтобы видеть свои записи и получать напоминания).

Никаких настроек со стороны менеджера не требуется — функция работает, если в проекте подключён auth-бот для входа клиентов через Telegram.

Заявки на запись

Если клиент не может подобрать время (или суммарная длительность услуг превышает рабочий день), на витрине доступна форма «Оставить заявку». Клиент вводит имя, телефон и пожелания — менеджер перезванивает и подбирает время вручную.

Заявки отображаются в разделе Записи вместе с визитами. Статусы заявок:

Новая
В работе
Конвертирована
Отклонена

При оформлении заявки в визит можно создать один визит на нужный день или несколько визитов на разные дни — если суммарной длительности услуг не хватает в один день.

Страница визита

Кликните на строку визита в инбоксе — откроется детальная страница. Слева — список услуг визита: клик по услуге раскрывает прямо под ней блок подбора слота и исполнителя (аккордеон, открыта одна услуга за раз). Справа — контакты клиента и события визита.

Если телефон клиента есть в базе, под полем телефона появляется подсказка «Клиент из базы» — имя со ссылкой на карточку клиента, его теги и последние заметки. Помогает узнать постоянного гостя прямо в форме записи.

Кнопки в шапке

  • Сохранить изменения — применяет правки в форме (имя клиента, состав услуг, слот). Активна только если что-то изменилось.
  • Подтвердить визит — переводит все «Новые» услуги визита в «Подтверждена». Доступна, если есть хотя бы одна «Новая».
  • Отменить визит — открывает диалог с причиной. Все не-«Завершённые» услуги переходят в «Отменена».
  • Разделить — открывает диалог разделения визита (см. ниже). Доступна, если в визите ≥2 активных услуг.

Действия по каждой услуге

Внутри карточки каждой услуги — отдельные кнопки в зависимости от текущего статуса:

  • Услуга «Новая» → Подтвердить или Отменить (с подтверждением).
  • Услуга «Подтверждена» → Завершить или Отменить.
  • Услуги «Завершена» / «Отменена» — без кнопок (только бейдж статуса).

Действия сразу применяются и не требуют общего «Сохранить» — это атомарные операции.

Состав услуг

  • Можно добавить новую услугу в визит — кнопка Добавить услугу. Подбор слота для новой услуги — в раскрывающемся под ней блоке, в тот же бизнес-день.
  • Можно удалить ещё несохранённую услугу — крестик. Существующую услугу удалить нельзя; для отмены — используйте кнопку «Отменить» в карточке услуги.
  • Предпочтительный исполнитель меняется только у несохранённых услуг — у уже подтверждённых для смены мастера используйте редактирование слота через «Сохранить».

Подбор времени

После выбора даты раскройте услугу — в блоке под ней появятся доступные варианты, чипсы с временем начала. Алгоритм перебирает все слоты дня и для каждой услуги ищет свободного мастера в нужный момент.

Услуги визита не обязаны идти впритык. Если непрерывный блок не складывается, движок допускает перерыв до 60 минут между соседними услугами (жадная расстановка по самому раннему: первая услуга закреплена за выбранным временем старта, каждая следующая берёт ближайший подходящий слот в пределах окна). Лимит 60 минут — зашитая константа MAX_SLOT_GAP_MIN, не настройка.

10:00
10:30
11:00
11:30

Цветовое кодирование:

  • Зелёная чипса — все предпочтительные мастера свободны на свои услуги.
  • Жёлтая чипса — на это время кого-то из предпочтительных пришлось заменить, остальные слоты подобраны автоматически.
  • Иконка часов на чипсе — вариант с перерывом: услуги идут не впритык (между какими-то из них есть пауза до 60 минут).

Подсказка по чипсе (наведение): минутный план визита со всеми услугами и исполнителями.

После клика на чипсу появляется блок «Расписание визита» — детальное расписание с указанием времени каждой услуги и заменённых мастеров. Между несмежными услугами вставляется разделитель «перерыв N мин». Если был использован вариант с заменой, под расписанием подсвечивается соответствующее предупреждение.

Особые случаи:

  • Если суммарная длительность услуг превышает рабочий день — варианты не показываются, выводится предупреждение, и менеджер решает разнести услуги на разные визиты.

  • Если на эту дату нет ни одного свободного варианта (даже с перерывами), пустое состояние различает причину и показывает соответствующий текст:

    • Заведение закрыто в этот день → «В этот день мы не работаем — выберите другую дату.»
    • Нет работающего мастера хотя бы для одной из выбранных услуг (одна невыполнимая услуга гасит всю группу) → «В этот день некому выполнить выбранные услуги — попробуйте другую дату.»
    • Всё занято (мастера работают, но цепочка услуг не складывается даже с перерывами) → при нескольких услугах предлагается записать их по отдельности; для одиночной услуги — подсказка выбрать другую дату.

    Приоритет проверки: закрыто → нет мастера → занято.

Кастомное время

Если ни одна чипса не подходит (клиент просит «впихните на 10:17», либо нужно поставить услугу вне сетки слотов) — включите галочку Кастомное время над списком чипс. Вместо сетки появится поле ввода времени старта с точностью до минуты. Окончание услуги считается автоматически от длительности; следующая услуга визита нанизывается от её конца.

Кастомное время требует конкретного исполнителя — выберите его в селекте выше («Любой исполнитель» не подойдёт: без мастера нечего проверять на часы и пересечения).

Система ничего не блокирует, но предупреждает жёлтым (как при бронях столов) — сохранить можно в любом случае, решение за менеджером:

  • Время вне рабочих часов мастера — старт/окончание выходит за график исполнителя на этот день.
  • Пересекается с другой записью мастера — на это время у мастера уже есть запись (будет двойной-букинг).
  • Попадает на перерыв мастера — старт приходится на отключённый слот.

Сохранение изменений

Кнопка Сохранить становится активной после правок. Изменения применяются по типам отдельно:

  • Метаданные визита (имя, телефон, примечание, филиал) — обновляются одним запросом. Email клиента в админке не редактируется: он сохраняется только когда визит пришёл с витрины и клиент сам его указал.
  • Изменение существующей услуги (мастер, время, замена снапшота услуги) — update_appointment с проверкой пересечений и advisory-lock.
  • Добавление услуги в визит — add_service_to_visit с проверкой пересечений и совпадения бизнес-дня.
  • Удаление несохранённой услуги — просто удаляется из списка перед сохранением.

Порядок операций: метаданные → изменения существующих услуг → добавления. При сбое в середине цепочки — видна частичная картина, ошибка сообщит на каком шаге упало.

Продление open_ended записей

Некоторые услуги (бильярд, баня, аренда кресла и т. п.) работают в режиме открытого окончания: клиент занимает ресурс до тех пор, пока администратор не закроет сеанс.

Если в визите есть активные записи такого типа (статус «Новая» или «Подтверждена»), на странице визита появляется блок «Продление (открытое окончание)». Для каждой такой записи доступны кнопки:

  • +30 мин / +60 мин — сдвигают время окончания вперёд. Система проверяет, свободен ли мастер/объект в новом отрезке времени. Если нет — появится предупреждение с временем следующего клиента.
  • Закрыть сейчас — фиксирует фактическое время окончания «прямо сейчас».

Блок не показывается в режиме только для чтения (без права Управление записями).

Разделение визита

Если клиент хочет услугу из визита перенести на другой день (или просто разнести «один поход» на два) — используйте Разделить.

В диалоге:

  1. Отмечаете услуги, которые уйдут в новый визит. Запретить выбрать «все услуги» — это просто перенос, не split; разделение начинается с двух частей.
  2. Указываете дату и время начала. Услуги пойдут друг за другом без перерыва, у тех же исполнителей.
  3. Если новая дата — другой бизнес-день, система найдёт существующий визит того же клиента на эту дату или создаст новый. Старый визит останется с оставшимися услугами.

Если хотите разнести услуги по нескольким разным дням — повторяйте разделение для оставшихся.

Создание нового визита

Менеджер создаёт визит вручную одним из путей:

  • Кнопка «Создать запись» на странице Записи (инбокс) — открывает пустую форму, дату/услуги/мастера выбираете с нуля. Самый быстрый путь без таймлайна.
  • Из таймлайна — кликните на пустую ячейку у нужного мастера. Откроется форма с предзаполненной датой, временем и исполнителем.
  • Из заявки — на странице заявки кнопка Оформить запись. Открывается форма с предзаполненными услугами и контактами клиента. Менеджер выбирает дату и слот.

После сохранения:

  • Если визит создан из заявки — заявка переходит в статус «Конвертирована», на странице визита баннер «Визит создан из заявки» со ссылкой обратно.
  • Если визит создан из таймлайна — после сохранения возврат на таймлайн.

Записи через ручной ввод сразу получают статус «Подтверждена» (админ оформляет вручную, ждать подтверждения не требуется).

Права доступа

Все action-кнопки (Принять / Подтвердить / Отменить / Завершить / В работу / Отклонить / Сохранить / Разделить) требуют права Управление записями (manageAppointments). Без него страница доступна только для чтения. Просматривать визиты и заявки можно и без этого права.

Форма заявки

Кликните на строку заявки в списке — откроется страница заявки. Поля доступны для редактирования (при наличии прав и если заявка не обработана).

Доступная информация:

  • Запрошенные услуги — список с длительностью и ценой. Можно изменить предпочтительного мастера для каждой услуги.
  • Клиент — имя, телефон, примечание. Зарегистрированные клиенты отмечены меткой.
  • Обработка (для заявок со статусом не «Новая») — кто и когда обработал заявку, ссылка на созданный визит (если оформлена).

Обработанные заявки (статус «Оформлена» или «Отклонена») — форма в режиме чтения.