9737c787f9
Инфраструктура M2M (живой обмен с НРД через ИШ): - обработка M2MTransferResponse: ERROR(M2Mxx) → заявка Отклонена, сохранение ответа; INFO → ждём Decision; идемпотентность поллера - fallback-корреляция ответов с нулевым GUID (M2M14/M2M17) по FIFO - сырой XML ответа НРД в карточке заявки (для пересылки в ТП) - тестовый пакет роботу приведён к эталону m2m_robot_samples (CostInfo=Yes, 4 бумаги, IsolationStatus, DocumentSeries=сценарий); override паспорта - редирект из теста сразу в карточку заявки Мастер установки ключа Валидаты на флешку (admin/setup/keywizard): - пошаговый: загрузка .7z+пароль → выбор флешки → запись → справочник сертификатов (CRL) → перезапуск+проверка ИШ → готово - привилегированный воркер (bj-keymedia) в host-namespace через файл-обмен, bj-server остаётся в песочнице - сохранение структуры профиля архива (spr<N>), перечисление съёмных USB Прочее: - пакет-доказательство для ТП НРД + форма регистрации участника M2M - эталонные образцы робота (DOC/m2m_robot_samples) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
internal/m2m — доменные модели сообщений M2M
Go-модели, выровненные по XSD из DOC/M2MSchemas_260408/
(namespace http://nsd.ru/schemas/m2m/..., version 2026-04-08).
Что реализовано
- Все 6 типов сообщений M2M (
messages.go):M2MTransferRequest— запрос на перевод.M2MTransferDecision— решение принимающей стороны.M2MTransferResponse— тех. ответ НРД (StatusCode ∈ {INFO, ERROR}).M2MTransferHandbook+M2MTransferHandbookRequest— справочник участников.M2MTransferParticipantForm— карточка участника.
- Simple-типы и enum'ы из XSD (
types.go):DeponentCode,ReferenceID,ISIN,OrganizationINN,UUID,AccountID,SecurityCode,IdentityDocSerial,StatusCode,IIAContractType,SecurityClassification,SecurityCategory,IdentityDocumentCode,IsolationStatus. - Метод
Validate() errorна всех типах (validators.go). - Choice-типы реализованы как структуры с указателями на
взаимоисключающие поля:
CostInfo,Quantity,SecurityDetails,IdentificationDetails,DecisionTransfer. МетодValidateпроверяет «ровно одно поле задано» (ошибкаErrChoice). IsM2M=trueпроставляется автоматически вRequestData.MarshalXMLи не выносится в структуру.
Точные ограничения валидаторов
ReferenceID— длина 16,^M2M[A-Z0-9]{13}$.DeponentCode— 1..12 символов,^[A-Z0-9]+$.ISIN— длина 12,^[A-Z]{2}[A-Z0-9]{9}[0-9]$.OrganizationINN— ровно 10 цифр.UUID— 8-4-4-4-12 hex-символов с дефисами (XSD НРД не требует битов версии/варианта по RFC).SecurityCode— длина 12,^[0-9A-Z_/-]+$.IdentityDocSerial—^\S+$(от 1 символа, без пробельных).AccountID— 1..50 символов.- Перечисления валидируются как принадлежность к множеству значений из XSD.
Тесты
- Round-trip на всех XML из
DOC/Примеры/иDOC/Эталонные сообщения/(messages_test.go). - Юнит-тесты валидаторов на позитив и негатив (
TestValidatorsPositive,TestValidatorsNegative,TestChoiceValidators). - Покрытие — 73.9%.
Сериализация и парсинг — пакет internal/nsdxml (XML windows-1251 и
NSDDateTime).