Автоматический режим M2M и имитация QUIK МНП

Автоматический режим (Настройка → НРД, выключен по умолчанию): входящие переводы — решение по свежей
сверке с DEPO без оператора (пакет только целиком; бумага для квал. инвесторов при неполной или
непрочитанной квалификации — отказ M2M08), поручение 16/1 — как только пришёл черновик MF010,
поручение 16 по исходящим — по черновику. Нет сверки или ИШ — повтор каждые 3 минуты и оповещение,
без сверки ничего не принимается. Обрабатывается только появившееся не раньше суток до включения
(старые черновики в INBOX не подаются). Решение не отправляется повторно по уже отвеченному переводу.

Имитация QUIK МНП (Настройка → QUIK МНП → цикл): регистрация, подпись, снятие и зачисление проходят
как выполненные с пометкой «имитация», в МНП ничего не пишется; события в DEPO — как обычно.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
zuevav
2026-09-16 14:59:23 +03:00
parent 4b62d00ac2
commit d47229c9a5
12 changed files with 486 additions and 30 deletions
+5 -5
View File
@@ -45,7 +45,7 @@ func quikSecISIN(s m2m.RequestSecurity) string {
// ОТМЕНЯЕМ (нельзя переводить то, что не заблокировано).
func quikOutgoingBeforeSend(ctx context.Context, rc *RuntimeConfig, req *m2m.M2MTransferRequest) error {
q := rc.Snapshot().Quik
if !q.WritesEnabled || !q.AutoOut || req == nil {
if !quikActive(q) || !q.AutoOut || req == nil {
return nil
}
guid := string(req.Header.GUID)
@@ -89,7 +89,7 @@ func quikOutgoingBeforeSend(ctx context.Context, rc *RuntimeConfig, req *m2m.M2M
// quikOnDecision — ответ контрагента: по отказанным бумагам снимаем поручения.
func quikOnDecision(ctx context.Context, rc *RuntimeConfig, svc *Service, decision *m2m.M2MTransferDecision) {
q := rc.Snapshot().Quik
if !q.WritesEnabled || !q.AutoOut || decision == nil {
if !quikActive(q) || !q.AutoOut || decision == nil {
return
}
guid := string(decision.Header.GUID)
@@ -120,7 +120,7 @@ func quikOnDecision(ctx context.Context, rc *RuntimeConfig, svc *Service, decisi
// quikOnServiceError — сервис МОСТ отверг перевод целиком: снимаем все поручения.
func quikOnServiceError(ctx context.Context, rc *RuntimeConfig, guid, reason string) {
q := rc.Snapshot().Quik
if !q.WritesEnabled || !q.AutoOut {
if !quikActive(q) || !q.AutoOut {
return
}
for _, l := range globalQuikLinks.ForGUID(guid) {
@@ -148,7 +148,7 @@ func orderRespVerdict(resps []orderResponse) (done, rejected bool, text string)
// quikCycleTick — один проход опросчика.
func quikCycleTick(ctx context.Context, rc *RuntimeConfig) {
q := rc.Snapshot().Quik
if !q.WritesEnabled || q.Server == "" {
if !quikActive(q) || q.Server == "" {
return
}
// исходящие: наше поручение 16 принято НРД → подпись; отказ → снятие
@@ -303,7 +303,7 @@ func registerQuikOps(mux *http.ServeMux, rc *RuntimeConfig, svc *Service) {
}
guid, isin, op := strings.TrimSpace(r.FormValue("guid")), strings.TrimSpace(r.FormValue("isin")), r.FormValue("op")
q := rc.Snapshot().Quik
if !q.WritesEnabled {
if !quikActive(q) {
flash("QUIK МНП: записи в МНП выключены (Настройка → QUIK МНП → Автоматический цикл)")
return
}