/База знаний

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

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

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

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

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

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

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

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

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

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

Раздел Запись открывается вкладками День · Заявки · Журнал · Настройки. Для работы с визитами нужны три — День, Заявки (всё, что ждёт вашего ответа) и Журнал (история всех визитов). «Объекты» отдельной вкладки больше не имеют — они в Настройки → раздел «Объекты» (вкладка «Настройки» видна и тем, кто не правит сами настройки, но управляет записью).

День (раньше вкладка называлась «Расписание») — день салона полосами: одна строка на мастера. Над ним листалка «‹ · дата · › · Сегодня» (дата открывает календарь), ниже — сводка и фильтры. Главная кнопка экрана — «Записать клиента» в шапке справа: открывает панель «Новая запись» на выбранный день (и текущий филиал), мастера и время выбираете в панели. На телефоне она первым пунктом в меню «⋯». Кнопка видна только тем, кто управляет записями.

  • Строка мастера: вне смены — штриховка, запись — полоска «клиент · услуга» (цвет по статусу), в дырах смены подписано «свободно 15:00–16:00». Объекты (если запись идёт и к ним) идут отдельными строками ниже. Записи без назначенного мастера — отдельной строкой.
  • Цвет записи по статусу: подтверждена, ждёт подтверждения (пунктир), идёт сейчас, прошла. Красная линия показывает текущий момент (на сегодняшнем дне).
  • Красная запись — мастер не сможет её принять (в это время у него отсутствие или запись вне смены). Причина — в карточке записи, а в сводке есть кнопка «N записей мастер не сможет принять».
  • Неявка. Запись, по которой клиент не пришёл, остаётся на «Дне» серой «прошла», в карточке стоит красная метка «Не пришёл»; перетаскивать её нельзя. Подсказка «мастер свободен — можно подтверждать» не появляется, если мастер в отлучке, вне смены, не делает услугу или занят; в режиме «все точки» красные записи видны по всем доступным точкам.
  • Сводка над полосами: сколько записей сегодня, сколько идут сейчас и ждут подтверждения (нули не показываются), кнопка «N заявок →» (ведёт во вкладку «Заявки») и «свободно до вечера» (на другой день — «свободно за день»). Сводка считает весь день и не меняется от фильтров.
  • Клик по записи — карточка: время, услуга, мастер, телефон, сумма. Ждущую запись можно подтвердить прямо там, есть «Открыть визит»; если мастер свободен в это время, карточка подскажет. Клик по «свободно» — окно «Записать на 13:20»: откроется панель «Новая запись» с этим мастером и временем. Клик по имени мастера — меню: «Записать к мастеру» и (если вы вправе менять график этого человека) «Управлять днём».
  • Фильтры и поиск. Поле «Клиент: имя или телефон» подсвечивает найденные записи, остальные становятся бледными. «Мастера»: работают в этот день (по умолчанию) · все · направление (категория услуг) · вручную; «Ещё N не работают — показать всех». «Записи»: откуда пришла («С сайта» / «Записал администратор») и статус («Ждёт», «Подтверждена», «Идёт», «Прошла»). Включённые фильтры видны чипами, «Сбросить» снимает всё, подпись «показано N из M записей». Запись не по фильтру только бледнеет — «свободно» от фильтров не меняется. Выбор мастеров и фильтров запоминается для вас в этом заведении; поиск при перезагрузке сбрасывается.
  • Планшет: шкала листается вбок. Телефон: вместо полос — лента дат недели и список по каждому мастеру: «идут сейчас», «дальше», «свободно».
  • Перенос записи мышью (drag & drop) — на экране «День» потяните колбаску записи на другое время (шаг — как у слотов) или в строку другого мастера. Пока тянете, строка, над которой вы сейчас, подсвечивается: зелёная — «Мария: свободно 15:30–17:00, услугу делает — отпустите», красная — с причиной словами: «не делает услугу», «в это время другая запись», «вне смены», «нерабочее время», «время прошло», «мастер не работает». Отпустите на зелёной — откроется «Перенести запись?» с текущим и новым временем (и выбором цены, если у нового мастера она другая); отпустите на красной — ничего не изменится. Тянуть могут только те, кто управляет записями; мастер, который видит только свои записи, и телефонный список перенос не тянут (там — «Перенести» в карточке). Выполненные записи не тянутся. Перенос внутри одного дня; на другой день — через редактор визита.

