Отказ сервиса M2M в ЛК — словами (наша расшифровка или текст НРД), M2M43; «передавать информацию о расходах» в QUIK — по заявке клиента
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014FsEKyJrYF69Cj9ZXzFLRi
This commit is contained in:
@@ -184,11 +184,7 @@ func (s *Server) applyIncoming(ctx context.Context, p igw.Package) error {
|
||||
// ERROR сервиса МОСТ — отказ: замыкаем на ЛК с человекочитаемой причиной.
|
||||
if strings.EqualFold(string(resp.StatusCode), "ERROR") {
|
||||
reason := "Отклонено сервисом MOEX МОСТ"
|
||||
if c := strings.TrimSpace(codes); c != "" {
|
||||
parts := make([]string, 0)
|
||||
for _, code := range strings.Fields(c) {
|
||||
parts = append(parts, m2mCodeLabel(code))
|
||||
}
|
||||
if parts := serviceErrorTexts(resp); len(parts) > 0 {
|
||||
reason = strings.Join(parts, "; ")
|
||||
}
|
||||
// Итог для заявки модуля ЛК (lk.transfer_requests): 'declined' — отказ после отправки в НРД.
|
||||
@@ -358,3 +354,27 @@ func saveHandbook(hb *m2m.M2MTransferHandbook) (changed bool) {
|
||||
}
|
||||
return changed
|
||||
}
|
||||
|
||||
// serviceErrorTexts — причины отказа сервиса M2M понятными словами: наша расшифровка кода, иначе текст
|
||||
// из ответа НРД (он есть в каждом Response), иначе сам код. Раньше неизвестный bj код уходил клиенту
|
||||
// в ЛК голым («M2M43»).
|
||||
func serviceErrorTexts(resp *m2m.M2MTransferResponse) []string {
|
||||
var parts []string
|
||||
seen := map[string]bool{}
|
||||
for _, rr := range resp.Responses {
|
||||
code := strings.TrimSpace(rr.Code)
|
||||
if code == "" || seen[code] {
|
||||
continue
|
||||
}
|
||||
seen[code] = true
|
||||
switch {
|
||||
case m2mCodeText(code) != "":
|
||||
parts = append(parts, m2mCodeLabel(code))
|
||||
case strings.TrimSpace(rr.Text) != "":
|
||||
parts = append(parts, strings.TrimSpace(rr.Text)+" ("+code+")")
|
||||
default:
|
||||
parts = append(parts, code)
|
||||
}
|
||||
}
|
||||
return parts
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user