Переводы на ИИС — отказ кодом M2M06 (вместо M2M07)
Решение депозитария 07.10.2026: по ИИС отвечаем M2M06 «Приостановление операций по счёту депо зачисления». Код — константа iisRejectCode: отказ по всему переводу на ИИС (iisDecisions, авто и ручной режим), проверки «Перевод не на ИИС» и «Счёт не ИИС» (было M2M08); тексты в настройках, карточке входящего и справочнике кодов. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -382,7 +382,7 @@ func partyChecks(p depoParty, ser, num, fio string) []depoCheck {
|
||||
Detail: pick3(p.accAny != "", p.accAny, pick3(p.faceOK, "у инвестора нет счёта "+depoAccPrefix()+"… в OD_CLIENTS", "не проверяется — инвестор не найден"))},
|
||||
{Name: "Статус счёта строго «открыт»", OK: p.accOpen != "", Code: "M2M02",
|
||||
Detail: pick3(p.accAny == "", "не проверяется — счёта нет", pick3(p.accOpen != "", p.accOpen+" — открыт (STATE=0, без даты закрытия)", p.accAny+" — НЕ открыт (закрыт или STATE≠0)"))},
|
||||
{Name: "Счёт не ИИС", OK: p.iisOK, Code: "M2M08", Detail: p.iisDet},
|
||||
{Name: "Счёт не ИИС", OK: p.iisOK, Code: iisRejectCode, Detail: p.iisDet},
|
||||
}
|
||||
}
|
||||
|
||||
@@ -415,7 +415,7 @@ func runDepoCheck(it *IncomingTransfer) depoResult {
|
||||
isin := strings.ToUpper(strings.TrimSpace(s.ISIN))
|
||||
sr := depoSecResult{ReferenceID: s.ReferenceID, Security: pick(isin, s.SecurityCode)}
|
||||
if incomingIsIIS(it) { // решение 25.09.2026: входящие переводы на ИИС не принимаем совсем
|
||||
sr.Checks = append(sr.Checks, depoCheck{Name: "Перевод не на ИИС", OK: false, Code: "M2M07",
|
||||
sr.Checks = append(sr.Checks, depoCheck{Name: "Перевод не на ИИС", OK: false, Code: iisRejectCode,
|
||||
Detail: "перевод на ИИС (в запросе договор ИИС) — входящие переводы на ИИС не принимаем, отказ по всем бумагам"})
|
||||
}
|
||||
ruOK := strings.HasPrefix(isin, "RU")
|
||||
|
||||
@@ -31,7 +31,7 @@ func TestFinishResultPartial(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
// Автоответ: частичное согласие уходит как есть; перевод на ИИС — отказ M2M07 по всем бумагам.
|
||||
// Автоответ: частичное согласие уходит как есть; перевод на ИИС — отказ M2M06 по всем бумагам.
|
||||
func TestAutoDecisionsPartialAndIIS(t *testing.T) {
|
||||
it := &IncomingTransfer{Securities: []IncomingSecurity{{ReferenceID: "A"}, {ReferenceID: "B"}}}
|
||||
r := depoResult{Secs: []depoSecResult{{ReferenceID: "A", Recommend: "confirm"}, {ReferenceID: "B", Recommend: "reject", RejectCode: "M2M05"}}}
|
||||
@@ -42,7 +42,7 @@ func TestAutoDecisionsPartialAndIIS(t *testing.T) {
|
||||
it.IIS = true
|
||||
d, _ = autoDecisions(it, r)
|
||||
for _, x := range d {
|
||||
if x.Confirm || x.RejectCode != "M2M07" {
|
||||
if x.Confirm || x.RejectCode != "M2M06" {
|
||||
t.Fatalf("ИИС не принимаем: %+v", d)
|
||||
}
|
||||
}
|
||||
|
||||
@@ -154,7 +154,11 @@ func answerIncoming(ctx context.Context, deps incomingDeps, id string, decisions
|
||||
// transferringINN — ИНН нашей организации (передающий депозитарий в запросе, принимающий — в решении).
|
||||
func transferringINN(s Settings) string { return orgINN(s) }
|
||||
|
||||
// iisDecisions — входящие переводы на ИИС не принимаем (решение 25.09.2026): отказ M2M07 по всем
|
||||
// iisRejectCode — код отказа по переводу на ИИС: M2M06 «Приостановление операций по счёту депо зачисления»
|
||||
// (решение депозитария 07.10.2026; до этого — M2M07).
|
||||
const iisRejectCode = "M2M06"
|
||||
|
||||
// iisDecisions — входящие переводы на ИИС не принимаем (решение 25.09.2026): отказ iisRejectCode по всем
|
||||
// бумагам, даже если оператор отметил «принять». Остальные переводы — по каждой бумаге отдельно.
|
||||
func iisDecisions(it *IncomingTransfer, decisions []SecurityDecision) []SecurityDecision {
|
||||
if it == nil || !incomingIsIIS(it) {
|
||||
@@ -162,7 +166,7 @@ func iisDecisions(it *IncomingTransfer, decisions []SecurityDecision) []Security
|
||||
}
|
||||
out := make([]SecurityDecision, len(decisions))
|
||||
for i, d := range decisions {
|
||||
d.Confirm, d.RejectCode = false, "M2M07"
|
||||
d.Confirm, d.RejectCode = false, iisRejectCode
|
||||
out[i] = d
|
||||
}
|
||||
return out
|
||||
|
||||
@@ -4,7 +4,7 @@ package lkgateway
|
||||
// человека, чтобы соблюдать сроки и убрать человеческий фактор.
|
||||
//
|
||||
// - Входящий перевод ждёт решения → свежая сверка с DEPO → решение по её рекомендации: каждая
|
||||
// бумага решается сама по себе (частичный приём), переводы на ИИС — отказ M2M07 по всем бумагам;
|
||||
// бумага решается сама по себе (частичный приём), переводы на ИИС — отказ M2M06 по всем бумагам;
|
||||
// предупреждение со Strict (бумага для квалифицированных инвесторов
|
||||
// при неполной квалификации клиента) — отказ M2M08. Без сверки ничего не принимается: если DEPO
|
||||
// или ИШ недоступны, bj повторяет каждые m2mAutoRetry и шлёт оповещение.
|
||||
|
||||
@@ -25,7 +25,7 @@ var m2mRejectCatalog = []m2mCodeInfo{
|
||||
{"M2M05", "Бумага не обслуживается зачисляющим депозитарием",
|
||||
"Зачисляющий депозитарий не оказывает услуги по учёту прав на данную ценную бумагу (не работает с этим выпуском)."},
|
||||
{"M2M06", "Приостановление операций по счёту зачисления",
|
||||
"По счёту депо зачисления действует приостановка/блокировка операций — зачислить бумаги нельзя."},
|
||||
"По счёту депо зачисления действует приостановка/блокировка операций — зачислить бумаги нельзя. В нашей системе этим кодом отклоняются также переводы на ИИС и запросы, полученные вне рабочего времени депозитария."},
|
||||
{"M2M07", "Отказ принимающей стороны",
|
||||
"Общий отказ зачисляющего депозитария. В нашей системе применяется также для повторного (дублирующего) перевода — тот же инвестор и бумаги уже принимались ранее."},
|
||||
{"M2M08", "Операция нарушит законодательство РФ",
|
||||
|
||||
@@ -141,7 +141,7 @@
|
||||
{{end}}
|
||||
</tbody>
|
||||
</table>
|
||||
<p class="muted" style="font-size:12.5px;margin:10px 0 0">Решение по каждой бумаге отдельно: принятые бумаги НРД переведёт (по каждой придёт свой черновик 16/1), по остальным уйдёт отказ с выбранным кодом.{{if and $.It (isIIS $.It)}} <b>Перевод на ИИС — такие мы не принимаем: отказ M2M07 по всем бумагам будет отправлен в любом случае.</b>{{end}}</p>
|
||||
<p class="muted" style="font-size:12.5px;margin:10px 0 0">Решение по каждой бумаге отдельно: принятые бумаги НРД переведёт (по каждой придёт свой черновик 16/1), по остальным уйдёт отказ с выбранным кодом.{{if and $.It (isIIS $.It)}} <b>Перевод на ИИС — такие мы не принимаем: отказ M2M06 по всем бумагам будет отправлен в любом случае.</b>{{end}}</p>
|
||||
<div style="display:flex;gap:8px;margin-top:14px;flex-wrap:wrap">
|
||||
<button type="submit" class="btn btn-ok">Отправить решение{{if devOn}} роботу{{end}}</button>
|
||||
<button type="button" class="btn" onclick="m2mSetAll('confirm')">Принять все</button>
|
||||
|
||||
@@ -337,7 +337,7 @@
|
||||
{{template "orgSection" .}}
|
||||
<div class="card" id="m2m-auto">
|
||||
<h2><span class="dot {{if .Settings.M2MAuto.Enabled}}ok{{else}}warn{{end}}"></span>Автоматический режим M2M</h2>
|
||||
<p class="muted">Без участия оператора, чтобы соблюдать сроки: <strong>ответ на входящие переводы</strong> по свежей сверке с DEPO (решение по каждой бумаге отдельно — возможен частичный приём; переводы на ИИС — отказ M2M07; бумага для квалифицированных инвесторов при неполной или непрочитанной квалификации клиента — отказ M2M08), <strong>подача поручения 16/1</strong>, как только НРД пришлёт черновик после нашего согласия, и <strong>подача поручения 16</strong> по исходящим после согласия контрагента. Если DEPO или ИШ недоступны — bj повторяет каждые 3 минуты и шлёт оповещение; без сверки ничего не принимается. Обрабатывается только то, что пришло не раньше чем за сутки до включения. Кнопки в карточках остаются для ручной работы.</p>
|
||||
<p class="muted">Без участия оператора, чтобы соблюдать сроки: <strong>ответ на входящие переводы</strong> по свежей сверке с DEPO (решение по каждой бумаге отдельно — возможен частичный приём; переводы на ИИС — отказ M2M06; бумага для квалифицированных инвесторов при неполной или непрочитанной квалификации клиента — отказ M2M08), <strong>подача поручения 16/1</strong>, как только НРД пришлёт черновик после нашего согласия, и <strong>подача поручения 16</strong> по исходящим после согласия контрагента. Если DEPO или ИШ недоступны — bj повторяет каждые 3 минуты и шлёт оповещение; без сверки ничего не принимается. Обрабатывается только то, что пришло не раньше чем за сутки до включения. Кнопки в карточках остаются для ручной работы.</p>
|
||||
<form method="post" action="/admin/setup/m2m-auto" style="display:flex;gap:12px;align-items:center;flex-wrap:wrap;margin-top:10px">
|
||||
<input type="hidden" name="section" value="m2m-auto">
|
||||
<label style="display:flex;gap:8px;align-items:center;font-weight:600;margin:0"><input type="checkbox" name="enabled" value="1" {{if .Settings.M2MAuto.Enabled}}checked{{end}}> Автоматический режим включён</label>
|
||||
|
||||
Reference in New Issue
Block a user