docs: план проекта + промпты задач PR-1..PR-6 для Claude Code на ВМ
- docs/architecture/plan.md — полный план проекта (архитектура, стек, SLA, регуляторика, Реестр ПО, roadmap M1–M5, открытые вопросы и решения). - docs/tasks/README.md — индекс задач и инструкция запуска для Claude Code на dev-ВМ. - docs/tasks/PR-1-go-models-m2m.md — Go-модели M2M, парсер windows-1251, NSDDateTime, round-trip тесты на эталонах. - docs/tasks/PR-2-fansy-ddl.md — DDL принимающей БД для команды Fansy (контракт данных, ETL-требования, словарь полей, тестовые данные). - docs/tasks/PR-3-lk-openapi.md — OpenAPI контракт lk-gateway по ESIA Finance API V1, для синхронизации с командой ЛК. - docs/tasks/PR-4-m2m-core-skeleton.md — FSM сделки, репозиторий, идемпотентность по GUID, метрики SLA. - docs/tasks/PR-5-nsd-adapter-skeleton.md — REST-клиент ИШ НРД, маршрутизация типов пакетов (M2MTR/M2MTD/M2MER/SUBBR/SUBER/SUB16). - docs/tasks/PR-6-crypto-service-skeleton.md — gRPC-каркас Java-сервиса криптографии (КриптоПро JCP, UDS, Provider-абстракция). С этого коммита дальнейшая разработка идёт на dev-ВМ через запущенный там Claude Code. Промпты PR-1..PR-3 готовы к параллельному запуску; PR-4 после PR-1; PR-5 и PR-6 ждут поставку артефактов (ИШ НРД, сертификаты, КриптоПро JCP). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,132 @@
|
||||
# PR-5: Каркас `nsd-adapter` — клиент к ИШ НРД (REST), резерв через WS ONYX
|
||||
|
||||
## Цель
|
||||
|
||||
Реализовать транспорт к НРД. Основной канал — Интеграционный шлюз НРД
|
||||
через REST API (ИШ сам подписывает и упаковывает пакеты ЭДО, нам
|
||||
XMLDSig не нужен). Резерв — WS ONYX (с подписью на нашей стороне через
|
||||
`crypto-service`, реализуется когда КриптоПро JCP будет доступен).
|
||||
|
||||
## Зависимости
|
||||
|
||||
- PR-1 (Go-модели).
|
||||
- PR-4 (`m2m-core` — туда инжектим `NSDSender`).
|
||||
- Внешние: установленный ИШ НРД на ВМ, тестовые сертификаты GUEST/TEST3.
|
||||
|
||||
## Состояние блокеров
|
||||
|
||||
Этот PR можно начать **только после**:
|
||||
|
||||
- НРД выдал тестовые сертификаты GUEST/TEST3 (ГОСТ или RSA);
|
||||
- получен и установлен дистрибутив Интеграционного шлюза;
|
||||
- доступен REST-эндпоинт ИШ (обычно `http://localhost:8080/api/...`).
|
||||
|
||||
До этого — оставить PR-5 в очереди, не блокировать другие PR.
|
||||
|
||||
## Источники
|
||||
|
||||
- `DOC/Инструкция по передаче эталонного запроса на перевод M2M 08.04 (1).pdf`
|
||||
- `DOC/Презентация MOEX MOST.pdf`
|
||||
- `DOC/instr_podkl_stend_v3.pdf`
|
||||
- `DOC/Ссылки для доступа в тестовые контуры.pdf`
|
||||
|
||||
## Состав PR
|
||||
|
||||
### 1. REST-клиент ИШ
|
||||
|
||||
`internal/nsdadapter/igw/client.go`:
|
||||
|
||||
Методы:
|
||||
- `SendPackage(ctx, channel, packageType, body []byte) (packageID string, err error)`
|
||||
→ `POST /api/package/{channel}/file`, тело: ZIP в base64 в JSON.
|
||||
- `GetStatus(ctx, packageID) (Status, err error)`
|
||||
→ `GET /api/package/status/{id}`.
|
||||
- `ListIncoming(ctx, channel, since time.Time, packageType string) ([]Package, error)`
|
||||
→ `GET /api/package?channel=&date=&type=...`.
|
||||
|
||||
Поддержка типов пакетов: `#M2MTR`, `#M2MTD`, `#M2MER`, `SUBBR`, `SUBER`,
|
||||
`SUB16`, Assets_investment_*, стандартные квитанции ЭДО.
|
||||
|
||||
### 2. Маршрутизация и пакетирование
|
||||
|
||||
`internal/nsdadapter/router.go`:
|
||||
|
||||
Функция «доменное сообщение → тип пакета ЭДО + содержимое ZIP».
|
||||
|
||||
Каждое сообщение M2M упаковывается в ZIP вместе с `config.xml` по
|
||||
Правилам ЭДО — но если ИШ работает в режиме «принимаю XML, сам
|
||||
формирую пакет», достаточно отправить чистый XML и тип пакета.
|
||||
|
||||
### 3. Реализация `NSDSender` из PR-4
|
||||
|
||||
`internal/nsdadapter/sender.go`:
|
||||
|
||||
Реализует интерфейс `m2mcore.NSDSender`, использует REST-клиент ИШ.
|
||||
|
||||
### 4. Конфигурация
|
||||
|
||||
`internal/nsdadapter/config.go`:
|
||||
|
||||
Профили: `guest-gost`, `guest-rsa`, `test3-gost`, `test3-rsa`,
|
||||
`prod-gost`, `prod-rsa`.
|
||||
|
||||
Каждый профиль: URL ИШ, путь к ключевому контейнеру (на стороне ИШ),
|
||||
таймауты, retry-политика.
|
||||
|
||||
### 5. Резервный канал WS ONYX (опц., если время позволяет)
|
||||
|
||||
`internal/nsdadapter/onyx/`:
|
||||
|
||||
SOAP-клиент к `OnyxEdoWSService`. Подпись пакета через
|
||||
`crypto-service` (gRPC). Реализуется когда `crypto-service` будет
|
||||
готов (PR-6).
|
||||
|
||||
В PR-5 — структуры и заглушка с TODO.
|
||||
|
||||
### 6. Опрос входящих
|
||||
|
||||
`cmd/nsd-adapter/main.go`:
|
||||
|
||||
Минимальный сервис: каждые N секунд (конфиг) делает
|
||||
`ListIncoming` для актуальных типов пакетов, скачивает новые,
|
||||
сохраняет в БД (`incoming_packages` таблица), эмитит событие в
|
||||
`m2m-core` через шину или прямой вызов.
|
||||
|
||||
### 7. Интеграционный тест на стенде
|
||||
|
||||
`internal/nsdadapter/igw/integration_test.go`:
|
||||
|
||||
- Помечен `//go:build integration`.
|
||||
- Запускает эталонный запрос из
|
||||
`DOC/Инструкция по передаче эталонного запроса на перевод M2M 08.04 (1).pdf`
|
||||
на TEST3.
|
||||
- Проверяет, что приходит `#M2MTD` (от тестового брокера 2) или
|
||||
`#M2MER` (тех. ошибка).
|
||||
- Поднимается только когда `BJ_INTEGRATION_TEST_NSD=1`.
|
||||
|
||||
## Требования
|
||||
|
||||
- Логировать каждое обращение к ИШ (метод, URL, HTTP-статус,
|
||||
package_id, длительность). **Не логировать содержимое пакета**
|
||||
(там могут быть ПДн).
|
||||
- Маскировать ПДн (ФИО, документы) в любых логах.
|
||||
- Без эмодзи.
|
||||
|
||||
## Коммит
|
||||
|
||||
```
|
||||
feat(nsd-adapter): REST-клиент ИШ НРД + маршрутизация типов пакетов
|
||||
|
||||
- internal/nsdadapter/igw/: REST-клиент ИШ (SendPackage, GetStatus, ListIncoming)
|
||||
- internal/nsdadapter/router.go: маршрутизация по типам пакетов ЭДО
|
||||
- internal/nsdadapter/sender.go: реализация m2mcore.NSDSender
|
||||
- internal/nsdadapter/config.go: профили GUEST/TEST3/PROD x ГОСТ/RSA
|
||||
- internal/nsdadapter/onyx/: каркас резервного канала WS ONYX
|
||||
- cmd/nsd-adapter/main.go: опрос входящих пакетов
|
||||
|
||||
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
||||
```
|
||||
|
||||
## После коммита
|
||||
|
||||
Обновить `docs/tasks/README.md`: PR-5 — «выполнено».
|
||||
Reference in New Issue
Block a user