Commit Graph

513 Commits

Author SHA1 Message Date
fontvielle 88985afe04 DEPO: сообщение об установке процедур — фактическое число и порядок (было «5 …»)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 13:45:48 +03:00
fontvielle a799847ccc DEPO: справочник и событие HANDBOOK — только при изменении состава
Справочник переписывался в DEPO (DELETE + ~90 INSERT + событие HANDBOOK)
при каждом запуске bj и раз в 6 часов, даже без изменений — Fancy каждый
раз заново сверял участников. Теперь отпечаток состава (без даты) и
куда записан хранятся в depo-handbook-written.json: без изменений — один
COUNT для проверки и ничего не пишется; не записанное прежде событие
HANDBOOK дописывается одно.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 13:44:13 +03:00
fontvielle fbcc859289 AD: участники групп с доступом в bj
У каждой группы домена в «Пользователи и вход» — «участники: 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
2026-10-22 13:37:51 +03:00
fontvielle 76e6f82369 HTTPS: адрес без номера порта — 443 и 80
«Сервер: 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
2026-10-22 13:33:42 +03:00
fontvielle 77b0ab1117 DEPO: справочник участников снова записывается на бою; GUID событий — NULL
На 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
2026-10-22 13:30:42 +03:00
fontvielle 1952f020a1 HTTPS: http:// перебрасывается на https://; имя сервера — с проверкой DNS; скрипты DEPO при обновлении
Порт 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
2026-10-22 13:22:34 +03:00
fontvielle b652baba63 DEPO: процедуры bj2depo — актуальные тексты с тестовой базы + FTV_M2M_UPDATE_HANDBOOK
В bj и deploy/depo/fancy-m2m лежали тексты на 23.09; программист Фонтвьель
менял процедуры 09–21.10 (EVENTS: новая логика и вызов UPDATE_HANDBOOK;
OPERATION: @PARAMETERS, счёт ностро 313 вместо 314; JOB, CREATE). Сняты
с BJ_DEPO_DATA (10.10.10.21) 22.10.2026 без изменений, CREATE → CREATE OR
ALTER. Добавлена FTV_M2M_UPDATE_HANDBOOK (её вызывает EVENTS). Порядок:
WIRING → OPERATION → UPDATE_HANDBOOK → EVENTS → CREATE → JOB.
Проверено на тесте: все 6 применяются в транзакции без ошибок (откат).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 13:19:19 +03:00
fontvielle f3b154c7fc docs: состояние сервера 9 на 22.10.2026 13:11 (перед правками в DEPO) и эталон DEPO 28
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 13:12:08 +03:00
fontvielle aa34878199 Снимок DEPO для bj; доменное имя сервера — и в настройках
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
2026-10-22 13:10:04 +03:00
fontvielle 8f32f79372 AD: скрипт svc-bj сам генерирует пароль и сообщает итог
Пароль — 24 случайных символа (RandomNumberGenerator), показывается один
раз в конце. Итог: создан пользователь (где) или уже был (пароль не
менялся), по каждой группе bj-* — создана (где) или уже есть (DN).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 12:55:35 +03:00
fontvielle 40a7f10d88 AD: как создать служебную учётную запись для bj — скрипт и инструкция
«Пользователи и вход → Подключить домен»: блок с инструкцией и готовым
скриптом 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
2026-10-22 12:46:28 +03:00
fontvielle c6f83e212e Портфель ЛК: под карточкой только последняя ручная заливка
Каждая «Залить сейчас» оставляла строку навсегда (до перезапуска). Теперь
ручная заливка заменяет прежнюю ручную; клиенты постоянного заполнения
остаются. Пропущенные бумаги — свёрнутым списком «пропущено бумаг: N».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 12:27:37 +03:00
fontvielle 5c4a12fb0b Шаг «Проверка» не сбрасывается после перезапуска bj
Итог проверки готовности (шаг 10 мастера) жил только в памяти и 24 ч: после
каждого перезапуска (обновления) главная снова показывала «Требуется
настройка — Проверка», пока не откроешь мастер. Теперь итог в
readiness.json и держится до следующей проверки; если файла ещё нет —
проверка в фоне через минуту после запуска.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 12:24:23 +03:00
fontvielle da302c6d69 Лента событий: убраны уведомления о сроках чужих сертификатов
После запуска (вместе с первой проверкой сроков) из ленты и главной уходят
уведомления «Сертификат ключа организации…» по сертификатам не нашей
организации и «Сертификат НРД/биржи в справочнике ИШ…» — на 9 их 22, все по
чужим (Сбербанк и др.). Свои остаются. RuntimeConfig.RemoveNews.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 12:16:57 +03:00
fontvielle ad6b52f5fa Сроки сертификатов — только по нашей организации
В справочнике ИШ — сертификаты всех участников обмена (на 9 — 351: ВТБ,
Сбербанк, ТБанк…). «Свой» был любой не НРД/биржа/НКЦ/УЦ, и приходило
«Сертификат ключа организации истекает сегодня» по сотруднику Сбербанка.
Теперь свой — ИНН в subject равен ИНН нашей организации; уведомления о
сроках — только по своим (сертификаты НРД приезжают с обновлением bj);
чужие сертификаты не показываются в шаге «Сертификаты».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 12:09:04 +03:00
fontvielle 8afa84a499 Портфель ЛК: номер гос. регистрации из DEPO, пустой портфель не шлём, итог «Залить» на месте
Номер гос. регистрации — из DEPO (OD_SHARES.NUM_REG, выпуск бумаги), экспорт
QUIK — запасной: без подключённого экспорта (модуль НПР) все бумаги
пропускались. Портфель, где отправлять нечего (у всех бумаг нет номера —
иностранные, КСУ), в ЛК не уходит: ЛК отвечал на пустой импорт HTTP 500.
После «Залить сейчас» / «Включить» — назад в тот же раздел к карточке с
сообщением об итоге (раньше #lk-portfolio открывал «Обзор»).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 11:55:07 +03:00
fontvielle 6f1df8350a Портфель ДЕПО в ЛК: маршруты карточки подключены (были 404 с 29.09)
registerLKPortfolioSync не вызывался: поиск клиента DEPO, «Залить сейчас»,
«Добавить в постоянное заполнение», «Включить…» и «Сохранить список»
отвечали 404 — работала только фоновая сверка по сохранённым настройкам.
Тест на регистрацию маршрутов.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 11:38:00 +03:00
fontvielle f296ac5ad8 Справочник участников — своего контура; регистрация — по справочнику НРД; поиск клиентов портфеля
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
2026-10-22 11:28:13 +03:00
fontvielle 6fc0ff5d3d Анкета участника: ответ НРД принимается автоматически — квитанция и ответ сервиса
Квитанции ЭДО НРД (пакеты 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
2026-10-22 11:14:22 +03:00
fontvielle f50b338294 «Диагностика» объединена со «Статусом системы»
Службы (с перезапуском), здоровье фоновых компонентов, запрос справочника
участников и тестовые прогоны переехали из «Настройка → Диагностика» в
«Статус системы» — одно место про состояние bj. Раздел «Диагностика» и
пункт меню убраны, старые ссылки (#tests, #units) ведут в «Статус».
«Настройка» больше не опрашивает systemctl при каждом открытии.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 11:05:24 +03:00
fontvielle 077e542c1a «Настройка» без 10-секундного ожидания: статистика npr.history по первичному ключу
Каждый рендер «Настройки» ждал /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
2026-10-22 11:01:45 +03:00
fontvielle 2aa682e97f Шапка «Шлюз НРД»: зелёная при работающем обмене, всплывающая панель; плашка анкеты в НРД
Общий цвет цепочки — по участкам с известным состоянием: несделанная
M2M-проверка больше не делает серым работающий обмен. Вместо title —
всплывающая панель по участкам с цветными точками, без повтора
«последнего ответа НРД».

Раздел НРД: наверху плашка, пока анкета участника не принята НРД (не
отправлена / ждёт ответа / отклонена с текстом НРД), со ссылкой на анкету;
пропадает после приёма. Только в боевом контуре.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 10:58:24 +03:00
fontvielle 60b4d46277 Списки: период, сортировка, подгрузка; анкета участника — строкой исходящих
«Исходящие», «Входящие», «Журнал обмена»: быстрые периоды (сегодня, 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
2026-10-22 10:50:43 +03:00
fontvielle 890e575d3d DEPO: полное наименование организации из OD_U_FACES, действующая версия лица
Автоопределение читало исходную запись лица (2016) и брало MNEM как краткое
наименование. Теперь — действующая версия (SELF_ID/LAST_FLAG=1): краткое —
OD_FACES.NAME, полное — OD_U_FACES.FULL_NAME, английские — ENG_FULL_NAME и
ENG_NAME. Анкета участника заполняется из DEPO без справочника НРД;
английские — только парой. Проверено на DEPO 28: полное есть у 141 из 145
участников, английские после замены кавычек совпали с ответом НРД.
Если OD_U_FACES нет — прежний запрос и подсказка уточнить у НРД.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 10:28:42 +03:00
fontvielle c546773840 Анкета участника: что не известно точно — уточнить у НРД
Источник наименований: карточка нашей фирмы в справочнике НРД, без неё —
DEPO (черновик). Анкета предупреждает и даёт готовый текст запроса в НРД,
если карточки нет, полное похоже на краткое, отличается от карточки или
английские неполные; при ответе M2M37 — подсказка запросить наименования.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 10:07:33 +03:00
fontvielle 9a227228e5 Анкета участника: наименования из клиентской базы НРД, прямые кавычки
НРД ответил M2M37 на анкету 21.10: в FullName ушло краткое наименование
из DEPO. Теперь полное, краткое и отображаемое берутся из карточки нашей
фирмы в справочнике НРД (НРД сверяет именно с клиентской базой);
отображаемое = краткое, как советует НРД. Английские — только введённые.
Кавычки «» “” приводятся к прямым ", как в базе НРД.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-22 10:04:09 +03:00
fontvielle a2608076a4 Интерфейс: единые термины, названия разделов и шагов, узкий экран
- клиенту — «шлюз НРД» вместо «ИШ» (установка, статусы, этапы, ключ, переводы);
  расшифровка «(ИШ)» — только в заголовке окна обновления
- контур — «тестовый (TEST3)»; в строке шлюза — «работает · версия …»
- меню = заголовки разделов: «Обмен с DEPO», «Пользователи и вход», «Оформление отчётов»
- мастер: заголовок шага = его название в колонке шагов
- вторичная кнопка — классом btn-secondary, а не стилями в разметке
- узкий экран: поля и сетки с жёсткой шириной не вылезают, таблицы прокручиваются,
  анкета участника — по высоте экрана

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 23:58:54 +03:00
fontvielle 317bf85778 Настройки: карточки по своим разделам, подтверждения у опасных действий
- НРД: «Шлюз НРД» (установка, контуры, папки) и «Регистрация участника» —
  над «Перенастроить», а не внутри; «Рабочее время» — из «Сервера» в «НРД»
- Zabbix — из «Диагностики» в «Оповещения»
- заголовок «Лицензия» — у своего раздела (стоял в конце «Экспорта QUIK»)
- подтверждения: режим «bj сам / Оператор», приём ИИС, «Обновить канал»
  (перезапуск шлюза), «Установить шлюз заново»

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 23:54:35 +03:00
fontvielle 90aacf9ef4 Мастер: одинаковые отметки шагов, «Обновление» после «Лицензии», переходы
- ключ, подключённый мастером ключа, засчитывается сразу и в мастере, и на главной
  (сверка справочника шлюза отстаёт)
- точка в заголовке шага — то же «выполнено», что в колонке (с «Настроить позже»)
- выход из мастера — «Выйти из мастера», не «Настроить позже»
- шаг «Обновление» — сразу после «Лицензии»; на шаге 1 — указание на него, без второй кнопки
- «Далее»/«Назад» со шага вне пути (сделан установщиком) — соседи по порядку глав
- последний шаг при несделанном обязательном — «Вернуться к шагу …», не «Перейти к работе»

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 23:50:02 +03:00
fontvielle f1065e369a Интерфейс клиента без технических подробностей; дубли убраны
Техника — только в режиме разработчика (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
2026-10-21 23:44:52 +03:00
fontvielle 29e19c78a9 Сертификаты: срок действия — по сроку закрытого ключа (PrivateKeyUsagePeriod)
В ГОСТ-сертификатах ключ подписи действует год–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
2026-10-21 23:27:28 +03:00
fontvielle 219ed656a2 Время сервера: часы, пояс и «Синхронизировать сейчас» в начале раздела «Сервер»
- живые часы сервера (сверка раз в 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
2026-10-21 23:17:44 +03:00
fontvielle c9ab60130f ИШ: этапы обновления шлюза в окне обновления bj, проверка нового ИШ, свежая версия в строке НРД
- окно обновления 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
2026-10-21 22:50:43 +03:00
fontvielle e4d7e31f7d ИШ: страница блокируется на время обновления, автооткат при сбое, честные статусы
- Обновление ИШ из обновления 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
2026-10-21 20:15:10 +03:00
fontvielle 41d33fefad ИШ 110.0.997 в обновлении + полный бэкап и откат ИШ
- Одобрен дистрибутив ИШ 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
2026-10-21 19:59:19 +03:00
fontvielle efe56bdde1 Мастер: «Настроить позже» и единый расчёт шагов для мастера и главной
- Необязательные шаги «Модули», «Оповещения и копии», «Учётные записи» и каждый
  модуль отдельно можно отложить кнопкой «Настроить позже»: мастер считает их
  завершёнными, глава «Запуск» закрывается. Отметку можно снять («Вернуть в
  мастер»); как только шаг настроен по-настоящему, отметка не показывается.
  Хранится в /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
2026-10-21 19:23:29 +03:00
fontvielle 551448216c Исходящие: карточка «Регистрация участника M2M» (отправка анкеты + ответ НРД)
На странице «Исходящие» (/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
2026-10-21 18:30:47 +03:00
fontvielle 07866526eb Анкета участника: ловить ответ НРД (M2MER с нулевым GUID) и показывать отправку/ответ
Ответ НРД на анкету приходит как 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
2026-10-21 18:01:50 +03:00
fontvielle 416f9bdcd5 Анкета участника: статус регистрации по справочнику участников M2M
Регистрация подтверждается двумя путями: ответным документом НРД (ловим в
поллере) ИЛИ появлением организации в справочнике участников M2M боевого
контура. На странице анкеты добавлен статус: ищем нашу организацию в справочнике
по MC-коду, затем по ИНН (handbookByCode/handbookByINN); «есть» — регистрация
подтверждена, «нет» — ждём приёма анкеты (справочник обновляется ~10 минут).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 17:31:09 +03:00
fontvielle eb5f08dfa6 Поллер: отлов ответов НРД (анкета участника и неизвестные документы)
После отправки анкеты участника (#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
2026-10-21 17:28:13 +03:00
fontvielle bd1fe202f7 Портфель ДЕПО в ЛК: режим «для всех клиентов» + автозаполнение именования
- Кнопка «Включить для всех пользователей» с предупреждением: заполнение
  портфеля запускается для ВСЕХ открытых торговых счетов 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
2026-10-21 17:24:11 +03:00
fontvielle 7947808b26 Анкета участника M2M: открывать внутри страницы НРД (раскрытие вниз)
Ссылка вела на отдельную страницу. В разделе «НРД» карточка «Регистрация
участника M2M» теперь раскрывается вниз (<details>) и показывает анкету в том же
окне через iframe того же origin (lazy — грузится при раскрытии). Отдельная
вкладка оставлена запасной ссылкой.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 16:41:16 +03:00
fontvielle e774fc8989 Анкета участника M2M: ссылка в разделе НРД + предзаполнение по фирме
- В «Настройка → НРД» добавлена карточка «Регистрация участника 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
2026-10-21 16:27:14 +03:00
fontvielle d10d39c94e ЕСИА Финанс: разметить обмен по моделям pull/push, Callback свернуть
Поля задавались «в двух местах» и выглядели нелогично. На деле это две разные
модели обмена заявками, а не дубли:
- 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
2026-10-21 15:58:25 +03:00
fontvielle 40245dd78a Мастер, шаг ключа: список установленных сертификатов свёрнут
На шаге «Ключ и сертификаты» таблица установленных сертификатов (сотни строк)
разворачивала страницу. Обёрнута в <details>: по умолчанию свёрнута, счётчик
виден в заголовке, раскрывается кликом. На странице «Настройка» этот список уже
свёрнут — приведено к тому же виду.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 14:48:36 +03:00
fontvielle 1659a15f81 Мастер: «Далее» на шаге ключа сразу после установки + надёжная сверка справочника
После успешной установки ключа на шаге «Ключ и сертификаты» не появлялась
кнопка «Далее»: шаг считался выполненным только по асинхронной сверке
справочника ИШ (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
2026-10-21 14:32:58 +03:00
fontvielle ed2d0ce4e5 Пересборка справочника: выбирать подписанта по действующему ключу (чинит ложный E070004C)
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
2026-10-21 13:14:24 +03:00
fontvielle 83bf3f5b49 Шлюз НРД: компактнее шапка — короче интро шага и строка про версию ИШ
Верх страницы «Шлюз НРД» был перегружен текстом. Интро шага 7 сокращено до
одной строки; пояснение про версию ИШ в карточке «Шлюз на этом сервере» ужато
в одну тонкую строку, заголовок поджат. Смысл сохранён, статус ИШ стал заметнее.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 11:53:40 +03:00
fontvielle 5757e1e46a Папки шлюза: пароль генерируется и показывается сразу при загрузке (когда папки ещё не открыты)
Раньше поле пароля было пустым с подсказкой «пусто — прежний», и оператору
приходилось нажимать «Сгенерировать». Теперь при открытии страницы, если папки
шлюза ещё не открыты по сети, bj сразу подставляет в поле новый надёжный пароль
(genPw, 16 символов, crypto.getRandomValues) и показывает его. Оператор может
оставить его или вписать свой. Если папки уже открыты — поле остаётся пустым
(пустое = оставить прежний пароль при повторном сохранении).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 11:47:35 +03:00
fontvielle 365ec1196d Статус: карточка ключа организации — контур и пометка «ИСТЁК»; SMB-пароль папок шлюза — генерация и показ
Ключ организации на странице «Статус» теперь строится из своего сертификата
в справочнике активного профиля ИШ (ownStoreCerts), включая истёкший: карточка
показывает владельца, издателя, контур (боевой/тестовый) и срок. Истёкший ключ
виден явной пометкой «ИСТЁК» и отдельным заголовком, а не маскируется под
«ключ не подключён». Показать владельца ДО установки ключа нельзя — сертификата
нет в файлах флешки, он появляется в справочнике профиля только после установки.

Папки шлюза по сети (простой режим): кнопка «Сгенерировать» создаёт надёжный
пароль (16 символов, crypto.getRandomValues) прямо в поле, поле теперь видимое;
после сохранения пароль показывается один раз с кнопкой «Скопировать» —
записать, так как позже bj его не покажет. Пустое поле по-прежнему оставляет
прежний пароль при повторном сохранении.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
2026-10-21 11:29:48 +03:00