Входящие 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:
@@ -50,7 +50,7 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
|
||||
}
|
||||
nsd := cfg.NSD
|
||||
|
||||
decisions = packageDecisions(decisions)
|
||||
decisions = iisDecisions(it, decisions)
|
||||
|
||||
// Карта решений по ReferenceID.
|
||||
byRef := make(map[string]SecurityDecision, len(decisions))
|
||||
@@ -154,32 +154,15 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
|
||||
// transferringINN — ИНН нашей организации (передающий депозитарий в запросе, принимающий — в решении).
|
||||
func transferringINN(s Settings) string { return orgINN(s) }
|
||||
|
||||
// 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 == "" {
|
||||
// iisDecisions — входящие переводы на ИИС не принимаем (решение 25.09.2026): отказ M2M07 по всем
|
||||
// бумагам, даже если оператор отметил «принять». Остальные переводы — по каждой бумаге отдельно.
|
||||
func iisDecisions(it *IncomingTransfer, decisions []SecurityDecision) []SecurityDecision {
|
||||
if it == nil || !incomingIsIIS(it) {
|
||||
return decisions
|
||||
}
|
||||
out := make([]SecurityDecision, len(decisions))
|
||||
for i, d := range decisions {
|
||||
if d.Confirm {
|
||||
d.Confirm, d.RejectCode = false, code
|
||||
}
|
||||
d.Confirm, d.RejectCode = false, "M2M07"
|
||||
out[i] = d
|
||||
}
|
||||
return out
|
||||
|
||||
Reference in New Issue
Block a user