Справочник: выгрузка XML в подлинном формате НРД; фикс ошибочного FIFO-сопоставления ответа

1) XML-выгрузка справочника (/admin/handbook → XML) теперь в формате НРД
   (hk:M2MTransferHandbook: SettlementPlaces/Participants, Rus/Eng,
   Depository/BrokerPlace). Поллер сохраняет подлинный XML от НРД
   (writeHandbookRawXML → m2m-handbook.xml) и выгрузка отдаёт его как есть
   (windows-1251, байт в байт). Для установок без своего шлюза — реконструкция
   того же формата из плоского JSON (reconstructHandbookXML), проверено
   парсером НРД.

2) findDealForResponse: ответ сервиса МОСТ с конкретным GUID, которого нет
   среди ИСХОДЯЩИХ сделок (например M2M31 на наше решение по ВХОДЯЩЕМУ
   переводу), больше НЕ пришивается по эвристике FIFO к чужой исходящей
   заявке и не отклоняет её ошибочно. FIFO остаётся только для ответа с
   нулевым/пустым GUID (поведение НРД при M2M14).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-10-14 19:10:18 +03:00
parent c9ea6067fb
commit 567706e0a1
3 changed files with 142 additions and 49 deletions
+5 -1
View File
@@ -341,8 +341,12 @@ func (s *Service) findDealForResponse(ctx context.Context, resp *m2m.M2MTransfer
if !errors.Is(err, m2mcore.ErrNotFound) {
return nil, err
}
// GUID конкретный, но среди ИСХОДЯЩИХ сделок его нет — это сервисный ответ по
// чужому/входящему GUID (например M2M31 на наше решение по ВХОДЯЩЕМУ переводу).
// FIFO здесь ошибочно пометил бы не ту исходящую заявку — поэтому не угадываем.
return nil, m2mcore.ErrNotFound
}
// Fallback: ответ без идентифицируемого GUID.
// Fallback — ТОЛЬКО для ответа без идентифицируемого GUID (нулевой/пустой: поведение НРД при M2M14).
st := m2mcore.StateAwaitingDecision
deals, err := s.repo.List(ctx, m2mcore.Filter{State: &st, Limit: 200})
if err != nil {