Міський парк, п'ять атракціонів, сезон із травня до вересня. Каса стоїть біля входу або взагалі у вагончику посеред алеї, біля каруселей — свої люди. Власник приїжджає ввечері, забирає гроші й рахує їх, ні з чим не звіряючи, бо звіряти немає з чим. Усе, що в нього є, — слово співробітника і власне відчуття, що «сьогодні було людно».

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