{{define "content"}} {{if .Flash}}
{{.Flash}}
{{end}}
{{/* ===== Боковая навигация разделов с индикаторами ===== */}}
{{if .FromWizard}}
Вы настраиваете модуль из мастера настройки.← Вернуться в мастер
{{end}} {{/* ============ ОБЗОР ============ */}}

Обзор

Готовность системы: {{.ReadyCount}} из {{.TotalCount}}

{{range .Readiness}}
{{.Name}}
{{if .Configured}}настроено{{else}}не настроено{{end}}
{{end}}

Версии систем

Что установлено на этом сервере и с чем работает bj: собственные компоненты и внешние системы. Та же версия показана в разделе каждого модуля. Сведения на {{msk .Versions.At}}.

{{range .Versions.Items}}{{end}}
СистемаВерсияПодробности
{{if and .Section (ne .Section "overview")}}{{.Title}}{{else}}{{.Title}}{{end}} {{if .Version}}{{.Version}}{{else}}не определена{{end}} {{.Detail}}{{with .Err}} {{.}}{{end}}
{{/* ============ БАЗА ДАННЫХ ============ */}}

База данных

{{template "verline" (.Versions.Get "postgres")}}

PostgreSQL

Журнал сделок m2m-core и принимающая БД. Сейчас: {{if .Settings.Postgres.DSN}}подключено{{else}}in-memory (данные не сохраняются){{end}}.

{{if and devOn (not .Settings.Postgres.DSN)}}

Подключить автоматически

Поднимем локальный PostgreSQL в контейнере, применим миграции и запишем DSN. Для дев-стенда. Для прода — укажите свой DSN ниже.

{{end}}
{{if .Settings.Postgres.DSN}}Изменить подключение{{else}}…или ввести DSN вручную{{end}}

При сохранении выполняется Ping.

{{if mod "quik-mnp"}} {{/* ============ ОБМЕН FANCY (MSSQL) — перспективный модуль ============ */}}

Обмен Fancy (MSSQL / PostgreSQL)

{{template "fancySection" .}}
{{/* ============ QUIK МНП ============ */}}

QUIK — Модуль неторговых поручений

{{template "quikSection" .}} {{if .Settings.Quik.Server}}{{template "mnpCheck" .}}{{end}}
{{end}}{{/* /AdvancedUnlocked — конец перспективных модулей Fancy/QUIK */}} {{/* ============ ПОЛЬЗОВАТЕЛИ И ВХОД ============ */}}
{{$U := .Users}}{{$A := .Settings.Auth}}

Пользователи и вход

Кто может входить в bj и что ему разрешено. Вход — локальной учётной записью или доменной (Active Directory), роль доменного пользователя назначается по его группам AD.

{{if $U.Open}}
Вход пока не требуется: пользователи не созданы. Создайте первого администратора — после этого все страницы потребуют входа.
{{end}}

Роли

{{range $U.Roles}}{{end}} {{range $U.Hidden}}{{end}}
РольЧто разрешено
{{.Title}}
{{.Key}}
{{.Desc}}
{{.Title}}Недоступна: в лицензии нет модуля «{{.Missing}}».

{{if $U.Modules}}Подключённые модули ({{range $i, $m := $U.Modules}}{{if $i}}, {{end}}«{{$m.Title}}»{{end}}) можно выдать любому пользователю дополнительно к роли. {{end}}Роли и модули показываются по лицензии: права модуля, которого нет в лицензии, не действуют. Настройки и пользователи — только администратор.

Пользователи ({{len $U.Users}})

{{range $U.Users}}
{{.Login}} {{if eq .Source "ad"}}AD{{end}}{{if not .Active}}заблокирован{{end}}
{{if not .LastLogin.IsZero}}вход {{msk .LastLogin}}{{else}}ещё не входил{{end}}{{if .Note}} · {{.Note}}{{end}}
{{if .ADGroups}}
группы: {{range $i,$g := .ADGroups}}{{if $i}}, {{end}}{{$g}}{{end}}
{{end}}
{{else}}

Пользователей нет.

{{end}}

{{if $U.Open}}Создать первого администратора{{else}}Добавить пользователя{{end}}

{{if $U.Modules}}{{end}}

Доменного пользователя можно заранее завести с источником «Active Directory», чтобы выдать ему модули; роль при входе возьмётся из групп AD. Если потерян доступ администратора — удалите файл /var/lib/bj/.bj/users.json на сервере: система вернётся в режим первичной настройки.

Вход через Active Directory

bj подключается к контроллеру домена и проверяет пароль пользователя (LDAP bind его же учётной записью). Роль назначается по членству в группах AD, включая вложенные. Пользователь появляется в списке при первом входе. Чтобы изменения групп действовали без повторного входа, укажите сервисную учётную запись только на чтение: bj будет перечитывать группы доменных пользователей по расписанию, менять роль и снимать доступ у удалённых из групп.

