diff --git a/internal/lkgateway/admin.go b/internal/lkgateway/admin.go
index c72fd07..1b0a9c3 100644
--- a/internal/lkgateway/admin.go
+++ b/internal/lkgateway/admin.go
@@ -43,10 +43,7 @@ var templateFuncs = template.FuncMap{
"fallbackTpl": fallback,
// logoSrc — data-URI логотипа отчётов: загруженный из настроек или встроенный.
"logoSrc": func(uri string) template.URL {
- if strings.TrimSpace(uri) == "" {
- return template.URL(fontvielleLogoDataURI)
- }
- return template.URL(uri)
+ return template.URL(defaultLogoDataURI(uri))
},
// m2mCode — человекочитаемое название кода M2M: «Текст (M2Mxx)».
"m2mCode": m2mCodeLabel,
@@ -216,6 +213,7 @@ func newAdmin() (*admin, error) {
parse := func(content string) (*template.Template, error) {
return template.New("layout.html").Funcs(templateFuncs).ParseFS(templatesFS,
"web/templates/layout.html",
+ "web/templates/part_*.html", // общие блоки (например, «Обмен Fancy» для настроек и мастера)
"web/templates/"+content)
}
home, err := parse("admin_home.html")
diff --git a/internal/lkgateway/auth.go b/internal/lkgateway/auth.go
index 6923d9b..f53d105 100644
--- a/internal/lkgateway/auth.go
+++ b/internal/lkgateway/auth.go
@@ -893,13 +893,15 @@ func moduleForPath(p string) string {
return "quik-mnp"
case has("/admin/setup/quikexport"):
return "quik-export"
- case strings.HasPrefix(p, "/admin/setup/lk/"): // личный кабинет клиента (bj-lk); /admin/setup/lk* без «/» — ЕСИА Финанс, ядро
+ case strings.HasPrefix(p, "/admin/setup/lk/"): // личный кабинет клиента (bj-lk)
return "web-cabinet"
+ case p == "/admin/setup/lk", has("/admin/setup/lk-check"), has("/admin/setup/lk-integration"), has("/admin/setup/lk-pull"):
+ return "esia-finance" // интеграция с платформой ЕСИА Финанс — отдельный модуль лицензии
}
return ""
}
-var moduleTitles = map[string]string{"quik-mnp": "QUIK: неторговые поручения и обмен с DEPO", "quik-export": "Экспорт биржевой информации QUIK", "web-cabinet": "Личный кабинет клиента", "npr": "Риск-монитор НПР / УДС"}
+var moduleTitles = map[string]string{"esia-finance": "ЕСИА Финанс", "quik-mnp": "QUIK: неторговые поручения и обмен с DEPO", "quik-export": "Экспорт биржевой информации QUIK", "web-cabinet": "Личный кабинет клиента", "npr": "Риск-монитор НПР / УДС"}
func moduleNotLicensed(w http.ResponseWriter, f string) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
diff --git a/internal/lkgateway/fontvielle_logo.go b/internal/lkgateway/fontvielle_logo.go
index f8dd007..ce3904f 100644
--- a/internal/lkgateway/fontvielle_logo.go
+++ b/internal/lkgateway/fontvielle_logo.go
@@ -11,7 +11,32 @@ func orgLogoIMG() string {
return ``
}
}
- return fontvielleLogoIMG
+ if builtinLogoAllowed() {
+ return fontvielleLogoIMG
+ }
+ return "" // своего логотипа нет — справа в шапке пусто
+}
+
+// builtinLogoAllowed — встроенный логотип Фонтвьель только на сервере Фонтвьель (лицензия выдана
+// им): у других клиентов на чистой установке чужого логотипа быть не должно.
+func builtinLogoAllowed() bool {
+ if globalRC == nil {
+ return false
+ }
+ t := strings.ToLower(licenseStatus(globalRC).Tenant)
+ return strings.Contains(t, "фонтвьел") || strings.Contains(t, "fontvielle")
+}
+
+// defaultLogoDataURI — логотип для отчётов: загруженный в «Оформлении», иначе встроенный (только у
+// Фонтвьель), иначе пусто.
+func defaultLogoDataURI(uploaded string) string {
+ if u := strings.TrimSpace(uploaded); u != "" {
+ return u
+ }
+ if builtinLogoAllowed() {
+ return fontvielleLogoDataURI
+ }
+ return ""
}
// fontvielle_logo.go — логотип ООО ИК «Фонтвьель» (data-URI PNG), встраивается в
diff --git a/internal/lkgateway/licensecheck.go b/internal/lkgateway/licensecheck.go
index 1152264..d991934 100644
--- a/internal/lkgateway/licensecheck.go
+++ b/internal/lkgateway/licensecheck.go
@@ -42,6 +42,7 @@ var knownFeatures = []struct{ Key, Title string }{
{"quik-mnp", "QUIK: модуль неторговых поручений (цикл M2M)"},
{"quik-export", "QUIK: экспорт биржевой информации"},
{"npr", "Риск-монитор НПР / УДС"},
+ {"esia-finance", "ЕСИА Финанс (платформа личного кабинета)"},
}
func licenseFeatureViews(rc *RuntimeConfig) []LicenseFeatureView {
diff --git a/internal/lkgateway/lkconnector.go b/internal/lkgateway/lkconnector.go
index d8e46fa..6b85b5f 100644
--- a/internal/lkgateway/lkconnector.go
+++ b/internal/lkgateway/lkconnector.go
@@ -274,6 +274,9 @@ func (s *Server) pollLKClaims(ctx context.Context) {
if _, ok := lkActiveEndpoint(s.rc); !ok {
continue // ЛК не настроен — тихо ждём
}
+ if !moduleAllowed(s.rc, "esia-finance") {
+ continue // ЕСИА Финанс — отдельный модуль лицензии
+ }
cctx, cancel := context.WithTimeout(ctx, 50*time.Second)
res, err := PullLKClaims(cctx, s.rc, s.svc)
cancel()
diff --git a/internal/lkgateway/m2mplan_export.go b/internal/lkgateway/m2mplan_export.go
index d976a95..4ee7826 100644
--- a/internal/lkgateway/m2mplan_export.go
+++ b/internal/lkgateway/m2mplan_export.go
@@ -71,13 +71,12 @@ func writeM2MPlanHTML(w http.ResponseWriter, r *http.Request, h *setupHandlers)
Date: strings.TrimSpace(r.URL.Query().Get("date")),
Generated: time.Now().Format("02.01.2006"),
CpName: nonEmpty(plan.CounterpartyName, "Контрагент"), CpCode: plan.CounterpartyCode, CpINN: plan.CounterpartyINN,
- OurName: nonEmpty(m2mPartyName(ourCode), "Фонтвьель"), OurCode: ourCode, OurINN: nonEmpty(plan.OurINN, m2mINNByCode(ourCode)),
+ OurName: nonEmpty(m2mPartyName(ourCode), orgName(h.rc.Snapshot())), OurCode: ourCode, OurINN: nonEmpty(plan.OurINN, m2mINNByCode(ourCode)),
}
if d.Date == "" {
d.Date = time.Now().AddDate(0, 0, 1).Format("02.01.2006")
}
- d.LogoSrc = template.URL(fontvielleLogoDataURI)
- if u := strings.TrimSpace(h.rc.Snapshot().Branding.LogoDataURI); strings.HasPrefix(u, "data:image/") {
+ if u := defaultLogoDataURI(h.rc.Snapshot().Branding.LogoDataURI); strings.HasPrefix(u, "data:image/") {
d.LogoSrc = template.URL(u)
}
party := func(k string) string {
@@ -290,7 +289,7 @@ select.btn{padding:4px 8px}
@media print{body{background:#fff;color:#000}.card{border:none;padding:8px 0;page-break-inside:avoid}.wrap{padding:0}.toolbar,.noprint,.st button:not(.on){display:none}textarea.f,input.f{border:none;padding:0}}
Тестовый контур НРД · дата проведения: {{.Date}} · документ сформирован {{.Generated}}
diff --git a/internal/lkgateway/setup.go b/internal/lkgateway/setup.go index 5ba5c70..ddd03d7 100644 --- a/internal/lkgateway/setup.go +++ b/internal/lkgateway/setup.go @@ -175,6 +175,7 @@ type WizardData struct { DepoEdition string // редакция SQL Server клиента (пусто — не определена) DepoAgent bool // у SQL Server есть SQL Agent (не Express, не PostgreSQL) DepoJobDef string // способ обработки по умолчанию для мастера + Fancy *SetupData // шаг 3: общий блок «Обмен Fancy» (тот же, что в настройках) ValidataVer string // версия установленной «Валидаты Клиент L» (пусто — не установлена) CryptoSvc string // состояние службы bj-crypto (systemctl is-active) PGSummary string // куда подключена база bj, без пароля @@ -185,6 +186,8 @@ type WizardData struct { Done struct { License bool Depo bool + Org bool // организация (код участника, ИНН) задана + Quik bool // QUIK МНП проверен (или модуль не в лицензии) Postgres bool Crypto bool Certs bool @@ -253,17 +256,37 @@ func (h *setupHandlers) renderWizard(w http.ResponseWriter, r *http.Request) { progress := wizardProgress() step := progress + 1 if v := r.URL.Query().Get("step"); v != "" { - if n, err := strconv.Atoi(v); err == nil && n >= 1 && n <= 7 { + if n, err := strconv.Atoi(v); err == nil && n >= 1 && n <= wizardSteps { step = n if n-1 > progress { setWizardProgress(n - 1) } } } - if step > 7 { - step = 7 + if step > wizardSteps { + step = wizardSteps } d.Step = step + if step == 4 && strings.TrimSpace(s.Fancy.Server) != "" && (orgCode(s) == "" || orgINN(s) == "") && depoDetectResult() == nil { + // организация ещё не задана, а база DEPO подключена — определяем реквизиты сами: карточка + // покажет их заполненными, пользователю остаётся проверить и сохранить + ctx, cancel := context.WithTimeout(r.Context(), 15*time.Second) + if res, err := depoDetectRequisites(ctx, s.Fancy); err == nil { + lastDepoDetect.mu.Lock() + lastDepoDetect.r = res + lastDepoDetect.mu.Unlock() + d.Suggest = res + } else { + log.Printf("wizard: реквизиты из DEPO не определены: %v", err) + } + cancel() + } + if step >= 3 && step <= 5 { // DEPO, организация, QUIK МНП — общие блоки из «Настройки» + fd := h.setupData(w, r, "") + d.Fancy = &fd + } + d.Done.Org = orgCode(s) != "" && orgINN(s) != "" + d.Done.Quik = !d.DepoLicensed || s.Quik.Verified if step == 3 && d.DepoLicensed && strings.TrimSpace(s.Fancy.Server) != "" { // Есть ли у сервера SQL Agent: у Express его нет, у PostgreSQL — тоже; тогда обработку // запускает сам bj. Иначе по умолчанию джобу SQL Agent создаёт bj. @@ -304,6 +327,10 @@ func depoServerEdition(ctx context.Context, f FancyMSSQLSettings) (string, bool) return ed, eng != 4 } +// wizardSteps — шагов в мастере: 1 лицензия, 2 база bj, 3 учёт DEPO, 4 наша организация, 5 QUIK МНП, +// 6 Валидата, 7 сертификаты, 8 шлюз НРД, 9 проверка. +const wizardSteps = 9 + // wizardProgressFile — номер последнего пройденного шага мастера (переход «Далее» на шаг N // означает, что шаги до N пройдены). const wizardProgressFile = "/var/lib/bj/.bj/wizard-progress" @@ -477,6 +504,11 @@ func HealthLabel(name string) string { } func (h *setupHandlers) renderSetup(w http.ResponseWriter, req *http.Request, flash string) { + render(w, h.tpl.a.setup, h.setupData(w, req, flash)) +} + +// setupData — данные страницы «Настройка»; их же получает общий блок «Обмен Fancy» в мастере. +func (h *setupHandlers) setupData(w http.ResponseWriter, req *http.Request, flash string) SetupData { s := h.rc.Snapshot() r := h.rc.ReadinessSummary() ready := 0 @@ -526,7 +558,7 @@ func (h *setupHandlers) renderSetup(w http.ResponseWriter, req *http.Request, fl if errVal := errMsgFromQuery(_q(w)); errVal != "" { data.Error = errVal } - render(w, h.tpl.a.setup, data) + return data } func (h *setupHandlers) savePostgres(w http.ResponseWriter, r *http.Request) { diff --git a/internal/lkgateway/web/templates/admin_setup.html b/internal/lkgateway/web/templates/admin_setup.html index 1ecb40f..7351661 100644 --- a/internal/lkgateway/web/templates/admin_setup.html +++ b/internal/lkgateway/web/templates/admin_setup.html @@ -6,14 +6,14 @@Сервер учётной базы Fancy DEPO: картотека лиц, счета и договоры, остатки, опции (признак квалифицированного инвестора), трансферные таблицы обмена. Поддерживаются Microsoft SQL Server и PostgreSQL. База указывается ниже, в карточке «Трансферные таблицы DEPO».
- -Через эти таблицы bj обменивается с учётной системой DEPO: поручения FTV_M2M и их строки FTV_M2M_LINES, события FTV_M2M_EVENTS, справочник участников НРД FTV_M2M_HANDBOOK. Таблицы создаются в базе DEPO на сервере из подключения выше ({{if .DepoTables.Postgres}}PostgreSQL{{else}}Microsoft SQL Server{{end}}). Создание можно повторять: добавляются только недостающие таблицы, колонки и индексы, данные не меняются.
{{.DepoTables.Script}}{{if .Settings.Fancy.DepoTablesCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoTablesCheck}} ({{.Settings.Fancy.DepoTablesCheckAt.Format "02.01.2006 15:04"}})
{{end}} -Поручения и события, которые bj пишет в FTV_M2M*, обрабатывает процедура {{.DepoJob.Proc}} в базе DEPO. Выберите, кто её запускает, выполните инструкцию и нажмите «Проверить готовность» — без зелёной отметки обмен с DEPO работать не будет.
{{.DepoJob.GrantScript}}{{.DepoJob.AgentRights}}
- {{.DepoJob.AgentScript}}{{if .Settings.Fancy.DepoJobCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoJobCheck}} ({{.Settings.Fancy.DepoJobCheckAt.Format "02.01.2006 15:04"}})
{{end}} - {{if and (eq .Settings.Fancy.DepoJobMode "bj") .Settings.Fancy.DepoJobLast}}Последний вызов процедуры — {{.Settings.Fancy.DepoJobLast}}
{{end}} - {{end}} -При выводе бумаг клиентом bj блокирует их количество в QUIK через API Модуля неторговых поручений (хранимые процедуры). БД боевая — проверка только на чтение (версия + наличие M2M-объектов), без записи. Подключение под логином с ролью InstrEu.
- Инструкция для администратора QUIK — что настроить в QuikAdmin для M2M · документы ARQA.
Статус: {{if .Settings.Quik.Verified}}✓ подключение проверено{{else}}не проверено{{end}}
-Что делает bj в Модуле неторговых поручений по ходу перевода: исходящий — при отправке в НРД регистрирует «Вывод ЦБ (M2M)» (QUIK блокирует бумаги), по подтверждению подписывает (списание), по отказу снимает с причиной; входящий — после приёма нашего поручения НРД регистрирует «Ввод ЦБ (M2M)» (зачисление сразу). Каждый шаг виден в карточке перевода и на странице QUIK МНП.
- -Можно выделить и скопировать целиком — для отправки коллегам/аутсорсеру QUIK. - {{if not .Settings.Quik.LastAt.IsZero}}Проверка от {{.Settings.Quik.LastAt.Format "02.01.2006 15:04:05"}} UTC.{{end}}
-{{.Settings.Quik.LastReport}}
- Показывает НПР1 / НПР2 / УДС клиентов маржинальной торговли по базе экспорта QUIK (схема npr). Отдельно лицензируемый модуль (признак npr); при включении в меню появляется пункт «НПР / УДС». Подключение — логин только для чтения.
Депозитарий — участник MOEX МОСТ, от имени которого bj отправляет и принимает переводы: ИНН передающего и зачисляющего депозитария в пакетах, код отправителя и код фирмы в QUIK. Выберите себя из справочника участников НРД или введите данные вручную.
- {{if and .OrgINN .OrgCode}}{{if .OrgName}}{{.OrgName}}{{else}}—{{end}} · ИНН {{.OrgINN}} · код {{.OrgCode}}{{if not .Settings.NSD.OrgINN}} (ИНН взят из справочника по коду){{end}}
Организация не задана — переводы не будут сформированы.
{{end}} - -Без участия оператора, чтобы соблюдать сроки: ответ на входящие переводы по свежей сверке с DEPO (пакет принимается только целиком; бумага для квалифицированных инвесторов при неполной или непрочитанной квалификации клиента — отказ M2M08), подача поручения 16/1, как только НРД пришлёт черновик после нашего согласия, и подача поручения 16 по исходящим после согласия контрагента. Если DEPO или ИШ недоступны — bj повторяет каждые 3 минуты и шлёт оповещение; без сверки ничего не принимается. Обрабатывается только то, что пришло не раньше чем за сутки до включения. Кнопки в карточках остаются для ручной работы.
@@ -625,7 +383,7 @@ function hbBind(inp,box,list,onPick){ {{/* ============ ЛИЧНЫЙ КАБИНЕТ ============ */}} {{/* ============ КАБИНЕТ КЛИЕНТА (наш модуль bj-lk) ============ */}} - {{if or .AdvancedUnlocked (mod "web-cabinet")}} + {{if mod "web-cabinet"}}Наш личный кабинет для клиентов депозитария: модуль bj-lk на своём сервере или PHP-хостинге, связь с ядром, учётные записи клиентов и сотрудников. Интеграция с платформой ЕСИА Финанс — отдельный раздел.
Интеграция с внешней платформой личного кабинета ЕСИА Финанс: адрес для клиента, приём заявок M2M, возврат статуса и подключение к API (тест/бой). Наш собственный кабинет настраивается в разделе «Кабинет клиента».
@@ -924,6 +683,7 @@ function hbBind(inp,box,list,onPick){Итог (сколько получено / отправлено, ошибки) появится вверху страницы.
Форматы: PNG, JPG, GIF, WEBP, SVG. Максимум 512 КБ. Рекомендуется горизонтальный логотип (высота в шапке — 28px).
{{if .Settings.Branding.LogoDataURI}} - {{end}}{{.Title}}: {{if .Version}}{{.Version}}{{else}}не определена{{end}}{{with .Detail}} · {{.}}{{end}}{{with .Err}} · {{.}}{{end}}
{{end}}{{end}} diff --git a/internal/lkgateway/web/templates/admin_wizard.html b/internal/lkgateway/web/templates/admin_wizard.html index fc3038a..c86fed8 100644 --- a/internal/lkgateway/web/templates/admin_wizard.html +++ b/internal/lkgateway/web/templates/admin_wizard.html @@ -32,10 +32,12 @@ a.wstep:hover .bub { box-shadow:0 0 0 4px var(--accent-weak); } {{if .Done.License}}✓{{else}}1{{end}}Лицензия {{if .Done.Postgres}}✓{{else}}2{{end}}База bj {{if .Done.Depo}}✓{{else}}3{{end}}Учёт DEPO - {{if .Done.Crypto}}✓{{else}}4{{end}}Валидата - {{if .Done.Certs}}✓{{else}}5{{end}}Сертификаты - {{if .Done.NSD}}✓{{else}}6{{end}}Шлюз НРД - {{if .Done.TestRun}}✓{{else}}7{{end}}Проверка + {{if .Done.Org}}✓{{else}}4{{end}}Организация + {{if .Done.Quik}}✓{{else}}5{{end}}QUIK МНП + {{if .Done.Crypto}}✓{{else}}6{{end}}Валидата + {{if .Done.Certs}}✓{{else}}7{{end}}Сертификаты + {{if .Done.NSD}}✓{{else}}8{{end}}Шлюз НРД + {{if .Done.TestRun}}✓{{else}}9{{end}}ПроверкаПропустить мастер и перейти в систему → — вернуться к нему можно из «Настройка → Мастер настройки»
@@ -88,83 +90,14 @@ a.wstep:hover .bub { box-shadow:0 0 0 4px var(--accent-weak); }Модуль обмена с DEPO и QUIK не входит в текущую лицензию — шаг пропускается. После добавления модуля в лицензию он станет доступен здесь и в «Настройка → Обмен Fancy».
{{else}} -Три части: подключение к базе, трансферные таблицы обмена, обработка (job), которая превращает записи bj в документы DEPO.
- -FTV_M2M и их строки, события FTV_M2M_EVENTS, справочник участников НРД. Данные учёта они не трогают; создание можно повторять — добавляется только недостающее.{{if .Settings.Fancy.DepoTablesCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoTablesCheck}}
{{end}} - -{{.DepoJob.Proc}} в базе DEPO каждые {{.DepoJob.Every}} с забирает записи bj из трансферных таблиц и создаёт по ним документы и операции DEPO. Кто-то должен её запускать.Администратору SQL — выполнить один раз:
{{.DepoJob.GrantScript}}
- {{else if eq .Settings.Fancy.DepoJobMode "sql-manual"}}
- Скрипт для администратора SQL:
{{.DepoJob.AgentScript}}
- {{end}}
- {{if .Settings.Fancy.DepoJobMode}}
-
- {{if .Settings.Fancy.DepoJobCheck}}{{if .Settings.Fancy.DepoJobCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoJobCheck}}
{{end}} - {{end}} - {{end}} +Это тот же раздел, что «Настройка → Обмен Fancy»: подключение к базе, трансферные таблицы и обработка (job). Что настроите здесь — сразу там, и наоборот.
+ {{if .DepoEdition}}Ваш SQL Server: {{.DepoEdition}} — {{if .DepoAgent}}есть SQL Server Agent: рекомендуем джобу Agent, её создаст bj (способ по умолчанию).{{else}}без SQL Server Agent: обработку будет запускать сам bj.{{end}}
{{end}} + {{with .Fancy}}✓ Определено из DEPO: {{.Suggest.OrgName}}, ИНН {{.Suggest.OrgINN}}, код {{.Suggest.OrgCode}}{{if .Suggest.AccountID}}, счёт НРД {{.Suggest.AccountID}}{{end}}. Поля ниже заполнены — проверьте и нажмите «Сохранить».
{{end}}{{end}}{{end}} + {{with .Fancy}}{{template "orgSection" .}}{{end}} +Показывается справа в шапке отчётов для регулятора. Можно загрузить сейчас или позже в «Настройка → Оформление».
+ {{if .Settings.Branding.LogoDataURI}}Модуль неторговых поручений не входит в текущую лицензию — шаг пропускается.
+ {{else}}{{with .Fancy}}{{template "quikSection" .}}{{end}}{{end}} + +СКЗИ «Валидата Клиент L» проверяет подписи НРД на квитанциях и сообщениях и нужно для работы с ключами и сертификатами (шаг 5).
{{if .ValidataVer}}✓ Валидата установлена вместе с bj: версия {{.ValidataVer}}, каталог /opt/Validata/VDCSP. Ничего настраивать на этом шаге не нужно.
Здесь две части: ключ и сертификат вашей организации (ставите вы) и сертификаты НРД и удостоверяющих центров (bj ведёт их сам).
Адрес web-сервиса ONYX и имя ключевого контейнера НРД.
DOC/instr_podkl_stend_v3.pdf).
+ К кому обратиться. Программу ИШ выпускает НРД (дистрибутив и инструкции — nsd.ru/workflow/system/programs). Доступ к контурам НРД (сначала тестовый TEST3, затем боевой) выдаёт НРД по заявке: обратитесь к вашему менеджеру НРД или в клиентскую поддержку по электронному документообороту. НРД сообщит ваш депозитарный код, счёт и раздел — если учёт в DEPO подключён, bj подставит их сам.
Организация (код участника, ИНН, наименование) — на шаге 4.
Прогон полного цикла: создание заявки → валидация → подпись → отправка в НРД (или mock) → ожидание Decision → подтверждение.
Проверьте, что база данных, СКЗИ и шлюз НРД доступны: на странице «Статус» bj проверяет каждое подключение и показывает, что нужно исправить.
Открыть проверку подключений → {{end}} @@ -394,7 +362,7 @@ a.wstep:hover .bub { box-shadow:0 0 0 4px var(--accent-weak); }Сервер учётной базы Fancy DEPO: картотека лиц, счета и договоры, остатки, опции (признак квалифицированного инвестора), трансферные таблицы обмена. Поддерживаются Microsoft SQL Server и PostgreSQL. База указывается ниже, в карточке «Трансферные таблицы DEPO».
+ +Через эти таблицы bj обменивается с учётной системой DEPO: поручения FTV_M2M и их строки FTV_M2M_LINES, события FTV_M2M_EVENTS, справочник участников НРД FTV_M2M_HANDBOOK. Таблицы создаются в базе DEPO на сервере из подключения выше ({{if .DepoTables.Postgres}}PostgreSQL{{else}}Microsoft SQL Server{{end}}). Создание можно повторять: добавляются только недостающие таблицы, колонки и индексы, данные не меняются.
{{.DepoTables.Script}}{{if .Settings.Fancy.DepoTablesCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoTablesCheck}} ({{.Settings.Fancy.DepoTablesCheckAt.Format "02.01.2006 15:04"}})
{{end}} +Поручения и события, которые bj пишет в FTV_M2M*, обрабатывает процедура {{.DepoJob.Proc}} в базе DEPO. Выберите, кто её запускает, выполните инструкцию и нажмите «Проверить готовность» — без зелёной отметки обмен с DEPO работать не будет.
{{.DepoJob.GrantScript}}{{.DepoJob.AgentRights}}{{.DepoJob.AgentScript}}{{if .Settings.Fancy.DepoJobCheckOK}}✓{{else}}✗{{end}} {{.Settings.Fancy.DepoJobCheck}} ({{.Settings.Fancy.DepoJobCheckAt.Format "02.01.2006 15:04"}})
{{end}} + {{if and (eq .Settings.Fancy.DepoJobMode "bj") .Settings.Fancy.DepoJobLast}}Последний вызов процедуры — {{.Settings.Fancy.DepoJobLast}}
{{end}} + {{end}} +{{.Title}}: {{if .Version}}{{.Version}}{{else}}не определена{{end}}{{with .Detail}} · {{.}}{{end}}{{with .Err}} · {{.}}{{end}}
{{end}}{{end}} diff --git a/internal/lkgateway/web/templates/part_org.html b/internal/lkgateway/web/templates/part_org.html new file mode 100644 index 0000000..7d2a8b3 --- /dev/null +++ b/internal/lkgateway/web/templates/part_org.html @@ -0,0 +1,67 @@ +{{/* «Наша организация» — одна и та же в «Настройка → НРД» и в мастере настройки (данные — SetupData). */}} +{{define "orgSection"}} +Депозитарий — участник MOEX МОСТ, от имени которого bj отправляет и принимает переводы: ИНН передающего и зачисляющего депозитария в пакетах, код отправителя и код фирмы в QUIK. Выберите себя из справочника участников НРД или введите данные вручную.
+ {{if and .OrgINN .OrgCode}}{{if .OrgName}}{{.OrgName}}{{else}}—{{end}} · ИНН {{.OrgINN}} · код {{.OrgCode}}{{if not .Settings.NSD.OrgINN}} (ИНН взят из справочника по коду){{end}}
Организация не задана — переводы не будут сформированы.
{{end}} + +При выводе бумаг клиентом bj блокирует их количество в QUIK через API Модуля неторговых поручений (хранимые процедуры). БД боевая — проверка только на чтение (версия + наличие M2M-объектов), без записи. Подключение под логином с ролью InstrEu.
+ Инструкция для администратора QUIK — что настроить в QuikAdmin для M2M · документы ARQA.
Статус: {{if .Settings.Quik.Verified}}✓ подключение проверено{{else}}не проверено{{end}}
+Что делает bj в Модуле неторговых поручений по ходу перевода: исходящий — при отправке в НРД регистрирует «Вывод ЦБ (M2M)» (QUIK блокирует бумаги), по подтверждению подписывает (списание), по отказу снимает с причиной; входящий — после приёма нашего поручения НРД регистрирует «Ввод ЦБ (M2M)» (зачисление сразу). Каждый шаг виден в карточке перевода и на странице QUIK МНП.
+ +Можно выделить и скопировать целиком — для отправки коллегам/аутсорсеру QUIK. + {{if not .Settings.Quik.LastAt.IsZero}}Проверка от {{.Settings.Quik.LastAt.Format "02.01.2006 15:04:05"}} UTC.{{end}}
+{{.Settings.Quik.LastReport}}
+