Словарик
Слова, которые встречаются в панели, в этой документации и в разговоре с разработчиком. По алфавиту.
Аварийный ключ — механический ключ в замке ячейки. Открывает дверцу, даже когда нет питания и связи. Каждое открытие ключом надо записывать: иначе система поднимет трев огу «дверь открылась без команды».
Гнездо (канал) — место на плате замков, куда подключён один замок. Всего их 27, пронумерованы прямо на плате: CH01 … CH27. Номер гнезда и номер ячейки на дверце — разные вещи, связывает их карта ячеек.
Датчик двери — маленький выключатель в замке. Дверца закрыта — нажат, открыта — отпущен. Единственный источник знания о том, что происходит с дверцей.
Выбранный шкаф — тот, про который сейчас говорит экран. Живёт в адресе страницы
(?postamat=…), поэтому ссылку можно переслать коллеге, и у него откроется тот же шкаф.
С 6 сентября выбор переезжает с вами по меню на разделы, которые про один шкаф:
«Ячейки», «Аренды и коды», «Уведомления», «Журнал», «Объезд», «Привязка каналов»,
«Настройки». ⛔ Прежде он терялся на каждом переходе, и экран без параметра молча брал
первый шкаф из списка — дежурный, выбравший шкаф Б, читал журнал шкафа А.
⚠️ Разделы про весь парк («Обновления», «Пользователи», «Данные и приватность»,
«Доставка уведомлений», «SMS (имитация)») параметр не получают намеренно: они и так про все
шкафы, а залипший в закладке ?postamat=… уверял бы, что вы смотрите один.
⚠️ Сам выбор стоит в адресе, поэтому перезагрузка страницы его не теряет; шапка помнит его
отдельно, и после перезагрузки он возвращается сам, даже на разделах, где шкафа в адресе
нет вовсе. ⛔ Здесь стояло «эта память живёт только до перезагрузки» — устарело 6 сентября.
✅ С 7 сентября память именная и живёт в браузере: шкаф возвращается и в новом окне,
и на следующий день — но только тому же вошедшему.
⛔ Здесь же стояло «шапка помнит его отдельно — в хранилище вкладки… Не переживает он
новой вкладки: там ещё ничего не выбирали, и раздел откроется на первом шкафу
по порядку» — с 7 сентября неверно, новая вкладка открывается на вашем шкафу. Сменщиков
за одним ноутбуком разводит теперь не срок жизни вкладки, а имя вошедшего: вход другого
человека стирает память целиком (и шкаф, и парковый счёт тревог) и поднимает его
собственную. Выход из панели стирает запись вошедшего вместе с парковым счётом тревог.
⚠️ Цена названа прямо: запись лежит в профиле браузера этой машины и попадает в его
резервную копию; внутри — два вн утренних номера (ваш и шкафа) и больше ничего.
🔴 Ссылка на шкаф, которого больше нет (отозвали и забыли, а закладка осталась) — тупик:
адрес главнее всего, и все семь разделов отвечают «не найдено», а перезагрузка не помогает,
она сохраняет и адрес. Панель это узнаёт: вместо названия — красная метка «шкафа из ссылки
нет в парке», а рядом кнопка «Открыть «имя»» (когда шкаф в парке один) или список
«выберите шкаф». Без этой кнопки выхода бы не было: при одном шкафе выпадающего списка
на экране нет вовсе, нажимать не на что.
Первый шкаф — тот, который экран берёт, когда явного выбора нет. С 6 сентября порядок
списка задан: сначала работающие, потом ожидающие регистрации, потом отозванные;
внутри — по названию латышской сверкой (Ā рядом с A, а не после Z); при совпадении
названий — по внутреннему номеру. ⛔ Прежде порядка не было задано вовсе: обычно он совпадал
с порядком заведения, но это было совпадение, а не обещание, и «первый шкаф» мог смениться
сам по себе. 🔴 Порядок здесь — поведение, а не оформление: именно он решает, чей журнал,
чью карту и чьи настройки увидит человек, не выбравший шкаф руками.
Журнал — записи о том, что происходило: какую ячейку открывали, когда, по какому поводу. Нужен не только для истории: без него нельзя отличить «дверь открыта, потому что мы её открыли» от «дверь открыта, а команды не было». Фильтруется по дверце — ⚠️ выбор привязан к шкафу и снимается при переходе на соседний, иначе пустой журнал читался бы как «ничего не происходило». ⚠️ Пока едет журнал нового шкафа, экран пишет «Ждём журнал шкафа «имя»» и строки прежнего убирает, а кнопка выгрузки в это время не работает. ⛔ Прежде в эти доли секунды на экране стояло имя нового шкафа и строки прежнего — и выгрузка ушла бы файлом с именем одного шкафа и событиями другого, а файл переживает и экран, и разговор.
Имитация SMS — режим для показа, в котором код клиенту уходит «сообщением» в ящик внутри системы, а панель показывает этот ящик отдельным экраном. 🔴 Наружу не уходит ничего: настоящего шлюза у системы нет. Это единственное место, где код виден человеку из панели, поэтому режим требует отдельного права, каждое чтение пишется в журнал обращений к персональным данным, а выключение режима стирает ящик. На боевом шкафу включать нельзя. 🔴 Ящик — про весь парк, но с 7 сентября каждая строка называет шкаф: «шкаф „Название“», а у сообщений, легших в ящик раньше, — честное «отправлено до того, как ящик стал запоминать шкаф» (связать их со шкафом задним числом не по чему). ⛔ Здесь стояло, что у старых сообщений написано «шкаф не назван: сообщение старше этой пометки». Слова на экране изменились 7 сентября, и не для красоты: у владельца одного шкафа эта подпись стоит у ВСЕГО прежнего ящика, сверху донизу, а «не назван» читается как поломка — на экране, где лежат открытые коды доступа. Теперь подпись говорит про возраст строки, а не про недостачу: коды целы, неизвестно только, с какого шкафа ушло сообщение. ⛔ До этого дня сам экран отправлял искать шкаф по номеру аренды в «Арендах и кодах» — лишний круг, а при двух шкафах ещё и опасный: номер аренды у разных шкафов повторяется. Разбор — сверка вслепую.
Экран писем (/mail/) — приёмник, в который сегодня уходит вся почта сервера: письма
формируются, наружу не идут и лежат здесь. Ссылка «открыть ящик» стоит на экране «Доставка
тревог». 🔴 Внутри писем лежат коды доступа клиентов целиком — тот же класс данных, что
в «SMS (имитации)», — поэтому с 7 сентября вход сюда закрыт тем же правом
sms.outbox.read, то есть только администратору.
⚠️ Вход тот же, что в панель, но одного входа мало, и путать эти две вещи дорого:
дежурный, вошедший в панель, по прямому адресу /mail/ получает страницу «Экран писем
закрыт: в письмах лежат коды доступа клиентов» — это не поломка входа, и повторный
вход её не лечит. ⛔ До 7 сентября сюда пускали любую живую сессию: раздела «Доставка
тревог» у дежурного не было, а письма со всеми кодами открывались по прямой ссылке.
Вывод из оборота — пометка человека на дверце: «эту не предлагать». Система перестаёт
назначать её новым арендам и перестаёт из-за неё тревожиться, а выведенная дверца
не открывается ни клиентом по коду, ни обычной командой «Открыть удалённо» — кнопка гаснет,
и сервер отвечает «сначала верните её в оборот». 🔴 Решение человека сильнее
показаний датчика, и вернуть дверцу в оборот тоже может только человек — а именно
администратор, см. две строки ниже.
⚠️ Одно исключение, и его надо знать: мастер привязки выведенную
дверцу открывать умеет — иначе обряд на новом шкафу был бы невозможен, ведь черновая
карта заводится именно выведенной (apps/api/src/panel/postamats.service.ts, шаг обряда:
право device.enroll).
⚠️ И вывести, и вернуть может только администратор — это право cells.edit,
у роли operator его нет (packages/contracts/src/panel.ts, таблица прав ролей).
Импульс — короткое действие замка: язычок втягивается примерно на треть секунды, и всё. Дальше дверца ничем не держится, а закрывает её человек рукой.
Команда в очереди — то, что происходит, когда вы нажали «открыть» в панели. Постамат забирает команды сам, на очередном сеансе связи — обычно раз в минуту; пока он их не забрал, ничего не открылось. Настоящее подтверждение — событие в журнале. ⚠️ У команды есть срок годности: открытие ячейки и перезапуск киоска живут по пятнадцать минут, шаг мастера привязки — пя ть. Шкаф, вернувшийся на связь позже, команду уже не получит: она не «ждёт вечно», а протухает. Значит команду офлайновому шкафу надо повторить, когда он вернётся.
«У шкафа» — столбец в таблице кодов (карточка аренды на «Арендах и кодах»), отвечающий на вопрос «уже вести клиента к дверце или ещё рано». Появился 7 сентября; до него панель не отвечала на него ничем, и оператор считал минуты по часам на стене. Подписей пять: «код у шкафа» — шкаф сам подтвердил, что дочитал список кодов вместе с этим (дальше связь ему не нужна, коды он проверяет сам); «должен быть у шкафа» — шкаф приходил уже после выпуска, но подтверждения ещё нет, оно приходит следующим кругом; «ещё едет» — после выпуска шкаф не приходил ни разу, панель называет такт этого шкафа и примерный остаток; «шкаф молчит» — ждать бесполезно, пока связь не вернётся; «неизвестно» — сказать нечем, настройки шкафа не получены, и это факт про панель, а не про шкаф. 🔴 Пустая клетка — не «всё хорошо»: у отозванного и просроченного кода стоит прочерк, потому что вопрос к ним другой. ⚠️ Столбец сам обновляется первые десять минут после выпуска; дальше вопрос «доехал ли» — это уже не про такт связи, а про поломку, и отвечает на него тревога «шкаф офлайн». Подробно — код клиента и блокировка.
Объезд — экран панели, на котором несколько выбранных дверец открываются подряд,
а второй фактор спрашивается не на каждую дверцу, а на пачку. Взамен: список ячеек
фиксируется до начала и на ходу не пополняется («заодно ещё вон ту» — это уже новый
объезд), сам объезд живёт 20 минут (apps/panel/src/lib/cells/round.ts, ROUND_TTL_MS),
дверцы открываются по одной с паузой около восьми секунд — но не больше семи за один
визит шкафа, см. абзац про потолок ниже, — и остановить его можно
на любом шаге. ⚠️ Через ~45 секунд объезд сам встаёт
на паузу и просит свежий код: код аутентификатора живёт минуту, а объезд идёт дольше.
Аварийное опустошение шкафа делается именно этим экраном.
🔴 Здесь не было сказано про потолок, и из-за него объезд выглядит оборвавшимся.
За один визит шкафа сервер отдаёт ему не больше семи открытий
(packages/lock-protocol/src/pacing.ts, LOCK_OPEN_MAX_PER_PICKUP = 7; применяется
в apps/api/src/device/commands.service.ts). Шкаф приходит за командами примерно
раз в минуту (apps/kiosk/src/runtime/SyncService.ts, SYNC_INTERVAL_MS), поэтому
дверцы открываются пачками до семи в минуту, а не ровно одна каждые восемь секунд
по всему списку. Остаток не теряется: невыданные команды остаются в очереди
и уезжают следующим визитом — весь шкаф на 27 ячеек проходится примерно за четыре минуты.
⚠️ Практический вывод для человека у открытого шкафа: пауза после седьмой дверцы —
это норма, а не сбой. Не запускайте второй объезд «вместо зависшего»: список первого
уже зафиксирован и живёт 20 минут, второй просто добавит к очереди ещё команд,
и дверцы начнут открываться там, где вас уже нет.
⛔ Прежняя запись «режим для планового обхода: что забрать, что пополнить, что закрыть»
устарела — точнее, такого списка дел в панели нет вовсе. Экран не ведёт задания
по объекту, он только открывает дверцы.
🔴 Объезд принадлежит одному шкафу, и переключение шкафа его обрывает (с 6 сентября). Продолжить прерванный нельзя — начинается новый, с новым кодом подтверждения. На экране остаётся красная строка, которая не гаснет сама, и в ней сказано главное: сколько команд успело уйти. Текста два разных, а не один с числом, и разница не словесная: один говорит, что столько-то дверец откроется и закрывать их надо рукой, — и посылает человека к шкафу; второй говорит, что уйти не успела ни одна и идти незачем. Перепутать их значит либо оставить открытые дверцы на улице, либо съездить впустую. ⚠️ Про законченный объезд панель пишет спокойное «объезд закрыт» и слова «прервано» не употребляет: его закончил сам человек.
Опознание — обязательное поле каждого удалённого открытия: по чему вы поняли, кто
перед вами (packages/contracts/src/panel-ops.ts, cellOpenRequestSchema). Это не
«причина текстом» и не только про звонок клиента: способ выбирается из списка из шести
даже тогда, когда звонка не было вовсе (техник у шкафа, курьер, заклинившая дверца).
⚠️ Окно открывается на способе «назвал последние две цифры кода», и на нём кнопка «открыть»
серая, пока цифры не сойдутся, — при открытии не по звонку смените способ, а не
выдумывайте цифры. Подробно — опознание звонящего.
Одноразовый код (второй фактор) — шестизначный код из приложения-аутентификатора, который панель просит на каждое удалённое открытие. Вход был утром, а открывают ячейку сейчас — это разные события.
Подсказка кода — последние две цифры кода клиента, хранящиеся в системе для разговора по телефону. Оператору они не показываются никогда: см. Опознание звонящего.
Карта ячеек — список «какая дверца к какому гнезду подключена». Задаётся человеком через мастер привязки; автоматически её получить невозможно. См. Карта ячеек.
Киоск — программа на планшете постамата, та самая, которую видит клиент. Она же разговаривает с платой замков.
Мастер привязки — пошаговая процедура заполнения карты ячеек, в которой каждая строка подтверждается физически. См. Мастер привязки.
Надзиратель (сторожевой таймер) — микросхема внутри платы, которая перезагружает шкаф, если прогр амма перестала подавать признаки жизни. Срок — около пяти минут. См. Почему шкаф перезагружается сам.
Панель — веб-интерфейс оператора: «Ячейки», «Аренды и коды», «Уведомления», «Журнал»,
«Объезд», «Настройки», «Обновления», «Данные и приватность». Часть разделов видна только
администратору: «Привязка каналов», «Доставка уведомлений», «Пользователи», «SMS (имитация)» —
кому какой раздел положен, решают права, и лишнего в меню просто не будет.
⚠️ «Лишнего в меню не будет» — это про меню, а не про адреса. Раздел, на который прав
нет, открывается по прямой ссылке (из закладки, из письма коллеги) и отвечает «Раздел
недоступен: у роли „оператор“ нет права …». Поэтому советы вида «откройте „Доставку
тревог“» дежурному выполнить нечем — их надо читать как «попросите администратора».
Сюда же относится экран писем /mail/: он не раздел панели вовсе, и заслон у него
свой — см. запись «Экран писем» выше.
⚠️ «Данные и приватность» есть и у оператора, и это сделано нарочно: вопрос «где мои
данные и что вы про меня храните» человек задаёт ночью, а ночь ю трубку снимает дежурный.
Ответ там уже написан — не сочиняйте его сами.
⚠️ Разделы делятся на два сорта, и по ним по-разному ходит выбор шкафа. Про один шкаф:
«Ячейки», «Аренды и коды», «Уведомления», «Журнал», «Объезд», «Привязка каналов», «Настройки» —
они несут выбранный шкаф в адресе и передают его друг другу. Про весь парк: «Обновления»,
«Пользователи», «Данные и приватность», «Доставка уведомлений», «SMS (имитация)».
🔴 Значок с числом у «Тревог» — парковый: он считает неразобранные уведомления по всем
шкафам, а таблица на экране «Уведомления» — только по выбранному. Числа сходиться не обязаны,
и расхождение как раз и означает «горит ещё где-то». ⛔ Прежде значок считал выбранный
шкаф, и тревога соседнего была не видна вовсе.
🔴 «Доставка уведомлений» — единственный раздел, где шкаф выбирается не в шапке, а в самой
строке: у каждого получателя своё поле «Каких шкафов» — «весь парк» или один шкаф.
⛔ Здесь стояло «там нельзя развести получателей по шкафам вовсе»: правда до 7 сентября,
сейчас — нет. Умолчание осталось прежним, «весь парк», и адреса, заведённые раньше,
парковыми и остались.
🔴 У канала «Push в браузер» шкаф выбирается так же, а вместо адреса — человек
панели: полоска уходит во все браузеры выбранного человека и ни в один, если он нигде не нажимал
«Подписаться». ⛔ Здесь стояло «у него поле заперто на «весь парк» — приходит она всем
подписанным браузерам по тревогам всех шкафов»: правда до 7 сентября, сейчас — нет.
⚠️ Строки, заведённые раньше, по-прежнему уходят всем подписанным браузерам и правки
не требуют. Разбор — тревоги, раздел «У каждого адреса доставки свой шкаф».
Перезапуск киоска — команда, которая перезапускает программу на планшете, а не плату целиком. Просит второй фактор, как и удалённое открытие, и уезжает на шкаф очередью: подтверждение — отчёт о выполнении, а не нажатие кнопки.
Обновление по воздуху — новая версия программы киоска, которая доезжает до шкафа сама, без выезда и без провода. Раздел панели — «Обновления». По воздуху едет только программа (её «начинка»); всё, что меняет саму сборку приложения, по-прежнему означает поездку. ✅ Проверено на живом шкафу 6 сентября, дважды.
Откат обновления — кнопка в разделе «Обновления», возвращающая шкаф на версию,
вшитую в само приложение. ✅ Проверено на живом железе в ночь на 7 сентября, и у него
две оговорки, без которых кнопка выглядит сломанной:
🔴 откат применяется со ВТОРОГО перезапуска киоска. Первый только забирает
распоряжение. Нажали один раз, посмотрели на экран шкафа и решили, что не сработало, —
самая частая ошибка здесь; перезапустите киоск ещё раз (или дождитесь второго
перезапуска) и смотрите после него.
🔴 вернуться на прежнее обновление простым назначением НЕЛЬЗЯ. Шкаф откажется,
и в отчёте будет стоять updateRejectedBySelectionPolicy: он принимает только версию
новее запущенной, а откат считается самой свежей. Это не поломка шкафа и не ваша
ошибка — нужен перевыпуск той же версии разработчиком, и делается он за минуту.
⚠️ На показе откат демонстрировать не стоит: он занимает два круга связи, то есть
около двух минут тишины перед гостем.
Терминал — постамат с точки зрения системы: то, что зарегистрировано, имеет свой токен и может быть отозвано, если плату унесли. 🔴 У терминала три состояния, и в выборе шкафа они названы словами (с 6 сентября): «· ожидает регистрации — планшет о нём ещё не знает» (запись в панели есть, устройство о ней не знает), «· зарегистрирован, но сейчас не на связи» (работал, сейчас молчит) и «· отозван — доступ платы прекращён» (связи не будет и завтра, пока шкаф не вернут в строй и не зарегистрируют заново). У исправного шкафа не пишется ничего. ⛔ Прежде все три выглядели одинаково — «· не на связи», — и это стоило выезда: человек ехал чинить связь у шкафа, которому доступ прекращён навсегда.
Плата замков — плата внутри шкафа, к которой подключены все замки и с которой разговаривает планшет. У неё 27 гнёзд.
Подтверждение (команда принята) — ответ платы «команду получил и проверил». Не означает, что дверца открылась: это знает только датчик.
Постамат — весь шкаф целиком: корпус, ячейки, замки, плата и планшет.
Ячейка — дверца с замком, то, что видит клиент. У неё есть номер снаружи; какому гнезду она соответствует, знает только карта ячеек.