Эту систему записи делят два типа бизнеса: service и clinic. Они работают на одном коде — услуги, записи, назначение мастера, пакеты, — а тип клиники переименовывает интерфейс в записи, пациентов и курсы лечения, потому что у стоматологии и у маникюрного салона одна и та же задача записи, только на разных словах. Выбор типа меняет словарь и ничего структурного: отдельный продукт для клиник разошёлся бы с продуктом для услуг за два релиза.
Услуга — это длительность и цена, которые задаёте вы
Каталог — список услуг, у каждой длительность и цена. Длительность не украшение: именно она делает расписание осмысленным, потому что процедура на девяносто минут и стрижка на пятнадцать занимают разные куски одного дня. Клиенты смотрят публичную страницу заведения, выбирают услугу и записываются; этот раздел страницы добавляет сам модуль услуг, собранный из того же общего набора элементов, что и все остальные модули, — поэтому он выглядит родным, а не прикрученным.
Запись и подтверждение, которое салон нажимает сам
Заявка на запись несёт имя, телефон, дату, время и комментарий. Она приходит в состоянии ожидания, и заведение её подтверждает. Счётчик ожидающих — один из живых значков на панели консоли, обновляющихся каждые несколько секунд рядом с активными заказами, столами, зовущими официанта, и заявками на отпуск: у бизнеса, ведущего несколько модулей, есть одно место, где посчитано всё, что ждёт человека.
Шаг подтверждения — не препятствие ради препятствия. Система, автоматически принимающая всё, на что есть место в календаре, возьмёт запись на день, когда мастера нет, и одиннадцать часов, которые сработают, только если десять закончатся раньше. Человеческое решение оставляет в контуре знание самого заведения и даёт клиенту определённый ответ, а не слот, который потом тихо поедет.
Каждую запись можно назначить сотруднику. Одно это поле превращает список записей в рабочий день: оно отвечает, кто это делает, позволяет вернуть постоянного клиента тому же мастеру и питает историю клиента, так что заведение знает, к кому именно возвращаются.
Пакеты и предоплаченные курсы: N сеансов на N дней
Предоплаченная работа — своя модель, а не обычная продажа. Пакет бывает курсом из N сеансов на N дней или абонементом на N дней. Клиент покупает его и списывает по одному сеансу; вкладка «мои пакеты» показывает, что у него есть и сколько осталось. Именно этот остаток и есть учёт, и живёт он на том же бэкенде, что и записи, которые его расходуют, а не на картонке с печатями в кошельке.
Покупка пакета — тоже одна из подходящих сделок в представлении права на отзыв, поэтому клиент курса может написать отзыв даже до того, как списал первый сеанс.
Напоминаний по SMS нет, потому что нет SMS. Проверка телефона и отправка SMS не построены — эндпоинт отвечает 501 и честно об этом говорит. Уведомления доходят до клиентов внутри приложения, а почта уходит только на подтверждённые адреса.
Тип «клиника» — это переименование, а не медицинская карта. Он меняет названия на записи, пациентов и курсы лечения. Он не хранит клинических записей, назначений и вообще ничего, чему место в медицинской информационной системе, и не для этого сделан.
Что владелец получает вокруг этого: отчёты, CRM и кадры
Бизнес типа «услуги» или «клиника» получает три модульные плитки — записи, услуги и пакеты — плюс всё, что получает любой тип. Отчёты покрывают выручку, число заказов, средний чек, разбивку на наличные, PromptPay и прочее, пятёрку лидеров продаж, график выручки за семь дней и периоды «сегодня», «7 дней», «30 дней», «всё время», с перепечаткой чека и текстом чека. Налоговую накладную выставить нельзя: это доступно только плательщикам НДС, а регистрация ни одного заведения в системе пока не записана. Для сервисного заведения список лидеров читается как «какие процедуры действительно кормят» — обычно не та, что на плакате.
База клиентов строится из журнала продаж, с заметками и метками, историей покупок и баллами, которые копятся по ставке, заданной самим заведением в своей валюте, с настраиваемым минимальным чеком и наградой. Кадры покрывают сторону персонала: приход и уход по GPS с комментарием, заявки на отпуск, смены и зарплата с отработанными минутами и переработкой после восьми часов в день на почасовой или месячной ставке, объявления и назначаемые задачи. Зарплата разграничена: рядовой сотрудник видит только свою, владелец и управляющий — всех.
Доступ работает на матрице прав: тринадцать базовых возможностей плюс всё, что объявят установленные модули, ролевые пресеты для владельца, управляющего, официанта, кухни и сотрудника и точечные исключения. Плитки исчезают, когда права нет, а сотрудник без прав видит экран, который так и говорит, а не пустой список, читающийся как ошибка. В приложении для Android эти проверки идут на клиенте; та же матрица есть в базе как has_capability(business_id, capability) и раскрывается на сервере для политик защиты на уровне строк.
Два соседа для салона и клиники. Заведение, принимающее без записи, вызывает клиентов через электронную очередь, а не по календарю, — а страница для бизнеса коротко сводит то, что и так общее у всех четырёх базовых типов.
Система модулей под всем этим и устанавливаемые расширения
Услуги — один из четырёх базовых модулей рядом с едой, жильём и розницей: типы бизнеса и есть модули. Модуль объявляет идентификатор, типы бизнеса, на которые он претендует, название, заголовок каталога, главное действие, представление каталога и по желанию — возможности, плитки консоли, свой экран консоли и раздел публичной страницы. Из этого контракта и следует, что редактор прав можно собрать автоматически из возможностей, объявленных установленными модулями.
Поверх базовых стоят семь устанавливаемых расширений, работающих для любого типа бизнеса, — из магазина плагинов в консоли: права команды, каналы оплаты, абонементы и подписки, напоминания о продлении. Последние два очевидно ложатся на сервисный бизнес: план, который клиент покупает со страницы заведения, и напоминание перед его окончанием. Удаление стоит за подтверждением, где прямо сказано, что данные не удаляются, и удалённое расширение не даёт ни плиток, ни прав, ни раздела на публичной странице. Сторонние плагины пока закрыты, и магазин сам об этом пишет. Сегодня существует модульная архитектура с собственными расширениями, а открытие приёма — следующий шаг.
Отзывы после визита
Полученная услуга — один из подтверждённых видов в представлении права на отзыв, поэтому клиент, который действительно был, может написать отзыв, а все остальные получают карточку с замком и объяснением, почему кнопки нет. Рейтинг пересчитывается триггером базы из строк отзывов и никогда не вписывается руками. У отзывов есть фотографии, сводка распределения от пяти к одному, правка и удаление своего последнего, новый отзыв при повторном визите с сохранением старого и публичные ответы владельца.