# 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`).