Группы AD → роли (имя группы или полный DN; первое совпадение сверху)
{{range $A.ADGroups}}
{{end}} {{range $i := list "1" "2"}}
{{end}}

Без логина и пароля проверяется только доступность контроллера. С логином — вход, группы и вычисленная роль. Пароль проверки никуда не сохраняется.

{{$R := $U.ADRecheck}}
{{if and $A.ADEnabled $A.ADBindUser $A.ADBindPassword}} Перепроверка групп каждые {{if $A.ADRecheckMinutes}}{{$A.ADRecheckMinutes}}{{else}}15{{end}} мин: {{if $R.At.IsZero}}ещё не выполнялась{{else}}последняя {{msk $R.At}}, проверено {{$R.Checked}}, изменений {{$R.Changed}}{{if $R.Err}} — ошибка: {{$R.Err}}{{end}}{{end}}
{{else}}Перепроверка групп выключена: роль доменного пользователя меняется только при следующем входе. Укажите сервисную учётную запись выше.{{end}}

Активные сессии ({{len $U.Sessions}})

{{if $U.Sessions}} {{range $U.Sessions}}{{end}}
ПользовательВходАктивностьАдресБраузер
{{.Login}}{{msk .Created}}{{msk .Seen}}{{.IP}}{{.UA}}
{{else}}

Сессий нет.

{{end}}
{{/* ============ ЭКСПОРТ БИРЖЕВОЙ ИНФОРМАЦИИ (QUIK) ============ */}} {{if or (mod "quik-export") (mod "npr")}}
{{if mod "quik-export"}}{{.QuikExport.HTML}}{{end}} {{/* модуль НПР/УДС работает поверх базы экспорта QUIK — его настройки здесь же */}} {{if mod "npr"}}

Модуль «НПР / УДС» (риск-монитор по данным QUIK)

Показывает НПР1 / НПР2 / УДС клиентов маржинальной торговли по базе экспорта QUIK (схема npr). Отдельно лицензируемый модуль (признак npr); при включении в меню появляется пункт «НПР / УДС». Подключение — логин только для чтения.

{{template "verline" (.Versions.Get "bj-npr")}}
{{end}}

Лицензия

{{end}} {{/* ============ КРИПТОГРАФИЯ ============ */}}

Криптография

{{template "verline" (.Versions.Get "crypto-service.jar")}}{{template "verline" (.Versions.Get "validata")}}{{template "verline" (.Versions.Get "java")}}

Установка ключа на флешку

Пошаговый мастер: загрузить архив НРД с паролем → запись на флешку → справочник сертификатов → проверка Валидаты → готово.

Открыть мастер установки ключа →

СКЗИ «Валидата Клиент L»

Активный профиль: {{if .Settings.Crypto.Profile}}{{.Settings.Crypto.Profile}}{{else}}—{{end}} · провайдер {{if and (not devOn) (or (eq .Settings.Crypto.Provider "stub") (eq .Settings.Crypto.Provider ""))}}не настроен{{else}}{{.Settings.Crypto.Provider}}{{end}}. {{if internalDocs}}Подробно — справка{{end}}.

Параметры провайдера (для совместимости)
{{/* путь к PKCS#11 не используется: bj работает с Валидатой через bj-crypto; в Валидате 6.0 модуля libvdpkcs11.so нет */}}
{{/* Доверенные сертификаты НРД в справочнике ИШ */}}

Сертификаты НРД в справочнике ИШ

Комплект доверенных сертификатов крипто-сервера НРД поставляется вместе с bj и при обновлении приезжает всем клиентам. bj сам сверяет справочник активного профиля ИШ{{if .NSDCerts.Profile}} ({{.NSDCerts.Profile}}){{end}}: недостающие добавляет (только если их УЦ уже есть в справочнике — боевой сертификат не попадёт в тестовый профиль), старые удаляет строго после разрешённого НРД срока. Каждое изменение — с бэкапом, проверкой подписи и откатом при ошибке; ИШ перезапускается на несколько секунд.

{{range .NSDCerts.Rows}}{{end}}
СертификатКонтурДействуетСтатус
{{.Title}}
{{.SubjectCN}} · выдан: {{.IssuerCN}} · серийный {{.Serial}}
{{.Contour}} {{.ValidFrom}} — {{.ValidTo}} {{if eq .Kind "ok"}}✓ {{.Status}}{{else if eq .Kind "add"}}⬆ {{.Status}}{{else}}{{.Status}}{{end}}{{if .RemoveNote}}
{{.RemoveNote}}
{{end}}
{{if not .NSDCerts.LastRun.IsZero}}сверено {{.NSDCerts.LastRun.Format "02.01.2006 15:04"}}{{end}}
{{if .NSDCerts.LastLog}}
{{.NSDCerts.LastLog}}
{{end}} {{if .NSDCerts.Store}}
Содержимое справочника профиля ({{len .NSDCerts.Store}} записей) {{range .NSDCerts.Store}}{{end}}
ВладелецИздательСерийныйДоХранилище
{{if eq .Kind "crl"}}CRL{{else}}{{.SubjectCN}}{{if .SelfSigned}} (УЦ){{end}}{{end}}{{.IssuerCN}}{{.Serial}}{{.NotAfter}}{{.Store}}
{{end}}

