Работа без интернета и при недоступности облака

Правило одно: лояльность никогда не блокирует кассу. Если облако SLP не отвечает, чек всё равно можно закрыть.

Что работает, а что нет#

ОперацияНет связи с облаком
Продажа, оплата, закрытие чека, сменаРаботает как обычно
Идентификация гостя и поиск по номеруНе работает: «Лояльность временно недоступна»
Личная скидка гостяНе применяется
Списание бонусовНе применяется: чек закрывается деньгами полностью
Гашение купонаНе работает — но купон при этом не сгорает
Начисление баллов за чекНе теряется — встаёт в очередь и уходит в облако при восстановлении связи
Возврат / сторноОформляется на кассе штатно, откат в облаке встаёт в ту же очередь

Почему скидка и списание отключаются, а начисление — нет: обе суммы считает облако по актуальному балансу, лимитам и составу чека. Угадывать их на кассе нельзя — иначе гость получит скидку, на которую не имеет права, или спишет несуществующие баллы. А начисление можно посчитать позже, по уже закрытому чеку, без риска.

Если связь пропала после того, как гость опознан и скидки уже легли в чек, чек закроется с ними: пересчёт просто не состоится, а сведение уйдёт в облако вместе с чеком, когда связь вернётся.

Как устроена очередь#

  • Каждый закрытый чек и каждое сторно записываются в файловую очередь в папке данных плагина.
  • Очередь переживает перезапуск кассы и обновление плагина — она не лежит в папке с файлами плагина.
  • Порядок строго соблюдается: сторно не может уехать в облако раньше закрытия своего чека.
  • Плагин пытается разгрузить очередь по таймеру (по умолчанию каждые 20 секунд), а также при открытии и закрытии кассовой смены.
  • Пока связи нет, плагин не «долбит» сервер: очередной прогон останавливается до следующего тика.
  • Повторная отправка безопасна: у каждой записи стабильный идентификатор, а операции в облаке идемпотентны по чеку — дважды начислить нельзя.

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

«Проблемные» записи#

Если облако устойчиво отвечает отказом по конкретной записи (например, чек ссылается на удалённую карту), такая запись через несколько попыток убирается в отдельную папку «на разбор», чтобы не блокировать всю очередь. Это редкий случай; такие записи разбирает поддержка SLP.

Известное ограничение: при очень длительном обрыве связи (около 15 минут и больше непрерывных неудачных попыток при настройках по умолчанию) корректная запись тоже может попасть в папку «на разбор». Данные при этом не теряются — они лежат на кассе и восстанавливаются вручную. Поведение уточняется.

Как понять, что касса на связи#

  • В кабинете заведения у каждого терминала есть время последней активности. Плагин отмечается «жив» раз в несколько минут (по умолчанию каждые 5) и дополнительно на открытии и закрытии смены.
  • Молчание терминала дольше нескольких часов — повод проверить кассу: выключена, потеряла сеть или плагин не загрузился.
  • В логе плагина при разгрузке очереди появляются строки вида SLP: дренаж очереди — отправлено N, ... осталось M.

Что делать заведению при долгом офлайне#

  1. Убедиться, что касса продолжает продавать — это главное.
  2. Предупредить кассиров: опознать гостя, дать его скидку, списать баллы и погасить купон временно нельзя; начисление придёт гостям позже.
  3. Восстановить интернет. Очередь уедет автоматически, вмешательство не нужно.
  4. Не переустанавливать плагин и не чистить его папку данных — там лежат неотправленные начисления.