From 4dc00cdcceae76bc0d8f4b91edc7f4af941e3473 Mon Sep 17 00:00:00 2001 From: fontvielle Date: Wed, 14 Oct 2026 18:25:13 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A0=D1=83=D1=87=D0=BD=D0=BE=D0=B9=20=D0=B2?= =?UTF-8?q?=D0=B2=D0=BE=D0=B4=20M2M:=20=D1=80=D0=B5=D0=B6=D0=B8=D0=BC=20?= =?UTF-8?q?=D0=BF=D0=BE=D0=B4=D0=BC=D0=B5=D0=BD=D1=8B=20=D0=BB=D0=B8=D1=87?= =?UTF-8?q?=D0=BD=D0=BE=D1=81=D1=82=D0=B8=20=D0=BA=D0=B0=D0=BA=20=D0=B2=20?= =?UTF-8?q?=D0=9B=D0=9A-=D0=BF=D0=BE=D1=82=D0=BE=D0=BA=D0=B5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit manualSend выбирал отправителя грубо: при любой включённой эмуляции (и imitate, и substitute) уходил на внутренний имитатор. Теперь логика как в lkemulate.go: imitate — имитатор (в НРД ничего); substitute — реальная отправка в НРД, клиент из списка RealNSDTest.Docs идёт с заменой блока инвестора на тест-инвестора (realTestPut для журнала «кто под кем»), остальные — с настоящими данными; off — реально с настоящими данными. Co-Authored-By: Claude Opus 4.8 --- internal/lkgateway/manual.go | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) diff --git a/internal/lkgateway/manual.go b/internal/lkgateway/manual.go index 5e8c5ad..2228acb 100644 --- a/internal/lkgateway/manual.go +++ b/internal/lkgateway/manual.go @@ -19,6 +19,7 @@ import ( "encoding/json" "errors" "fmt" + "log" "os" "regexp" "sort" @@ -569,9 +570,34 @@ func manualSend(ctx context.Context, rc *RuntimeConfig, svc *Service, o *ManualO if err != nil { return "", "", fmt.Errorf("пакет не прошёл проверку формата НРД: %w", err) } + // Выбор отправителя по режиму эмуляции НРД (как в ЛК-потоке, lkemulate.go): + // imitate — внутренний имитатор, в НРД ничего не уходит; + // substitute — реальная отправка в НРД; клиент из списка подмены идёт с заменой блока + // инвестора на тест-инвестора, остальные — с настоящими данными; + // off — реальная отправка в НРД с настоящими данными. sender := svc.sender - if emu, _ := lkEmulateNSD(rc); emu && lkEmuSender != nil { - sender = lkEmuSender + switch nsdEmuMode(rc) { + case "imitate": + if lkEmuSender != nil { + sender = lkEmuSender + } + case "substitute": + inv := claim.Investor + switch { + case svc.sender == nil: + // шлюз НРД не настроен — реально отправить нельзя, падаем на имитатор + if lkEmuSender != nil { + sender = lkEmuSender + } + case realTestMatch(rc, inv.Document.Series, inv.Document.Number): + asInv, asText := realTestInvestor(rc, req.Data.InvestorInformation.IdentityDocument.DocumentType) + realTestPut(RealTestRec{GUID: string(req.Header.GUID), At: time.Now(), As: asText, + Client: strings.TrimSpace(fmt.Sprintf("%s %s %s, %s %s", inv.LastName, inv.FirstName, inv.MiddleName, inv.Document.Series, inv.Document.Number))}) + sender = substituteSender{real: svc.sender, inv: asInv} + log.Printf("lk-gateway: ручной ввод %s: подмена личности — в НРД (%s) как %s", o.Number(), rc.Snapshot().NSD.Profile, asText) + default: + log.Printf("lk-gateway: ручной ввод %s: в НРД (%s) с настоящими данными (вне списка подмены)", o.Number(), rc.Snapshot().NSD.Profile) + } } if o.QuikMode != "auto" { ctx = context.WithValue(ctx, manualQuikSkipKey{}, true)