DEPO: ошибка в карточке перевода снимается, когда запись после возврата в очередь прошла
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -142,7 +142,7 @@
|
||||
Поэтому в НРД по заявке <b>ничего не отправлялось</b>: регистрация и блокировка в QUIK МНП идут <u>до</u> отправки пакета в НРД.<br>
|
||||
<span class="muted" style="color:inherit;opacity:.85">Ответ модуля QUIK: <code>{{.QuikFailReply}}</code></span>
|
||||
</div>{{end}}
|
||||
{{if .DepoL}}<div style="margin:8px 0 0;padding:8px 12px;border-radius:9px;font-size:13px;{{if .DepoL.Errors}}background:color-mix(in srgb,#dc2626 12%,var(--card));color:#b3261e{{else}}background:var(--card-2){{end}}">🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение <b>№{{.DepoL.DocNo}}</b> создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: <b>{{.DepoL.DocState}}</b>{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}<div>ошибка: {{.}}</div>{{end}}</div>{{end}}
|
||||
{{if .DepoL}}<div style="margin:8px 0 0;padding:8px 12px;border-radius:9px;font-size:13px;{{if .DepoL.Errors}}background:color-mix(in srgb,#dc2626 12%,var(--card));color:#b3261e{{else}}background:var(--card-2){{end}}">🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение <b>№{{.DepoL.DocNo}}</b> создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: <b>{{.DepoL.DocState}}</b>{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}<div>ошибка: {{.}}</div>{{end}}{{if and .DepoL.FixedErr (not .DepoL.Errors)}}<div class="muted" style="font-size:12px">была ошибка: {{.DepoL.FixedErr}} — после возврата в очередь обработано {{msk .DepoL.FixedAt}}</div>{{end}}</div>{{end}}
|
||||
|
||||
<p class="muted" style="font-size:12.5px;margin:6px 0 0">При отправке в НРД bj регистрирует в Модуле неторговых поручений «Вывод ЦБ (M2M)» — QUIK блокирует бумаги на позиции клиента. Отказ контрагента или НРД → поручение снимается с причиной (клиент видит её в терминале). Приём НРД нашего поручения 16 → подпись депозитария, бумаги списываются.</p>
|
||||
{{if not .Quik}}<p class="muted" style="margin-top:10px">Поручений МНП по этой заявке нет{{if .Claim.M2MGUID}} — можно зарегистрировать вручную:
|
||||
|
||||
@@ -381,7 +381,7 @@
|
||||
<h2 style="margin:0">QUIK МНП — зачисление бумаг клиенту</h2>
|
||||
<a href="/admin/quik" class="muted" style="font-size:12px">все поручения →</a>
|
||||
</div>
|
||||
{{if .DepoL}}<div style="margin:8px 0 0;padding:8px 12px;border-radius:9px;font-size:13px;{{if .DepoL.Errors}}background:color-mix(in srgb,#dc2626 12%,var(--card));color:#b3261e{{else}}background:var(--card-2){{end}}">🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение <b>№{{.DepoL.DocNo}}</b> создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: <b>{{.DepoL.DocState}}</b>{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}<div>ошибка: {{.}}</div>{{end}}</div>{{end}}
|
||||
{{if .DepoL}}<div style="margin:8px 0 0;padding:8px 12px;border-radius:9px;font-size:13px;{{if .DepoL.Errors}}background:color-mix(in srgb,#dc2626 12%,var(--card));color:#b3261e{{else}}background:var(--card-2){{end}}">🗂 DEPO (bj2depo): {{if .DepoL.DocNo}}поручение <b>№{{.DepoL.DocNo}}</b> создано {{msk .DepoL.DocAt}}{{if .DepoL.DocState}} · состояние в DEPO: <b>{{.DepoL.DocState}}</b>{{end}}{{else}}поручение ещё не создано{{end}}{{range .DepoL.Errors}}<div>ошибка: {{.}}</div>{{end}}{{if and .DepoL.FixedErr (not .DepoL.Errors)}}<div class="muted" style="font-size:12px">была ошибка: {{.DepoL.FixedErr}} — после возврата в очередь обработано {{msk .DepoL.FixedAt}}</div>{{end}}</div>{{end}}
|
||||
{{if .Rejected}}
|
||||
<p class="muted" style="font-size:12.5px;margin:10px 0 0">Зачисление в QUIK не требуется — перевод отклонён ({{.RejectCodes}}), бумаги клиенту не поступают.</p>
|
||||
{{else}}
|
||||
|
||||
Reference in New Issue
Block a user