M2M ИИС: приём «всё или ничего» (настройка AcceptIIS, по умолчанию выкл)
Правильная обработка входящих переводов на ИИС вместо прежнего сплошного отказа.
Настройка AcceptIIS (карточка «Кто отвечает на переводы M2M»):
- выкл (по умолчанию) — поведение не меняется: перевод на ИИС отклоняется целиком (M2M06);
- вкл — ИИС принимается ТОЛЬКО целиком: все бумаги зачисляются на ИИС-счёт клиента;
если хоть одной бумаги нет в учёте / не проходит сверку — отказ по ВСЕМУ переводу.
Изменения:
- iisDecisions: «всё или ничего» (при выкл — отказ всем; при вкл — либо все принять,
либо все отклонить, сохраняя реальные коды отказа по проблемным бумагам);
- depo_check: при вкл приёме ИИС убран искусственный отказ «Перевод не на ИИС»,
добавлена проверка «Счёт зачисления — ИИС» (partyChecks получил флаг wantIIS);
- настройка AcceptIIS в Settings + геттер/сеттер + обработчик /admin/setup/accept-iis
+ тумблер в part_nsd.html; тесты обновлены.
Жёсткий запрет частичного ИИС в answerIncoming (коммит dc8b785) остаётся как страховка.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -41,10 +41,13 @@ func TestAutoDecisionsPartialAndIIS(t *testing.T) {
|
||||
}
|
||||
it.IIS = true
|
||||
d, _ = autoDecisions(it, r)
|
||||
for _, x := range d {
|
||||
if x.Confirm || x.RejectCode != "M2M06" {
|
||||
t.Fatalf("ИИС не принимаем: %+v", d)
|
||||
}
|
||||
// Приём ИИС по умолчанию ВЫКЛ → отказ по всему переводу (всё-или-ничего).
|
||||
// Бумага A (была к приёму) получает код ИИС M2M06, бумага B сохраняет свою причину M2M05.
|
||||
if d[0].Confirm || d[1].Confirm {
|
||||
t.Fatalf("ИИС выключен — принимать нельзя: %+v", d)
|
||||
}
|
||||
if d[0].RejectCode != "M2M06" || d[1].RejectCode != "M2M05" {
|
||||
t.Fatalf("коды отказа ИИС: A=M2M06, B сохраняет M2M05: %+v", d)
|
||||
}
|
||||
legacy := &IncomingTransfer{RawXML: "<x><IIAAgreementDetails/></x>"}
|
||||
if !incomingIsIIS(legacy) {
|
||||
@@ -88,7 +91,7 @@ func TestOutQualCheck(t *testing.T) {
|
||||
if c := outQualCheck(true, false, "ограничений по обращению нет (опция DEPO)", notQual); !c.OK || c.Warn {
|
||||
t.Fatalf("бумага без ограничений — зелёный: %+v", c)
|
||||
}
|
||||
for _, c := range partyChecks(notQual, "1", "2", "x") {
|
||||
for _, c := range partyChecks(notQual, "1", "2", "x", false) {
|
||||
if strings.HasPrefix(c.Name, "Квал") {
|
||||
t.Fatalf("общая жёлтая строка квалификации больше не нужна: %+v", c)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user