Процедуры Фонтвьель, вызванные bj (FTV_M2M_JOB → EVENTS → UPDATE_HANDBOOK,
CREATE, OPERATION), пишут в таблицы Fancy правами логина bj. На 9 у bj_user
был только db_datareader — «Запрещено разрешение INSERT на объект
OD_OBJECTS» (событие HANDBOOK, 22.10.2026); упали бы и поручения M2M. На
тесте — db_datareader + db_datawriter.
Роль выдаётся в наборе «Применить скрипты» (права администратора БД; новый
отпечаток — плашка на установках), в скачиваемом скрипте процедур, в
скрипте логина и при подготовке трансферных таблиц (первичная установка).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
У каждой группы домена в «Пользователи и вход» — «участники: N»: ФИО,
логин, почта, отметки «отключён в AD» и «входил в bj»; с вложенными
группами (LDAP_MATCHING_RULE_IN_CHAIN). GET
/admin/setup/users/ad-group-members — только для групп из настроек bj.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
«Сервер: HTTPS» → «Адрес без номера порта»: bj слушает 443 (тот же HTTPS) и
80 (переход на https://имя/), переходы и адреса — без «:8443». Право на
порты <1024 — drop-in systemd AmbientCapabilities=CAP_NET_BIND_SERVICE
через root-помощника (bj-system-admin ports on|off, bj перезапускается).
Нет права/порт занят — bj работает по 8443, в настройках видна причина.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
На 9 (FTV_DE_DATA) FTV_M2M_EVENTS.GUID NOT NULL (создано bj раньше), событие
HANDBOOK без GUID падало и откатывало всю транзакцию — справочник в DEPO не
обновлялся (с 11:50 при каждом справочнике). Теперь справочник пишется в
своей транзакции, событие — отдельно (не записалось — предупреждение).
Структура: GUID в FTV_M2M_EVENTS — NULL (как на тесте с 12.10); для
существующих таблиц — ALTER COLUMN в наборе скриптов с правами
администратора (плашка обновления, скрипт .sql). Проверено на тесте
(BJ2_DEPO_DATA, транзакция с откатом).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Порт HTTPS принимает и http://: 308 на https:// того же имени и порта
(было «Client sent an HTTP request to an HTTPS server»).
Доменное имя сервера сохраняется, только если оно есть в DNS и указывает
на этот сервер; иначе — что добавить/исправить (запись A → IP сервера).
Сообщение об успехе — с адресом https://имя:порт/ и честно про
самоподписанный сертификат.
Обновление bj с новыми процедурами DEPO: отпечаток установленного набора
(depo_procs_applied) не совпадает со встроенным — на главной и в
настройках плашка «требуются повышенные права на базу данных» с вводом
логина/пароля администратора SQL (не сохраняются) и «Применить скрипты».
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
depo_snapshot.go: объекты FTV_M2M*/bj* (тип, даты создания/изменения,
хеш текста, если доступен), столбцы и строки таблиц, счётчики по STATE,
зависимости поставки Fancy, константы процедур, задания SQL Agent, права
логина bj. Данных клиентов нет. Раз в сутки и по кнопке в «Статусе
системы» (GET /admin/status/depo-snapshot), история в
/var/lib/bj/.bj/depo-snapshots — сравнить установки (28 и 9) и увидеть
ручные правки в DEPO.
«Сервер: HTTPS» — поле «Доменное имя сервера bj» (было только в мастере).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Пароль — 24 случайных символа (RandomNumberGenerator), показывается один
раз в конце. Итог: создан пользователь (где) или уже был (пароль не
менялся), по каждой группе bj-* — создана (где) или уже есть (DN).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
«Пользователи и вход → Подключить домен»: блок с инструкцией и готовым
скриптом PowerShell (svc-bj, пароль не истекает, группы bj-admins /
bj-operators / bj-risk / bj-viewers для ролей) и запасной командой dsadd;
домен и DN подставляются из найденного bj домена. Кнопка «Скопировать».
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
readHandbook брал самый свежий из своего, общего (с сервера лицензий) и
встроенного — общий был тестовым (TEST3, 166 участников, прислан с 28), и на
боевом 9 bj считал «регистрация подтверждена», хотя в боевом справочнике
НРД (89) нас нет. Теперь при своём справочнике от НРД — только он; на сервер
лицензий справочник уходит только с боевого контура.
Регистрация участника проверяется по справочнику, полученному от НРД;
появились в нём — анкета отмечается принятой автоматически, плашка уходит.
Портфель ЛК: клиенты DEPO списком по клику (первые 50 по алфавиту), «не
найдено» вместо «поиск недоступен» (пустой ответ был null).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Квитанции ЭДО НРД (пакеты C, «Уведомление о получении Пакетов…»)
разбираются: для нашей анкеты (#M2MPF…) — отметка «доставлена в НРД»
с временем, ошибка первичной обработки — отказ с текстом квитанции.
Ответ сервиса: INFO — «принята в обработку», OK — принята, ERROR —
отказ с кодом; документ-ответ M2MTransferParticipantForm — регистрация
подтверждена. Всё видно в строке «Исходящих», на странице анкеты и в
плашке раздела НРД. После запуска bj перечитывает квитанции за день
отправки, если отметки ещё нет (22.10 на 9 квитанция пришла раньше).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Службы (с перезапуском), здоровье фоновых компонентов, запрос справочника
участников и тестовые прогоны переехали из «Настройка → Диагностика» в
«Статус системы» — одно место про состояние bj. Раздел «Диагностика» и
пункт меню убраны, старые ссылки (#tests, #units) ведут в «Статус».
«Настройка» больше не опрашивает systemctl при каждом открытии.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Каждый рендер «Настройки» ждал /section службы bj-quikexport, а та
считала min(ts) и count(*) за сутки по npr.history (18,5 млн строк,
индекса по ts нет): 6 + 27 с на 28, срез по таймауту 10 с. Теперь начало
истории — первая строка по id, строки за сутки/час — двоичный поиск по id
(история только дописывается): ~45 мс. То же в /admin/npr/api/freshness.
bj-server ждёт раздел QUIK-экспорта не дольше 3 с и иначе отдаёт последний
удачный; прогрев версий, пользователей ЛК и раздела после запуска.
«Обновления» перезагружают страницу, только если что-то изменилось.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Общий цвет цепочки — по участкам с известным состоянием: несделанная
M2M-проверка больше не делает серым работающий обмен. Вместо title —
всплывающая панель по участкам с цветными точками, без повтора
«последнего ответа НРД».
Раздел НРД: наверху плашка, пока анкета участника не принята НРД (не
отправлена / ждёт ответа / отклонена с текстом НРД), со ссылкой на анкету;
пропадает после приёма. Только в боевом контуре.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
«Исходящие», «Входящие», «Журнал обмена»: быстрые периоды (сегодня, 7, 30
дней, всё время), даты с–по, сортировка (время, инвестор/контрагент,
направление, статус), первые 50 строк и подгрузка при прокрутке
(part=rows&offset=N). Раньше показывались только последние 200/100.
Анкета участника — исходящий пакет в НРД: строка в «Исходящих» и
«Журнале» с ответом НРД (принята / отклонена с кодом / ждёт), вместо
плашки над списком. Отправки копятся в participant-regs.json (прежний
participant-reg.json подхватывается). userTemplate — функции текущего
пользователя и для порций строк.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- клиенту — «шлюз НРД» вместо «ИШ» (установка, статусы, этапы, ключ, переводы);
расшифровка «(ИШ)» — только в заголовке окна обновления
- контур — «тестовый (TEST3)»; в строке шлюза — «работает · версия …»
- меню = заголовки разделов: «Обмен с DEPO», «Пользователи и вход», «Оформление отчётов»
- мастер: заголовок шага = его название в колонке шагов
- вторичная кнопка — классом btn-secondary, а не стилями в разметке
- узкий экран: поля и сетки с жёсткой шириной не вылезают, таблицы прокручиваются,
анкета участника — по высоте экрана
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- НРД: «Шлюз НРД» (установка, контуры, папки) и «Регистрация участника» —
над «Перенастроить», а не внутри; «Рабочее время» — из «Сервера» в «НРД»
- Zabbix — из «Диагностики» в «Оповещения»
- заголовок «Лицензия» — у своего раздела (стоял в конце «Экспорта QUIK»)
- подтверждения: режим «bj сам / Оператор», приём ИИС, «Обновить канал»
(перезапуск шлюза), «Установить шлюз заново»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- ключ, подключённый мастером ключа, засчитывается сразу и в мастере, и на главной
(сверка справочника шлюза отстаёт)
- точка в заголовке шага — то же «выполнено», что в колонке (с «Настроить позже»)
- выход из мастера — «Выйти из мастера», не «Настроить позже»
- шаг «Обновление» — сразу после «Лицензии»; на шаге 1 — указание на него, без второй кнопки
- «Далее»/«Назад» со шага вне пути (сделан установщиком) — соседи по порядку глав
- последний шаг при несделанном обязательном — «Вернуться к шагу …», не «Перейти к работе»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Техника — только в режиме разработчика (devOn):
- версии: клиенту — bj, шлюз НРД, СКЗИ, QUIK, DEPO, без «Подробностей»
(Java, bj-crypto, пути, установщик, ОС, PostgreSQL — разработчикам)
- Криптография: строки crypto-service/java, параметры провайдера и сокет,
серийные номера, журнал сверки (клиенту — только при ошибке), дамп справочника
и путь nsd-certs; убрана карточка «Ключ организации» — дубль сводки
- НРД: строка версии ИШ (дубль сводки), «Расширенные» (адреса, контейнеры,
config.xml), имя профиля ключа, адрес канала; контур по-русски
- Обновления: имена файлов и служб, адрес артефактории и ключ издателя
- Диагностика: имена служб и сырые состояния; справочник участников — без кодов
- ключи ролей и модулей лицензии, путь users.json, DSN/Ping/in-memory, FTV_M2M,
путь Валидаты и служба bj-crypto в мастере, «проверена ZETIT», Samba
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
В ГОСТ-сертификатах ключ подписи действует год–15 месяцев, а сам сертификат — до 15 лет;
bj показывал и проверял срок сертификата (например, 06.10.2036 вместо 2027). Теперь
справочник профиля ИШ и сертификаты с флешки берут срок ключа (2.5.29.16), если он раньше;
срок сертификата показывается рядом. У УЦ — по-прежнему срок сертификата.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- живые часы сервера (сверка раз в 30 с), пояс, синхронизация, источник времени
и расхождение с ним, сверка с часами компьютера администратора
- выбор часового пояса прямо на странице (раньше — только в мастере)
- «Синхронизировать сейчас»: bj-system-admin sync — разовая коррекция часов
(chrony makestep, ntpd -gq, systemd-timesyncd); серверов нет или не отвечают,
а свои не заданы — bj подбирает ВНИИФТРИ
- мастер, шаг 12: кнопка «Синхронизировать» — та же синхронизация
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- окно обновления bj после перезапуска ведёт обновление ИШ по этапам (загрузка, остановка,
резервная копия, установка, запуск, проверка) и закрывается только после проверки;
пока шлюз обновляется, то же окно на любой странице
- bj-igate-admin: этапы stop/backup/verify; после запуска сверяются версия, служба, движок,
каналы и ключ с прежними (иначе автооткат), обмен с НРД
- версия ИШ в строке НРД читается всегда заново (кэш 6 ч — только сайт НРД);
после установки версии пересобираются сразу
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- Обновление ИШ из обновления bj: страница «Шлюз НРД» (мастер и «Настройка → НРД»)
перекрывается окном с ходом установки; успех — перезагрузка страницы, ошибка —
текст и журнал. Статус ИШ отдаёт upgrade_to (получена версия, обновится сам) и
installing (идёт установка) — вместо «ИШ не работает» и кнопки переустановки.
- Сбой после полного бэкапа (dpkg, запуск, движок не в Running) — bj-igate-admin
сам откатывает ИШ к прежней версии (этап rollback); итог — ошибка «обновление до X
не прошло: …, ИШ автоматически откатан к Y и работает». Проверено на 28
искусственным сбоем после установки пакета.
- Откат не опускает счётчики id в базе ИШ: иначе новые пакеты получали бы уже
виденные bj номера и поллер их пропускал.
- Автообновление ИШ после перезапуска ядра — через 20 с (было 2 мин), с повторами
через 2 и 10 мин, если дистрибутив дописан позже. В итоге обновления bj —
пояснение, что сам шлюз обновится через несколько минут.
- Строка версий над разделом НРД обновляется сразу при смене версии ИШ.
- Сводка «НРД → Организация» и раскрытие «Перенастроить» смотрят организацию так
же, как bj (orgEff: введённое или из справочника по коду) — не «не задана», когда
ИНН взят из справочника.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- Одобрен дистрибутив ИШ 110.0.997 (deploy/release/igate-approved): клиенты
получают его компонентом igate-dist, bj-server обновляет ИШ сам (igateAutoUpgrade)
после применения обновления. Проверено на 28: установка 107.0.930 → 110.0.997
штатным bj-igate-admin, каналы сохранены, круг #M2MHR → #M2MTH с НРД TEST3 и
приём ответа поллером bj — работают.
- Бэкап перед установкой/обновлением ИШ стал полным: кроме /opt/nsd/igate и дампа
базы — данные /var/lib/igate (без флешки с ключом и кэша), юнит, обёртка запуска,
версия. Раньше откатиться было нечем: igate-dist.zip перезаписывается новой версией.
- bj-igate-admin rollback / rollback-now: возврат программы, данных и базы ИШ из
последнего бэкапа (pg_restore от postgres — с мандатными метками Astra). После
отката пришедшая версия не ставится автоматически (/var/lib/bj/igate-autoupgrade-skip),
следующая — снова да. Проверено на 28: 110.0.997 → 107.0.930 за 40 с, обмен с НРД работает.
- «Шлюз НРД»: кнопка «Откатить ИШ к <версия>», когда есть полная резервная копия.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- Необязательные шаги «Модули», «Оповещения и копии», «Учётные записи» и каждый
модуль отдельно можно отложить кнопкой «Настроить позже»: мастер считает их
завершёнными, глава «Запуск» закрывается. Отметку можно снять («Вернуть в
мастер»); как только шаг настроен по-настоящему, отметка не показывается.
Хранится в /var/lib/bj/.bj/wizard-deferred.json (wizdefer.go).
- Шаг «Оповещения и копии» показывает, что уже настроено: почта, Zabbix,
резервные копии — видно частичную настройку, сделанную в «Настройке».
- Плашка «Требуется настройка — N из M» на главной считалась по старому списку
из 9 шагов и расходилась с мастером. Теперь и мастер, и главная используют одну
функцию wizDone и путь wizPath — те же шаги, лицензия и отметки «отложено».
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
На странице «Исходящие» (/admin/claims) сверху показываем карточку регистрации
участника: когда отправили анкету, пакет, наименование и вердикт НРД («принял»
/ «отклонил» с текстом, напр. M2M37). Данные — из participant-reg.json
(template-функция participantRegHTML). Карточки нет, пока анкету не отправляли.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- Кнопка «Включить для всех пользователей» с предупреждением: заполнение
портфеля запускается для ВСЕХ открытых торговых счетов DEPO (по префиксу),
договор ЛК выводится из счёта по шаблону — так же как в тесте с одним клиентом,
только по торговым счетам. Поле AllClients; tick берёт пары из
lkPortfolioAllPairs. Прежний режим «по списку» (Pairs) сохранён.
- Поля именования (префикс счёта, шаблон договора, раздел, место хранения)
предзаполняются из базы DEPO (префикс — depoAccPrefix) и значений по умолчанию,
остаются редактируемыми.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Ссылка вела на отдельную страницу. В разделе «НРД» карточка «Регистрация
участника M2M» теперь раскрывается вниз (<details>) и показывает анкету в том же
окне через iframe того же origin (lazy — грузится при раскрытии). Отдельная
вкладка оставлена запасной ссылкой.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- В «Настройка → НРД» добавлена карточка «Регистрация участника M2M» со ссылкой
на /admin/setup/participant-form (раньше страница была только по URL).
- participantFormPrefill теперь заполняет анкету по реквизитам фирмы, а не только
из автоопределения DEPO: берёт ИНН/коды из настроек НРД и наименования
(полное/сокращённое/отображаемое/англ.) из справочника участников НРД
(по MC-коду, затем по ИНН); DisplayName/Short подставляются, если пусты.
- org.go: добавлен handbookByINN.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Поля задавались «в двух местах» и выглядели нелогично. На деле это две разные
модели обмена заявками, а не дубли:
- pull — bj сам обращается к API ЛК (per-env, HTTP Basic), забирает заявки и
туда же PATCH-ит статус (lkActiveEndpoint/OnLKOutcome);
- push — ЛК сам шлёт заявки на bj (POST /claims/), статус bj возвращает на
единый CallbackURL (service.go).
Блок API ЛК помечен как «(pull) — основная модель». Поле Callback URL помечено
как push-модель и свёрнуто в <details> (развёрнуто только если уже заполнено) —
при подключении через API оно не используется. Поведение и структура настроек
не изменены, только текст и вёрстка.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
На шаге «Ключ и сертификаты» таблица установленных сертификатов (сотни строк)
разворачивала страницу. Обёрнута в <details>: по умолчанию свёрнута, счётчик
виден в заголовке, раскрывается кликом. На странице «Настройка» этот список уже
свёрнут — приведено к тому же виду.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Верх страницы «Шлюз НРД» был перегружен текстом. Интро шага 7 сокращено до
одной строки; пояснение про версию ИШ в карточке «Шлюз на этом сервере» ужато
в одну тонкую строку, заголовок поджат. Смысл сохранён, статус ИШ стал заметнее.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Раньше поле пароля было пустым с подсказкой «пусто — прежний», и оператору
приходилось нажимать «Сгенерировать». Теперь при открытии страницы, если папки
шлюза ещё не открыты по сети, bj сразу подставляет в поле новый надёжный пароль
(genPw, 16 символов, crypto.getRandomValues) и показывает его. Оператор может
оставить его или вписать свой. Если папки уже открыты — поле остаётся пустым
(пустое = оставить прежний пароль при повторном сохранении).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Ключ организации на странице «Статус» теперь строится из своего сертификата
в справочнике активного профиля ИШ (ownStoreCerts), включая истёкший: карточка
показывает владельца, издателя, контур (боевой/тестовый) и срок. Истёкший ключ
виден явной пометкой «ИСТЁК» и отдельным заголовком, а не маскируется под
«ключ не подключён». Показать владельца ДО установки ключа нельзя — сертификата
нет в файлах флешки, он появляется в справочнике профиля только после установки.
Папки шлюза по сети (простой режим): кнопка «Сгенерировать» создаёт надёжный
пароль (16 символов, crypto.getRandomValues) прямо в поле, поле теперь видимое;
после сохранения пароль показывается один раз с кнопкой «Скопировать» —
записать, так как позже bj его не покажет. Пустое поле по-прежнему оставляет
прежний пароль при повторном сохранении.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Если контур НРД уже выбран в мастере (WantContour), на шаге «использовать ключ
с флешки» показываем его фиксированно («Боевой — выбран в мастере») с кнопкой
«Изменить», а не радио-вопросом заново. При расхождении с контуром по сертификату
— предупреждение.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
При отсутствии флешки по умолчанию выбирался режим «Сформировать на новой
флешке», и после «Перепроверить флешку» экран прыгал туда. Теперь по умолчанию
всегда «Подключить флешку» (пустое состояние внутри с кнопкой перепроверки).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- В режиме флешки — кнопка «↻ Перепроверить флешку» (и когда флешка есть, и когда нет)
с индикатором «Ищу флешку…».
- Пустое состояние поясняет: на виртуальной машине USB нужно пробросить в гостя.
- listFlashDrives ловит и съёмный диск с ФС без таблицы разделов (type=disk).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Свёрнутый блок «Что должно быть на флешке» в шаге «Ключ подписи»: ключ *.vdk
(обязательно), папка spr<N> с local.gdbm+local.pse (обязательно), *.crl/key.reg/
vdkeys необязательны; раскладка любая — bj ищет *.vdk и spr<N>/local.gdbm в любой
папке (как в bj-keymedia-install stage-media).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- quikDetectAccounts: Export не имеет колонки QuikFirm (ошибка 207 Invalid column
name) — запросы по Actions/Export выполняются по отдельности, источник без нужной
колонки пропускается.
- «Полный ответ сервера (последняя проверка)» свёрнут в details, чтобы не прятать
настройки ниже.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Кнопка была submit внутри формы режима, у которой обработчик submit делает
preventDefault — клик ничего не отправлял. Теперь type=button + fetch на
/admin/setup/quik/detect-account (X-BJ-Ajax), результат в строке статуса,
найденный счёт подставляется в поле.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Кнопка «Определить из QUIK» у поля «Торговый счёт для поручений» (режим
чтение+запись). bj читает distinct Account из Actions/Export по коду фирмы
(QuikFirm/FirmID = код участника): один счёт — подставляет, несколько —
показывает на выбор, нет истории — просит ввести вручную. Только чтение.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
- «Подготовить» в мастере (step 3, режим «дать логин администратора») теперь ставит
и процедуры обработки bj2depo (CREATE OR ALTER) + GRANT, не только логин/таблицы/джобу.
- Скачиваемый скрипт мастера включает процедуры.
- Тексты процедур редактируются под клиента (Настройка → Обмен DEPO → Процедуры):
сохранённый вариант используется при установке и при «Подготовить». Пусто/совпадение
со встроенным — исходная версия.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Процедуры FTV_M2M_PROCESS_* и FTV_M2M_JOB встроены в bj (depoprocs/*.sql).
В разделе «Учёт DEPO» карточка «Процедуры обработки bj2depo»:
- «Проверить возможности» — подключение, это ли база DEPO, какие процедуры
установлены, есть ли право CREATE PROCEDURE и логин bj в базе (ничего не меняет);
- «Установить» — логином администратора SQL (разово, не сохраняется) выполняет
CREATE OR ALTER в порядке WIRING→OPERATION→EVENTS→CREATE→JOB и GRANT EXECUTE
на FTV_M2M_JOB логину bj; без прав — отказ без изменений;
- скачивание единого скрипта для ручной установки в SSMS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Новый шаг 14 «Обновление» в отдельной первой главе мастера. Секция
«Обновления» вынесена из admin_setup.html в {{define "updateSection"}}
(part_fancy.html) и переиспользуется и в настройках, и в шаге мастера —
один источник правды. В мастере рендерится обычным блоком (без
settings-section/active), заголовок h1 скрыт (есть свой h2 шага).
Шаг необязательный (не блокирует путь), зелёный пока нет версии новее;
при наличии обновления — предупреждающая точка. Добавлена пятая глава,
поэтому wizChaptersLine расширен до «Пять глав».
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
Шаг «Время и сеть»:
- Кнопка «Синхронизировать»: bj сам пробует российские серверы точного
времени ВНИИФТРИ (мини-SNTP зонд по UDP/123), и только если из сети они
недоступны — просит указать свой сервер (контроллер домена/маршрутизатор).
Статус времени берётся из timedatectl (timeSynced), а не из флага шага.
- Поле «Доменное имя сервера»: имена вписываются в самоподписанный сертификат
(SAN), чтобы интерфейс открывался по имени без предупреждения браузера.
Сертификат перевыпускается на лету; A-запись заводит админ сети на DNS.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
- Карточка заявки: операторский «Путь заявки» (claimTimelineOperator) короткими
понятными вехами + сворачиваемый технический журнал (buildClaimTimeline);
QUIK показан пошагово (register/sign/deny/deposit) с верными временами, отказ
регистрации больше не выглядит успехом (quikActionFailTitles).
- Баннеры: «в НРД не отправлено», когда пакет сформирован, но не ушёл (нет
submitted_to_nsd и не Fail); заголовок карточки и бейдж учитывают это; красный
баннер QUIK при отказе, строгий «нет бумаг» только при реальном шорт/недостатке.
- НРД-ответ «Поручение с исходящим номером … уже существует» теперь REG_DUP
(предупреждение-дубль, не красный «Отказ в регистрации»); не влияет на od.Rejected.
- Idempotency: submitguard.go (inflightSubmit) + защита точек подачи от
двойного срабатывания (manual + auto-loop, двойной клик): submitOutgoingFor,
submitIncomingOrderFor, QuikOutRegister (ранний возврат при registered/signed).
- DEPO-алерты: водяной знак depoFailAlertedID засеивается текущим MAX(ID) на
старте процесса (Hlth03) — после рестарта bj больше не поднимает повторно
алерты про уже известные ошибки обработки событий BJ_*.
- Тесты: claimnotsent_render_test.go (хелперы + рендер карточки).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
Форма «Загрузка справочника из файла» на /admin/handbook принимает
подлинный формат НРД (hk:M2MTransferHandbook, windows-1251 — тот же,
что приходит пакетом #M2MTH и который отдаёт кнопка «XML»). Разбор и
сохранение идут тем же путём, что у поллера при ответе НРД:
nsdxml.Unmarshal → writeHandbookRawXML (сырой XML для байт-в-байт
выгрузки) → saveHandbookEx (плоский JSON) → перезапись FTV_M2M_HANDBOOK
в DEPO → синхронизация получателей в МНП. На сервер лицензий ручной файл
НЕ рассылается (saveHandbookEx push=false): справочник одного стенда не
должен становиться облачным для всех клиентов. Нужно для закрытого
контура и когда шлюз к НРД недоступен.
- handbook_import.go: обработчик importHandbook (POST /admin/handbook/import)
- nsdpoller.go: saveHandbook → saveHandbookEx(hb, push)
- admin.go: маршрут import, поле Flash, renderHandbook читает ?flash=
- admin_handbook.html: карточка загрузки + вывод flash
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX