Korat
Модуль

Гостиница, база отдыха и жильцы на одном экране

Управление отелем и арендой в одном модуле: он покрывает отель, курорт, дом с апартаментами и дом в аренду, потому что за пределами крупных сетей это часто один и тот же владелец — а всё чаще и одно и то же здание. Бесплатно и без абонентской платы: и для гостевого дома на шесть номеров, и для целого здания.

Софт для управления отелем и арендой обычно рвётся по линии «посуточно/помесячно»: с одной стороны отельная PMS, с другой журнал аренды, а владелец, ведущий и то и другое, вручную держит две системы в согласии. Модуль жилья в Korat от этого разрыва отказывается. Отель, курорт, апартаменты, кондоминиум, дом в посёлке и гостевой дом — один тип бизнеса с одним каталогом типов номеров под ним. Объект может принять бронь на две ночи и договор на год из одной и той же сетки номеров, а отчёты за месяц покрывают и то и другое.

Единица — тип номера, а не отдельный номер

Объект описывается набором типов номеров — у каждого фотографии, цена за ночь, количество, описание и удобства — а не списком отдельно настроенных комнат. Такова и настоящая форма цен и доступности: восемь одинаковых улучшенных двухместных — это один продукт с количеством восемь, а обращение с ними как с восемью продуктами означает восемь мест, где меняется цена, и восемь шансов одно пропустить. В обзоре сетка или список показывают цену «от», рейтинг и значок типа, чтобы гостевой дом и кондоминиум различались до нажатия.

Рейтинг складывается из отзывов гостей с подтверждённым проживанием

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

Сезонные и акционные цены, посчитанные один раз и использованные дважды

Цены меняются: Сонгкран (тайский Новый год в середине апреля, пик поездок), длинные выходные, низкий сезон, промоакция владельца на две недели. Поэтому у типа номера есть правила цен, каждое — диапазон дат плюс поправка в процентах или фиксированной суммой в валюте самого объекта размещения (обычно бат, но не всегда — каждое заведение задаёт свою). Важно не то, что правила есть — они есть в любой системе бронирования, — а то, что число в списке и число, по которому считается бронь, выходят из одного и того же расчёта. Отдельного вычисления цены для показа, которое могло бы отстать от настоящего, здесь нет.

Классический сбой в этой функции — результат поиска, посчитанный одним путём кода, и оформление, посчитанное другим: гостю показывают цену, на которую объект не соглашался, и берут другую. Общий расчёт делает такое расхождение структурно невозможным, а не тем, что надо тестировать. Когда действует акция, карточка показывает зачёркнутую базовую цену со значком, чтобы гость видел размер поправки, а не только число поменьше.

Бронь — это запрос, который подтверждает объект

Онлайн-бронирование собирает даты заезда и выезда, гостя и телефон и попадает во входящие броней объекта. Владелец подтверждает. Счётчик ожидающих стоит на панели консоли живым значком, обновляющимся каждые несколько секунд, рядом с прочими вещами, на которые бизнес обязан ответить, — так что это не очередь, которую надо не забыть открыть.

Запросы обслуживания в номере приходят в ту же консоль

Во время проживания гость может отправить запрос обслуживания в номер из приложения; он приходит в ту же консоль. Маленькая функция с непропорционально большим влиянием на работу небольшого объекта, потому что альтернатива — телефон в номере, на который никто не отвечает, или прогулка до стойки.

Бронь — это резервирование, а не предоплата. Форма собирает даты, гостя и телефон, а объект подтверждает. Korat не принимает карту при бронировании, не держит депозит и не проводит оплату проживания — расчёт происходит с объектом.

То же и с месячным счётом: он формируется, показывается арендатору и несёт признак оплаты, который ставит владелец. Признак фиксирует, что деньги пришли; он их не перемещает.

Сетка номеров и консоль владельца

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

Отчёты, клиентская база и кадры — плитки для любого бизнеса

Вокруг них стоят плитки, которые получает любой тип бизнеса. Отчёты: выручка, число заказов, средний чек, разбивка на наличные, PromptPay и прочее, пятёрка лидеров продаж, график выручки за семь дней и периоды «сегодня», «7 дней», «30 дней», «всё время», с перепечаткой чека и текстом чека для отправки. Налоговую накладную выставить нельзя: это доступно только плательщикам НДС, а регистрация ни одного заведения в системе пока не записана. База клиентов строится из журнала продаж с заметками, метками, историей и баллами, которые копятся по ставке, заданной самим заведением в своей валюте — для объекта, принимающего возвращающихся командированных, именно эта история и полезна. Кадры: приход и уход по GPS с комментарием, заявки на отпуск, смены и зарплата с отработанными минутами и переработкой после восьми часов в день, объявления и задачи.

Помесячная аренда: показания превращаются в счёт

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

Это та часть управления небольшим домом, которая порождает больше всего споров, — именно потому, что обычно ведётся в тетради. Хранение показаний рядом с договором позволяет проследить счёт до двух чисел, из которых он вышел: ответ на вопрос «почему в этом месяце больше» лучше, чем пересчёт с нуля. Наём комнаты и выдача вещи под залог живут в одном модуле: см. прокат и аренду.

Два модуля особенно часто оказываются рядом с объектом размещения: запись, если при нём есть спа или процедурный кабинет, и парковка, которая выдаёт постоянным жильцам месячные абонементы по номеру машины.

Права персонала и то, чего гость не видит

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

В приложении для Android эти проверки выполняются на клиенте. Та же матрица есть в базе как has_capability(business_id, capability), её используют политики защиты на уровне строк, и пресеты раскрываются на сервере, так что сервер не верит клиенту в вопросе роли, — но сказать, что вся консоль сегодня защищена на сервере, было бы преувеличением, поэтому мы этого не говорим.

Частые вопросы

Можно ли вести посуточные номера и месячных жильцов в одном объекте?

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

Как работают высокий сезон и акции?

У типа номера есть правила цен: диапазон дат плюс поправка в процентах или фиксированной суммой в валюте объекта размещения. Список и бронь считаются одним и тем же расчётом, поэтому гость платит ту цену, которую увидел. При акции карточка показывает зачёркнутую базовую цену со значком.

Платит ли гость при бронировании?

Нет. Форма брони собирает даты, гостя и телефон, а объект подтверждает её из входящих. Расчёт происходит с объектом; Korat не принимает карту и не держит депозит при бронировании.

Как арендатору выставляются вода и электричество?

Владелец вносит показания счётчиков за месяц, и счёт формируется из них по настройкам аренды и коммунальных на типе номера. У каждого счёта есть признак оплаты, поэтому неоплаченные остаются видимым списком, а не тем, что надо помнить.

Кто может написать отзыв о моём объекте?

Только тот, про кого база может доказать проживание. Проживание — один из подходящих видов в представлении права на отзыв; все остальные видят карточку с объяснением, почему кнопки нет. Средняя оценка пересчитывается триггером из строк отзывов.

Заведите объект

Добавьте типы номеров, напишите сезонное правило и посмотрите, как одна и та же цена появляется в списке и в брони.