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:
zuevav
2026-05-13 22:48:21 +03:00
parent d5b5597c67
commit 3fdc526031
8 changed files with 1651 additions and 0 deletions
+113
View File
@@ -0,0 +1,113 @@
# PR-3: OpenAPI контракт `lk-gateway` (ESIA Finance API V1)
## Цель
Зафиксировать REST-контракт между `lk-gateway` (наш сервис) и ЛК
клиента на платформе ESIA Finance. Контракт — отправная точка для:
- собственного эмулятора ЛК (`lk-emulator`, PR будет позже);
- интеграции с командой реального ЛК (когда формы документа на
стороне ЛК будут готовы).
## Источники правды
- `DOC/API ЛК ЕСИА.pdf` — официальное описание API V1 платформы
ESIA Finance (`/api/v1/back_office/...`, Basic HTTP, JSON, UTF-8).
- `DOC/M2MSchemas_260408/*.xsd` — поля заявления должны быть
достаточны для формирования `M2MTransferRequest`.
## Состав PR
### 1. `docs/lk-contract/v1/openapi.yaml`
Спецификация OpenAPI 3.0. Покрывает следующие операции:
- `POST /api/v1/back_office/claims/` — создание заявки на M2M-перевод.
- Тело: подписанное заявление инвестора (XML или JSON, согласовать
с командой ЛК; XML с XMLDSig — предпочтительнее, проще
верифицировать на нашей стороне через `crypto-service`).
- Ответ: `{ id, status, created_at, success: true }`.
- `GET /api/v1/back_office/claims/{id}` — получение заявки и её
статуса.
- `PATCH /api/v1/back_office/claims/{id}` — обновление статуса от
нашей стороны (callback).
- `GET /api/v1/back_office/claims` — список заявок (фильтры по статусу,
периоду, инвестору).
- Аутентификация: Basic HTTP (как в API V1 ESIA Finance).
- Формат ошибок — как в `API ЛК ЕСИА.pdf`:
`{ error: true, status, code, title, meta: { message, errors } }`.
### 2. Состав модели «Заявка»
Минимальный набор полей, нужный для формирования
`M2MTransferRequest`:
- `id` (uuid),
- `created_at`, `updated_at`,
- `status` — enum (`draft|signed|submitted|in_progress|confirmed|rejected|timed_out`),
- `investor` — ссылка на пользователя в ЛК (или встроенные ФИО+документ);
- `transferring_depository_inn`, `receiving_depository_inn`,
- `securities[]` — список с `security_code`, `isin` (или
`security_info`), `quantity_whole|fractional`, `settlement_accounts[]`,
- `cost_info``yes { code } | no`,
- `iia_agreement` (опц., для ИИС) — `agreement_type T12|T03`,
`agreement_number`, `agreement_date`, `broker_inn`,
- `signed_document` (base64) — подписанный XML заявления,
- `signature_format``XMLDSig-GOST` или `XMLDSig-RSA`.
### 3. Состав модели «Callback статуса»
Что мы отправляем обратно в ЛК:
- `claim_id`,
- `new_status` (по тому же enum),
- `reason_code` (для отказов — код причины из M2MTransferResponse),
- `reason_text`,
- `updated_at`,
- `nsd_response` — оригинал ответа НРД (опц., для аудита).
### 4. `docs/lk-contract/v1/examples/`
- `examples/claim-request.json` — пример заявки на перевод
(3 ЦБ, ИИС, заполненные реквизиты).
- `examples/claim-response.json` — пример ответа.
- `examples/callback-confirmed.json` — пример callback подтверждения.
- `examples/callback-rejected.json` — пример callback отказа.
- `examples/error-422.json` — пример ошибки валидации.
### 5. `docs/lk-contract/v1/changelog.md`
Версионирование контракта. Первая запись — `v1.0.0`.
### 6. Обновить `docs/lk-contract/v1/README.md`
Описать состав, способ работы и порядок согласования с командой ЛК.
## Требования к коду
- OpenAPI 3.0.x, валидный по `spectral` или `openapi-cli`.
- Имена операций (operationId) — `snake_case`.
- Описания (description) — на русском.
- Все поля с `description` и примерами.
- Без эмодзи.
## Коммит
```
feat(lk-contract): OpenAPI контракт lk-gateway по ESIA Finance API V1
- docs/lk-contract/v1/openapi.yaml — спецификация
- docs/lk-contract/v1/examples/ — примеры запросов/ответов/callback
- docs/lk-contract/v1/changelog.md — v1.0.0
Контракт предлагается команде реального ЛК как точка синхронизации.
В lk-emulator (отдельный PR) контракт реализуется как «как-будто-ЛК»
для проверки сквозного потока.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
```
## После коммита
1. Обновить `docs/tasks/README.md`: PR-3 — «выполнено».
2. Сообщить заказчику, что OpenAPI готов и можно отправлять команде ЛК.