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 — проверьте юридические реквизиты.

-` + flashHTML + vErr + ` +` + regHTML + flashHTML + vErr + `
Организация ` + inp("inn", "ИНН (10 цифр)", d.INN, "7700000000") + `