ЛояльностьiikoCard внутри iiko: пять ступеней кэшбэка, списание до 30 % счёта, сгорание через 180 дней; отдельная программа для скидочных категорий
Стык с кассойiiko Cloud API, один клиент на все модули, токен в файловом кэше. Своей копии балансов нет, только кэш на минуту
Перенос базыСкрипт с самотестом на 16 сценариев, снимки до и после, сверка каждой карточки по API. Карточки заведены заранее без денег, балансы перенесены одним окном по свежей выгрузке
Подтверждение номераЗвонок гостя на выданный номер через провайдера проверок. Одна активная проверка на номер, побеждает первая, отзыв прежних запрещён
Сессия кабинетаПодписанная кука на 90 дней, HttpOnly и Secure, поколение сессий в подписи: выход на всех устройствах одной цифрой в конфиге
Код на сегодняРотация в 06:00 в три прохода: завести новый, убедиться, снять вчерашний. Уборщик просроченных кодов раз в минуту
ЗащитаТокен формы с подписью, приманка для ботов в разметке, строгая проверка Origin, лимиты по номеру и по адресу, замки на гонки в базе
Правило карточкиФорма регистрации не переписывает данные существующего гостя: в базе перенесённые карточки, и знающий чужой номер не должен их править. В кабинете гость правит только свою
РевьюКод каждого модуля прошёл несколько раундов независимого ревью: регистрация, выдача кода, кабинет гостя
Остаточный риск записан, а не спрятан: код на сегодня можно переслать, а звонок подтверждает номер, но не того, кто держит телефон. Поэтому касса по-прежнему не ищет гостя по номеру, а код живёт сутки.