Свои сертификаты можно положить в /var/lib/bj/.bj/nsd-certs/*.cer — они добавляются по тем же правилам и никогда не удаляются автоматически.

{{/* Сертификаты УЦ */}}

Сертификаты УЦ (авто-загрузка)

URL .cer-файлов УЦ НРД (nsd.ru). Скачиваются, парсятся и сохраняются в /var/lib/bj/ca-certs/.

{{if not .Settings.CACerts.LastFetch.IsZero}}обновлено {{.Settings.CACerts.LastFetch.Format "02.01.2006 15:04"}}{{end}}
{{if .Settings.CACerts.FetchedCerts}} {{range .Settings.CACerts.FetchedCerts}}{{end}}
ВладелецТипДоСтатус
{{.SubjectCN}}{{.Store}}{{if not .NotAfter.IsZero}}{{.NotAfter.Format "02.01.2006"}}{{end}}{{if .Error}}ошибка{{else}}ок{{end}}
{{end}}
{{/* ============ НРД ============ */}}

НРД

{{template "verline" (.Versions.Get "ish")}} {{template "orgSection" .}}

Автоматический режим M2M

Без участия оператора, чтобы соблюдать сроки: ответ на входящие переводы по свежей сверке с DEPO (решение по каждой бумаге отдельно — возможен частичный приём; переводы на ИИС — отказ M2M07; бумага для квалифицированных инвесторов при неполной или непрочитанной квалификации клиента — отказ M2M08), подача поручения 16/1, как только НРД пришлёт черновик после нашего согласия, и подача поручения 16 по исходящим после согласия контрагента. Если DEPO или ИШ недоступны — bj повторяет каждые 3 минуты и шлёт оповещение; без сверки ничего не принимается. Обрабатывается только то, что пришло не раньше чем за сутки до включения. Кнопки в карточках остаются для ручной работы.

{{if not .Settings.M2MAuto.ChangedAt.IsZero}}

{{if .Settings.M2MAuto.Enabled}}Включён{{else}}Выключен{{end}} {{msk .Settings.M2MAuto.ChangedAt}}{{with .Settings.M2MAuto.ChangedBy}} · {{.}}{{end}}.{{if .Settings.Quik.Emulate}}{{if devOn}} Шаги QUIK МНП — в режиме имитации.{{else}} Записи в QUIK МНП сейчас не выполняются.{{end}}{{end}}

{{end}}

Интеграционный шлюз (ИШ)

{{if not .Settings.NSD.IGWBaseURL}}{{if devOn}}mock-режим — без реального ИШ.{{else}}ИШ не настроен — обмен с НРД не выполняется.{{end}}{{else}}Профиль {{.Settings.NSD.Profile}}, ИШ {{.Settings.NSD.IGWBaseURL}}.{{end}} Стенды и установка — справка.


Депозитарные реквизиты (откуда списываются бумаги) — из договора/письма НРД. Нужны для формирования заявки на перевод.

{{if .Settings.Fancy.Server}}
Счёт, код и раздел в НРД и карточка организации читаются из базы DEPO (Fancy) и подставляются в пустые поля — проверьте и сохраните.
{{end}} {{if .Suggest}}{{if .Suggest.AccountID}}
Найдено в DEPO: счёт {{.Suggest.AccountID}}, код {{.Suggest.DeponentCode}}, раздел {{.Suggest.SectionID}}{{if gt (len .Suggest.Sections) 1}} (открытых разделов: {{len .Suggest.Sections}}){{end}}{{if .Suggest.OrgName}}; организация {{.Suggest.OrgName}}, ИНН {{.Suggest.OrgINN}}{{end}}.{{range .Suggest.Notes}}
⚠ {{.}}{{end}}
{{end}}{{end}} {{if .Suggest}}{{if gt (len .Suggest.Sections) 1}}{{range .Suggest.Sections}}{{end}}{{end}}
{{/* ============ ЛИЧНЫЙ КАБИНЕТ ============ */}} {{/* ============ КАБИНЕТ КЛИЕНТА (наш модуль bj-lk) ============ */}} {{if mod "web-cabinet"}}

Кабинет клиента

Наш личный кабинет для клиентов депозитария: модуль bj-lk на своём сервере или PHP-хостинге, связь с ядром, учётные записи клиентов и сотрудников. Интеграция с платформой ЕСИА Финанс — отдельный раздел.

{{template "verline" (.Versions.Get "bj-lk")}}

Кабинет клиента на своём сервере

