From 416f9bdcd5705b2eeb4bc9f6f5ade3183cb6f4e5 Mon Sep 17 00:00:00 2001
From: fontvielle
Date: Wed, 21 Oct 2026 17:31:09 +0300
Subject: [PATCH] =?UTF-8?q?=D0=90=D0=BD=D0=BA=D0=B5=D1=82=D0=B0=20=D1=83?=
=?UTF-8?q?=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=B0:=20=D1=81?=
=?UTF-8?q?=D1=82=D0=B0=D1=82=D1=83=D1=81=20=D1=80=D0=B5=D0=B3=D0=B8=D1=81?=
=?UTF-8?q?=D1=82=D1=80=D0=B0=D1=86=D0=B8=D0=B8=20=D0=BF=D0=BE=20=D1=81?=
=?UTF-8?q?=D0=BF=D1=80=D0=B0=D0=B2=D0=BE=D1=87=D0=BD=D0=B8=D0=BA=D1=83=20?=
=?UTF-8?q?=D1=83=D1=87=D0=B0=D1=81=D1=82=D0=BD=D0=B8=D0=BA=D0=BE=D0=B2=20?=
=?UTF-8?q?M2M?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Регистрация подтверждается двумя путями: ответным документом НРД (ловим в
поллере) ИЛИ появлением организации в справочнике участников M2M боевого
контура. На странице анкеты добавлен статус: ищем нашу организацию в справочнике
по MC-коду, затем по ИНН (handbookByCode/handbookByINN); «есть» — регистрация
подтверждена, «нет» — ждём приёма анкеты (справочник обновляется ~10 минут).
Co-Authored-By: Claude Opus 4.8
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
---
deploy/release/component-versions.json | 4 +--
internal/lkgateway/participant_form.go | 34 +++++++++++++++++++++++---
2 files changed, 33 insertions(+), 5 deletions(-)
diff --git a/deploy/release/component-versions.json b/deploy/release/component-versions.json
index 7e81d34..488b109 100644
--- a/deploy/release/component-versions.json
+++ b/deploy/release/component-versions.json
@@ -20,8 +20,8 @@
"version": "2026.10.21.6"
},
"bj-server": {
- "fingerprint": "f47475987712791a70a636cfa23a2a8d28f1e1ad898d3ff505c595f828d64a0b",
- "version": "2026.10.21.11"
+ "fingerprint": "bbbd830ed300ae81eee05d87ad0fe59d0756a794f1d157c37bc36fe67c2e0f25",
+ "version": "2026.10.21.12"
},
"crypto-service.jar": {
"fingerprint": "2c4fd536bc9b1c20c69a70e8dcd374a61847b263aeb2e474c45debb01fbd8233",
diff --git a/internal/lkgateway/participant_form.go b/internal/lkgateway/participant_form.go
index 62b20fb..1038c9f 100644
--- a/internal/lkgateway/participant_form.go
+++ b/internal/lkgateway/participant_form.go
@@ -359,11 +359,39 @@ func registerParticipantForm(mux *http.ServeMux, rc *RuntimeConfig, igwClient *i
}
xmlPreview := participantFormXML(d)
- participantFormRender(w, d, errs, action, flash, flashKind, xmlPreview, igwClient != nil && igwChannel != "", isProdIGW(igwChannel))
+ participantFormRender(w, d, errs, action, flash, flashKind, xmlPreview, participantRegStatus(rc), igwClient != nil && igwChannel != "", isProdIGW(igwChannel))
})
}
-func participantFormRender(w http.ResponseWriter, d participantFormData, errs []string, action, flash, flashKind, xmlPreview string, igwConfigured, igwProd bool) {
+// participantRegStatus — подтверждение регистрации появлением в справочнике участников
+// M2M текущего контура: если наша организация (по MC-коду или ИНН) уже в справочнике —
+// анкета принята. Это второй сигнал, помимо ответного документа от НРД.
+func participantRegStatus(rc *RuntimeConfig) string {
+ if rc == nil {
+ return ""
+ }
+ s := rc.Snapshot()
+ contour := map[string]string{"prod": "боевого", "guest": "гостевого", "test3": "тестового"}[contourOf(currentNSDProfile())]
+ if contour == "" {
+ contour = "текущего"
+ }
+ hb, ok := handbookByCode(orgCode(s))
+ if !ok {
+ if inn := orgINN(s); inn != "" {
+ hb, ok = handbookByINN(inn)
+ }
+ }
+ if ok {
+ return `
В справочнике участников M2M ` + contour + ` контура: есть — ` +
+ html.EscapeString(pickStr(hb.Name, hb.FullName)) + `, код ` + html.EscapeString(hb.Code) +
+ `, ИНН ` + html.EscapeString(hb.INN) + `. Регистрация подтверждена.
`
+ }
+ return `
В справочнике участников M2M ` + contour + ` контура нашей организации пока нет. ` +
+ `После приёма анкеты НРД организация появится в справочнике (обновляется каждые ~10 минут) — тогда здесь будет «есть». ` +
+ `Регистрацию подтверждает также ответный документ от НРД.
`
+}
+
+func participantFormRender(w http.ResponseWriter, d participantFormData, errs []string, action, flash, flashKind, xmlPreview, regHTML string, igwConfigured, igwProd bool) {
w.Header().Set("Content-Type", "text/html; charset=utf-8")
inp := func(name, label, val, ph string) string {
return ``
@@ -409,7 +437,7 @@ pre{background:#f6f8fa;border:1px solid #ddd;border-radius:8px;padding:12px;over
пакетом #M2MPF (businessLine=MOST, подпись боевым контейнером на стороне ИШ); письмо на
` + participantFormRecipient + ` оставлено запасным каналом. Поля предзаполнены из
автоопределения DEPO — проверьте юридические реквизиты.