diff --git a/internal/lkgateway/depoevents.go b/internal/lkgateway/depoevents.go index d53b15e..c758437 100644 --- a/internal/lkgateway/depoevents.go +++ b/internal/lkgateway/depoevents.go @@ -44,8 +44,12 @@ type DepoLink struct { DocState string `json:"doc_state,omitempty"` // состояние документа в DEPO (OD_DOCS.STATE → название) DocStateAt time.Time `json:"doc_state_at,omitempty"` Errors []string `json:"errors,omitempty"` // DEPO_ERROR - LastEvent string `json:"last_event,omitempty"` - UpdatedAt time.Time `json:"updated_at"` + // FixedErr/FixedAt — последняя ошибка, после которой запись прошла (вернули в очередь): в карточке — + // серой строкой вместо красной плашки. + FixedErr string `json:"fixed_err,omitempty"` + FixedAt time.Time `json:"fixed_at,omitempty"` + LastEvent string `json:"last_event,omitempty"` + UpdatedAt time.Time `json:"updated_at"` } type depoLinkStore struct { @@ -540,6 +544,13 @@ func depoPollOrders(ctx context.Context, db *sql.DB, rc *RuntimeConfig) { globalDepoLinks.update(guid, func(x *DepoLink) { x.DocNo, x.DocAt, x.LastEvent = doc, time.Now(), "FTV_M2M.DOC" }) log.Printf("depo-events: DEPO создала поручение по %s: %s", shortGUID(guid), doc) } + // запись прошла после ошибки (депозитарий вернул её в очередь) — ошибка устранена + if state == "SUCCESS" && lineErr == "" && l != nil && len(l.Errors) > 0 { + globalDepoLinks.update(guid, func(x *DepoLink) { + x.FixedErr, x.FixedAt, x.Errors = x.Errors[len(x.Errors)-1], time.Now(), nil + }) + log.Printf("depo-events: перевод %s обработан в DEPO после ошибки — ошибка снята", shortGUID(guid)) + } if state == "ERROR" || lineErr != "" { msg := strings.TrimSpace(comment + " " + lineErr) if l == nil || len(l.Errors) == 0 || !strings.HasSuffix(l.Errors[len(l.Errors)-1], msg) { diff --git a/internal/lkgateway/web/templates/admin_claim.html b/internal/lkgateway/web/templates/admin_claim.html index a478432..1b160d6 100644 --- a/internal/lkgateway/web/templates/admin_claim.html +++ b/internal/lkgateway/web/templates/admin_claim.html @@ -142,7 +142,7 @@ Поэтому в НРД по заявке ничего не отправлялось: регистрация и блокировка в QUIK МНП идут до отправки пакета в НРД.
Ответ модуля QUIK: {{.QuikFailReply}} {{end}} -{{if .DepoL}}
🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение №{{.DepoL.DocNo}} создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: {{.DepoL.DocState}}{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}
ошибка: {{.}}
{{end}}
{{end}} +{{if .DepoL}}
🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение №{{.DepoL.DocNo}} создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: {{.DepoL.DocState}}{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}
ошибка: {{.}}
{{end}}{{if and .DepoL.FixedErr (not .DepoL.Errors)}}
была ошибка: {{.DepoL.FixedErr}} — после возврата в очередь обработано {{msk .DepoL.FixedAt}}
{{end}}
{{end}}

При отправке в НРД bj регистрирует в Модуле неторговых поручений «Вывод ЦБ (M2M)» — QUIK блокирует бумаги на позиции клиента. Отказ контрагента или НРД → поручение снимается с причиной (клиент видит её в терминале). Приём НРД нашего поручения 16 → подпись депозитария, бумаги списываются.

{{if not .Quik}}

Поручений МНП по этой заявке нет{{if .Claim.M2MGUID}} — можно зарегистрировать вручную: diff --git a/internal/lkgateway/web/templates/admin_incoming_detail.html b/internal/lkgateway/web/templates/admin_incoming_detail.html index 2b1b513..0f611f1 100644 --- a/internal/lkgateway/web/templates/admin_incoming_detail.html +++ b/internal/lkgateway/web/templates/admin_incoming_detail.html @@ -381,7 +381,7 @@

QUIK МНП — зачисление бумаг клиенту

все поручения → -{{if .DepoL}}
🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение №{{.DepoL.DocNo}} создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: {{.DepoL.DocState}}{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}
ошибка: {{.}}
{{end}}
{{end}} +{{if .DepoL}}
🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение №{{.DepoL.DocNo}} создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: {{.DepoL.DocState}}{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}
ошибка: {{.}}
{{end}}{{if and .DepoL.FixedErr (not .DepoL.Errors)}}
была ошибка: {{.DepoL.FixedErr}} — после возврата в очередь обработано {{msk .DepoL.FixedAt}}
{{end}}
{{end}} {{if .Rejected}}

Зачисление в QUIK не требуется — перевод отклонён ({{.RejectCodes}}), бумаги клиенту не поступают.

{{else}}