Входящие M2M: пакет только целиком и отказ M2M08 для бумаг «для квалифицированных инвесторов»

Сверка с DEPO: у бумаги проверяется опция RESTRICTED («Ограничение ценной бумаги по обращению»,
1 — предназначена для квалифицированных инвесторов). Если инвестор не квалифицирован — отказ M2M08;
квалифицирован по всем видам — проходит; по части видов — предупреждение, решает оператор.

Пакет принимается только целиком (решение 16.09): при отказе хотя бы по одной бумаге рекомендация —
отказ по всем с кодом первой отказной, и так же нормализуется отправляемое решение (packageDecisions);
в форме выбор отказа по одной бумаге переключает на отказ все.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-16 14:45:43 +03:00
parent be0081c139
commit 4b62d00ac2
5 changed files with 201 additions and 24 deletions
+33
View File
@@ -47,6 +47,8 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
}
nsd := cfg.NSD
decisions = packageDecisions(decisions)
// Карта решений по ReferenceID.
byRef := make(map[string]SecurityDecision, len(decisions))
for _, d := range decisions {
@@ -151,3 +153,34 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
func transferringINN(_ Settings) string {
return "7703807489"
}
// packageDecisions — пакет принимается только целиком (решение 16.09.2026): если хотя бы по одной бумаге
// отказ, отказываем по всем; принятым бумагам ставится код первой отказной.
func packageDecisions(decisions []SecurityDecision) []SecurityDecision {
code := ""
for _, d := range decisions {
if !d.Confirm {
code = d.RejectCode
break
}
}
if code == "" {
for _, d := range decisions {
if !d.Confirm {
code = "M2M05"
break
}
}
}
if code == "" {
return decisions
}
out := make([]SecurityDecision, len(decisions))
for i, d := range decisions {
if d.Confirm {
d.Confirm, d.RejectCode = false, code
}
out[i] = d
}
return out
}