записи
Всё подтверждается автоматически, если кто-то не наложит вето до дедлайна. Это единственное место в продукте, где отсутствие за столом имеет цену — и где телефон её снимает. Вкладки переименованы: Ожидают и Утверждены.
Строки таблицы становятся карточками, где вето — под рукой. Показывается при calendar:configure или любом из booking:confirm/reject/cancel — тот же расширенный гейт, что и в консоли.
Настоящий пробел, найденный при рисовании этого экрана. PendingBooking несёт workerId, serviceId, calendarId — и ни одного имени. А ConfirmedBooking несёт и workerDisplayName, и serviceName, и customerDisplayName. То есть на экране, где у человека секунды на решение, слов нет вообще, а на экране, где решать нечего, есть все. Карточки здесь нарисованы с именами, потому что так и должно быть — но для этого ответу очереди нужно вырасти на три поля, и это отдельная задача, а не выдумка на клиенте. Пока этого нет, честный вид карточки — строка cal a0f3c952 вместо названия.
Консоль показывает сетку неделя × мастер — единственный layout в продукте, который принципиально широкий. Android меняет оси местами: лента дат, затем этот день, сгруппированный по мастеру. Вопрос, на который он отвечает («что на четверг»), не меняется.
Строка клиента — это имя. Оно на первом плане, услуга и длительность — подписью под ним. Имя всегда берётся как есть и не проверяется (никаких «недействительно»). Когда имени нет — маскированный телефон и пометка «Без имени», но никогда не шестнадцатеричный код (сбор имени при записи — отдельная задача; телефон обязателен всегда).
Месяц и год под лентой дней. Когда неделя пересекает границу месяца, под числами стоит «Сентябрь 2026 / Октябрь 2026» — тем же приглушённым шрифтом, что и подписи строк, без разделителя, год у каждого месяца, лишнее обрезается многоточием; подписи едут вместе с днями.
Два значка на строке — чат и телефон (слева направо), Material-глифы, оба всегда. Чат ведёт в диалог-источник записи (один на запись), телефон — к контакту. Тап по всей строке открывает детальную запись (следующий экран).
Тап по строке открывает запись. Дата слева, время справа — двумя выключками в одну строку, без точки между ними. «Мастер» — отдельной строкой, как «Услуга». «Источник» — простым текстом (Виджет на сайте / Telegram / Макс), без стилизованных плашек.
Телефон — за «Показать» (аудируемое раскрытие, как в треде диалога). «Перейти к диалогу» ведёт в тот самый диалог, где создана запись — связь бронь↔диалог в обе стороны: из чипа записи в диалоге — сюда, отсюда — в диалог (новые поля origin_conversation_id на брони и result_booking_id на задаче чата).
Сегментов не может быть больше трёх. Услуги и Часы сначала легли четвёртым и пятым сегментом — на реальном телефоне подписи стали переноситься и обрезаться, ряд физически не резиновый. Правило на будущее: операционное остаётся в сегментах, настроечное уходит за ⋮.
Разделитель простой — спроси не «часто ли этим пользуются», а «есть ли что-то срочное прямо сейчас». Ожидают/Утверждены/Клиенты — живые люди и решения с дедлайном. Услуги и Часы — словари: их читают чаще, чем правят, и ничего не «горит», если зайти туда на день позже.
Открывает то же самое: пункт меню ведёт на уже существующий экран (Услуги/Часы) без изменений внутри него — переезжает только точка входа. Тот же приём годится для любой вкладки, которая начинает разъезжаться: прежде чем резать текст или уменьшать шрифт, спроси, не пора ли часть сегментов сделать пунктами ⋮.
Шесть фактов решают, может ли незнакомец записаться. Сервер считает все шесть одним запросом (GET /booking-readiness) — и это цепочка зависимостей: каждый следующий пункт бессмысленен, пока не выполнен предыдущий. Консоль разносит эти шесть по пяти маршрутам и показывает сам список как пассивную панель на двух из них. Здесь цепочка — это и есть навигация.
Заголовок экрана — это буквально вопрос, который задаёт себе тенант, и он уже есть в консоли как строка: «Может ли клиент записаться прямо сейчас?». Разница в том, что здесь это экран, а не панель на другом экране.
Выполненные пункты свёрнуты в одну строку, первый невыполненный развёрнут и несёт ссылку прямо в то место, где он чинится. Ничего не пересчитывается на клиенте: шесть фактов считает сервер, иначе получилась бы вторая, спорящая копия той же конъюнкции.
Справочники доступны и плоским списком ниже — для того, кто пришёл переименовать услугу, а не выяснять, почему никто не записывается. Цепочка — это ответ на вопрос «почему не работает», а не мастер-визард, через который надо проходить.
Пять пронумерованных секций в том порядке, в котором человек на них отвечает. Главная правка против консоли — четвёртая: рабочие часы и шаблон графика живут здесь вместе. В консоли первое — форма на экране настройки, второе — секция этой карточки, и разъезд этих двух половин и есть та причина, по которой пункты 4 и 5 цепочки ощущаются как один и тот же вопрос, заданный дважды.
Пятая секция отвечает на «а что получилось» прямо здесь, а не через два экрана.
Консоль уже считает арифметическую фразу («услуга 70 мин займёт N слотов», зеркало серверного ComputeSlotsNeeded) — она сохранена дословно. Добавлены две цифры, которые тенант на самом деле хочет видеть: сколько дней покрывает горизонт и сколько слотов выходит в день. Читаются после сохранения, на этом же экране, со ссылкой прямо в нарезанные слоты.
Слово «Расписание» здесь не используется вообще: этот экран — График мастера, а экран выходных и коротких дней — Исключения. Двусмысленности, которую они заменяют, в консоли ровно столько, что её хватило, чтобы заполнять всё «как-то».
Пересчёт мог бы показаться слишком разрушительным для маленького экрана — но это типовая операция для тенанта, который рулит расписанием, и исключать её нельзя: тот, кто меняет график смен, должен починить уже нарезанные дни в тот же день, а не из десктопного браузера.
Карточка на запись, а не строка: смысл этого шага в том, что каждая запись — это чей-то визит. Кнопки «применить ко всем» здесь нет намеренно.
Шаг нельзя оставить наполовину. Счётчик «решено 4 из 7» закреплён внизу, и «Далее» не активна, пока хоть одна запись без решения. Консоль полагается на то, что оператор прокрутит таблицу и заметит; телефон так не может, поэтому счёт назван вслух.
Отменённые записи перечислены поимённо, а не сосчитаны — число «3» ничего не стоит, три конкретных визита стоят. Подтверждающая кнопка называет своё последствие в собственном тексте и остаётся единственной кнопкой опасного тона во всём флоу.
Диалога нет: подтверждение — вторая панель, а не модалка. Это собственная форма подтверждения, уже принятая в консоли (удаление мастера, стирание диалога), и она же здесь.