Ручной ввод M2M: режим подмены личности как в ЛК-потоке

manualSend выбирал отправителя грубо: при любой включённой эмуляции (и
imitate, и substitute) уходил на внутренний имитатор. Теперь логика как в
lkemulate.go: imitate — имитатор (в НРД ничего); substitute — реальная
отправка в НРД, клиент из списка RealNSDTest.Docs идёт с заменой блока
инвестора на тест-инвестора (realTestPut для журнала «кто под кем»),
остальные — с настоящими данными; off — реально с настоящими данными.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-10-14 18:25:13 +03:00
parent 13aefbdc01
commit 4dc00cdcce
+28 -2
View File
@@ -19,6 +19,7 @@ import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt" "fmt"
"log"
"os" "os"
"regexp" "regexp"
"sort" "sort"
@@ -569,9 +570,34 @@ func manualSend(ctx context.Context, rc *RuntimeConfig, svc *Service, o *ManualO
if err != nil { if err != nil {
return "", "", fmt.Errorf("пакет не прошёл проверку формата НРД: %w", err) return "", "", fmt.Errorf("пакет не прошёл проверку формата НРД: %w", err)
} }
// Выбор отправителя по режиму эмуляции НРД (как в ЛК-потоке, lkemulate.go):
// imitate — внутренний имитатор, в НРД ничего не уходит;
// substitute — реальная отправка в НРД; клиент из списка подмены идёт с заменой блока
// инвестора на тест-инвестора, остальные — с настоящими данными;
// off — реальная отправка в НРД с настоящими данными.
sender := svc.sender sender := svc.sender
if emu, _ := lkEmulateNSD(rc); emu && lkEmuSender != nil { switch nsdEmuMode(rc) {
sender = lkEmuSender 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" { if o.QuikMode != "auto" {
ctx = context.WithValue(ctx, manualQuikSkipKey{}, true) ctx = context.WithValue(ctx, manualQuikSkipKey{}, true)