From a48f965d1bcfc4335717fa28de36e8a122e8a99b Mon Sep 17 00:00:00 2001 From: zuevav Date: Wed, 7 Oct 2026 00:30:50 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=BF=D1=80=D0=B0=D0=B2=D0=BA=D0=B0=20?= =?UTF-8?q?=D0=B8=20=D1=81=D0=BE=D0=B1=D1=8B=D1=82=D0=B8=D1=8F=20=D0=B1?= =?UTF-8?q?=D0=B5=D0=B7=20=D0=B2=D0=BD=D1=83=D1=82=D1=80=D0=B5=D0=BD=D0=BD?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE;=20=D0=9B=D0=9A=20=E2=80=94=20=D1=82=D0=BE?= =?UTF-8?q?=D0=BB=D1=8C=D0=BA=D0=BE=20=D0=BF=D1=80=D0=B8=20=D0=BC=D0=BE?= =?UTF-8?q?=D0=B4=D1=83=D0=BB=D0=B5;=20=D1=81=D0=BF=D1=80=D0=B0=D0=B2?= =?UTF-8?q?=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=20DEPO=20=D1=81=D1=80=D0=B0?= =?UTF-8?q?=D0=B7=D1=83=20=D0=BF=D0=BE=D1=81=D0=BB=D0=B5=20=D0=BF=D0=BE?= =?UTF-8?q?=D0=B4=D0=B3=D0=BE=D1=82=D0=BE=D0=B2=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - справка «Внешние системы» — внутренняя (internaldocs); «API ЛК» и проверка callback ЛК — только при модуле ЛК - отслеживание документации НРД (doc-watcher) — только в режиме разработки - после подготовки DEPO справочник участников пишется входом по действию человека — не ждёт паузы после прежнего неудачного входа («FTV_M2M_HANDBOOK не создана») Co-Authored-By: Claude Opus 5.5 Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi --- internal/lkgateway/admin.go | 6 +++++- internal/lkgateway/checks.go | 4 +++- internal/lkgateway/depoevents.go | 8 ++++++-- internal/lkgateway/news.go | 7 +++++-- internal/lkgateway/web/templates/admin_help.html | 8 ++++---- internal/lkgateway/web/templates/admin_news.html | 6 +++--- internal/lkgateway/wizard_depo.go | 4 ++-- 7 files changed, 28 insertions(+), 15 deletions(-) diff --git a/internal/lkgateway/admin.go b/internal/lkgateway/admin.go index 8f0a850..cf6ee8c 100644 --- a/internal/lkgateway/admin.go +++ b/internal/lkgateway/admin.go @@ -312,7 +312,7 @@ func newAdmin() (*admin, error) { if err != nil { return nil, fmt.Errorf("parse admin_help_crypto: %w", err) } - helpSys, err := parse("admin_help_systems.html") + helpSys, err := parseInternalDoc("admin_help_systems.html") // внутреннее: Fansy ETL, мессенджеры — не для клиента if err != nil { return nil, fmt.Errorf("parse admin_help_systems: %w", err) } @@ -532,6 +532,10 @@ func RegisterAdmin(mux *http.ServeMux, svc *Service, rc *RuntimeConfig, getOpts case p == "help/database": render(w, a.helpDatabase, nowPage("База данных", "help")) case p == "help/lk-api": + if !moduleAllowed(globalRC, "web-cabinet") && !devMode(globalRC) { // без модуля ЛК описания его API нет + http.NotFound(w, r) + return + } render(w, a.helpLK, nowPage("API ЛК", "help")) case p == "help/crypto": render(w, a.helpCrypto, nowPage("Криптография", "help")) diff --git a/internal/lkgateway/checks.go b/internal/lkgateway/checks.go index bcfacef..1ff4f0a 100644 --- a/internal/lkgateway/checks.go +++ b/internal/lkgateway/checks.go @@ -58,7 +58,9 @@ func CheckAll(ctx context.Context, o CheckOptions) SystemStatus { out.Checks = append(out.Checks, checkCryptoSocket(o)) out.Checks = append(out.Checks, checkNSDAdapter(ctx, o)) out.Checks = append(out.Checks, ishVersionStatus(ctx)) - out.Checks = append(out.Checks, checkLKCallback(ctx, o)) + if globalRC == nil || moduleAllowed(globalRC, "web-cabinet") || devMode(globalRC) { // без модуля ЛК нечего проверять + out.Checks = append(out.Checks, checkLKCallback(ctx, o)) + } return out } diff --git a/internal/lkgateway/depoevents.go b/internal/lkgateway/depoevents.go index f00e667..c65b88f 100644 --- a/internal/lkgateway/depoevents.go +++ b/internal/lkgateway/depoevents.go @@ -555,7 +555,11 @@ func depoPollOrders(ctx context.Context, db *sql.DB, rc *RuntimeConfig) { var depoHandbookWritten time.Time -func depoWriteHandbook(rc *RuntimeConfig) error { +func depoWriteHandbook(rc *RuntimeConfig) error { return depoWriteHandbookCtx(context.Background(), rc) } + +// depoWriteHandbookCtx — то же с контекстом вызывающего: после подготовки DEPO (действие человека) вход идёт и во +// время паузы после прежнего неудачного входа — иначе справочник ждал бы своего расписания («таблица не создана»). +func depoWriteHandbookCtx(pctx context.Context, rc *RuntimeConfig) error { raw, err := readHandbook() if err != nil { return err @@ -573,7 +577,7 @@ func depoWriteHandbook(rc *RuntimeConfig) error { return err } defer db.Close() - ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) + ctx, cancel := context.WithTimeout(pctx, 60*time.Second) defer cancel() if !depoTableExists(ctx, db, "FTV_M2M_HANDBOOK") { if _, err := db.ExecContext(ctx, depoTableSpecByName("FTV_M2M_HANDBOOK").createSQL(false)); err != nil { diff --git a/internal/lkgateway/news.go b/internal/lkgateway/news.go index 187236a..cfdadb7 100644 --- a/internal/lkgateway/news.go +++ b/internal/lkgateway/news.go @@ -321,8 +321,11 @@ func StartDocWatcher(rc *RuntimeConfig) func() { ticker := time.NewTicker(24 * time.Hour) defer ticker.Stop() for { - summary := CheckDocSources(ctx, rc) - log.Printf("doc-watcher: проверка завершена\n%s", summary) + // отслеживание документации НРД — наш технический инструмент: у клиента не работает (07.10.2026) + if devMode(rc) { + summary := CheckDocSources(ctx, rc) + log.Printf("doc-watcher: проверка завершена\n%s", summary) + } select { case <-ctx.Done(): return diff --git a/internal/lkgateway/web/templates/admin_help.html b/internal/lkgateway/web/templates/admin_help.html index 8b18b26..1ae54d5 100644 --- a/internal/lkgateway/web/templates/admin_help.html +++ b/internal/lkgateway/web/templates/admin_help.html @@ -11,24 +11,24 @@

PostgreSQL: подключение, схемы fansy / fansy_staging / m2m_core, что подгружается извне (ETL Fansy) и что пишет сама система. Учётные записи, гранты, миграции.

{{end}} - + {{if or (mod "web-cabinet") devOn}}

API личного кабинета →

REST-контракт ESIA Finance V1: POST /api/v1/back_office/claims/, GET/PATCH-операции, формат callback'ов, аутентификация Basic, примеры запросов curl.

-
+ {{end}} {{if internalDocs}}

Криптография (Валидата) →

Установка АПК «Валидата Клиент L» на Astra Linux SE, подключение через PKCS#11, проверка подписи и квитанций НРД.

{{end}} - + {{if internalDocs}}

Внешние системы →

ИШ НРД ({{if devOn}}профили GUEST/TEST3/PROD{{else}}тестовый и боевой контуры{{end}}), команда Fansy (ETL в staging), уведомления (e-mail, Yandex Messenger, Telegram), порядок согласования.

-
+ {{end}}

Ручной ввод M2M →

diff --git a/internal/lkgateway/web/templates/admin_news.html b/internal/lkgateway/web/templates/admin_news.html index a049f5c..b875caf 100644 --- a/internal/lkgateway/web/templates/admin_news.html +++ b/internal/lkgateway/web/templates/admin_news.html @@ -18,8 +18,8 @@

Новости и события

-

События системы, окна техработ НРД, обновления документации и сертификатов. Лента не очищается — служит журналом для аудита. Скрытые новости можно посмотреть, сняв галочку «Только активные».

-
+

События системы, окна техработ НРД, обновления сертификатов. Лента не очищается — служит журналом для аудита. Скрытые новости можно посмотреть, сняв галочку «Только активные».

+ {{if devOn}} {{if not .Settings.News.LastDocCheck.IsZero}} Последняя проверка: {{.Settings.News.LastDocCheck.Format "02.01.2006 15:04:05"}} @@ -42,7 +42,7 @@ - {{end}} + {{end}}{{end}}

Лента ({{len .Settings.News.Items}})

diff --git a/internal/lkgateway/wizard_depo.go b/internal/lkgateway/wizard_depo.go index f103ec4..24cb087 100644 --- a/internal/lkgateway/wizard_depo.go +++ b/internal/lkgateway/wizard_depo.go @@ -126,7 +126,7 @@ func (h *setupHandlers) wizardDepoTables(w http.ResponseWriter, r *http.Request) return } if !s.IsPostgres() { - _ = depoWriteHandbook(h.rc) + _ = depoWriteHandbookCtx(depoLoginForce(ctx), h.rc) } wizDepoGo(w, r, "job", "таблицы обмена на месте: "+msg, true) } @@ -460,7 +460,7 @@ func (h *setupHandlers) depoSetupDo(ctx context.Context, r *http.Request, step d return fail(note + msg) } if !s.IsPostgres() { - _ = depoWriteHandbook(h.rc) + _ = depoWriteHandbookCtx(depoLoginForce(ctx), h.rc) } step("tables", "ok", "") // запуск обработки: только что созданное задание запускается в течение интервала — подождать