5fa6ea6ab1
Реализован внутренний робот-эмулятор в internal/nsdadapter/mock/robot.go.
Источник правил: DOC/instruktsiya-po-testirovaniyu-s-robotom.pdf (от
12.05.2026). Когда mock.Sender видит Header.ReceiverCode == MC0012500000
и DocumentSeries в {1111, 2001, 2002, 3333} — формирует Decision по
выбранному сценарию вместо default-логики.
Сценарии:
- 1111 «Ответ с отказом»: все бумаги Rejection, код ошибки берётся из
последних 2 символов DocumentNumber (01..09 → M2M01..M2M09)
- 2001 «Принять все бумаги»: все Confirmation; i-й символ DocumentNumber
= номер депозитария-получателя для i-й секции (1/2)
- 2002 «Принять частично»: 0 = отклонить с M2M05, иначе номер депозитария
- 3333 «Выступить принимающей стороной»: пока только первое сообщение
(отказ M2M05). Встречный M2MTransferRequest от робота — TODO
(требует приёмной стороны bj-server)
Тестовые наборы депозитариев (ИНН 7702165310, depcode MC0012500000,
счёт HL2603250011, разделы 31MC0012500000F00 и 36MC0012500000F00)
зашиты в robotDepositary — соответствуют таблице из инструкции.
Help-страница /admin/help/robot с полным описанием: коды робота,
сценарии, управление через DocumentNumber, тестовые данные, коды ошибок
M2M01-M2M09, как переключиться на реальный TEST3 после получения ИШ.
REPORT.md — сводный отчёт для руководства о ходе работ: ~65% общей
готовности системы, ~80% готовности к интеграционному тесту с роботом
(остальное — внешние блокеры: дистрибутив ИШ, сертификат УЦ МБ).
Расписан план первичного тестирования после получения ИШ — 2-3 недели
до продакшена.
.gitignore: исключены DOC/*.pdf.bak (бэкапы doc-watcher'a).
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 до отправки в адаптер.