> For the complete documentation index, see [llms.txt](https://sravni-labs-ru.gitbook.io/sravni-labs.ru-docs/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://sravni-labs-ru.gitbook.io/sravni-labs.ru-docs/kredity-dlya-biznesa-s-podpisaniem-dokumentov-na-storone-partnyora/tekhnicheskaya-dokumentaciya/diagramma-posledovatelnosti.md).

# Диаграмма последовательности

<figure><img src="https://50593582-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FJirQ7NMAgV06xt9qo9g2%2Fuploads%2F68BBoPRnsfv4GUNeF504%2Fimage.png?alt=media&amp;token=8e0155bf-1855-4f9f-afa7-02675df67a31" alt=""><figcaption></figcaption></figure>

```plantuml
@startuml
title Интеграция партнёра с API КДБ Сравни Лабс

autonumber

box #lightblue
participant "Партнёр" as Partner
end box

box #lightgreen
participant "КДБ API" as API
participant "OAuth 2.0" as OAuth
end box

== 1. Авторизация ==

Partner -> OAuth: POST /oauth2/token\nclient_credentials
OAuth --> Partner: 200 OK\naccess_token

== 2. Создание заявки ==

Partner -> API: POST /v1/orders\nДанные заявки
API --> Partner: 201 Created\norderId

== 3. Ожидание WAITING_FOR_DOCUMENTS ==

loop Пока status != WAITING_FOR_DOCUMENTS
    Partner -> API: GET /v1/orders/{orderId}
    API --> Partner: 200 OK\nstatus, анкета, pollAfterSeconds

    Partner -> Partner: Ожидание pollAfterSeconds
end

== 4. Загрузка документов ==

loop Для каждого документа
    Partner -> API: POST /v1/orders/{orderId}/documents\nmultipart/form-data\nentityId, sourceEntityId, docType, file
    API --> Partner: 201 Created
end

== 5. Подтверждение загрузки ==

Partner -> API: POST /v1/orders/{orderId}/accept
API -> API: Перевод заявки\nв статус IN_WORK
API --> Partner: 202 Accepted

== 6. Ожидание WAITING_FOR_SIGNATURE ==

loop Пока status != WAITING_FOR_SIGNATURE
    Partner -> API: GET /v1/orders/{orderId}
    API --> Partner: 200 OK\nstatus, анкета, documents[], pollAfterSeconds

    Partner -> Partner: Ожидание pollAfterSeconds
end

== 7. Получение документов для подписания ==

loop Для каждого fileId из documents[]
    Partner -> API: GET /v1/orders/{orderId}/documents/{fileId}/download
    API --> Partner: 200 OK\nБинарный файл
end

== 8. Подписание ==

Partner -> Partner: Подписание документов\nоткреплённой подписью

== 9. Передача подписей ==

loop Для каждого подписанного документа
    Partner -> API: POST /v1/orders/{orderId}/documents/sign\nmultipart/form-data\nfileId, signature
    API --> Partner: 201 Created\nsignatureId
end

== 10. Подтверждение загрузки подписей ==

Partner -> API: POST /v1/orders/{orderId}/accept
API -> API: Перевод заявки\nв статус IN_WORK
API --> Partner: 202 Accepted

== 11. Ожидание OFFERS_AVAILABLE ==

loop Пока status != OFFERS_AVAILABLE
    Partner -> API: GET /v1/orders/{orderId}
    API --> Partner: 200 OK\nstatus, анкета, offers[], pollAfterSeconds

    Partner -> Partner: Ожидание pollAfterSeconds
end

== 12. Выбор предложения ==

Partner -> Partner: Выбор одобренного\nofferId + creditOptions[].code

Partner -> API: POST /v1/orders/{orderId}/confirm\nofferId + creditOptions[].code
API -> API: Перевод заявки\nв статус OFFERS_APPROVED
API --> Partner: 202 Accepted

== 13. Ожидание CLOSED ==

loop Пока status != CLOSED
    Partner -> API: GET /v1/orders/{orderId}
    API --> Partner: 200 OK\nstatus, анкета, offers[], pollAfterSeconds

    Partner -> Partner: Ожидание pollAfterSeconds
end

@enduml
```

### Описание диаграммы текстом:

1. Авторизация партнёра\
   Получение Bearer-токена через OAuth 2.0 `client_credentials`\
   `POST /oauth2/token`
2. Создание заявки на кредит\
   `POST /v1/orders`\
   В ответе содержится `orderId` заявки для дальнейшей работы
3. Опрос состояния заявки до статуса `WAITING_FOR_DOCUMENTS`\
   `GET /v1/orders/{orderId}`\
   В ответе содержится анкета заявки и статус
4. Загрузка документов на статусе `WAITING_FOR_DOCUMENTS`\
   `POST /v1/orders/{orderId}/documents`\
   1 файл - 1 запрос\
   В тело запроса передаются id сущностей, тип документа и файл в бинарном формате
5. Подтверждение завершения загрузки документов\
   `POST /v1/orders/{orderId}/accept`\
   Заявка переводится в статус `IN_WORK`
6. Опрос состояния заявки до статуса `WAITING_FOR_SIGNATURE`\
   `GET /v1/orders/{orderId}`\
   В ответе содержится анкета заявки, статус и документы к подписанию
7. Загрузка документов для подписания\
   `GET /v1/orders/{orderId}/documents/{fileId}/download`\
   Необходимо загрузить все документы из массива `documents[]`\
   1 файл - 1 запрос\
   В ответе возвращается файл в бинарном формате
8. Подписание документов **откреплённой** подписью на стороне партнёра
9. Передача откреплённых подписей\
   `POST /v1/orders/{orderId}/documents/sign`\
   В теле запроса указывается fileId исходного документа и файл подписи в бинарном формате
10. Подтверждение завершения загрузки документов\
    `POST /v1/orders/{orderId}/accept`\
    Заявка переводится в статус `IN_WORK`
11. Опрос состояния заявки до статуса `OFFERS_AVAILABLE`\
    `GET /v1/orders/{orderId}`\
    В ответе содержится анкета заявки, статус и предложения от банков\
    У каждого предложения есть `offerId` и статус одобрение/отказ
12. Финальное подтверждение одобренного предложения от банка\
    `POST /v1/orders/{orderId}/confirm`\
    В теле запроса указывается offerId предложений и код кредитного предложения\
    Заявка переводится в статус `OFFERS_APPROVED`\
    Заявка передана банку для дальнейшей обработки. При наличии других предложений со статусом `AVAILABLE` можно подтвердить их последующими вызовами `POST /confirm`