Заявки — очередь дел: открывайте её каждое утро. На вкладке стоит цифра — сколько дел ждёт сейчас. Дела разложены тремя группами, пустая группа не показывается; если всё разобрано — «Всё разобрано — новых заявок нет»:

Группа Что это и что делать
Мастер не сможет принять Запись, у которой мастер заболел, ушёл в отгул или сократил день. Если есть свободный мастер, который делает услугу, — кнопка «Передать <имя>». Нет — написано почему («брови, кроме Марии, никто не делает», «все заняты») и есть «Перенести…» и «Отменить». Если точка не выбрана («все точки»), в группе записи всех доступных точек, а число на вкладке «Заявки» их учитывает.
Без времени — клиент ждёт звонка Заявка с сайта без времени: телефон, услуги, пожелание клиента и сколько ждёт (дольше 18 часов — красным). Под заявкой три ближайших окна — нажмите на окно или «Поставить», выберите мастера и время (можно своё) и сохраните. Если у мастера услуга дороже или дешевле, чем в заявке, покажем разницу — решите, какую цену оставить. Время вне смены мастера можно сохранить, но появится предупреждение.
Время выбрано — подтвердите Запись с сайта, которую клиент выбрал сам. Рядом подсказка: «у мастера свободно, услугу делает — можно подтверждать» или что мешает. Кнопки «Подтвердить», «Изменить» и «Отказать».

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

Журнал (вкладка раньше называлась «Записи») — история визитов: поиск, период, мастер, статус и итоги. Заявки с витрины, у которых ещё нет времени, в «Журнале» не показываются — они живут во вкладке «Заявки», а после оформления появляются здесь уже визитом. В таблице есть колонки Мастер (люди, у которых есть услуга визита; отменённые услуги не считаются) и Сумма (итог визита за вычетом списанных бонусов; у отменённых и «Не пришёл» — прочерк). Фильтрующие пилюли:

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

Поиск над таблицей находит запись по имени клиента, телефону или названию услуги. Телефон можно вводить в любом виде: 8 999 123-45-67, +7 (999) 123-45-67 или кусок номера от трёх цифр (4567) — найдутся записи, где номер сохранён в другом формате. Ищется то, что видно в строке: имя и телефон из самой записи, услуги без отменённых .

На колонках Статус (включая «Не пришёл» и «Не подтвердили») и Филиал есть воронки: нажмите значок в заголовке колонки и отметьте нужные значения. Выбранные фильтры показываются строкой над таблицей, крестик на фильтре снимает его, «Сбросить всё» — все разом. Пилюли, воронки и поиск работают вместе: например, «Архив» + статус «Отменена» покажет только отменённые визиты из архива. Если по фильтрам ничего не нашлось, список покажет «Ничего не найдено» и кнопку Сбросить фильтры.

Период и мастер — в ряду над таблицей. Кнопка «Всё время» открывает список: «Сегодня», «Вчера», «7 дней», «30 дней» или «Свои даты» (календарь «с — по», обе даты включительно). Период считается по дню визита, а не по дню, когда запись создана. Рядом — выбор мастера: останутся визиты, где есть услуга этого мастера (в любом статусе). Выбранные период и мастер показываются тегами рядом с остальными фильтрами, крестик снимает, «Сбросить всё» снимает все сразу. Всё это работает вместе с пилюлями, поиском и воронками.

Итоги над таблицей — «Визиты», «Оплачено», «Отменили», «Не пришли», «Не подтвердили» — за ту же выборку, что сейчас в списке: за выбранный период и мастера, с пилюлей, поиском, филиалом и воронками. Это не сумма видимой страницы: итог один и тот же, листаете вы страницы или нет. Каждый визит попадает ровно в один счётчик из трёх («Отменили», «Не пришли», «Не подтвердили»), «Оплачено» — сумма оплаченных визитов за вычетом списанных бонусов. Нулевые «Отменили / Не пришли / Не подтвердили» не показываются; если по фильтрам ничего нет, полосы итогов тоже нет. Итоги обновляются сами, когда в списке что-то меняется.

Колонка Филиал и её воронка видны только в режиме «Все филиалы»: когда в сайдбаре выбрана точка, все строки и так из неё, и фильтр по филиалу снимается сам.

Нажмите на строку в любом месте — откроется страница визита или заявки. Кнопки действий в самой строке работают отдельно и страницу не открывают.

