feat: живой цикл M2M с НРД + мастер установки ключа на флешку

Инфраструктура 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>
This commit is contained in:
zuevav
2026-06-19 00:03:21 +03:00
parent 6e503433d4
commit 9737c787f9
110 changed files with 10771 additions and 1690 deletions
@@ -0,0 +1,119 @@
<?xml version="1.0" encoding="windows-1251"?>
<M2MTransferRequest xmlns="http://nsd.ru/schemas/m2m/request">
<Header xmlns="http://nsd.ru/schemas/m2m/request">
<GUID xmlns="http://nsd.ru/schemas/m2m/types">b26440be-8a1e-4403-a35e-bc9df0da4a33</GUID>
<CreationTimestamp xmlns="http://nsd.ru/schemas/m2m/types">2026-06-18T13:13:50(МСК)</CreationTimestamp>
<SenderCode xmlns="http://nsd.ru/schemas/m2m/types">MC0413600000</SenderCode>
<ReceiverCode xmlns="http://nsd.ru/schemas/m2m/types">MC0012500000</ReceiverCode>
<CostInfo xmlns="http://nsd.ru/schemas/m2m/types">
<Yes xmlns="http://nsd.ru/schemas/m2m/types">
<Code xmlns="http://nsd.ru/schemas/m2m/types">MC0413600000</Code>
</Yes>
</CostInfo>
</Header>
<Data xmlns="http://nsd.ru/schemas/m2m/request">
<IsM2M xmlns="http://nsd.ru/schemas/m2m/types">true</IsM2M>
<InvestorInformation xmlns="http://nsd.ru/schemas/m2m/types">
<LastName xmlns="http://nsd.ru/schemas/m2m/types">Петров</LastName>
<FirstName xmlns="http://nsd.ru/schemas/m2m/types">Пётр</FirstName>
<MiddleName xmlns="http://nsd.ru/schemas/m2m/types">Петрович</MiddleName>
<IdentityDocument xmlns="http://nsd.ru/schemas/m2m/types">
<DocumentType xmlns="http://nsd.ru/schemas/m2m/types">21</DocumentType>
<DocumentSeries xmlns="http://nsd.ru/schemas/m2m/types">2001</DocumentSeries>
<DocumentNumber xmlns="http://nsd.ru/schemas/m2m/types">111111</DocumentNumber>
</IdentityDocument>
</InvestorInformation>
<TransferringDepository xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7702165310</INN>
</TransferringDepository>
<ReceivingDepository xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7722061076</INN>
</ReceivingDepository>
<TransferredSecurities xmlns="http://nsd.ru/schemas/m2m/types">
<Security xmlns="http://nsd.ru/schemas/m2m/types">
<ReferenceId xmlns="http://nsd.ru/schemas/m2m/types">M2M20260618RGVNK</ReferenceId>
<SecurityCode xmlns="http://nsd.ru/schemas/m2m/types">RU0007661625</SecurityCode>
<SecurityDetails xmlns="http://nsd.ru/schemas/m2m/types">
<ISIN xmlns="http://nsd.ru/schemas/m2m/types">RU0007661625</ISIN>
</SecurityDetails>
<Quantity xmlns="http://nsd.ru/schemas/m2m/types">
<Whole xmlns="http://nsd.ru/schemas/m2m/types">1</Whole>
</Quantity>
<SettlementAccount xmlns="http://nsd.ru/schemas/m2m/types">
<SettlementRequisites xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7702070139</INN>
</SettlementRequisites>
<SettlementLocation xmlns="http://nsd.ru/schemas/m2m/types">
<DeponentCode xmlns="http://nsd.ru/schemas/m2m/types">DP100200</DeponentCode>
<AccountId xmlns="http://nsd.ru/schemas/m2m/types">31MC0010000000A01</AccountId>
<SectionId xmlns="http://nsd.ru/schemas/m2m/types">A001</SectionId>
</SettlementLocation>
</SettlementAccount>
<IsolationStatus xmlns="http://nsd.ru/schemas/m2m/types">SGDN</IsolationStatus>
</Security>
<Security xmlns="http://nsd.ru/schemas/m2m/types">
<ReferenceId xmlns="http://nsd.ru/schemas/m2m/types">M2M20260618G5DW6</ReferenceId>
<SecurityCode xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JP5V6</SecurityCode>
<SecurityDetails xmlns="http://nsd.ru/schemas/m2m/types">
<ISIN xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JP5V6</ISIN>
</SecurityDetails>
<Quantity xmlns="http://nsd.ru/schemas/m2m/types">
<Whole xmlns="http://nsd.ru/schemas/m2m/types">1</Whole>
</Quantity>
<SettlementAccount xmlns="http://nsd.ru/schemas/m2m/types">
<SettlementRequisites xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7702070139</INN>
</SettlementRequisites>
<SettlementLocation xmlns="http://nsd.ru/schemas/m2m/types">
<DeponentCode xmlns="http://nsd.ru/schemas/m2m/types">DP100200</DeponentCode>
<AccountId xmlns="http://nsd.ru/schemas/m2m/types">31MC0010000000A01</AccountId>
<SectionId xmlns="http://nsd.ru/schemas/m2m/types">A001</SectionId>
</SettlementLocation>
</SettlementAccount>
<IsolationStatus xmlns="http://nsd.ru/schemas/m2m/types">SGDN</IsolationStatus>
</Security>
<Security xmlns="http://nsd.ru/schemas/m2m/types">
<ReferenceId xmlns="http://nsd.ru/schemas/m2m/types">M2M20260618CTDHY</ReferenceId>
<SecurityCode xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JPKH7</SecurityCode>
<SecurityDetails xmlns="http://nsd.ru/schemas/m2m/types">
<ISIN xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JPKH7</ISIN>
</SecurityDetails>
<Quantity xmlns="http://nsd.ru/schemas/m2m/types">
<Whole xmlns="http://nsd.ru/schemas/m2m/types">1</Whole>
</Quantity>
<SettlementAccount xmlns="http://nsd.ru/schemas/m2m/types">
<SettlementRequisites xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7702070139</INN>
</SettlementRequisites>
<SettlementLocation xmlns="http://nsd.ru/schemas/m2m/types">
<DeponentCode xmlns="http://nsd.ru/schemas/m2m/types">DP100200</DeponentCode>
<AccountId xmlns="http://nsd.ru/schemas/m2m/types">31MC0010000000A01</AccountId>
<SectionId xmlns="http://nsd.ru/schemas/m2m/types">A001</SectionId>
</SettlementLocation>
</SettlementAccount>
<IsolationStatus xmlns="http://nsd.ru/schemas/m2m/types">SGDN</IsolationStatus>
</Security>
<Security xmlns="http://nsd.ru/schemas/m2m/types">
<ReferenceId xmlns="http://nsd.ru/schemas/m2m/types">M2M20260618HQZ1Q</ReferenceId>
<SecurityCode xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JPGP8</SecurityCode>
<SecurityDetails xmlns="http://nsd.ru/schemas/m2m/types">
<ISIN xmlns="http://nsd.ru/schemas/m2m/types">RU000A0JPGP8</ISIN>
</SecurityDetails>
<Quantity xmlns="http://nsd.ru/schemas/m2m/types">
<Whole xmlns="http://nsd.ru/schemas/m2m/types">1</Whole>
</Quantity>
<SettlementAccount xmlns="http://nsd.ru/schemas/m2m/types">
<SettlementRequisites xmlns="http://nsd.ru/schemas/m2m/types">
<INN xmlns="http://nsd.ru/schemas/m2m/types">7702070139</INN>
</SettlementRequisites>
<SettlementLocation xmlns="http://nsd.ru/schemas/m2m/types">
<DeponentCode xmlns="http://nsd.ru/schemas/m2m/types">DP100200</DeponentCode>
<AccountId xmlns="http://nsd.ru/schemas/m2m/types">31MC0010000000A01</AccountId>
<SectionId xmlns="http://nsd.ru/schemas/m2m/types">A001</SectionId>
</SettlementLocation>
</SettlementAccount>
<IsolationStatus xmlns="http://nsd.ru/schemas/m2m/types">SGDN</IsolationStatus>
</Security>
</TransferredSecurities>
</Data>
</M2MTransferRequest>
@@ -0,0 +1,9 @@
<?xml version="1.0" encoding="windows-1251" standalone="yes"?>
<M2MTransferResponse xmlns:ns2="http://nsd.ru/schemas/m2m/types" xmlns:ns3="http://nsd.ru/schemas/m2m/response">
<ns3:GUID>00000000-0000-0000-0000-000000000000</ns3:GUID>
<ns3:StatusCode>ERROR</ns3:StatusCode>
<ns3:Response>
<ns2:Code>M2M14</ns2:Code>
<ns2:Text>Код ЭДО НРД отправителя сообщения отсутствует в справочнике участников M2M</ns2:Text>
</ns3:Response>
</M2MTransferResponse>
@@ -0,0 +1,55 @@
ПАКЕТ ДЛЯ ТЕХПОДДЕРЖКИ НРД (сервис MOEX МОСТ / M2M)
====================================================
Цель: показать НРД, ЧТО мы отправляем роботу и КАКОЙ ответ получаем, чтобы
поддержка однозначно поняла суть обращения и подтвердила/выполнила регистрацию
нашего кода в справочнике участников M2M тестового контура.
НАШИ РЕКВИЗИТЫ
-------------
Депозитарный код (= Код ЭДО НРД отправителя): MC0413600000
Тестовый контур: TEST3 (ГОСТ-криптография)
Канал ИШ: TEST3MC0413600000
Период тестирования: 21.05.2026 — 01.09.2026
ЧТО МЫ ОТПРАВЛЯЕМ → файл 01_outgoing_M2MTransferRequest.xml
--------------------------------------------------------------
Тип документа: M2MTransferRequest (#M2MTR)
GUID запроса: b26440be-8a1e-4403-a35e-bc9df0da4a33
CreationTimestamp: 2026-06-18T13:13:50(МСК)
SenderCode: MC0413600000 (наш код ЭДО НРД)
ReceiverCode: MC0012500000 (тестовый робот НРД)
Сценарий робота: 2001 (DocumentSeries), «принять все бумаги»
Бумаг в пакете: 4
Пакет подписан Интеграционным шлюзом (ИШ) сертификатом УЦ МБ.
ЧТО ОТВЕЧАЕТ НРД → файл 02_incoming_M2MTransferResponse.xml
--------------------------------------------------------------
Тип документа: M2MTransferResponse (#M2MER), подпись НРД — VALID
GUID: 00000000-0000-0000-0000-000000000000 (нулевой)
StatusCode: ERROR
Код: M2M14
Текст: «Код ЭДО НРД отправителя сообщения отсутствует в
справочнике участников M2M»
СУТЬ ОБРАЩЕНИЯ И ВОПРОС К НРД
----------------------------
Технически обмен работает: запрос доходит до сервиса МОСТ, НРД его принимает,
проверяет нашу подпись и отвечает. Отказ — на уровне справочника участников:
наш код ЭДО MC0413600000 в справочнике участников M2M (тестовый контур) пока
отсутствует.
Просим:
1) подтвердить, что отправителем M2M для нашего контура должен выступать
именно депозитарный код MC0413600000 (либо сообщить корректный код);
2) зарегистрировать наш код в справочнике участников M2M тестового контура,
чтобы робот (MC0012500000) распознавал отправителя и возвращал
M2MTransferDecision вместо ошибки M2M14.
Для поиска нашего запроса на стороне НРД: GUID b26440be-8a1e-4403-a35e-bc9df0da4a33
(ответ M2M14 приходит с нулевым GUID, поэтому указываем GUID исходного запроса).
ВЛОЖЕНИЯ
--------
01_outgoing_M2MTransferRequest.xml — наш запрос (то, что мы отправляем)
02_incoming_M2MTransferResponse.xml — ответ НРД (M2M14)
@@ -0,0 +1,44 @@
Кому: M2MOST@nsd.ru
Копия: soed@nsd.ru
Тема: M2M Автотестирование (МОСТ): ошибка M2M14 — регистрация кода MC0413600000 в справочнике участников
Добрый день!
Проводим автотестирование сервиса MOEX МОСТ (перевод M2M) с роботом в тестовом
контуре TEST3. Технически обмен настроен и работает: запрос доходит до сервиса,
НРД проверяет подпись и отвечает. Однако робот возвращает отказ:
StatusCode: ERROR
Код: M2M14
Текст: «Код ЭДО НРД отправителя сообщения отсутствует в справочнике
участников M2M»
Наши реквизиты:
- Депозитарный код (Код ЭДО НРД отправителя): MC0413600000
- Тестовый контур: TEST3, ГОСТ-криптография
- Период тестирования: 21.05.2026 — 01.09.2026
- GUID нашего запроса для поиска на вашей стороне:
b26440be-8a1e-4403-a35e-bc9df0da4a33
(ответ M2M14 приходит с нулевым GUID, поэтому указываем GUID запроса)
Во вложении — фактический обмен, чтобы предметно видеть, что мы отправляем и
что получаем в ответ:
1) 01_outgoing_M2MTransferRequest.xml — наш запрос роботу (MC0012500000),
SenderCode=MC0413600000, сценарий 2001;
2) 02_incoming_M2MTransferResponse.xml — ваш ответ с кодом M2M14.
Просим:
1) подтвердить, что отправителем M2M для нашего контура должен выступать
именно депозитарный код MC0413600000 (либо сообщить корректный код);
2) зарегистрировать наш код в справочнике участников M2M тестового контура,
чтобы робот распознавал отправителя и возвращал M2MTransferDecision
вместо ошибки M2M14.
Если для этого требуется уточнить/дополнить онлайн-заявку на участие в
тестировании систем НРД (система МОСТ, тип «M2M Автотестирование») — подскажите,
пожалуйста, что именно поправить.
С уважением,
ЗАПОЛНИТЬ_ФИО, ЗАПОЛНИТЬ_ДОЛЖНОСТЬ
ЗАПОЛНИТЬ_ОРГАНИЗАЦИЯ
ЗАПОЛНИТЬ_КОНТАКТ (телефон / e-mail)