feat(lk-contract): OpenAPI контракт lk-gateway по ESIA Finance API V1

- docs/lk-contract/v1/openapi.yaml — OpenAPI 3.0: POST/GET/PATCH /api/v1/back_office/claims, схемы Claim/CreateClaimRequest/StatusCallback/ErrorResponse
- docs/lk-contract/v1/examples/claim-request.json — заявка с 3 ЦБ, ИИС T03
- docs/lk-contract/v1/examples/claim-response.json — ответ на создание
- docs/lk-contract/v1/examples/callback-confirmed.json — callback подтверждения
- docs/lk-contract/v1/examples/callback-rejected.json — callback отказа
- docs/lk-contract/v1/examples/error-422.json — ошибка валидации
- docs/lk-contract/v1/changelog.md — v1.0.0

Контракт предлагается команде реального ЛК как точка синхронизации.
В lk-emulator (отдельный PR) контракт реализуется как «как-будто-ЛК»
для проверки сквозного потока.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
fontvielle
2026-05-14 00:47:18 +03:00
parent 93bcbca12c
commit a040f8b07d
9 changed files with 911 additions and 13 deletions
@@ -0,0 +1,26 @@
{
"claim_id": "c02a1d5e-c2af-4799-bab4-953f133c5133",
"new_status": "confirmed",
"updated_at": "2026-03-02T14:38:12Z",
"nsd_response": {
"guid": "c02a1d5e-c2af-4799-bab4-953f133c5133",
"status_code": "INFO",
"responses": [
{
"reference_id": "M2M2026030200001",
"code": "01",
"text": "Запрос на перевод принят и подтверждён принимающей стороной."
},
{
"reference_id": "M2M2026030200002",
"code": "01",
"text": "Запрос на перевод принят и подтверждён принимающей стороной."
},
{
"reference_id": "M2M2026030200003",
"code": "01",
"text": "Запрос на перевод принят и подтверждён принимающей стороной."
}
]
}
}
@@ -0,0 +1,17 @@
{
"claim_id": "c02a1d5e-c2af-4799-bab4-953f133c5133",
"new_status": "rejected",
"reason_code": "07",
"reason_text": "Не найдена сделка с таким GUID на стороне принимающего депозитария.",
"updated_at": "2026-03-02T14:40:00Z",
"nsd_response": {
"guid": "c02a1d5e-c2af-4799-bab4-953f133c5133",
"status_code": "ERROR",
"responses": [
{
"code": "07",
"text": "Не найдена сделка с таким GUID."
}
]
}
}
@@ -0,0 +1,104 @@
{
"investor": {
"id": "11111111-1111-1111-1111-111111111111",
"last_name": "Иванов",
"first_name": "Иван",
"middle_name": "Иванович",
"document": {
"document_type": "21",
"series": "4512",
"number": "654321"
}
},
"transferring_depository_inn": "0702345678",
"receiving_depository_inn": "0710987654",
"cost_info": {
"yes": {
"code": "MC0010300032"
}
},
"iia_agreement": {
"agreement_type": "T03",
"agreement_number": "ИИС78/2024",
"agreement_date": "2026-01-15",
"broker_inn": "0707083893"
},
"securities": [
{
"security_code": "MM0766162534",
"security_details": {
"isin": "RU0007661625"
},
"quantity": {
"whole": 1500
},
"settlement_accounts": [
{
"settlement_requisites_inn": "7702070139",
"settlement_location": {
"deponent_code": "DP789456",
"account_id": "31MC0021900000F01",
"section_id": "P001"
}
},
{
"settlement_requisites_inn": "7802031669",
"settlement_location": {
"deponent_code": "AA789451",
"account_id": "33MC0021900000F02",
"section_id": "F002"
}
}
]
},
{
"security_code": "MM0907654321",
"security_details": {
"isin": "RU0009029540"
},
"quantity": {
"whole": 300
},
"settlement_accounts": [
{
"settlement_requisites_inn": "7702070139",
"settlement_location": {
"deponent_code": "DP789456",
"account_id": "31MC0021900000F01",
"section_id": "P001"
}
}
]
},
{
"security_code": "MM2300100100",
"security_details": {
"security_info": {
"classification": "MFUN",
"category": "UKWN",
"identification_details": {
"fund_shares": {
"reg_number": "23-001",
"class": "A"
}
}
}
},
"quantity": {
"fractional": "2500.75"
},
"settlement_accounts": [
{
"settlement_requisites_inn": "7702070139",
"settlement_location": {
"deponent_code": "DP789456",
"account_id": "31MC0021900000F01",
"section_id": "P001"
}
}
]
}
],
"signed_document": "PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0id2luZG93cy0xMjUxIj8+...base64-XML...",
"signature_format": "XMLDSig-GOST"
}
@@ -0,0 +1,6 @@
{
"id": "c02a1d5e-c2af-4799-bab4-953f133c5133",
"status": "submitted",
"created_at": "2026-03-02T14:30:45Z",
"success": true
}
@@ -0,0 +1,15 @@
{
"error": true,
"status": 422,
"code": "invalid_signature",
"title": "Подпись заявления не прошла проверку",
"meta": {
"message": "Сертификат подписанта недействителен или цепочка доверия не построена.",
"errors": [
{
"field": "signed_document",
"message": "XMLDSig: certificate chain not trusted (signer CN = ИВАНОВ И.И.)."
}
]
}
}