diff --git a/internal/lkgateway/admin.go b/internal/lkgateway/admin.go index 65512a1..bad1050 100644 --- a/internal/lkgateway/admin.go +++ b/internal/lkgateway/admin.go @@ -49,16 +49,17 @@ var templateFuncs = template.FuncMap{ return template.URL(uri) }, // m2mCode — человекочитаемое название кода M2M: «Текст (M2Mxx)». - "m2mCode": m2mCodeLabel, - "quikCodeMap": quikClientCodeMapText, - "curUser": authTemplateFuncs["curUser"], - "can": authTemplateFuncs["can"], - "devOn": authTemplateFuncs["devOn"], - "devLicensed": authTemplateFuncs["devLicensed"], - "authOpen": authOpen, - "roleTitle": roleTitle, - "stageCls": func(r depoQueueRow) string { c, _ := r.StageRu(); return c }, - "stageText": func(r depoQueueRow) string { _, t := r.StageRu(); return t }, + "m2mCode": m2mCodeLabel, + "quikCodeMap": quikClientCodeMapText, + "curUser": authTemplateFuncs["curUser"], + "can": authTemplateFuncs["can"], + "devOn": authTemplateFuncs["devOn"], + "devLicensed": authTemplateFuncs["devLicensed"], + "authOpen": authOpen, + "internalDocs": func() bool { return internalDocsBuilt }, + "roleTitle": roleTitle, + "stageCls": func(r depoQueueRow) string { c, _ := r.StageRu(); return c }, + "stageText": func(r depoQueueRow) string { _, t := r.StageRu(); return t }, "deref": func(v *float64) float64 { if v == nil { return 0 @@ -240,7 +241,7 @@ func newAdmin() (*admin, error) { if err != nil { return nil, fmt.Errorf("parse admin_help: %w", err) } - helpDB, err := parse("admin_help_database.html") + helpDB, err := parseInternalDoc("admin_help_database.html") if err != nil { return nil, fmt.Errorf("parse admin_help_database: %w", err) } @@ -248,7 +249,7 @@ func newAdmin() (*admin, error) { if err != nil { return nil, fmt.Errorf("parse admin_help_lk: %w", err) } - helpCrypto, err := parse("admin_help_crypto.html") + helpCrypto, err := parseInternalDoc("admin_help_crypto.html") if err != nil { return nil, fmt.Errorf("parse admin_help_crypto: %w", err) } @@ -268,15 +269,15 @@ func newAdmin() (*admin, error) { if err != nil { return nil, fmt.Errorf("parse admin_help_robot: %w", err) } - helpArch, err := parse("admin_help_architecture.html") + helpArch, err := parseInternalDoc("admin_help_architecture.html") if err != nil { return nil, fmt.Errorf("parse admin_help_architecture: %w", err) } - helpQuik, err := parse("admin_help_quik.html") + helpQuik, err := parseInternalDoc("admin_help_quik.html") if err != nil { return nil, fmt.Errorf("parse admin_help_quik: %w", err) } - helpFancyEvents, err := parse("admin_help_fancy_events.html") + helpFancyEvents, err := parseInternalDoc("admin_help_fancy_events.html") if err != nil { return nil, fmt.Errorf("parse admin_help_fancy_events: %w", err) } diff --git a/internal/lkgateway/internaldocs_off.go b/internal/lkgateway/internaldocs_off.go new file mode 100644 index 0000000..13c7784 --- /dev/null +++ b/internal/lkgateway/internaldocs_off.go @@ -0,0 +1,28 @@ +//go:build !internaldocs + +package lkgateway + +// internaldocs_off.go — КЛИЕНТСКАЯ сборка (по умолчанию, без флага internaldocs): +// технические страницы справки (архитектура обмена с НРД, протокол событий +// bj↔bj2depo, схема базы, криптография, QUIK МНП) в бинарь НЕ попадают. Это +// проектная документация, из которой видно, как устроен продукт; операторам +// депозитария она не нужна, а конкуренту дала бы готовую карту. Внедренцам +// эти страницы доступны в нашей сборке (go build -tags internaldocs) и на портале. + +import "html/template" + +// internalDocsBuilt — технических страниц справки в этом бинаре нет. +const internalDocsBuilt = false + +const internalDocsStub = `← все инструкции +
Подробные технические материалы (архитектура обмена с НРД, протоколы интеграции, схема базы данных) не входят в рабочую сборку. Они доступны специалистам внедрения на портале lic.zetit.ru и в документации, переданной по договору.
` + +// parseInternalDoc — заглушка: содержимого нет, показываем, куда обратиться. +func parseInternalDoc(_ string) (*template.Template, error) { + t := template.New("layout.html").Funcs(templateFuncs) + if _, err := t.ParseFS(templatesFS, "web/templates/layout.html"); err != nil { + return nil, err + } + return t.New("content").Parse(internalDocsStub) +} diff --git a/internal/lkgateway/internaldocs_on.go b/internal/lkgateway/internaldocs_on.go new file mode 100644 index 0000000..fd300f9 --- /dev/null +++ b/internal/lkgateway/internaldocs_on.go @@ -0,0 +1,26 @@ +//go:build internaldocs + +package lkgateway + +// internaldocs_on.go — сборка ДЛЯ НАС (флаг internaldocs): технические страницы +// справки встроены. Собирать: go build -tags internaldocs. + +import ( + "embed" + "html/template" +) + +//go:embed web/templates/internal/*.html +var internalDocsFS embed.FS + +// internalDocsBuilt — технические страницы справки вшиты в этот бинарь. +const internalDocsBuilt = true + +// parseInternalDoc — страница внедрения (layout из основного FS + сам документ). +func parseInternalDoc(name string) (*template.Template, error) { + t := template.New("layout.html").Funcs(templateFuncs) + if _, err := t.ParseFS(templatesFS, "web/templates/layout.html"); err != nil { + return nil, err + } + return t.ParseFS(internalDocsFS, "web/templates/internal/"+name) +} diff --git a/internal/lkgateway/web/templates/admin_help.html b/internal/lkgateway/web/templates/admin_help.html index 6802582..8b18b26 100644 --- a/internal/lkgateway/web/templates/admin_help.html +++ b/internal/lkgateway/web/templates/admin_help.html @@ -5,24 +5,24 @@PostgreSQL: подключение, схемы fansy / fansy_staging / m2m_core, что подгружается извне (ETL Fansy) и что пишет сама система. Учётные записи, гранты, миграции.
REST-контракт ESIA Finance V1: POST /api/v1/back_office/claims/, GET/PATCH-операции, формат callback'ов, аутентификация Basic, примеры запросов curl.
Установка АПК «Валидата Клиент L» на Astra Linux SE, подключение через PKCS#11, проверка подписи и квитанций НРД.
Робот НРД на TEST3 (код MC0012500000), 4 тестовых сценария (отказ / принять все / частично / встречный перевод), управление через DocumentSeries и DocumentNumber, тестовые наборы депозитариев и кодов ошибок.
Полная схема: bj-server → ИШ (на Astra Linux ВМ) → ONYX (НРД) → {{if devOn}}робот-автотест{{else}}депозитарий-контрагент{{end}}. Кто на чьей стороне, какое СКЗИ, какие сертификаты, FAQ.
FTV_M2M / FTV_M2M_LINES / FTV_M2M_EVENTS: какие идентификаторы даёт bj, словарь событий в обе стороны (BJ_* и DEPO_*), правила STATE и идемпотентности, порядок по этапам, примеры SQL, открытые вопросы.
Чек-лист для QUIK Administrator: классы INSTROUTM2M / INSTRINM2M, инструменты, включение типов «Ввод/Вывод ЦБ М2М», права технологического пользователя, перезапуск модуля. Со ссылками на страницы документов ARQA и разбором ошибок.