Под таблицей — переключатель страниц (10/25/50/100 строк, выбранный размер запоминается). Список листается на сервере: на экране всегда одна страница, счётчик страниц считает всю выборку с учётом пилюли, периода, мастера, филиала, поиска и воронок.

Иконка «Выгрузка» справа над таблицей отдаёт всю текущую выборку (пилюля, период, мастер, филиал, поиск и воронки), а не видимую страницу — CSV, Excel или PDF с клиентом, телефоном, услугами, мастером, суммой, датой визита, длительностью, статусом, филиалом и датой создания. Если выборка больше 5000 строк, выгрузятся первые 5000 — об этом появится предупреждение.

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

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

Новая
Подтверждена
Завершена
Отменена
Не пришёл
Статус Когда устанавливается
Новая Услуга только поступила с витрины
Подтверждена Менеджер нажал «Подтвердить»
Завершена Услуга выполнена
Отменена Услуга отменена клиентом или администратором (или системой — см. «Автоматические переходы»)
Не пришёл Администратор отметил кнопкой «Клиент не пришёл», что клиент не явился

Статус визита в «Журнале» — это агрегат по услугам:

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

Визит из «неявка + завершена» считается завершённым. Визит, который система сама отменила, потому что никто не подтвердил запись, остаётся с бейджем «Отменена», а под бейджем стоит пометка «не подтвердили» — отличить его от отмены человеком можно и воронкой «Статус» → «Не подтвердили».

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

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

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

Действия из «Журнала»

«Журнал» — история, а не очередь: кнопок «Принять» и «Оформить» в строках нет. Новые услуги подтверждают на «Дне» (в карточке записи) или на странице визита, заявки оформляют во вкладке «Заявки». В строке (меню «⋯») остаются:

  • Изменить — открыть страницу визита (то же, что клик по строке).
  • Отменить — открывает диалог с причиной кнопками («Клиент передумал», «Не дозвонились», «Мастер не может», «Другое» — текст только у «Другое»; причину можно не указывать). Все не-«Завершённые» услуги визита переходят в «Отменена».

У отменённых, завершённых и «не пришёл» визитов кнопок нет — их страница открывается кликом по строке. У полностью отменённого визита в строке остаются услуги, мастера, дата и длительность — как были записаны; «Сумма» стоит прочерком.

Заявки (оформить, отклонить, отменить) — во вкладке «Заявки».

Уведомления

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

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

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

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

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

Скидка на визите

В блоке с суммами визита («Стоимость», «К оплате») строка скидки подписана источником: «Акция «Название»» — сработала акция салона на услуги (ложится сама, без кода; настройка — Акции), «Скидка (КОД)» — промокод. Если подходят оба, берётся бо́льшая скидка, суммы не складываются. Условия акции фиксируются при создании визита: выключение акции потом итог не меняет, а добавление услуги из акции пересчитывает скидку. Окно дней и часов судится по времени начала визита и после переноса визита не перепроверяется.

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

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

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

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

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

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

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

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

Этапы и сводка

Над списком услуг — полоска этапов: Заявка → Подтверждён → Завершён и оплачен. Пройденные этапы отмечены, текущий подсвечен. У отменённого визита вместо этапов — метка «Отменён»: причина, когда и кто отменил. Услуги, время, мастера и сумма отменённого визита остаются на экране, в «Событиях» отмена записана один раз. У оплаченного визита все этапы отмечены зелёной галкой, а под полоской стоит строка «Оплачено N ₽ · способ · время». Рядом с названием может гореть бейдж «Идёт сейчас» — это не этап, он показывает, что подтверждённая услуга идёт в эту минуту.

Под полоской — сводка: Время (от начала первой до конца последней живой услуги), Мастер (или «Мастера», если их несколько), Клиент, Точка.

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

В шапке — одна главная кнопка по этапу и рядом вторичные кнопки (Перенести, Разделить, Отменить визит). Если они не помещаются, а на телефоне всегда — они лежат в меню «⋯».

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

Завершить и рассчитать

Кнопка открывает окно «Завершить и рассчитать»: итог визита (услуги, скидка, списанные бонусы, К оплате), способ оплаты — наличные, карта или несколько способов, — а также строка «Начислим N бонусов», если клиенту положено начисление. Кнопка «Рассчитать и завершить» одним действием проводит оплату и переводит услуги в «Завершена», визит становится «Завершён и оплачен». Если сервер отказал — появится сообщение, окно останется открытым. Наличные оплаченного визита попадают в отчёт кассовой смены.