Кабинет (bj-lk) — отдельная программа для веб-сервера депозитария или хостинга. Своей базы у неё нет: данные она берёт у ядра по защищённому каналу и не хранит дольше запроса. Порядок: 1) создайте ключ доступа, 2) выберите способ связи, 3) скачайте архив и распакуйте его на сервере кабинета, 4) запустите программу (sudo ./install.sh заводит службу), 5) откройте адрес кабинета в браузере — установщик проверит сервер, спросит ключ, проверит связь и заведёт администратора, 6) опубликуйте кабинет через nginx с сертификатом (пример в README архива).

{{if .LKKeyMask}}{{.LKKeyMask}}{{else}}не создан — кабинет не сможет обращаться к ядру{{end}} {{if .Settings.LK.APIKey}}{{end}}
В архив ключ не попадает: его вводят в установщике кабинета (или вписывают в lk.env при установке без браузера). Здесь он показан целиком — понадобится при переустановке кабинета.
Куда кабинет обращается за данными. Если кабинет и ядро в одной сети — внутренний адрес; если в разных — тот, что открыт межсетевым экраном. Только https: по этому каналу идут ключ и сессии клиентов.
Имя, по которому ядро дозванивается до кабинета. Оно же — адрес, по которому входят клиенты.
{{if .Settings.LK.AgentMode}}
Связь с кабинетом {{if .LKAgent.Connected}}ядро подключено к {{.LKAgent.Cabinet}}{{else}}ядро не дозвонилось до кабинета{{end}}
{{if .LKAgent.LastOK}}Последний обмен: {{.LKAgent.LastOK}}. {{end}}Обслужено запросов: {{.LKAgent.Served}}. {{if .LKAgent.LastErr}}
Ошибка: {{.LKAgent.LastErr}}{{end}}
{{end}}

Где собираются страницы. Для PHP-хостинга — всегда в ядре: на хостинге лежит только ретранслятор (index.php), который передаёт запросы браузера ядру. Для своего сервера установщик спросит: собирать страницы в ядре (тогда программа на сервере — тоже ретранслятор, новые разделы появляются обновлением ядра) или на месте. Ключа ни в одном архиве нет.

В архиве для своего сервера: исполняемый файл, служба systemd (отдельный пользователь, ограничения доступа к файловой системе), файл настроек службы, установщик и README. Ключа в архиве нет — его спрашивает веб-установщик. Кабинет входит в модуль «Личный кабинет клиента» и обновляется отдельно от ядра.

Кабинет на этом сервере — для просмотра

Посмотреть кабинет глазами клиента можно, не размещая его на хостинге: ядро поднимает тот же кабинет на отдельном порту. Открывается по http из сети депозитария, поэтому подходит для проверки, но не для клиентов из интернета — им кабинет публикуется через хостинг или nginx с сертификатом.

{{if .LKPreview.On}}Открыть кабинет →{{end}}
{{if .LKPreview.Err}}

Не запущен: {{.LKPreview.Err}}

{{end}}

Вход — по учётным записям из карточки «Пользователи кабинета» ниже; сотрудник видит список клиентов, клиент — свой портфель. Данные те же, что получит кабинет на хостинге.

Данные кабинета: курсы и история

Чем кабинет считает стоимость портфеля. Курс нужен для выпусков с валютным номиналом (замещающие и еврооблигации): цена по ним — процент от номинала в долларах, юанях, евро. История стоимости накапливается только у нас: ни торговая система, ни брокерский учёт её не хранят.

{{if .LKData.FXAt}}Последний известный комплект: {{.LKData.FXAt}}, валют {{.LKData.FXCount}}.{{else}}Курсы ещё не загружались.{{end}} Полученные курсы сохраняются в базе bj по дням, поэтому при потере связи кабинет продолжит считать по последнему известному, а не покажет «нет курса». Курс учётной системы в нашей копии отстаёт на месяцы — выбирайте его только на сервере без выхода в интернет.{{with .LKData.FXNote}} {{.}}{{end}}
{{if .LKData.Snapshots}}Накоплено дней: {{.LKData.Snapshots}}; последний срез {{.LKData.SnapLast}} — договоров {{.LKData.SnapRows}}.{{else}}Срезов пока нет: график в кабинете появится после первых двух дней.{{end}} Срез считает стоимость каждого портфеля по экспорту QUIK один раз в день, после закрытия торгов. Задним числом историю восстановить нельзя, поэтому включать лучше сразу.

Пользователи кабинета

Учётные записи кабинета живут здесь, в базе ядра: кабинет на хостинге своей базы не имеет. Клиент привязан к номеру договора депозитария — по нему кабинет показывает портфель. Сотрудник («администратор кабинета») видит список клиентов и открывает их кабинеты на просмотр. Письма не отправляются: почта только хранится, пароль сообщите лично.

