exchanger/docs/operations/SETTINGS_ACCESS_MATRIX.md

12 KiB
Raw Permalink Blame History

Матрица доступа к настройкам Exchanger

Назначение экрана

Экран настроек предназначен для владельца автомата, а не для технического специалиста. В production он открывается физической кнопкой SERVICE; опциональный единый PIN включается в самом приложении. В debug-сборке F10 открывает тот же состав пользовательских настроек.

Доступные владельцу разделы

Раздел UI Секции AppSettings Применение
Общие Branding.ShortText, Branding.SupportPhone, Security сразу после автосохранения
Звук Audio сразу, включая live-preview
Промо Advertisement сразу после автосохранения
Тарифы Pricing сразу, только когда нет операции
Оплата Payments, Timeouts сразу, только когда нет операции
Сервис MenuVisibility, TokenInventory.Enabled, отдельный user://data/token_inventory.json сразу после автосохранения; остаток — после ручного добавления или подтверждения пересчёта

Технические данные, отсутствующие в UI владельца

  • внешний DLC темы, путь к .pck, текущая тема и ReducedEffects;
  • сводки применения restart-only изменений и технический итог плейлиста промо-роликов;
  • mock-режим, COM-порт, baud rate, reconnect и остальные параметры контроллера;
  • fullscreen, borderless, debug-window и target FPS;
  • версия приложения, состояние соединения, порт, запас и последние диагностические предупреждения;
  • уровень журналирования, размер и срок хранения журналов;
  • инженерная тестовая выдача одного жетона (владелец вместо неё видит безопасный учёт остатка);
  • AES-ключ, платёжные секреты, сырые кадры, команды и ответы контроллера;
  • framing, handshake, профиль силового канала и привязки IN8/IN1/IN4/IN24.

Аппаратные значения находятся в отдельном user://config/technical_settings.toml и изменяются только при техническом обслуживании вне приложения. Порт, оба хоппера, привязки входов и параметры связи описаны в TECHNICAL_CONFIGURATION.md. Они не участвуют в валидации формы владельца и не могут заблокировать автосохранение доступных ему параметров.

PIN и безопасность операции

После включения или сброса PIN владелец при следующем входе дважды вводит 4–12 цифр. Открытый PIN не сохраняется: в JSON попадают только соль, PBKDF2-SHA256-хеш и число итераций. Пять ошибок блокируют проверку на 30 секунд.

Экран открывается только из Home. Пользовательская сессия получает снимок настроек при создании SessionFlow, поэтому изменения не попадают в середину оплаты или выдачи. Допустимые изменения сохраняются атомарно через 0,5 секунды после последнего ввода. Закреплённая снизу кнопка «Сохранить и выйти» немедленно завершает ожидающее сохранение и закрывает экран только после успеха. Повторный IN8 использует тот же безопасный путь. При ошибках в полях, незавершённом пересчёте или тестовой выдаче пользователь остаётся в настройках.

Футер находится вне ScrollContainer, поэтому остаётся на нижней границе экрана при прокрутке одним пальцем или зажатой ЛКМ. Нижний технический зазор в содержимом позволяет поднять последние поля выше футера, а жест, начатый на самой кнопке, список не прокручивает.

В разделе «Общие» владелец редактирует только «Свой текст» для речевого bubble и телефон поддержки. Поле названия автомата и отдельный branding-preview не показываются. Сохранённое Branding.ApplicationName остаётся совместимым с существующей конфигурацией и продолжает использоваться там, где его отображает текущая тема, но через экран владельца не изменяется.

Сервисный учёт жетонов

Число в разделе «Сервис» — учётный остаток владельца, а не показание датчика хоппера. При первом запуске он равен нулю и хранится отдельно от настроек в user://data/token_inventory.json. Подтверждённая обычная выдача уменьшает остаток, но не уходит ниже нуля.

Переключатели «Учитывать остаток жетонов» и «Не продавать больше остатка» включены по умолчанию. Первый отвечает за ведение, списание и отображение точного остатка. Второй независимо включает лимит полного количества к выдаче с учётом бонуса. При активном лимите недопустимая карточная сумма отклоняется до запроса оплаты у терминала, а наличная выдача — до команды хопперу; кнопки готовых карточных сумм недоступны, а ручной ввод показывает ошибку.

Если учёт включён, а лимит выключен, остатки и сервисные действия остаются видимыми, подтверждённая выдача продолжает списываться, но сохранённое число не блокирует оплату. Качественное состояние Home для доступности покупки в этом режиме определяется бинарными датчиками. В DualHopperAuto из hopper 1 планируется его записанный остаток, а вся недостающая часть направляется в hopper 2.

При выключенном учёте отдельный переключатель лимита скрывается, сохранённое число не ограничивает оплату и не уменьшается при выдаче. Точный общий и раздельные остатки, кнопки пересчёта и добавления, а также их статус скрываются; на Home скрывается только приблизительное число, но бинарное состояние датчиков продолжает показываться. В DualHopperAuto выдача без учёта направляется в hopper 1 и сохраняет разбиение команд на последовательные пакеты не более 99. Автоматического failover после ошибки нет. Файл остатка не удаляется: перед повторным включением учёта после выдач без него необходимо пересчитать хопперы, иначе будет использовано устаревшее сохранённое значение.

Владелец может:

  • вручную ввести добавляемое количество и подтвердить его отдельным шагом;
  • запустить автоматический пересчёт: приложение включает активный хоппер, считает фронты датчика выдачи и завершает операцию после 10 секунд без нового импульса;
  • исправить полученное число перед окончательной записью, например если оставшиеся в хоппере жетоны были извлечены вручную и добавлены к общей куче.

Во время пересчёта нельзя начать оплату, обычную выдачу или закрыть настройки. При отмене, потере связи либо ошибке старый учётный остаток сохраняется. После штатного завершения старое значение обнуляется, а новый остаток записывается только после подтверждения владельцем.

Скрытие элементов главного экрана

Панель «Скрытие элементов меню» находится в разделе «Сервис» и управляет тремя независимыми флагами MenuVisibility: показом учётного остатка жетонов, пользовательского текста вместе с theme-owned персонажем справа и целого промо-блока. Все элементы по умолчанию показаны, поэтому миграция старой конфигурации не меняет существующий интерфейс. Переключатели применяются сразу после автосохранения.

Host изменяет только свойство видимости готовых узлов по binding-id. Он не создаёт, не перемещает и не переоформляет содержимое внешней темы. Если скрыта панель остатка или промо, связанные с ней поверхности интерактивного питомца также исключаются из графа при следующем входе на Home.

Аудит user://logs/settings-audit.jsonl содержит дату, внутренний уровень доступа, названия изменённых разделов и флаг необходимости перезапуска. Значения, пути, PIN, платёжные данные и протокольные кадры в него не записываются.