Commit Graph

51 Commits

Author SHA1 Message Date
fontvielle 8f44d6fcb9 Журнал обмена: автопоявление новых заявок; карточка не прыгает наверх при автообновлении
Журнал: новый эндпоинт /admin/journal/rows (строки новее since, рендер тем же шаблоном
journalrow) + JS раз в 8 с подставляет новые заявки сверху с мягкой подсветкой (row-new),
без перезагрузки и без дёрганья; счётчик обновляется, плашка «нет переводов» убирается.
Таблица теперь рендерится всегда (tbody#journal-body), строка вынесена в {{define journalrow}}.

Карточка заявки: автообновление по смене подписи раньше делало location.reload() и сбрасывало
прокрутку наверх — мешало читать. Теперь bjReloadKeepScroll() сохраняет позицию прокрутки
(sessionStorage) и восстанавливает после перезагрузки; автообновление сохранено.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-10-13 12:50:20 +03:00
zuevav 6c42e0378d feat(admin): эмулятор МНП — режим реальной записи в МНП на подставного клиента
Третий режим МНП (между «внутренняя имитация» и «боевая запись»): в bj цикл
идёт по обычному пользователю, а поручение в QUIK МНП уходит РЕАЛЬНО, но с
кодом другого, реально существующего в QUIK клиента (обобщение ручного теста
realtest «боевой ЛК → TEST3»).

- QuikMNPSettings: RealWrite + RealClientCode (валидация формата кода).
- Подмена кода — единая точка quikClientCodeFromPort (после ClientCodeMap);
  портфель не трогаем. quikActive: RealWrite только при devMode и непустом
  коде; Emulate (внутренняя имитация) в приоритете.
- Шаги боевого пути помечаются «[на подставного клиента <код>]» — видно в
  «Поручениях QUIK».
- Карточка МНП на /admin/emulators — три взаимоисключающих режима
  (выключено / имитация / реальная запись), поле кода, крупное предупреждение;
  отдельный красный баннер «Реальные поручения в МНП на клиента <код> (режим
  разработки)» — не смешиваем с баннером эмуляции НРД.
- disableEmulatorsIfDevOff сбрасывает и RealWrite (код остаётся, инертен),
  новость явно фиксирует прекращение реальных поручений.
2026-10-08 00:45:06 +03:00
zuevav fd238c1078 feat(admin): dev-страница «Эмуляторы» — переключатели и настройки эмуляции НРД и МНП QUIK
В режиме разработки новая страница /admin/emulators с двумя клавишами:

- «Эмулятор НРД» (флаг LK.EmulateNSD): заявки ЛК и ручного ввода идут через
  внутренний имитатор, в НРД ничего не отправляется. Настройки: задержка
  решения (0–300 с), исход (подтвердить/отклонить/не отвечать), код отказа
  M2M01–M2M09/18. Сендер перенастраивается в рантайме через потокобезопасный
  mock.Sender.Reconfigure — без перезапуска.
- «Эмулятор МНП QUIK» (флаг QuikMNP.Emulate): шаги цикла без записи в боевую
  БД МНП. Настройки: задержка шага (0–60 с), точечные отказы по шагам
  (регистрация/подпись/отказ/зачисление) — эмулированный отказ ведёт себя как
  боевой: шаг OK=false, состояние не продвигается, повтор на следующем проходе.

Настройки хранятся в setup.json (nsd_emu/mnp_emu), обратная совместимость —
дефолты. Баннер «Режим эмуляции» показывается и при ручном включении
эмуляторов (раньше зависел только от отсутствия ИШ). Пункт меню «Эмуляторы»
и две плитки на дашборде — только в dev. Пути занесены в devOnlyPath.

Попутно: исправлен race в TestLicenseActivateAndRenew (cleanup восстанавливал
DefaultLicensePublicKey без moduleEnforceMu — падал под -race и на чистом HEAD).
2026-10-07 21:34:39 +03:00
zuevav 686889ee72 «Обмен с DEPO»: сводка состояния вместо форм; настройка — под «Перенастроить»
- Сверху — «Обмен с DEPO работает / настроен не до конца / не подключён» и сведения: база DEPO, сервер и СУБД, логин bj, начало номера торговых счетов, признак ИИС (отказ M2M06), трансферные таблицы, кто запускает обработку и итог последней проверки (✓/✗ и когда).
- Все прежние формы — под «Перенастроить»; раскрыто само, если что-то не проверено.
- Общий стиль сведений «название — значение» (.kv) — в оформлении для настроек.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 10:35:02 +03:00
zuevav b496fad3e8 Настройка: меню разделов не прыгает, другой раздел открывается с начала
- Место под полосу прокрутки зарезервировано всегда (scrollbar-gutter: stable): короткий раздел без прокрутки и длинный с ней больше не сдвигают страницу и меню вбок.
- Меню разделов — на месте при прокрутке и целиком на экране (своя прокрутка, если не помещается по высоте).
- Выбор другого раздела — страница с его начала, а не с той высоты, где листали прежний (после сохранения формы — как раньше, к месту формы).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 10:30:02 +03:00
zuevav ed598281e8 Активные сессии — строками: «Завершить» не вылезает за карточку; браузер и система одним словом
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 10:24:27 +03:00
zuevav a53b9f9e9f Автоматический режим M2M по умолчанию; контуры НРД карточками; адрес папок шлюза для проводника; Zabbix — в «Диагностике»
- M2M: «bj сам — автоматически» — режим по умолчанию (где ни разу не выбирали; момент включения записывается, берутся переводы не старше суток до него); «Оператор» — запасной; явный выбор не меняется.
- Контуры НРД: TEST3 и боевой — карточки с состоянием (Активный / Готов / Нужен ключ / Канала нет); «Сделать активным» видна всегда, без ключа неактивна с пояснением; «Установить ключ», «Обновить канал».
- Папки шлюза по сети: после открытия — адреса для проводника (\\IP\igate_exchange и по имени сервера, боевой — igate_exchange_prod) с кнопкой «Скопировать»; bj-igate-admin share status отдаёт ip, host, shares.
- Zabbix перенесён из «Оповещений» в «Диагностику».

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 08:29:25 +03:00
zuevav 6b490986e4 «Обновления» — одна карточка состояния и одна кнопка; проверка при открытии раздела; «Службы» — в «Диагностике»
- Сверху: «Установлены последние версии» (когда проверено) или «Доступно обновление X — Установить обновление» (всё сразу), или «Проверить не удалось»; кнопка «Проверить сейчас».
- При открытии раздела bj проверяет обновления сам, если последней проверке больше 10 минут (и не чаще раза в 10 минут из браузера — без зацикливания, если источник не настроен); check отвечает JSON для экрана.
- «Компоненты и версии» (обновить один компонент) и «Расширенные настройки» (обновление из файла, источник и канал, ключ, автопроверка) — под раскрытием.
- «Службы» с перезапуском перенесены в «Диагностику»; подсказка в письме о службе — туда же.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 08:19:34 +03:00
zuevav 56068af897 QUIK и НРД в настройках — простой вид и расширенный под раскрытием; выбор «Кто отвечает на переводы M2M»
- QUIK: в карточке режима — одна галочка «Клиенты подают поручения из QUIK (терминал и мобильное приложение)», сохраняется сразу; предупреждение, если режим изменён в расширенных; «Расширенные настройки» (отдельно исходящие/входящие, инструменты МНП, коды клиентов) свёрнуты, без дубля счёта и галочки терминала; формы цикла не сбрасывают поля, которых не прислали.
- НРД: организация — код, ИНН, наименование в ряд; реквизиты в НРД — общий блок с мастером (nsdRequisites), «Определить из DEPO» видна (была белым по белому); блок шлюза из мастера (контуры, доступ к папкам по сети) — и в настройках; ручная настройка шлюза — под «Расширенными настройками».
- Автоматический режим M2M: вместо галочки с «Сохранить» — выбор плиткой «bj сам — автоматически / Оператор», сохраняется сразу (m2mAutoCard); тот же выбор — в мастере на шаге «Проверка»; подробности — под раскрытием.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 08:15:06 +03:00
zuevav 6f9896d12e Пользователи в настройках — как в мастере: простой вид и расширенный под раскрытием
- Блок «Учётные записи» мастера вынесен в part_accounts.html (accountsAdd, accountsAD) и стоит и в мастере, и в Настройка → Пользователи: роли плитками, создать сотрудника (с модулями), сотрудники и группы из домена.
- Список сотрудников: строка — кружок, имя, логин, источник, последний вход, роль; «Изменить» раскрывает правку (имя, e-mail, роль, пароль, модули, «может входить»), «Удалить сотрудника» — тихой ссылкой с подтверждением.
- «Расширенные настройки» под раскрытием: роли и права, домен вручную (контроллер, Base DN, сертификат ЦС, служебная запись, группы → роли, роль по умолчанию, время сессии), проверка входа, перепроверка групп; подписи укорочены, поля в ряд.
- Ссылки-кнопки (dq-link, «убрать») одинаковые в настройках и мастере.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 08:03:16 +03:00
zuevav fb75086db2 «Настройка» в одном стандарте с мастером: раздел — одна карточка, подблоки через разделители, подпись над полем
- Раздел настроек оформлен как шаг мастера: одна карточка (радиус 16), заголовок 21px и вводный текст, вложенные блоки — без своих рамок, через тонкий разделитель; выделенные плашки (ключ не подключён, вход открыт) — класс callout.
- Поля в сетке (почта, Zabbix и др.): подпись над полем, поле во всю колонку — в настройках «Порт [587]» вставал в строку; правило общее для настроек и мастера.
- Текст абзацев 14.5px (пояснения 13.5px) — как в мастере; крупные цветные строки состояния больше не кричат.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 01:31:36 +03:00
zuevav 773fa8e0bf Мастер: шапка на месте; домен — только логин и пароль; модуль «1С: база мидл-офиса» (тест)
- Шапка мастера: правый блок (шлюз НРД, пользователь, тема) снова справа — после правила [hidden] скрытое меню перестало его распирать.
- Домен в шаге «Учётные записи»: bj сам находит домен и контроллеры (логин с @домен, домены поиска DNS, rootDSE DNS-серверов, SRV _ldap._tcp.dc._msdcs); адрес и домен — в расширенных настройках, открываются сами, если не нашлось. Контроллеры по очереди, LDAPS → LDAP+StartTLS.
- Неудачная попытка ничего не теряет: введённое (и пароль) — черновиком, форма заполнена; причины словами (неизвестный ЦС, имя в сертификате, IP вместо имени, порт закрыт, нет в DNS).
- Сертификат неизвестного центра: карточка «кем выдан, отпечаток (SHA-1 как в Windows и SHA-256)» и «Доверять и подключить»; после входа bj берёт из домена сертификат центра (AIA / Certification Authorities), подписавший сертификат контроллера, — подходят все контроллеры. То же в Настройка → Пользователи при «Проверить».
- Лицензия: модуль onec-middle «1С: база мидл-офиса (тест)»; раздел настроек — адрес публикации, пользователь, пароль, проверка через OData $metadata; в мастере — в «Модулях».
- ЛК (callback, API, готовность) — только при модуле «ЕСИА Финанс»; карточка режима QUIK и стили настроек как в мастере.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 01:03:16 +03:00
zuevav afc5776347 Индикатор «Шлюз НРД», проверка ключа ИШ, папки шлюза по сети, сотрудники из домена, переключатель QUIK в настройках
- журнал ИШ: номер процесса выравнивается пробелами — опросы НРД не распознавались (серый индикатор)
- «Проверить СКЗИ и ключ»: Валидата, датчик случайных чисел, подпись профилем ИШ (а не старый bj-crypto);
  индикатор «Криптографии» — по готовности ключа; карточка автозагрузки УЦ — только для разработки
- шаг «Шлюз НРД»: папки обмена по сети (Samba): логин/пароль, ручная настройка не трогается
- «Учётные записи»: необязательно — подключить домен, проверить связь, найти сотрудника и добавить с ролью;
  роль из bj действует, пока группы домена с ролями не сопоставлены
- настройка QUIK МНП: «Только чтение / Чтение и запись», тонкая настройка цикла свёрнута
- индикатор «Обновления» — только когда есть что обновить; «Мастер настройки» в меню и в настройках

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 00:24:19 +03:00
zuevav c62225dd7d ИШ ждёт флешку с ключом — bj это видит и перезапускает шлюз сам; итог установки ключа; список копий; скрытые блоки
- ИШ без флешки ждёт её в окне Валидаты («Вставьте ключевой носитель»): статус «ждёт флешку», без кнопки
  переустановки; сторож не тратит перезапуски, а когда флешка появилась — перезапускает ИШ сам; письмо
- шаг ключа: итог — карточка «Ключ подключён», «Заменить ключ» вместо «Установить ещё один», этапы свёрнуты
- копии: «Копии на хранилище» ищет там же, куда ложится копия (подпапка по умолчанию bj-backup, не из старых
  настроек); поля показываются разобранными
- [hidden] прячет всегда (пустая полоска под версией ИШ); «Шлюз НРД на другом сервере?» — что это за адрес

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 00:11:48 +03:00
zuevav 4adc1398f6 База bj на своём PostgreSQL; «Не заполнено: …» для пустых полей; запись канала ИШ — в фоне, с ходом на странице
- шаг «База bj»: перенос на сервер PostgreSQL организации (проверка подключения, версии, прав, пустой базы;
  pg_dump → psql; сверка числа строк по таблицам; переключение и перезапуск); прежняя база — запасная копия;
  резервные копии: дамп внешней базы по её подключению, восстановление её не трогает
- все формы: пустые видимые обязательные поля называются по имени и подсвечиваются; DEPO — и на сервере
- «Обновить/Создать канал»: в фоне bj, ход по этапам с таймером (и после перезагрузки страницы), переходы
  заблокированы до конца, в конце проверка, что шлюз загрузил канал; состояние ИШ во время записи — без
  очереди к root-обработчику (страница больше не висит на «Проверяю…»)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-07 00:00:35 +03:00
zuevav f81135a715 Мастер настройки как помощник установки: шаги слева, одна карточка, «Назад»/«Далее» внизу
Слева — шаги этой установки по порядку (номер, галочка у сделанных, текущий выделен),
справа — карточка шага: заголовок, пояснение, сведения «название — значение», зелёная
плашка итога. Подготовка модулей — в том же виде.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-06 13:20:11 +03:00
zuevav 6a68dc927f Мастер настройки проще: один вопрос на экран, подробности — под «Подробнее»
- «Время и сеть»: пояс компьютера пользователя предлагается одной кнопкой, пояс применяется сразу при
  выборе; сервер времени — только если не синхронизируется; «сделано установщиком» — строкой внизу.
- «Лицензия»: модули словами, а не кодами (quik-mnp → «QUIK: неторговые поручения…»); пояснения — только
  пока ключа нет; поле ключа крупное, одно.
- «Учёт DEPO»: главный вопрос «Как подготовить базу» первым, короткие подписи; кружки переключателей
  больше не сплющиваются длинным текстом.
- «QUIK»: одна кнопка «Сохранить и проверить»; база и шифрование — под «Дополнительно», без «true/disable»
  и TrustServerCertificate; автоматический цикл и справочник получателей в мастере свёрнуты.
- «Организация»: без логотипа (он в «Оформлении»), кнопки одного цвета. «Шлюз НРД», «Ключ», «Оповещения»:
  по одному абзацу, письма и устройство автообновления сертификатов — под раскрытием.
- Мастер и «Подготовка модулей» — без меню системы; подзаголовок не повторяет названия глав.
- Подсказка о восстановлении из копии ведёт на первую страницу (в мастере его больше нет).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-06 11:58:58 +03:00
zuevav 79d20bc2cf Мастер без лицензии учёта: глава 2 называется «Организация», подзаголовок мастера собирается из глав этой установки; в шапке «НРД не подключён» вместо «Нет связи с НРД», пока обмен не настроен
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-05 19:07:41 +03:00
zuevav ba1aae705d Проверка на чистой ВМ: служба впервые установленного модуля включается в автозапуск, даже если unit-файл уже положил образ (иначе bj-crypto после перезагрузки не стартовал); bj-crypto в готовности — предупреждение, а не блокер (пакеты для НРД подписывает шлюз), до установки модуля не проверяется; в мастере без ссылки «Открыть мастер» на самом мастере, без двойного заголовка «Наша организация», без QUIK и DEPO в текстах и маршрутах уведомлений, если их нет в лицензии; «162 участника», понятная сводка готовности; адрес SMTP через JoinHostPort
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-05 19:04:24 +03:00
zuevav 17df53f25b Первичная настройка, часть 2: шаг 9 «Оповещения и резервные копии», шаг 10 — итоговая проверка готовности (живые проверки со ссылкой «Исправить»); проверка модуля неторговых поручений QUIK (объекты M2M, инструменты, справочник получателей, цикл, ошибки операций); восстановление из копии на /first-run по одноразовому коду; возврат на тот же шаг мастера после «Сохранить» (return_to с ?step); пароль SMTP не выводится в страницу; карточки почты, адресатов и копий — общие для настроек и мастера
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-05 16:18:28 +03:00
zuevav a1379c9f27 Кнопка «Скопировать» над каждым блоком скрипта/кода (pre.copyable); копирование работает и по http (запасной путь через execCommand), в т.ч. в карточке заявки и отчёте QUIK
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-05 11:39:44 +03:00
zuevav 4498289198 Мастер, учёт DEPO: скрипт таблиц не выходит за карточку; на «Подключении» — как создать логин bj (права, скрипт MS SQL/PostgreSQL с базой и логином из полей)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-10-05 11:24:14 +03:00
zuevav d4237c9da3 Шапка: одна плашка «Шлюз НРД», подробности по участкам — в подсказке
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 16:21:43 +03:00
zuevav 4cbefa41d5 Мониторинг связи с НРД: участки Шлюз/НРД/M2M/Отправка, сквозная проверка справочником раз в 10 мин, история за сутки на «Статусе», цепочка в шапке (30 с), автоповтор недоставленных до 24 ч, баннер и статус «ожидает отправки» в кабинете клиента
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 16:17:25 +03:00
zuevav a0f6ce9f7b Карточки заявок обновляются сами: отпечаток состояния, перерисовка без ручного обновления, индикатор «обновляется автоматически»
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 16:07:11 +03:00
zuevav c2aaa09fe3 Отправка в НРД с подтверждением доставки: ERROR от ИШ — заявка «Не отправлена», без BJ_SENT; «Отправить повторно» тем же GUID; сторож связи ИШ↔НРД по журналу ИШ
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-25 15:57:07 +03:00
zuevav c3c470d48b Окно обновления: быстрый перезапуск bj (без обрыва между опросами) распознаётся по смене версии/сбросу отчёта; сторож 90 с
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:56:24 +03:00
zuevav 2edc83e614 Модуль, снятый с лицензии, отключается один раз: служба остановлена (bj-keymedia unit-disable), одно оповещение, в списках не показывается; вернули в лицензию — служба включается
Также: версия файла, совпадающего с выпуском, записывается (нет ложного «новее»); признак неудачной проверки отдельно от результатов установки; окно обновления само перезагружает страницу.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:43:34 +03:00
zuevav c45d8632ca Окно обновления: форма уходит как обычная (urlencoded), сервер разбирает и multipart — «Обновить» у строки снова обновляет только её
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:28:49 +03:00
zuevav 56643cbe56 Окно обновления показывает только отчёт своей попытки (не ошибку прошлой); кружки шагов мастера кликабельны
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:25:38 +03:00
zuevav 86c48288a0 Обновление: модули вне лицензии пропускаются с пояснением «не входит в лицензию — свяжитесь с ZETIT», а не срывают обновление
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:17:29 +03:00
zuevav f1df6b529b Модули вне лицензии исчезают из интерфейса: меню, разделы настроек, прямые адреса отвечают «не входит в лицензию»
- moduleForPath: quik-mnp (QUIK, обмен с DEPO, ручной поиск в DEPO), quik-export, web-cabinet (bj-lk);
- в настройках каждый модуль по своему признаку (раньше Экспорт QUIK и Кабинет шли общим условием);
- разделы Fancy/QUIK открыты при лицензии QUIK МНП без пароля перспективных модулей.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:14:47 +03:00
zuevav 775b4214b6 Обновление с индикатором хода (этапы, скачанные МБ, перезапуск ядра); в мастере ключ продукта не просится повторно
- /admin/setup/update/progress: этап, байты, целевая версия ядра; ApplyUpdate/ApplyBundle отчитываются;
- окно в layout: формы установки обновлений отправляются скриптом, окно ждёт перезапуска ядра и сверяет версию;
- шаг 1 мастера: «Ключ продукта введён», смена ключа — под ссылкой.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
2026-09-24 22:04:08 +03:00
zuevav 405061ef8d Сторож ИШ НРД: проверка каждые 30 с, оповещение через 2 мин недоступности, автоперезапуск igate (до 3 попыток, раз в 20 мин), оповещения «не помог»/«восстановлен», красный индикатор в шапке; igate в списке служб root-демона
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 13:56:37 +03:00
zuevav 854f93205b Тест DEPO — только в режиме разработки (страница и пункт меню)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 12:21:03 +03:00
zuevav f4f11dd583 Тестирование DEPO: сценарии перевода (клиент и бумаги из DEPO, исход по каждой бумаге) с имитацией ответов НРД, пошаговая запись в FTV_M2M* и показ результата джобы; без отправки куда-либо, кроме базы DEPO; оповещения по тестовым GUID не рассылаются
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 12:01:33 +03:00
zuevav 683f516d07 Кабинет: поиск клиентов с подсказками, чистая страница документов, ширина настроек
Поиск клиентов (режим сотрудника):
- поле поиска вынесено наверх страницы, рядом «Найти» и «Сбросить»;
- браузер сам подсказывает выпадающим списком по мере ввода — договоры
  депозитария отдаются страницей в <datalist> (скриптов в кабинете нет,
  CSP остаётся строгой), список кэшируется в ядре на 10 минут;
- по запросу фильтруются и учётки кабинета, и договоры депозитария,
  под формой показывается, сколько найдено;
- шаблон LIKE экранируется, чтобы % и _ в номере договора означали себя.

Документы: убраны пустое табло, «Мои заявки» и форма заказа документа —
остался список готовых документов депозитария и пояснение, куда обращаться.

Настройка: колонка сетки больше не растягивается широкой таблицей
(min-width:0), у страницы пропал горизонтальный ползунок.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 18:45:54 +03:00
zuevav 13b051106f Настройки: поля кабинета не разъезжаются — подпись, ввод и пояснение каждое со своей строки
На странице настроек label не блочный, поэтому подпись, поле и пояснение вставали в одну
строку и текст обтекал ввод. Добавлен класс поля .fld (сетка) и применён в карточках
«Кабинет клиента», «Кабинет на этом сервере» и «ЕСИА Финанс».

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 18:22:09 +03:00
zuevav 46e55e1277 Журнал: онлайн-статус «чего ждёт заявка», ссылка из ручного ввода в журнал, правки формы
- livestatus.go: одна фраза состояния для исходящих (сделка M2M + черновик/подача/MS010
  поручения 16) и входящих (наше решение → поручение 16/1); признак «в работе»
- строки журналов и карточки показывают её и обновляют по /admin/journal/live каждые 8 с,
  пока заявка в работе; завершённые и отклонённые не опрашиваются
- ручной ввод: у отправленного поручения ссылка «в журнале →» и тот же онлайн-статус;
  вид документа занимает две колонки
- выбор участника: по ИНН и коду с кнопки, а не по номеру строки; Enter выбирает только
  при единственном совпадении

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 11:55:39 +03:00
zuevav 5bafd60df6 Шапка: служебные разделы в меню пользователя, статус НРД и время друг над другом
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 11:20:51 +03:00
zuevav b4b4788035 Баннер режима разработки в шапке с личным выключателем
Пока лицензия разрешает режим разработки, в шапке висит баннер; нажатие выключает режим визуально для этого пользователя и включает обратно. В шаблонах .DevMode заменён на devOn.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q4YVo4UMopqT5DzicqpPjL
2026-09-18 11:18:27 +03:00
zuevav e4de1ab4d8 Раздел «Ручной ввод M2M» по бумажным поручениям; тестовые тексты и имитации убраны из клиентского интерфейса
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 18:26:59 +03:00
zuevav 627dbca6af Режим разработки: служебные разделы, робот НРД и имитации — только по признаку из ключа лицензии
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-17 18:15:18 +03:00
zuevav da12a9ec1c feat(bj): модуль ЛК на PostgreSQL, обмен с DEPO, боевой ЛК с имитатором НРД, QUIK, НПР
- bj_exchange и «кран» Fancy убраны: данные модуля ЛК в PostgreSQL (схема lk)
- трансферные таблицы FTV_M2M: создание при установке, события, справочник участников
- сверка с DEPO: счёт, ФИО, дата рождения, ИИС по договору, квал-инвестор из опции DEPO
- боевой ЛК ЕСИА Финанс при тестовом ИШ: журнал, отказ через DEPO, статусы в ЛК
- онлайн-лицензирование в bj, план тестирования M2M для контрагента (интерактивный HTML)
- модули QUIK МНП, экспорт QUIK, НПР/УДС; документы и тестовые материалы

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-15 19:41:12 +03:00
zuevav 9737c787f9 feat: живой цикл M2M с НРД + мастер установки ключа на флешку
Инфраструктура M2M (живой обмен с НРД через ИШ):
- обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение
  ответа; INFO → ждём Decision; идемпотентность поллера
- fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO
- сырой XML ответа НРД в карточке заявки (для пересылки в ТП)
- тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes,
  4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта
- редирект из теста сразу в карточку заявки

Мастер установки ключа Валидаты на флешку (admin/setup/keywizard):
- пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник
  сертификатов (CRL) → перезапуск+проверка ИШ → готово
- привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен,
  bj-server остаётся в песочнице
- сохранение структуры профиля архива (spr<N>), перечисление съёмных USB

Прочее:
- пакет-доказательство для ТП НРД + форма регистрации участника M2M
- эталонные образцы робота (DOC/m2m_robot_samples)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-19 00:03:21 +03:00
fontvielle 1ffe62133c feat(admin): баннер «🟡 РЕЖИМ ЭМУЛЯЦИИ» сверху страниц когда mock
Когда ИШ НРД не настроен (NSD.IGWBaseURL пустой) или провайдер СКЗИ =
stub — рисуем жёлтую плашку сверху каждой страницы админки с явной
надписью «РЕЖИМ ЭМУЛЯЦИИ — реального обмена с НРД нет» и ссылкой
«Настроить →» на /admin/wizard. Это нужно чтобы пользователь видя
быстро-подтверждённую заявку не думал что это настоящий обмен.

Реализация: добавлено поле IsMockMode/MockReason в page struct,
nowPage() читает globalRC.Snapshot() и заполняет их. globalRC — пакетная
переменная (заполняется один раз в RegisterAdmin), чтобы не таскать
*RuntimeConfig через все renderXxx-вызовы. Сам баннер — в layout.html
перед <main>, поэтому виден везде включая карточку заявки.
2026-05-14 16:44:24 +03:00
fontvielle 93f3ec240c feat(admin): блок «Новости» + doc-watcher + авто-уведомления о сертификатах УЦ
Новый раздел /admin/news — лента событий системы (окна техработ НРД,
обновления документации, переустановка сертификатов УЦ). Каждая
новость со временем, типом (maintenance/feature/doc-update/system/
manual), опциональным окном действительности (ValidFrom..ValidTo) и
ссылкой на источник. Лента не очищается — служит журналом для аудита.

На дашборде /admin/ — компактный блок «📢 Новости»: показывает максимум
3 актуальных события (активных сейчас или с окном, начинающимся в
ближайшие 7 дней; в остатке — самые свежие). Окна техработ при
наступлении становятся жёлтыми (border-left, ValidFrom..ValidTo).

В ленте можно добавлять новости вручную (форма на /admin/news), скрывать
(soft-delete через Dismissed). Дедуп по ID.

Doc-watcher: горутина в bj-server, раз в сутки качает страницы НРД
(дефолтные источники — moex-most, программы НРД, криптосервис), парсит
HTML на ссылки .pdf, скачивает новые версии в DOC/ (со старыми
переименовывая в .YYYY-MM-DD.pdf.bak для аудита), и публикует
новость «Обновлена документация: <file>». Sha256-дедуп — пере-импорта
неизменённого PDF не будет.

Cacerts.go: FetchCACertificates теперь принимает *RuntimeConfig и при
успешной переустановке сертификата эмитирует NewsItem «Обновлён
сертификат УЦ: <CN>». Если сертификат истекает в ближайшие 14 дней —
отдельная новость-предупреждение. Это закрывает запрос «получает в авто
режиме и предупреждает об этом» из обсуждения.

SeedDefaultNews публикует при старте bj-server две известные новости:
- TEST3 недоступен 18.05.2026 — 22.05.2026 (НРД письмо НРД-И-2026-8452)
- Робот-автотест MOEX МОСТ доступен на TEST3 с 12.05.2026

Скачаны три свежие инструкции с nsd.ru/services/novye-servisy/moex-most-dlya-m2m/:
- DOC/instruktsiya-po-testirovaniyu-s-robotom.pdf (новая, 12.05.2026)
- DOC/instruktsiya-dlya-osuschestvleniya-obmena-soobscheniyami-...-fizicheskim-litsom-samomu-sebe.pdf (новая, 12.05.2026)
- DOC/servis-most-m2m.pdf (актуальная общая инструкция)

Mastered tasks: #46, #47, #48.
2026-05-14 16:26:41 +03:00
fontvielle cb0f7efd4c feat(admin): мастер настройки /admin/wizard + авто-подъём PostgreSQL одной кнопкой
Для пользователя без IT-навыков — пошаговая настройка (5 шагов) с
прогресс-баром, подсказками «?» рядом с каждым полем и блоками
«Что это?» / «Где взять?» в каждом шаге. Шаги: PostgreSQL → КриптоПро →
Сертификаты → ИШ НРД → Тестовая заявка. Авто-определение текущего шага
по первому незавершённому пункту, навигация Назад/Далее, мягкие пропуски
(in-memory / mock-режимы).

В шаге 1 — «⚡ Поднять локальный PostgreSQL автоматически»: одна кнопка
запускает podman-compose, ждёт pg_isready, накатывает миграции
fansy-store + m2m-core, сохраняет DSN в runtime-конфиг. setupFlash теперь
возвращает пользователя на /admin/wizard, если POST пришёл оттуда —
визард не «теряется» после действий.

Mastered tasks: #41, #42, #43.
2026-05-14 15:46:31 +03:00
fontvielle 9216eafb7f fix(admin): пункт «Инструкции» в верхнем меню обоих UI
В lkgateway/layout.html добавлен <a href="/admin/help">Инструкции</a>
(ссылка пропала при предыдущем мерже шаблонов).

В lkemulator/layout.html добавлен <a href="{{.GatewayURL}}/admin/help"
target="_blank">Инструкции →</a> — открывает справку lk-gateway в
новой вкладке (эмулятор сам справку не хостит, ссылка на gateway).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 14:02:20 +03:00
fontvielle 958d777751 feat(lk-gateway): admin setup wizard — конфигурация подсистем через UI + тестовый прогон
Добавлена вкладка «Настройка» в admin-панели lk-gateway. Позволяет
ввести параметры каждой подсистемы прямо через веб-интерфейс,
проверить подключение и запустить тестовую заявку в один клик.

internal/lkgateway/runtimeconfig.go:
- Runtime-конфиг с персистом в JSON (BJ_SETUP_PATH или ~/.bj/setup.json)
- Поля: PostgresDSN, Crypto (provider/socket/jcp_path/license_key),
  NSD (profile/igw_base_url/key_container), LK (callback_url),
  LastTestRun (результат последнего тестового прогона)
- ReadinessSummary() для блока «Готовность системы: X из Y»

internal/lkgateway/setup.go:
- GET /admin/setup — страница настройки
- POST /admin/setup/postgres — DSN + sql.Ping (без pgx-драйвера упадёт
  на «unknown driver postgres», что покажет пользователю)
- POST /admin/setup/crypto — provider/socket/jcp.jar/лицензия, проверка
  существования файла jcp.jar
- POST /admin/setup/nsd — профиль/URL ИШ/контейнер, GET /healthz ИШ
- POST /admin/setup/lk — callback URL + GET /healthz эмулятора/ЛК
- POST /admin/setup/test-run — пробная сквозная заявка с предзаполнением
  (Иванов, 1500 акций Газпрома, ИИС T03), опрос статуса до финального

internal/lkgateway/web/templates/admin_setup.html:
- 4 карточки подсистем со статус-индикаторами (зелёная/красная точка)
- Inline-формы через <details>/<summary>: открыты для не настроенных,
  свёрнуты для уже настроенных
- Карточка «Тестовый прогон» с историей последнего результата
- Прогресс «Готовность системы: X из Y» в верхней части

internal/lkgateway/server.go:
- Server.rc *RuntimeConfig — поднимается при NewServer
- CheckOptions для admin-дашборда теперь берутся из runtime-конфига,
  а не только из ENV — изменения в /admin/setup сразу видны в /admin/
  и /admin/status без перезапуска

В layout.html добавлена nav-ссылка «Настройка», между «Дашборд» и
«Заявки».

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-14 11:30:48 +03:00