Files
fontvielle af60277411 Анкета участника M2M: отправка в НРД через ИШ пакетом #M2MPF
НРД открыл приём анкеты (M2MTransferParticipantForm) в пром-контуре.
По формату НРД анкета — отдельный тип ЭД M2MPF: тег <package> = "#" +
первые 5 символов имени типа ЭД → "#M2MPF", businessLine=MOST (как и
остальные M2M-сообщения; на ИШ <107.0.0.904 businessLine опускается).
Подпись — боевым ГОСТ-контейнером на стороне ИШ.

- nsdadapter/router.go: тип PackageM2MParticipantForm "#M2MPF";
  KindParticipantForm теперь маппится на него (был ошибочно
  Assets_investment).
- lkgateway/participant_form.go: действие send_igw — упаковка анкеты
  через igw.PackXML(..., "#M2MPF") и отправка igwClient.SendPackage в
  канал профиля (в боевом контуре — prod-gost). Кнопка «Отправить через
  шлюз (боевой ИШ)»; письмо на M2MOST@nsd.ru оставлено запасным каналом.
  Статус готовности ИШ на странице.
- lkgateway/server.go: проброс igwClient/igwChannel в registerParticipantForm.

Образец — sendHandbookRequest (#M2MHR) через тот же ИШ.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XG3zNMMf2LMoDpXo22mwMX
2026-10-16 13:07:40 +03:00
..

internal/nsdadapter — транспорт к НРД

Реализует m2mcore.NSDSender. Основной канал — Интеграционный шлюз (ИШ) НРД через REST API; ИШ сам подписывает и упаковывает пакеты ЭДО, нам XMLDSig не требуется. Резерв — WS ONYX (заглушка до PR-6).

Состав

  • igw/client.go — REST-клиент ИШ: SendPackage, GetStatus, ListIncoming. Body передаётся base64 в JSON, ретраи на 5xx и сетевые ошибки, 4xx не ретраится.
  • router.go — маршрутизация доменного типа сообщения в PackageType ЭДО (#M2MTR, #M2MTD, #M2MER, SUBBR/SUBER/SUB16, Assets_investment).
  • sender.go — реализация m2mcore.NSDSender: сериализует Request в windows-1251 через nsdxml.Marshal и шлёт в ИШ. Ответы НРД приходят асинхронно через входящий поллер.
  • config.go — профили guest-gost, guest-rsa, test3-gost, test3-rsa, prod-gost, prod-rsa (URL ИШ, канал, контейнер ключа, таймауты, retry).
  • onyx/onyx.go — скелет SOAP-клиента WS ONYX. Реальная реализация — после PR-6 (подпись через crypto-service).

cmd/nsd-adapter

cmd/nsd-adapter/main.go — сервис с HTTP /healthz и фоновым поллером входящих пакетов (ListIncoming по типам ЭДО из IncomingPackageKinds). Параметры:

  • BJ_HTTP_ADDR — адрес HTTP (по умолчанию :8082).
  • BJ_NSD_PROFILE — имя профиля. Если не задан — сервис стартует в режиме idle (только healthz, опрос отключён). Полезно для CI и смоук-тестов без реального ИШ.
  • BJ_NSD_POLL_INTERVAL — частота опроса, например 15s.

Принципы логирования

  • Логируем: метод, путь, HTTP-статус, package_id, длительность.
  • Не логируем тело пакета — там могут быть ПДн.
  • Маскировка ПДн в любых журналах — на стороне m2m-core при логировании content до отправки в адаптер.