From 7288c86fba62f08104a3b1fc33f6fa0b36d0e91f Mon Sep 17 00:00:00 2001 From: zuevav Date: Wed, 16 Sep 2026 15:26:33 +0300 Subject: [PATCH] =?UTF-8?q?=D0=A1=D0=B2=D0=B5=D1=80=D0=BA=D0=B0=20DEPO:=20?= =?UTF-8?q?=D1=84=D0=B8=D0=B7=D0=BB=D0=B8=D1=86=D0=BE=20=D0=B2=20=D0=BA?= =?UTF-8?q?=D0=B0=D1=80=D1=82=D0=BE=D1=82=D0=B5=D0=BA=D0=B5=20=D0=B1=D0=B5?= =?UTF-8?q?=D0=B7=20=D1=82=D0=BE=D1=80=D0=B3=D0=BE=D0=B2=D0=BE=D0=B3=D0=BE?= =?UTF-8?q?=20=D1=81=D1=87=D1=91=D1=82=D0=B0=20=E2=80=94=20=D0=BD=D0=B5=20?= =?UTF-8?q?=D0=BD=D0=B0=D1=88=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82,=20?= =?UTF-8?q?=D0=BE=D1=82=D0=BA=D0=B0=D0=B7=20M2M04=20(=D0=B0=20=D0=BD=D0=B5?= =?UTF-8?q?=20M2M02)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5 (1M context) --- internal/lkgateway/depo_check.go | 8 ++++++-- internal/lkgateway/depo_check_test.go | 13 ++++++++++++- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/internal/lkgateway/depo_check.go b/internal/lkgateway/depo_check.go index 9f3e76c..558c43c 100644 --- a/internal/lkgateway/depo_check.go +++ b/internal/lkgateway/depo_check.go @@ -358,8 +358,12 @@ func finishResult(res *depoResult) { func partyChecks(p depoParty, ser, num, fio string) []depoCheck { ser = strings.ReplaceAll(strings.TrimSpace(ser), " ", "") return []depoCheck{ - {Name: "ФИО + документ инвестора", OK: p.faceOK && p.fioMatch, Code: "M2M04", - Detail: pick3(p.faceOK, pick3(p.fioMatch, p.faceName, "паспорт найден, но ФИО не совпадает: в картотеке «"+p.faceName+"», в запросе «"+fio+"»"), + // Инвестор — наш клиент: лицо по паспорту с тем же ФИО И хотя бы один торговый счёт (договор). + // Физлицо в картотеке без счёта у нас — не клиент депозитария: отказ M2M04, а не M2M02 (16.09.2026). + {Name: "ФИО + документ инвестора", OK: p.faceOK && p.fioMatch && p.accAny != "", Code: "M2M04", + Detail: pick3(p.faceOK, pick3(p.fioMatch, + pick3(p.accAny != "", p.faceName, p.faceName+" — есть в картотеке лиц, но торгового счёта (договора) у нас нет: не наш клиент"), + "паспорт найден, но ФИО не совпадает: в картотеке «"+p.faceName+"», в запросе «"+fio+"»"), "паспорт "+ser+" № "+num+" не найден в картотеке (OD_FACES)")}, {Name: "Торговый счёт депо есть", OK: p.accAny != "", Code: "M2M02", Detail: pick3(p.accAny != "", p.accAny, pick3(p.faceOK, "у инвестора нет счёта ВТНКЦ… в OD_CLIENTS", "не проверяется — инвестор не найден"))}, diff --git a/internal/lkgateway/depo_check_test.go b/internal/lkgateway/depo_check_test.go index ac5d1f3..3ce4ce3 100644 --- a/internal/lkgateway/depo_check_test.go +++ b/internal/lkgateway/depo_check_test.go @@ -3,7 +3,7 @@ package lkgateway import "testing" func TestPartyChecksFIO(t *testing.T) { - p := depoParty{faceOK: true, faceName: "Сёмин Пётр Ильич"} + p := depoParty{faceOK: true, faceName: "Сёмин Пётр Ильич", accAny: "ВТНКЦ00000001"} p.fioMatch = normFIO(p.faceName) == normFIO("СЕМИН петр ильич") if c := partyChecks(p, "4500", "123456", "СЕМИН петр ильич")[0]; !c.OK { t.Errorf("регистр, пробелы и ё не должны давать расхождение: %+v", c) @@ -13,4 +13,15 @@ func TestPartyChecksFIO(t *testing.T) { if c.OK || c.Code != "M2M04" { t.Errorf("паспорт совпал, ФИО нет — ожидали отказ M2M04: %+v", c) } + // Физлицо в картотеке без торгового счёта — не наш клиент: M2M04 первой проверкой. + noAcc := depoParty{faceOK: true, faceName: "Баранкин Сергей Сергеевич", fioMatch: true} + checks := partyChecks(noAcc, "3763", "290089", "Баранкин Сергей Сергеевич") + if c := checks[0]; c.OK || c.Code != "M2M04" { + t.Errorf("лицо без счёта — ожидали отказ M2M04: %+v", c) + } + sr := depoSecResult{Checks: checks} + finishSec(&sr) + if sr.RejectCode != "M2M04" { + t.Errorf("итоговый код по бумаге %q, ожидали M2M04", sr.RejectCode) + } }