{{if .LKUsersError}}
База кабинета недоступна: {{.LKUsersError}}
{{end}} {{if .LKUsers}}
{{range .LKUsers}}{{end}}
ЛогинДоговорИмяПочтаРольПорученияСостояние
{{.Login}}{{.Contract}}{{.FullName}}{{.Email}} {{if .IsAdmin}}сотрудник{{else}}клиент{{end}} {{if .CanTransfer}}разрешены{{else}}просмотр{{end}} {{if .Active}}активна{{else}}заблокирована{{end}}
{{if .Active}}{{else}}{{end}} {{if .IsAdmin}}{{else}} {{if .CanTransfer}}{{else}}{{end}}{{end}}
{{else}}{{if not .LKUsersError}}

Учётных записей пока нет. Первого администратора можно завести из установщика кабинета или здесь.

{{end}}{{end}}
Новая учётная запись
Сменить пароль Все сессии пользователя будут завершены.
{{end}} {{/* ============ ЕСИА ФИНАНС (внешняя платформа ЛК) ============ */}} {{if mod "esia-finance"}}

ЕСИА Финанс

Интеграция с внешней платформой личного кабинета ЕСИА Финанс: адрес для клиента, приём заявок M2M, возврат статуса и подключение к API (тест/бой). Наш собственный кабинет настраивается в разделе «Кабинет клиента».

Личный кабинет — интеграция

Адрес ЛК (стенд/бой), куда клиент подаёт заявку M2M. Заявка приходит к нам по контракту POST /api/v1/back_office/claims/, а мы возвращаем статус через Callback URL.

{{if .Settings.LK.PublicURL}}Открыть →{{end}}
{{if devOn}}Показывается ссылкой на дашборде для первичного теста.{{else}}Адрес, по которому клиенты входят в личный кабинет.{{end}}
{{if not .Settings.LK.CallbackURL}}Не настроен — уведомления в ЛК отключены. Для обмена с НРД не требуется.{{end}}

Подключение к API ЛК — тест и бой

Реквизиты, по которым bj обращается к API платформы ЛК ЕСИА Финанс (HTTP Basic). Заполните нужные окружения и нажмите «Проверить связь» — сразу видно, есть подключение или нет.

{{/* --- Тест --- */}}
Тестовый стенд {{if .Settings.LK.Test.LastMsg}}{{if .Settings.LK.Test.LastOK}}связь есть{{else}}нет связи{{end}}{{end}} {{if eq .Settings.LK.ActiveEnv "test"}}активно{{end}}
{{if .Settings.LK.Test.LastMsg}}

Последняя проверка: {{.Settings.LK.Test.LastMsg}} · {{.Settings.LK.Test.LastAt.Format "02.01 15:04"}}

{{end}}
{{/* --- Бой --- */}}
Боевой контур {{if .Settings.LK.Prod.LastMsg}}{{if .Settings.LK.Prod.LastOK}}связь есть{{else}}нет связи{{end}}{{end}} {{if eq .Settings.LK.ActiveEnv "prod"}}активно{{end}}
{{if .Settings.LK.Prod.LastMsg}}

Последняя проверка: {{.Settings.LK.Prod.LastMsg}} · {{.Settings.LK.Prod.LastAt.Format "02.01 15:04"}}

{{end}}
bj работает с ЛК через выбранное окружение. {{if devOn}} {{end}}
Заполнение портфеля ДЕПО бумагами из DEPO {{if .Settings.LK.PortfolioSync.Enabled}}включено{{else}}выключено{{end}}

Каждые 10 секунд, в том же проходе, что и приём заявок, bj сверяет портфель клиента в DEPO и отправляет его в ЛК (/portfolio/import, портфель ДЕПО) — только если остатки изменились. Номер гос. регистрации — из экспорта QUIK, раздел счёта — «Основной», хранение — НРД. Бумаги без номера гос. регистрации не отправляются (ЛК отвергает весь импорт).

{{if .Settings.LK.PortfolioSync.Enabled}} {{else}}{{end}}
Именование у депозитария (счета, договоры, раздел, хранение)

Пусто — значение по умолчанию (серым). Пример: счёт ВТНКЦ00000816 и шаблон ДД-{n} → договор ДД-816.

Залить одному клиенту (для теста)
{{range lkPortfolioStates}}
{{.LK}} ← {{.Depo}}: {{if .Err}}ошибка — {{.Err}}{{else if .PushedAt.IsZero}}сверено {{.CheckedAt.Format "15:04:05"}}, отправки ещё не было{{else}}отправлено {{.PushedAt.Format "02.01 15:04:05"}} ({{.Lines}} бумаг), сверено {{.CheckedAt.Format "15:04:05"}}{{end}}{{range .Skipped}}
пропущено: {{.}}{{end}}
{{end}}
Тест «боевой ЛК → тестовый контур НРД» {{if .Settings.LK.RealNSDTest.Enabled}}включён{{else}}выключен{{end}}