Если к оплате 0 ₽ (всё закрыто скидкой и бонусами), окно оплаты не нужно: система спросит «Завершить визит?» и завершит визит без оплаты.

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

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

  • Услуга «Новая» → Подтвердить или Отменить (с подтверждением).
  • Услуга «Подтверждена» → Завершить или Отменить.
  • Меню «⋯» на карточке сохранённой живой услуги («Новая» или «Подтверждена») → Передать другому мастеру.
  • Услуга «Подтверждена» или «Новая», которая уже началась (или «Завершена», пока визит не оплачен) → в меню «⋯» пункт «Клиент не пришёл». Отметить нельзя, пока запись не началась и когда визит уже оплачен.
  • Услуга «Не пришёл» → кнопка «Вернуть»: запись снова «Подтверждена». После оплаты визита вернуть нельзя.
  • Услуги «Завершена» / «Отменена» — без кнопок (только бейдж статуса).

Что значит «Клиент не пришёл»:

  • Та же кнопка есть на странице отдельной записи («Клиент не пришёл» / «Вернуть»).
  • Услуга-неявка не входит в сумму визита, в «К оплате», бонусы и выручку; в смешанном визите «одна не пришёл, вторая подтверждена» рассчитывается только вторая. Визит из одних неявок не завершают и не отменяют — он остаётся в «Журнале» историей.
  • Время мастера неявка не освобождает: слот остаётся занятым, как у обычной записи. Если на это время нужно записать другого клиента, отмените запись вместо отметки.
  • Неявки видны в «Журнале» (статус и итог «Не пришли»), в карточке клиента (счётчик «Не пришёл») и в аналитике записей («Не пришли», «Доля неявок»).

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

Состав услуг

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

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

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

Услуги визита не обязаны идти впритык. Если непрерывный блок не складывается, движок допускает перерыв до 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. Отметьте услуги, которые уйдут в отдельную запись этого клиента. Если отметить все — панель предложит кнопку «Перенести» (это перенос визита целиком, а не разделение).
  2. Под выбором видно две суммы: «Останется в этом визите» и «Новая запись». Скидка остаётся в старом визите, в новой записи услуги идут по полной цене; если списанных бонусов больше суммы оставшегося визита, панель предупредит об этом.
  3. Выберите: «Назначить время сейчас» (дата, время, мастера) или «Время назначу позже» — тогда создастся заявка без даты, время выберете на её странице.
  4. После разделения можно сразу «Открыть новый визит».

Если новый слот занят — операция не сохранится, ничего не сломается. Скорректируйте время и попробуйте снова.

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

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

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

Старые ссылки на /appointments/visits/new тоже открывают эту панель. Закрыли её, ничего не записав, — вернётесь на список (или на «День», если пришли с него). Если в панели уже что-то заполнено, при закрытии спросит «Закрыть без сохранения?». На телефоне панель раскрывается на весь экран, «Записать клиента» остаётся внизу.

Что в панели

  • Филиал. Видны только ваши филиалы. Доступен один — его название написано текстом, выбирать нечего. Два и больше — выбор из них.
  • Услуги. Строка поиска по названию и список услуг с длительностью и ценой. Нажали на услугу — она ушла в список «Выбранные услуги — по порядку»; из него услугу можно убрать, а мастера для неё — выбрать или оставить «любой».
  • Когда. Дата и «Начало визита».
  • Клиент. Имя, телефон, примечание. Если по телефону находится постоянный клиент, показываются его имя, бонусы и теги. Привязывать или заводить клиента из панели нельзя — карточка клиента появится у визита сама по телефону.
  • Расчёт. Длительность и сумма; промокод и акция салона — как в разделе «Промокод на визит» ниже.

Подбор мастеров и времени на весь визит

