Документація
Загальний опис
Метою розробки є інтеграція з ЄДР для автоматизації та централізації отримання даних про КБВ (кінцевого бенефеціарного власника) для учасників що є юридичними особами. Даний інформація може бути обовʼязковим/не обовʼязковим для певних процедур (наразі розробка інтеграції відбувається тільки для процедур де є документ з типом x_ultimateBeneficiaryInfo).
Для реалізації цієї інтеграції необхідно виконати дії:
- Додати до базової моделі award необовʼязкову до заповнення модель даних beneficiaryInfo (модель даних наведено нижче)
- Налаштувати інтеграцію з ЄДР де після відпраки запиту заповнюється модель beneficiaryInfo
- При внесенні інформації змінюємо award.dateModified, dateModified (procedure) та systemDateModified
- Майданчики відображають дану інформацію організатору в його кабінеті. Відображення в інших місцях не є обовʼязковою (портал, кабінети учасників)
- Модель даних beneficiaryInfo
Технічна назваБізнес назва (x-legalName) Тип Read only Обовʼязковість (потребує уточнень) uk_UA en_US beneficiaryInfo object true false beneficialName ПІБ кінцевого бенефеціарного власника Full name of the ultimate beneficial owner string (multilang) true true ownershipType Тип бенефіціарного володіння Type of beneficial ownership string (multilang) true true ownershipPercentage Відсоток частки статутного капіталу або відсоток права голосу Percentage of share of authorized capital or percentage of voting rights: float (multilang) true true address Адреса Address model true true generationDate Дата генерації Date of generation string ($dateTime) true true
Технічні вимоги до автоматичного збагачення award даними КБВ з ЄДР
- Майданчик, залучає користувача до участі в аукціоні де звіт з інформацією про КБВ (x_ultimateBeneficiaryInfo) визначений як тип документу
- Учасник є юридичною особою
- Учасник подає заявку на участь
- Майданчик активує заявку на участь
- Заявка на участь перейшла в кваліфікацію
- ЦБД направляє запит в ЄДР з авторизаційним ключем і даними для пошуку де виконуються умови:
- Для процедур де x_ultimateBeneficiaryInfo є типом документу. Перелік процедур
- LLE, LLD, LLP - Оренда за законом
- LRE - Земельні торги - оренда
- LSE + LSP - Земельні торги - продаж/продаж з переважним правом
- REM - Процедури розподілу квот
- SSW - Продаж майна приватних компаній (Закриті пропозиції)
- SPE + SPD - Мала приватизація
- LPE - Велика приватизація
- LAE + LAP + LAW - Продаж арештованої землі
- APE + APD - Арештовані активи АРМА
- SAE + SAD - Санкційне майно
- SUE+SUD - Спеціальні дозволи на користування надрами
- Для award в статусах: pending_waiting, pending_admission, pending
- Для award.bidders.identifier.UA-EDR
- Під час створення award (асинхронний запит)
- Для процедур де x_ultimateBeneficiaryInfo є типом документу. Перелік процедур
- ЦБД отримує дані з ЄДР
- Перевіряє отримані дані:
- Якщо в отриманій відповіді містяться дані, які не можна внести в award → ЦБД не вносить дані в award
- Якщо в отриманій відповіді містяться дані, які можна внести в award → ЦБД вносить дані в award
- При внесенні даних змінюється:
- award.dateModified
- dateModified (procedure)
- systemDateModified
- При внесенні даних змінюється:
- Перевіряє отримані дані:
Особливості:
- Тип поля beneficiaryInfo в award - list of objects
- Запит на ЄДР може віддати дані про декількох КБВ
- Потрібно передбачити що повторний запит відправляється в разі отримання відповіді 500 або 502
- Чи потрібно виводити якийсь текст якщо нам не вдалось отримати відповідь ? - запитання до Ксенії
- Нам потрібно фіксувати повідомленням в Slack канал якщо отримуємо відповіді:
- 400
- 401
- 402
- 403
- 404
- 406
- 429
Як працює сервіс ЄДР
Сервіс ЄДР реалізований як API для автоматичного отримання даних для формування звіту/документу звіту про КБВ учасника торгів. Взаємодія працює по протоколу HTTP з використанням авторизації через JWT. Загальна логіка процесу: спочатку через метод авторизації отримуємо access та refresh токени, а потім використовуємо їх для виклику ендпоінту отримання даних для формування звіту/документу звіту за кодом ЄДРПОУ. - Детальніше буде додано після отримання тестового ключа
Дія тестового ключа 6 місяців
Доступні ендпоінти (Потребує перевірки та доповнення після отримання тестових ключей)
Авторизація (отримання токенів)
Оновлення access_token
Метод отримання унікального ідентифікатора
Метод: POST
Ендпоінт: https://targetServer/1.0/subjects?code=ХХХХХХХХ, де code - код ЄДРПОУ учасника
Приймає на вхід:
- Обовʼязковий query-параметр: code
Приклад запиту:
Приклади відповіді:
Якщо code знайдено, а також токен авторизації є валідним:
Якщо code не знайдено:
Якщо сплив термін дії токена авторизації:
Якщо сервіс наразі недоступний:
Також можливий кейс, що АРІ поверне 403 помилку, якщо, наприклад, ЄДР змінить права доступу нашого акаунту.
Перелік кодів помилок
Коди помилок та відповідей:
Коди відповідей HTTP
Код | Текст | Пояснення |
|---|---|---|
200 | OK | Запит успішно оброблено і повернуто результат |
400 | Bad Request | Запит має помилку або не може бути оброблений. Відповідне повідомлення з поясненнями додане до відповіді. |
401 | Unauthorized | Параметри авторизації не правильні, або не вказані взагалі. |
402 | PaymentRequired | Для виконання запиту необхідна оплата. |
403 | Forbidden | Запит вірний але в обробці відмовлено. Відповідне повідомлення з поясненнями додано до відповіді. |
404 | Not Found | Адреса не правильна або ресурс до якого йде запит не існує. |
406 | Not Acceptable | Дані передані в запиті мають не зрозумілий формат. |
429 | Many Requests | API повертає таку відповідь коли вичерпано обмеження запитів до ресурсу. |
500 | Internal Server Error | Щось зламалось. |
502 | Bad Gateway | Сервіс вимкнено або проходить оновлення. |
Повідомлення з інформацією про помилку.
У разі помилки API повертає відповідь з поясненням, формат - JSON, наприклад:
{"errors":[{"message":"Invalid or expired token","code":2}]}
Перелік кодів помилок
У відповіді, окрім повідомлення з поясненням, додатково надається код помилки, який можна використовувати для автоматизованої обробки. Протягом часу, текстове повідомлення може модифікуватись, але код залишається незмінним.
Код | Текст | Пояснення |
1 | Could not authenticate you або Authentication credentials were not provided | Помилка аутентифікації. |
2 | Invalid or expired token | Недіючий або некоректний токен. |
3 | Your account is not permitted to access this resource | Відповідь надається разом із HTTP статусом 403. Користувач, з використанням токену якого було виконано аутентифікацію, не має достатніх прав для виконання запиту. |
4 | Sorry, that page does not exist | Відповідь надається разом із HTTP статусом 404. Сторінка до якої виконується запит не знайдена. |
5 | Paiment required | Відповідь надається разом із HTTP статусом 402. Недостатньо коштів для виконання платного запиту. |
6 | Parse Error або `search_date` has wrong format | Відповідь надається разом із HTTP статусом 400. Не правильний формат одного або декількох параметрів запиту. |
9 | Rate limit exceeded | Відповідь надається разом із HTTP статусом 429. Вичерпано кількість запитів, дозволених виконати протягом проміжку часу. |
10 | `code` or `passport` parameter must be provided. | У запиті не надано параметрів необхідних для виконання пошуку. |
11 | `passport` parameter has wrong value. | Один або більше параметрів запиту має невірний формат. |
20 | Internal error | Відповідь надається разом із HTTP статусом 500. |