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)