Сверка DEPO: физлицо в картотеке без торгового счёта — не наш клиент, отказ M2M04 (а не M2M02)
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -358,8 +358,12 @@ func finishResult(res *depoResult) {
|
|||||||
func partyChecks(p depoParty, ser, num, fio string) []depoCheck {
|
func partyChecks(p depoParty, ser, num, fio string) []depoCheck {
|
||||||
ser = strings.ReplaceAll(strings.TrimSpace(ser), " ", "")
|
ser = strings.ReplaceAll(strings.TrimSpace(ser), " ", "")
|
||||||
return []depoCheck{
|
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)")},
|
"паспорт "+ser+" № "+num+" не найден в картотеке (OD_FACES)")},
|
||||||
{Name: "Торговый счёт депо есть", OK: p.accAny != "", Code: "M2M02",
|
{Name: "Торговый счёт депо есть", OK: p.accAny != "", Code: "M2M02",
|
||||||
Detail: pick3(p.accAny != "", p.accAny, pick3(p.faceOK, "у инвестора нет счёта ВТНКЦ… в OD_CLIENTS", "не проверяется — инвестор не найден"))},
|
Detail: pick3(p.accAny != "", p.accAny, pick3(p.faceOK, "у инвестора нет счёта ВТНКЦ… в OD_CLIENTS", "не проверяется — инвестор не найден"))},
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ package lkgateway
|
|||||||
import "testing"
|
import "testing"
|
||||||
|
|
||||||
func TestPartyChecksFIO(t *testing.T) {
|
func TestPartyChecksFIO(t *testing.T) {
|
||||||
p := depoParty{faceOK: true, faceName: "Сёмин Пётр Ильич"}
|
p := depoParty{faceOK: true, faceName: "Сёмин Пётр Ильич", accAny: "ВТНКЦ00000001"}
|
||||||
p.fioMatch = normFIO(p.faceName) == normFIO("СЕМИН петр ильич")
|
p.fioMatch = normFIO(p.faceName) == normFIO("СЕМИН петр ильич")
|
||||||
if c := partyChecks(p, "4500", "123456", "СЕМИН петр ильич")[0]; !c.OK {
|
if c := partyChecks(p, "4500", "123456", "СЕМИН петр ильич")[0]; !c.OK {
|
||||||
t.Errorf("регистр, пробелы и ё не должны давать расхождение: %+v", c)
|
t.Errorf("регистр, пробелы и ё не должны давать расхождение: %+v", c)
|
||||||
@@ -13,4 +13,15 @@ func TestPartyChecksFIO(t *testing.T) {
|
|||||||
if c.OK || c.Code != "M2M04" {
|
if c.OK || c.Code != "M2M04" {
|
||||||
t.Errorf("паспорт совпал, ФИО нет — ожидали отказ M2M04: %+v", c)
|
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)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user