Заявки клиентов из списка проходят у нас всё по-настоящему: сверка и поручение в DEPO, блокировка и списание в QUIK МНП (боевая запись), статусы в ЛК. В НРД (тестовый контур) запрос уходит с данными тест-инвестора {{realNSDAs}}; GUID, бумаги и счета — настоящие, ответы НРД применяются к заявке клиента. «Исполнена» в ЛК — по отчёту НРД об исполнении (MS010). Остальные заявки ЛК — как раньше. Включайте до того, как клиент подпишет заявку.

{{if devOn}}

Симулятор заявки M2M

Пока подача через веб-форму у ЕСИА Финанс не готова — bj сам собирает заявку depo_m2m и отправляет её в API ЛК (POST /claims/) через активное окружение. Ответ показывается ниже; затем заявку ловим опросом в «Переводы». Поля предзаполнены рабочим тестовым договором.

Результат (сырой ответ API) появится вверху страницы. Если «Раздел счёта не доступен для быстрых переводов» — Финансы должны включить признак M2M на разделе счёта.

{{end}}

Забрать заявки из ЛК

Коннектор bj вычитывает заявки depo_m2m активного окружения в статусах «В очереди» и «В работе», которые ещё не обрабатывал, для каждой собирает M2M-пакет, отправляет в НРД и переводит заявку в статус «В работе». По ответу НРД статус в ЛК замыкается автоматически (Исполнена / Отклонена).{{if devOn}} В режиме имитации НРД перед отправкой идёт сверка с DEPO: отказ сразу уходит в ЛК с кодом и причиной, одобренная заявка блокируется в QUIK и через 30 с получает имитированный ответ контрагента.{{end}} Штатно это делает фоновый поллер раз в минуту — кнопка для ручного запуска.

Итог (сколько получено / отправлено, ошибки) появится вверху страницы.

{{end}} {{/* ============ ДИАГНОСТИКА (id sec-tests сохранён для ссылок) ============ */}}

Диагностика

Здоровье сервиса

Фоновые компоненты под самоконтролем: при сбое перезапускаются автоматически, при зависании — перезапуск всего сервиса и запись в «Новости». Ниже — живой статус.

{{if .Health}}
{{range .Health}} {{end}}
КомпонентСостояниеПоследняя отметкаПоследняя ошибка
{{healthLabel .Name}} {{if .Healthy}}работает{{else}}не отвечает{{end}} {{dur .Age}} назад {{if .LastErr}}{{.LastErr}}{{else}}—{{end}}
{{else}}

Компоненты ещё не зарегистрированы (сервис только запущен).

{{end}}

Справочник участников M2M

