Анкета участника: ловить ответ НРД (M2MER с нулевым GUID) и показывать отправку/ответ

Ответ НРД на анкету приходит как M2MTransferResponse (M2MER) с нулевым GUID —
раньше он уходил в обработку перевода, «сделка не найдена», и отбрасывался.
Теперь нулевой GUID распознаётся как ответ на регистрацию участника:
- сырой XML сохраняется (captureNSDReply → nsd-replies);
- отправка анкеты и ответ НРД пишутся в participant-reg.json (время, пакет,
  наименование, статус, коды, текст НРД);
- на странице «Регистрация участника M2M» показываем: когда отправили и вердикт
  НРД («принял»/«отклонил» с текстом, напр. M2M37 «Некорректно указано
  наименование участника в анкете»).
Текст берётся из самого ответа (serviceErrorTexts) — карту кодов не трогаем.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Q7eREaYwUt1i4fNLZcGnjn
This commit is contained in:
fontvielle
2026-10-21 18:01:50 +03:00
parent 416f9bdcd5
commit 07866526eb
4 changed files with 121 additions and 6 deletions
+10
View File
@@ -176,6 +176,16 @@ func (s *Server) applyIncoming(ctx context.Context, p igw.Package) error {
}
log.Printf("lk-gateway: поллер M2MTransferResponse id=%d: статус=%s коды=[%s] GUID=%s",
p.ID, resp.StatusCode, strings.TrimSpace(codes), resp.GUID)
if gs := string(resp.GUID); gs == "" || gs == zeroGUID {
// Нулевой GUID — ответ не на перевод (сделки нет), а на регистрацию участника
// (анкета #M2MPF) или служебное сообщение сервиса МОСТ. Фиксируем и показываем
// на странице анкеты, а не отбрасываем как «сделка не найдена».
raw, _ := captureNSDReply(p, unpacked.DocXML, "participant-form")
recordParticipantReply(string(resp.StatusCode), resp, raw)
log.Printf("lk-gateway: поллер ОТВЕТ НРД на анкету участника id=%d: %s [%s] %q (сохранён %s)",
p.ID, resp.StatusCode, strings.TrimSpace(codes), strings.Join(serviceErrorTexts(resp), "; "), raw)
return nil
}
if err := s.svc.ApplyServiceResponse(ctx, resp, unpacked.DocXML); err != nil {
// Сделка может быть не найдена (ответ на чужой/старый GUID) —
// логируем, но помечаем обработанным, чтобы не зациклиться.