В ГОСТ-сертификатах ключ подписи действует год–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
Ответ НРД на анкету приходит как M2MTransferResponse (M2MER) с нулевым GUID —
раньше он уходил в обработку перевода, «сделка не найдена», и отбрасывался.
Теперь нулевой GUID распознаётся как ответ на регистрацию участника:
- сырой XML сохраняется (captureNSDReply → nsd-replies);
- отправка анкеты и ответ НРД пишутся в participant-reg.json (время, пакет,
наименование, статус, коды, текст НРД);
- на странице «Регистрация участника M2M» показываем: когда отправили и вердикт
НРД («принял»/«отклонил» с текстом, напр. M2M37 «Некорректно указано
наименование участника в анкете»).
Текст берётся из самого ответа (serviceErrorTexts) — карту кодов не трогаем.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Регистрация подтверждается двумя путями: ответным документом НРД (ловим в
поллере) ИЛИ появлением организации в справочнике участников M2M боевого
контура. На странице анкеты добавлен статус: ищем нашу организацию в справочнике
по MC-коду, затем по ИНН (handbookByCode/handbookByINN); «есть» — регистрация
подтверждена, «нет» — ждём приёма анкеты (справочник обновляется ~10 минут).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
После отправки анкеты участника (#M2MPF) НРД присылает ответ, схему которого мы
ещё не разбираем. Фаза 1 — отловить его на боевом контуре:
- входящий с корнем M2MTransferParticipantForm сохраняется как подлинный XML и
логируется отдельно (ответ НРД на анкету);
- любой неизвестный M2M-документ в default теперь тоже сохраняется (раньше молча
пропускался), чтобы увидеть реальный тип/схему.
Файлы: /var/lib/bj/.bj/nsd-replies/<время>-<tag>-id<N>-<тип>.xml (последние 100).
Разбор ответа встроим в систему, когда увидим реальный документ на бою.
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
После успешной установки ключа на шаге «Ключ и сертификаты» не появлялась
кнопка «Далее»: шаг считался выполненным только по асинхронной сверке
справочника ИШ (nsdCertsCheck), а она сразу после установки отваливалась по
таймауту — root-воркер был занят перезапуском ИШ и повторной активацией
профиля. Ключ при этом уже подключён и подписывает.
- refreshCertStore: повторяет сверку до 5 раз (воркер освобождается — проходит),
вместо одной попытки с таймаутом.
- Шаг 8 в мастере выполнен, если справочник собран ИЛИ мастер ключа прошёл до
конца (ИШ подтвердил подпись) — «Далее» появляется сразу, не дожидаясь сверки.
Добавлен потокобезопасный keyWizardState.installed().
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
crestor выбирал сертификат подписанта ПСП по имени владельца. Если у владельца
в справочнике несколько сертификатов (перевыпуск ключа — у клиента так бывает),
crestor брал первый по имени и мог попасть на старый с истёкшим сроком закрытого
ключа → E070004C «Ключ ЭП/закрытый ключ шифрования уже истёк», хотя на носителе
свежий действующий ключ.
bj-validata-rebuild-gdbm: при E070004C перебирает leaf-сертификаты с НЕ истёкшим
сроком закрытого ключа (свежие первыми, до 25) и указывает подписанта явно
(-signer -dercer). Правильный (чей закрытый ключ на носителе) даёт Результат: OK,
остальные — ошибку, идём дальше. Проверено на живой флешке клиента: справочник
пересобрался (cf9a5713), signer выбран верный.
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
Пересборку справочника crestor запускает igate, а /var/lib/bj был 0750 bj:bj —
igate не мог пройти в staging и выдавал ложное «нет local.pse». bj-server при
старте даёт /var/lib/bj traverse (0751) — доезжает обновлением. Воркер
bj-keymedia-install тоже даёт права и показывает реальную ошибку crestor вместо
спама «dropped older CRL» (для новых ISO). Убрана ошибочная подсказка про ГСЧ.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
Эмуляция НРД (3 режима), пауза автообновления при выделении текста, автопоявление строк
журнала, фикс прокрутки карточки, «снять с очереди» DEPO, отметка подмены над XML. Отпечаток
сменил только bj-server (одна go1.26.8) → версии прочих без изменений. Опубликовано на
lic.zetit.ru, прежний 2026.10.13.1 удалён.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
bj-server с накопленными фиксами (стабилизация AD-входа 6ada485, событие HANDBOOK fc067a3,
автообновление журнала и фикс прокрутки карточки 8f44d6f). Отпечатки всех Go-компонентов
сменились — версии подняты до 2026.10.13.1; crypto-service.jar и igate-dist без изменений.
Опубликовано на lic.zetit.ru (stable), прежний 2026.10.12.1 удалён.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>