Работа без интернета и при недоступности облака
Правило одно: лояльность никогда не блокирует кассу. Если облако SLP не отвечает, чек всё равно можно закрыть.
Что работает, а что нет#
| Операция | Нет связи с облаком |
|---|---|
| Продажа, оплата, закрытие чека, смена | Работает как обычно |
| Идентификация гостя и поиск по номеру | Не работает: «Лояльность временно недоступна» |
| Личная скидка гостя | Не применяется |
| Списание бонусов | Не применяется: чек закрывается деньгами полностью |
| Гашение купона | Не работает — но купон при этом не сгорает |
| Начисление баллов за чек | Не теряется — встаёт в очередь и уходит в облако при восстановлении связи |
| Возврат / сторно | Оформляется на кассе штатно, откат в облаке встаёт в ту же очередь |
Почему скидка и списание отключаются, а начисление — нет: обе суммы считает облако по актуальному балансу, лимитам и составу чека. Угадывать их на кассе нельзя — иначе гость получит скидку, на которую не имеет права, или спишет несуществующие баллы. А начисление можно посчитать позже, по уже закрытому чеку, без риска.
Если связь пропала после того, как гость опознан и скидки уже легли в чек, чек закроется с ними: пересчёт просто не состоится, а сведение уйдёт в облако вместе с чеком, когда связь вернётся.
Как устроена очередь#
- Каждый закрытый чек и каждое сторно записываются в файловую очередь в папке данных плагина.
- Очередь переживает перезапуск кассы и обновление плагина — она не лежит в папке с файлами плагина.
- Порядок строго соблюдается: сторно не может уехать в облако раньше закрытия своего чека.
- Плагин пытается разгрузить очередь по таймеру (по умолчанию каждые 20 секунд), а также при открытии и закрытии кассовой смены.
- Пока связи нет, плагин не «долбит» сервер: очередной прогон останавливается до следующего тика.
- Повторная отправка безопасна: у каждой записи стабильный идентификатор, а операции в облаке идемпотентны по чеку — дважды начислить нельзя.
Через все эти механизмы начисление всегда идёт одним путём — через очередь, даже когда связь есть. Так проще: порядок и защита от потерь работают одинаково в любых условиях.
«Проблемные» записи#
Если облако устойчиво отвечает отказом по конкретной записи (например, чек ссылается на удалённую карту), такая запись через несколько попыток убирается в отдельную папку «на разбор», чтобы не блокировать всю очередь. Это редкий случай; такие записи разбирает поддержка SLP.
Известное ограничение: при очень длительном обрыве связи (около 15 минут и больше непрерывных неудачных попыток при настройках по умолчанию) корректная запись тоже может попасть в папку «на разбор». Данные при этом не теряются — они лежат на кассе и восстанавливаются вручную. Поведение уточняется.
Как понять, что касса на связи#
- В кабинете заведения у каждого терминала есть время последней активности. Плагин отмечается «жив» раз в несколько минут (по умолчанию каждые 5) и дополнительно на открытии и закрытии смены.
- Молчание терминала дольше нескольких часов — повод проверить кассу: выключена, потеряла сеть или плагин не загрузился.
- В логе плагина при разгрузке очереди появляются строки вида
SLP: дренаж очереди — отправлено N, ... осталось M.
Что делать заведению при долгом офлайне#
- Убедиться, что касса продолжает продавать — это главное.
- Предупредить кассиров: опознать гостя, дать его скидку, списать баллы и погасить купон временно нельзя; начисление придёт гостям позже.
- Восстановить интернет. Очередь уедет автоматически, вмешательство не нужно.
- Не переустанавливать плагин и не чистить его папку данных — там лежат неотправленные начисления.