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

Это не небрежность. Это следствие того, что в парке продажа и катание — два разных события, разнесённые и во времени, и между людьми. Гость платит в одном месте, катается в другом, и между этими двумя точками нет ничего, что связывало бы их автоматически.
Деньги теряются в двух разных местах — и лечится это по-разному
Первая дыра — на кассе. Гость заплатил, билет не пробили, деньги не дошли. Здесь важно, чтобы каждая продажа оставляла след, который нельзя стереть задним числом.
Вторая дыра — у самого аттракциона. Карусель прокрутилась, а билета не было вовсе: «свои», «на минуточку», «да он же маленький». Прокатную машинку дали «на кружочек» и денег не взяли. Здесь бесполезен любой учёт на кассе — событие произошло мимо неё.
Это две разные задачи, и решать их одним инструментом не выходит. Дальше — про то, чем закрывается каждая.
Почему готовые системы для парков вам не подойдут
Если поискать «автоматизация парка аттракционов», выдача целиком состоит из билетно-пропускных систем. Устроены они везде одинаково: гость получает браслет или карту с чипом, каждый аттракцион оснащается контроллером и бесконтактным считывателем, на входах ставятся турникеты. Контроллер сам разрешает проход или запускает аттракцион, списывая деньги с браслета.
Это работает — для большого крытого парка с одним входом и потоком, который окупает инфраструктуру. Стоимость такие поставщики не публикуют: у всех без исключения на сайте написано, что цена рассчитывается индивидуально, и оставлен телефон. Уже по одному этому понятно, для кого написано.
Но главная причина, по которой это не про городской парк, даже не в деньгах. Такие системы охраняют периметр — вход, проход, зону. У открытого парка периметра нет. Аллея, деревья, четыре стороны света. Перекрывать нечего, и весь смысл турникета исчезает.
Первая половина: билет, который живёт отдельно от посещения
В RentOS для этого есть режим «Билеты». Кассир собирает заказ из того, что просит гость: двое взрослых на колесо, трое детей на карусель. Заказ проводится целиком, одной оплатой, и гость получает короткий номер — такой, который легко назвать вслух.
Внутри заказа каждая позиция — отдельный билет. Три билета на карусель не обязаны быть использованы разом: подошли двое — погасили два, третий остаётся живым. Цены стоят на самом аттракционе, своим набором вариантов: «Взрослый», «Детский», «Льготный», причём нулевая цена тоже допустима, если кого-то пускают бесплатно. Кассир не вводит сумму руками, он выбирает вариант — ошибиться и «случайно» продать дешевле не получится.
Если цены среди сезона поменяются, уже проданные билеты сохранят прежнюю стоимость, и прошлые сверки от этого не поедут.
Сотрудник у карусели видит только своё
Гость называет номер заказа, Сотрудник набирает его и видит состав. У вкладки заказов есть личная настройка — фильтр по аттракциону: «я стою на Карусели». После этого свои билеты идут первыми, чужие приглушены, и человек не разбирается в чужом заказе, чтобы найти в нём свою строчку.
Гашение поштучно, и проверяет его сервер, а не подсказка на экране: погашенный билет второй раз не пройдёт, истёкший — тоже. При желании гашение можно вообще выключить: тогда система просто помнит, что было продано. Это всё ещё полезно — когда гость спорит «я платил, а меня не пускают», по номеру заказа поднимается состав и сумма. Переключается это в любой момент и на деньги не влияет.
Выручка считается по продаже, а не по посещению
При сдаче итогов расчётная выручка — это сумма заказов, проданных с прошлой сдачи, независимо от того, когда билеты погасят. Так и должно быть: билет можно подарить, купить впрок или прийти по нему завтра. Деньги пришли сегодня — значит, сегодня они и должны быть в кассе.
Вторая половина: счётчик, который не наблюдает, а разрешает
Билеты закрывают кассу. Технику они не закрывают: карусель можно прокрутить просто так, а машинку дать покататься мимо всякого учёта.
Здесь работает вторая механика — счётчик на самом аттракционе. У Сотрудника RFID-метка, на аттракционе считыватель. Касание — и происходят сразу три вещи: показание счётчика увеличивается на единицу, подаётся питание и запускается обратный отсчёт. Без касания техника не включится вообще.
Основное применение — прокат: детские электромобили, картинг, квадроциклы. Всё, где гость платит за поездку определённой длительности.
Таймер решает вторую половину задачи
Обратный отсчёт здесь не удобство, а часть контроля. Оплачено десять минут — через десять минут питание снимается, и машинка встаёт сама. Сотруднику не нужно смотреть на часы и не нужно ничего никому объяснять: поездка закончилась не по чьему-то решению, а физически. Заодно исчезает целый класс споров «мы же только сели».
И — что важнее для владельца — исчезает возможность продать десять минут, а откатать пять, положив разницу себе. Длительность задаёт не человек у машинки, а прибор.
Разница с обычным счётчиком принципиальная. Обычный счётчик — свидетель: он фиксирует то, что и так произошло, и на него можно не смотреть. Этот — привратник. Он поездку разрешает и он же её заканчивает, поэтому показание не может отстать от реальности. Оно и есть реальность.
Работает это не только на технике с аккумулятором: там, где нужно, тот же счётчик коммутирует обычную сеть — на батуте или на VR-аттракционе он включает питание ровно так же, как на электромобиле.
При сдаче итогов Сотрудник вносит показание, а система сама считает разницу с прошлым и умножает на цену. Никакого «примерно столько было».
Две половины закрывают разные дыры
Вместе это складывается в замкнутый контур, и стоит проговорить, кто за что отвечает:
- Счётчик отвечает за то, что поездка была и была оплаченной длительности. Не приложил метку — не поехало. Вышло время — встало.
- «Разница» отвечает за то, что деньги дошли. Система умножает поездки на цену и кладёт своё число рядом с тем, что реально внесли в кассу.
Порознь каждая половина дырявая. Счётчик ничего не знает про деньги. Сверка без счётчика верит человеку на слово. Вместе прятать нечего: количество и время зафиксированы железом, деньги — арифметикой.
Когда парку нужны не билеты, а пуски
Билеты нужны не всякому парку, и правило выбора простое — оно про людей, а не про аттракционы:
- Деньги берёт кассир, а пускает другой человек у аттракциона — это «Билеты».
- Тот же человек взял деньги и тут же запустил — это «Пуски», и билеты только добавят работы.
Тип аттракциона не решает ничего. Одна и та же карусель считается по-разному в зависимости от того, как у вас устроена касса.
Парк редко бывает однородным
В реальном парке рядом стоят вещи, которые считаются по-разному: колесо и карусель — билетами с кассы, прокат электромобилей и картинг — по счётчику, батут — пусками. Это нормально и не требует нескольких разных программ. Каждая зона живёт в своём режиме, а кабинет, касса и вечерняя сводка у них общие.
А кафе, снеки и сувениры — это вообще не режим учёта. Для них есть отдельный модуль «Товары»: каталог с ценами, остатки по точке с ревизией и своя сверка кассы, не привязанная к сдаче итогов по зонам. Продаёт тот же Сотрудник, оплата наличными, безналом или с баланса клиента.
Начать при этом можно вообще без вложений: пока счётчиков нет, Сотрудник отмечает поездки касанием по экрану, и формула расчёта та же самая. Железо усиливает учёт, но ни один режим его не требует — и это, пожалуй, главное отличие от систем, где учёт начинается с монтажа.