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/m2mcore — ядро бизнес-логики M2M
Конечный автомат сделки, репозиторий, идемпотентность по GUID,
сборка M2MTransferRequest из заявки ЛК + данных Fansy, метрики SLA.
Состав
fsm.go— состояния FSM и матрица разрешённых переходов (Draft → Validated → SubmittedToNSD → AwaitingDecision → Confirmed → AwaitingSUB16 → Done, веткиRejected,TimedOut,ManualApproval).deal.go— доменная модельDealс явными методами переходов (Validate,Submit,ReceiveDecision,Timeout,SendToManualApproval,ApproveManually,RejectManually,CompleteSUB16). Каждый переход проверяет текущее состояние, пишет историю вStagesи фиксирует событие в журнале.uuid.go— генератор UUID v4 без внешних зависимостей.repo.go— портRepository+ in-memory реализацияMemoryRepositoryс идемпотентнымCreate(по GUID возвращает существующую сделку). PostgreSQL-реализация — задача M2 (миграция лежит вmigrations/m2m-core/001__deals.sql).ports.go— порты к внешним системам (NSDSender,LKCallbackClient,CryptoVerifier,FansyStore) с no-op заглушками для M1.enrich.go— функцияEnrichRequest: изClaimInput(заявка ЛК)- данных Fansy собирает валидный
M2MTransferRequest, генерируетGUIDиReferenceIDпо каждой ЦБ.
- данных Fansy собирает валидный
metrics.go— портRecorder+MemoryRecorder, отдающий Prometheus text-format. В M2 заменим наprometheus/client_golang, когда прокси откроет Go-модули.
Зависимости
Только stdlib и собственные пакеты internal/m2m, internal/nsdxml.
Никаких внешних модулей.
Тесты
fsm_test.go— переходы и терминальные состояния.repo_test.go— идемпотентность по GUID, фильтры вList.uuid_test.go— формат UUID v4 иReferenceID.metrics_test.go— Prometheus-текст.
Сервис cmd/m2m-core
cmd/m2m-core/main.go — HTTP-сервер с /healthz и /metrics,
in-memory репозиторий, no-op порты. Адрес из BJ_HTTP_ADDR
(по умолчанию :8081). В M2 будет заменено на реальные клиенты НРД
и crypto-service.