Безопасность

Что защищает деньги и данные

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

Бэк-офис: кто в системе и с какого устройства

Доступ и ключи

🔑

Пароли и PIN

Хранятся необратимым хешем (Argon2id). Восстановить пароль нельзя — только сменить. PIN не видит даже администратор.

🔐

Секреты вне кода

Ключи внешних сервисов и строки подключения к базе живут в серверном хранилище секретов, не в репозитории и не в клиентском коде.

🎫

Короткие сессии

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

🛡

Права на сервере

Каждое действие проверяется на сервере по коду права. Скрытая кнопка в интерфейсе — удобство, а не защита.

⏱

Защита от подбора

Счётчик неверных попыток входа и PIN с временной блокировкой.

🗝

Ключи интеграции

Один ключ — одно заведение. Чужие данные через него недостижимы по устройству системы. Отзыв мгновенный.

Журнал

История всех действий с заказом

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

  • Удаление позиции после отправки на кухню помечается отдельно — это прямой убыток, и он не теряется среди обычных правок
  • Видно, что было до и что стало после: старая цена и новая, старое количество и новое
  • События связаны цепочкой контрольных сумм: каждая запись подписывает предыдущую
  • Изменение прошлого события нарушает цепочку, и это видно при проверке
  • Журнал только дополняется: строки в нём не редактируются и не исчезают
Раздел «Контроль» →
Бэк-офис: карточка чека с удалёнными позициями
Удаление

Продажи, движения склада и журнал не удаляются

Это не настройка прав, которую можно ослабить, а устройство системы. Ни кассир, ни управляющий, ни владелец, ни мы не можем стереть проданный чек, движение склада или строку журнала.

  • Чек не удаляется. Ошибочный закрывается возвратом — и возврат остаётся видимым, с причиной и автором
  • Проведённый документ не редактируется. Исправление — сторно или корректирующий документ, история цела
  • Блюда и продукты с историей уходят в архив, а не стираются: отчёт за прошлый месяц через год покажет то же самое
  • Записи журнала и движения склада запрещено изменять и удалять на уровне базы данных
  • Резервная копия снимается перед каждым изменением структуры и ежедневно; восстановление проверяется
Архив и удаление →
Касса: чеки смены — возврат, копия чека и повтор бегунка

Деньги и история

🧾

Неизменяемые документы

Проведённый документ не редактируется. Исправление — сторно, история остаётся целой.

⛓

Цепочка контрольных сумм

Каждое событие чека связано с предыдущим контрольной суммой, поэтому изменение прошлой записи будет обнаружено.

📒

Журнал действий

Кто, что, когда, что было до и что стало после. Журнал только дополняется.

🪙

Целые минорные единицы

Все суммы хранятся в сатангах, округление выполняется только при отображении, поэтому погрешность не накапливается.

🔁

Идемпотентность оплат

У каждой оплаты свой ключ: повтор не списывает дважды, в том числе после офлайна.

🔒

Одновременная работа касс

Один чек нельзя закрыть с двух касс, а один остаток — списать дважды. Это проверяется автоматическими тестами.

Обновления

Изменения не ломают работающее заведение

Обновления устанавливаются автоматически по правилам, которые мы выработали на собственном опыте эксплуатации.

  • Копия базы снимается перед каждой миграцией
  • Изменение базы сначала проверяется на копии рабочих данных и только потом применяется
  • Разрушающие изменения — в два релиза: сначала код перестаёт читать поле, через неделю оно сносится
  • Выкладка запрещена в обеденный и вечерний сервис — перезапуск на глазах у гостя недопустим
  • После выкладки — проверка сценариев и наблюдение за журналами
  • План отката пишется до деплоя, а не после
Доступ поддержки

Как мы заходим в ваш аккаунт

Иногда разобраться с проблемой можно только изнутри кабинета заведения. Это отдельный механизм, а не «общий пароль у разработчика».

  • Вход поддержки идёт через отдельную панель с собственной учётной записью и вторым фактором
  • Каждый вход записывается: кто из поддержки, в какое заведение, когда
  • Действия сотрудника поддержки попадают в тот же журнал, что и действия ваших людей
  • Пароли и PIN ваших сотрудников нам не видны — они хранятся необратимым хешем
  • Ключи интеграции показываются один раз при выпуске; восстановить их не можем и мы
Бэк-офис: журнал входов — кто, откуда и когда

Что происходит при сбое

📴

Нет интернета

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

🖨

Отказал принтер

Продажи не останавливаются; чек печатается повторно с экрана чеков, кухне помогает экран кухни.

🔌

Недоступен внешний сервис

Операция возвращается к ручному сценарию, повтор не создаёт дубля, ошибка видна администратору.

Нужны детали для технической оценки?

Отвечаем на вопросы интеграторов и службы безопасности партнёров, показываем систему на демо-доступе.