Укажите «Начало визита» и нажмите «Подобрать мастеров и время» — система ищет время сразу для всех услуг визита.

  • Порядок. Пока не отмечено «Порядок услуг не важен», услуги идут строго в том порядке, в котором вы их добавили. Отметите — система вправе поменять их местами, чтобы уложиться в нужное время; такой вариант помечен «↕ переставлено».
  • Вышло ровно. Если визит укладывается в указанное начало, вариант выбирается сам, и ниже расписано, кто какую услугу делает и во сколько.
  • Не вышло. Появится «В 11:00 не выходит. Ближайшие начала:» и до трёх кнопок со временем позже запрошенного. Нажали на время — вариант выбран.
  • Пауза. Если между услугами у мастеров образуется перерыв, он подписан: «пауза N мин».
  • Подмена мастера. Мастер, которого вы выбрали для услуги, в это время занят, а подходит другой, — в расписании видно, например: «Марина занят(а) → Ольга». Вы сами решаете, брать ли такой вариант.
  • Позже запрошенного ничего нет. Если свободное время есть только раньше — «Позже 18:00 не выходит. Ближайшие раньше:» и до трёх кнопок со временем.
  • На день ничего не вышло. Появится «На этот день подряд не выходит» и кнопка «Выбрать другой день».
  • Не удалось подобрать. Сбой поиска — «Не удалось подобрать время» и «Повторить»; это не то же самое, что «на день не выходит».
  • Вручную. «Выбрать время вручную» раскрывает все свободные начала дня; нажали — вариант выбран.

Любое изменение услуг, мастера, даты, филиала, «Начала визита» или галочки «Порядок услуг не важен» сбрасывает прежний подбор: нажмите «Подобрать» заново (без этого «Записать клиента» напомнит: «подберите мастеров и время»). Сменили филиал — услуги и мастера, которых в новом филиале нет, снимаются с сообщением.

«Записать клиента»

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

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

  • Если визит создан из заявки — заявка переходит в статус «Конвертирована», на странице визита баннер «Визит создан из заявки» со ссылкой обратно.
  • Открывается карточка нового визита. Если запись создана из «Дня», «Назад» в карточке возвращает на тот же день.

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

Промокод на визит

В панели «Новая запись», в блоке «Расчёт» («Услуги», скидка, «К оплате»), есть поле промокода: введите код и нажмите Применить — под полем появятся скидка и сумма «К оплате». Если код не подходит (неактивен, истёк, исчерпан или визит дешевле минимальной суммы кода), под полем будет причина, а скидка не применится. Поля нет, если модуль «Акции» выключен.

Сумму считает система: итог визита — это сумма цен услуг на момент записи минус скидка. Вручную её изменить нельзя. Если потом услугу добавили, отменили или перенесли в другой визит, итог и скидка пересчитываются сами; опустился ниже минимальной суммы кода — скидка становится 0, но код в визите остаётся.

На странице визита с промокодом показаны код, скидка и «К оплате». Использование кода списывается при создании визита. Визит отменили — использование возвращается, как у заказа; но если в визите уже есть выполненная услуга, использование не возвращается (скидка на неё уже дана). Условия кода запоминаются в визите в момент записи: если потом изменить размер скидки, минимальную сумму или название кода, уже созданные визиты не изменятся. Промокод можно указать при создании визита, а также позже — в блоке «Расчёт» на странице уже созданного визита: введите код и нажмите Применить, сумма пересчитается. Поле видно, пока визит не завершён, не отменён и не оплачен и в нём ещё нет кода. Если код не подходит (неверный, истёк, исчерпан, сумма визита меньше минимальной) или у вас нет права записывать визиты, система скажет об этом словами, и визит не изменится. Второй код поверх первого не ставится, а код, который дал бы скидку меньше уже действующей акции салона, не принимается — его использование не будет потрачено впустую. В заявку при оформлении код добавить нельзя.

Акция салона (без кода) ложится сама, в том числе когда заявку оформляют в визит: дни и часы проверяются по времени, которое менеджер назначил при оформлении, а не по времени заявки. В панели «Новая запись» администратор видит строку «Акция «Название»: −N ₽» и «К оплате» ещё до сохранения: сервер считает ту же скидку, что ляжет на визит.

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

Бонусы на визите

Если у заведения включена программа лояльности (тариф «Про») и у визита есть зарегистрированный клиент, пока визит не завершён, в блоке итога на странице визита виден блок бонусов: «Бонусы клиента: N ₽» — он показывается и когда бонусов нет (тогда там «0 ₽» и кнопки списания нет). Если бонусы есть, появляется «Списать бонусы»: введите сумму и отправьте запрос — клиент подтверждает списание в Telegram. После подтверждения в итоге появляется строка «Оплачено бонусами», а «К оплате» уменьшается на списанную сумму. У завершённого визита и у клиента без регистрации кнопки нет. Бонусы за визит начисляются, когда вы отметили его «завершён» (за неявку бонусов нет); подробности — в разделе «Лояльность».

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

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

Форма заявки

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

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

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

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