Входящие M2M: частичный приём — каждая бумага решается сама по себе (НРД допускает: по каждой принятой свой черновик 16/1); переводы на ИИС не принимаем — отказ M2M07 по всем бумагам
- finishResult: итог confirm / reject / partial, без отказа всем пакетом; - autoDecisions и ручной ответ: без правила «целиком», квал-предупреждение — отказ только по своей бумаге; - признак ИИС из заголовка запроса (IIAAgreementDetails), у сохранённых раньше — по исходному XML; - форма оператора: без автоматического «отказ всем», подсказка про ИИС; тексты и тесты. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -16,25 +16,21 @@ func TestAutoDecisions(t *testing.T) {
|
||||
t.Fatalf("согласие: %+v", dec)
|
||||
}
|
||||
|
||||
// Отказ по одной — отказ всем пакетом с её кодом.
|
||||
r = depoResult{Summary: "отказ пакетом M2M05", Secs: []depoSecResult{{ReferenceID: "A", Recommend: "confirm"}, {ReferenceID: "B", Recommend: "reject", RejectCode: "M2M05"}}}
|
||||
// Отказ по одной — частичный приём: остальные принимаются (решение 25.09.2026).
|
||||
r = depoResult{Summary: "частично", Secs: []depoSecResult{{ReferenceID: "A", Recommend: "confirm"}, {ReferenceID: "B", Recommend: "reject", RejectCode: "M2M05"}}}
|
||||
dec, _ = autoDecisions(it, r)
|
||||
for _, d := range dec {
|
||||
if d.Confirm || d.RejectCode != "M2M05" {
|
||||
t.Fatalf("пакет целиком: %+v", dec)
|
||||
}
|
||||
if !dec[0].Confirm || dec[1].Confirm || dec[1].RejectCode != "M2M05" {
|
||||
t.Fatalf("частичный приём: %+v", dec)
|
||||
}
|
||||
|
||||
// Бумага для квал. инвесторов при неполной квалификации — отказ M2M08 всем.
|
||||
// Бумага для квал. инвесторов при неполной квалификации — отказ M2M08 только по ней.
|
||||
r = depoResult{Summary: "принять", Secs: []depoSecResult{
|
||||
{ReferenceID: "A", Security: "RU000A10F5K6", Recommend: "confirm", Checks: []depoCheck{{Name: "Бумага только для квал. инвесторов", OK: true, Warn: true, Strict: true, Code: "M2M08"}}},
|
||||
{ReferenceID: "B", Recommend: "confirm", Checks: []depoCheck{{Name: "Квал-инвестор (если бумага только для квал.)", OK: true, Warn: true, Code: "M2M08"}}},
|
||||
}}
|
||||
dec, why := autoDecisions(it, r)
|
||||
for _, d := range dec {
|
||||
if d.Confirm || d.RejectCode != "M2M08" {
|
||||
t.Fatalf("строгое предупреждение: %+v", dec)
|
||||
}
|
||||
if dec[0].Confirm || dec[0].RejectCode != "M2M08" || !dec[1].Confirm {
|
||||
t.Fatalf("строгое предупреждение — отказ только по этой бумаге: %+v", dec)
|
||||
}
|
||||
if !strings.Contains(why, "RU000A10F5K6") {
|
||||
t.Fatalf("пояснение: %q", why)
|
||||
@@ -49,9 +45,9 @@ func TestAutoDecisions(t *testing.T) {
|
||||
t.Fatalf("информационное предупреждение не должно отказывать: %+v", dec)
|
||||
}
|
||||
|
||||
// Бумага без результата сверки — не принимаем.
|
||||
// Бумага без результата сверки — не принимаем (остальные решаются сами по себе).
|
||||
r = depoResult{Secs: []depoSecResult{{ReferenceID: "A", Recommend: "confirm"}}}
|
||||
if dec, _ = autoDecisions(it, r); dec[0].Confirm || dec[1].Confirm {
|
||||
if dec, _ = autoDecisions(it, r); !dec[0].Confirm || dec[1].Confirm {
|
||||
t.Fatalf("без сверки по бумаге: %+v", dec)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user