M2M incoming: жёсткий запрет частичного решения по ИИС-переводу

Перевод по договору ИИС принимается только целиком: если в одном решении
есть и подтверждённые, и отклонённые бумаги — answerIncoming отказывается
отправлять такое решение. Частичный приём ИИС привёл бы к неполному переводу
и двум ИИС у клиента с потерей льгот. Запрет не обойти ручным решением
оператора и переживёт смягчение политики приёма ИИС (iisDecisions).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-10-14 10:02:51 +03:00
parent d154506464
commit dc8b785a4b
+8
View File
@@ -105,6 +105,14 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
markMap[sec.ReferenceID] = mark markMap[sec.ReferenceID] = mark
} }
// Защита ИИС: перевод по договору ИИС принимается только ЦЕЛИКОМ — все бумаги
// или ни одной. Частичное решение (часть принять, часть отклонить) дало бы
// неполный перевод ИИС и два ИИС у клиента с потерей льгот. Этот запрет не
// обойти ни ручным решением оператора, ни будущим смягчением политики приёма.
if incomingIsIIS(it) && confirmed > 0 && rejected > 0 {
return fmt.Errorf("перевод на ИИС принимается только целиком: нельзя принять часть бумаг (%d) и отклонить часть (%d) — примите все бумаги или отклоните весь перевод", confirmed, rejected)
}
dec := &m2m.M2MTransferDecision{ dec := &m2m.M2MTransferDecision{
Header: m2m.DecisionHeader{ Header: m2m.DecisionHeader{
GUID: m2m.UUID(it.GUID), // GUID из запроса робота! GUID: m2m.UUID(it.GUID), // GUID из запроса робота!