Запрос актуального справочника участников сервиса (пакет #M2MHR в НРД). В ответ НРД присылает #M2MTH — карту ИНН → MC-код депозитариев/брокеров и перечень мест расчётов. Нужно для сопоставления ИНН контрагента с кодом участника (блокеры вида M2M14/M2M15) и понимания, кто вообще зарегистрирован.

Ответ придёт во входящие ИШ (~30-60с). Список появится в логе bj-server и в m2m-handbook.json.

{{if devOn}}

Тестовый пакет роботу НРД

Робот MC0012500000 эмулирует вторую сторону перевода. Выберите сценарий — bj-server отправит эталонный запрос через ИШ, ответ придёт во входящие. Требуется настроенный ИШ + профиль Валидаты.

Ответ робота — асинхронно (~30-60 сек) во входящие ИШ.

Сквозной тестовый прогон (mock/реальный)

Заявка с предзаполненными данными через всю цепочку до финального статуса.

{{if .Settings.LastTest}}
Последний прогон
Статус{{if .Settings.LastTest.OK}}✓ успешно{{else}}✗ не прошёл{{end}}
FSM-статус{{.Settings.LastTest.FinalStatus}}
ClaimID{{.Settings.LastTest.ClaimID}} {{if .Settings.LastTest.ClaimID}}→ карточка{{end}}
Сообщение{{.Settings.LastTest.Message}}
{{end}}
{{end}}
{{/* ============ ОПОВЕЩЕНИЯ ============ */}}

Оповещения

Системные события (сбой или зависание фонового компонента, аварийный перезапуск) всегда попадают в ленту «Новости». Дополнительно их можно доставлять наружу — на почту оператору и/или в мониторинг Zabbix, чтобы узнать о проблеме, даже когда интерфейс bj никто не открыл.

{{template "smtpCard" .}}

Zabbix (хук мониторинга)

bj шлёт значение на элемент типа Zabbix trapper (протокол zabbix_sender). В Zabbix заведите host и item-trapper с этим ключом, затем триггер по значению — уведомления настроит сам Zabbix.

{{if .Settings.Alerts.Zabbix.LastMsg}}

Последняя проверка: {{.Settings.Alerts.Zabbix.LastMsg}}

{{end}}
{{template "notifyGroupsCard" .}}
{{/* ============ ОБНОВЛЕНИЯ ============ */}}

Обновления

{{template "verline" (.Versions.Get "bj-server")}}

Службы

Ядро и модули работают отдельными службами: если служба модуля не запущена, его раздел в bj отвечает ошибкой связи. Здесь видно состояние и можно перезапустить службу, не заходя на сервер.

{{range .Units}}{{end}}
СлужбаЧто делаетСостояниеС
{{.Unit}} {{.Title}} {{if .OK}}работает{{else}}{{.State}}{{with .Sub}} / {{.}}{{end}}{{with .Result}} ({{.}}){{end}}{{end}} {{if .Since}}{{.Since}}{{else}}—{{end}}

Компоненты

Каждый компонент обновляется отдельно: своя версия в релизе, перезапускается только его служба. Файлы ставит root-установщик после повторной проверки подписи и контрольных сумм. Модули, которых нет на этом сервере, обновлением не ставятся — кроме выделенных из ядра (НПР / УДС, экспорт QUIK): если модуль входит в лицензию, он ставится вместе с обновлением, иначе его раздел перестал бы работать.

{{range .Components}}{{end}}
КомпонентУстановленаДоступнаСлужба
{{.Title}}
{{.Name}}{{if eq .Name "crypto-service.jar"}}{{with $.Versions.Get "validata"}}{{if .Version}} · работает с «Валидата Клиент L» {{.Version}}{{end}}{{end}}{{end}}
{{if .Present}}{{if .Installed}}{{.Installed}}{{else}}неизвестна{{end}}{{else}}не установлен{{end}} {{if .Available}}{{.Available}}{{if .New}} к установке{{else if .Update}} новее{{end}}{{if .Blocked}}
{{.Blocked}}
{{end}}{{else}}нет данных{{end}}
{{.Unit}} {{if .Update}}
{{end}}
{{if .UpdatesAvailable}}
{{end}}
{{if .Settings.Update.Notes}}

Что нового в релизе {{.Settings.Update.Available}}: {{.Settings.Update.Notes}}

{{end}}

Закрытый контур. Если у сервера нет выхода к серверу обновлений, скачайте пакет обновления на портале клиента (lic.zetit.ru → Установка → «Пакет обновления») и загрузите его кнопкой «Обновить из файла». Система сама распознаёт, что внутри — ядро, модули или всё вместе — и ставит в правильном порядке. Модуль, которому нужно более новое ядро, чем установлено, будет пропущен с подсказкой обновить сначала ядро.

{{if not .Settings.Update.LastCheck.IsZero}}{{if .UpdateFailed}}
{{.Settings.Update.LastResult}} ({{.Settings.Update.LastCheck.Format "02.01.2006 15:04"}})
{{else}}

Последняя проверка: {{.Settings.Update.LastCheck.Format "02.01.2006 15:04"}}. {{.Settings.Update.LastResult}}

{{end}}{{end}} {{if and .License.Present (not .License.AllowsUpdates)}}

В лицензии нет модуля «Обновления».

{{end}}

Источник обновлений

Обновления раздаёт сервер лицензий по лицензии этой установки: модуль скачивается, только если он входит в лицензию. Каждый релиз проверяется по подписи Ed25519 и контрольным суммам, без действительной подписи установка не выполняется.

{{/* ============ ЛИЦЕНЗИЯ ============ */}} {{/* ============ РЕЗЕРВНОЕ КОПИРОВАНИЕ ============ */}}

Сервер: HTTPS, время, сеть

{{$h := httpsCert}}

HTTPS — шифрование входа в bj

Пароли администратора, баз данных, хранилища и ключ продукта не должны идти по сети открытым текстом. bj всегда слушает HTTPS: https://{{serverIP}}:{{if .Settings.HTTPS.Port}}{{.Settings.HTTPS.Port}}{{else}}8443{{end}}/. Модули bj и API на этом сервере работают по HTTP, как раньше.

{{if $h.Err}}✗ сертификат: {{$h.Err}}{{else}}Сертификат: {{$h.CN}}, до {{$h.Until.Format "02.01.2006"}} — {{if .Settings.HTTPS.Custom}}сертификат организации{{else}}самоподписанный: браузер один раз попросит подтвердить исключение; чтобы не просил — загрузите сертификат организации{{end}}.{{end}}

Сертификат организации

Рабочее время организации

Когда депозитарий принимает запросы на перевод M2M.

{{template "workHoursForm" (whForm .Settings.WorkHours "")}}

Время сервера

Точное время нужно для подписей и обмена с НРД. В закрытом контуре внешние серверы времени недоступны — укажите сервер времени вашей сети (обычно контроллер домена или маршрутизатор).

{{if timeSynced}}✓ время синхронизируется{{else}}⚠ время не синхронизируется{{end}}{{if .Settings.Time.Servers}} · серверы bj: {{.Settings.Time.Servers}}{{end}}

Сеть

Сервер: {{serverAddrs}}

Чтобы адрес bj не менялся, задайте серверу постоянный адрес — на консоли сервера (или по SSH): sudo bj-network. Утилита спросит адрес, шлюз и DNS и применит их с защитой: если связь пропадёт, через 2 минуты вернутся прежние настройки. На Astra Linux сеть настраивается средствами системы.

Резервное копирование

{{template "backupCard" .}}

{{if .License.Valid}}Активна {{else if .License.Present}}Недействительна {{else}}Не активирована{{end}}

{{if .License.Present}} {{if .License.Tenant}}{{end}} {{if .License.Plan}}{{end}} {{if not .License.ExpiresAt.IsZero}}{{end}} {{if not .License.ContractUntil.IsZero}}{{end}}
Организация{{.License.Tenant}}
Лицензия{{if eq .License.Plan "enterprise"}}полная (все модули){{else}}базовая{{end}}
Тип ключа{{if .License.Online}}онлайн: выдан сервером лицензий этой установке, продлевается автоматически{{else}}офлайн (закрытый контур){{end}}
Ключ действует до{{.License.ExpiresAt.Format "02.01.2006"}} {{if .License.Valid}}(осталось {{.License.DaysLeft}} дн.){{end}}
Договор до{{.License.ContractUntil.Format "02.01.2006"}}
Обновления{{if .License.AllowsUpdates}}включены{{else}}не входят в план{{end}}
Модули{{range .Features}}
{{.Title}} {{.Key}}{{if not .On}}— не входит в лицензию{{end}}
{{end}}
Статус{{.License.Message}}
{{else}}

Лицензионный ключ не введён. Без лицензии сервис работает, но автообновления заблокированы.

{{end}}

Активация на сервере лицензий

Введите код активации от поставщика (вида BJ-XXXX-XXXX-XXXX). bj зарегистрирует эту установку на сервере лицензий lic.zetit.ru и дальше сам продлевает ключ раз в сутки. Серверу bj нужен доступ по HTTPS к lic.zetit.ru.

{{if .License.Present}}{{end}}

Установка {{if .Settings.License.InstallID}}{{.Settings.License.InstallID}}{{else}}будет создана при первом обращении{{end}}{{if not .Settings.License.LastSync.IsZero}} · последнее продление {{.Settings.License.LastSync.Format "02.01.2006 15:04"}}{{end}}

{{if .Settings.License.LastMsg}}

{{if .Settings.License.LastOK}}✓{{else}}✗{{end}} {{.Settings.License.LastMsg}} ({{.Settings.License.LastAttempt.Format "02.01.2006 15:04"}})

{{end}}
Офлайн-ключ для закрытого контура

Если у сервера bj нет доступа в интернет, вставьте офлайн-ключ, выданный поставщиком. Он проверяется по подписи без связи с сервером лицензий и не продлевается.

{{/* ============ ОФОРМЛЕНИЕ (логотип отчётов) ============ */}}

Оформление отчётов

Логотип организации в шапке отчётов

Логотип показывается справа в шапке всех отчётов для регулятора (слева — логотип MOEX МОСТ / НРД){{if devOn}} и на титульной сводке пакета тестов{{end}}. Встраивается прямо в HTML — отчёт остаётся автономным. Если не загружать — используется стандартный логотип «Фонтвьель».

Сейчас в отчётах:
{{if logoSrc .Settings.Branding.LogoDataURI}}логотип{{else}}логотип не загружен{{end}}
{{if .Settings.Branding.LogoDataURI}}Загружен свой логотип{{if .Settings.Branding.LogoName}}: {{.Settings.Branding.LogoName}}{{end}}.{{else}}Свой логотип не загружен — в шапке отчётов справа пусто.{{end}}

Форматы: PNG, JPG, GIF, WEBP, SVG. Максимум 512 КБ. Рекомендуется горизонтальный логотип (высота в шапке — 28px).

{{if .Settings.Branding.LogoDataURI}}
{{end}}
{{if devOn}} {{/* ============ ПЕРСПЕКТИВНЫЕ МОДУЛИ (под паролем) ============ */}}

Перспективные модули

Модули для будущих профилей внедрения «автомат» и «полуавтомат» (когда используется собственный личный кабинет, а не ЕСИА Финанс). Пока не в проде — скрыты, чтобы не мешать текущей работе. В профиле «через Финансы» они не нужны: проверку и блокировку бумаг закрывает сам ЕСИА Финанс.

Что здесь будет

QUIK — Модуль неторговых порученийБлокировка/разблокировка и проверка количества бумаг в торговой системе — для собственного ЛК.
Обмен FancyПроверка заявки по учёту клиента через БД («кран») перед отправкой в НРД — для фирм без ЕСИА Финанс.
{{if .AdvancedUnlocked}}

Доступ открыт

Разделы «Обмен Fancy» и «QUIK МНП» появились в меню слева. Это незавершённые модули — меняйте настройки, только если понимаете последствия.

{{else}}

Открыть модули

Введите пароль администратора, чтобы временно открыть перспективные разделы. Доступ запоминается в этом браузере до нажатия «Скрыть».

{{end}}
{{end}}
{{end}}