...
- тип: list of objects
- може містити: кілька КБВ або fallback-записвизначення причини відсутності даних (excluded, isMissing,reason) або status має значення error .
| Expand | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
...
- Інтеграція тригериться тільки при створенні award в модель даних beneficiariesGeneralInfo
- Запит асинхронний
- Дані записуються тільки якщо валідні
- Запис — атомарний (все або нічого):
- або записуються всі КБВ (якщо хоча б один КБД не валідний - не записується жоден)
- або записується один fallback - обʼєкт
- Основний сценарій:
- Створюється award
- Перевіряються умови
- Виконується аутентифікація в ЄДР
- Виконується запит до ЄДР
- Отримується відповідь
- Відбувається валідація
- Якщо валідно:
- запис у
award.beneficiaries[] - оновлення:
- award.dateModified
- procedure.dateModified
- systemDateModified
- запис у
- Retry (до 3 разів) тільки для: 500, 502
- retry з exponential backoff
- після 3 спроб → fallback де beneficiaries.fallback.systemReason = "Не вдалось отримати інформацію з сервісу" beneficiaries.status = error
- API_TOKEN зберігається:
- у захищеному конфігураційному середовищі
- не логуються
- не передається у відкритому вигляді - Порожній результат (200 без даних) НЕ є помилкою API, але вимагає fallback
- Асинхронність має пріоритет над статусом award — відповідь завжди обробляється
- Timeout прирівнюється до технічної помилки (500/502)
...
- Система не повинна виконувати безкінечні повторні запити.
- Інтеграція не виконується без умов
- Частковий запис даних заборонений
Статуси інтеграції
| Статус | Опис |
|---|---|
active | Запити до ЄДР виконуються |
payment_required | Отримано 402, запити зупинено |
rate_limit_exceeded | Отримано 429, запити зупинено |
suspended | Загальний статус призупинення |
| auth_error | Проблема з токеном |
| access_denied | 403 |
| invalid_request | 400/406 |
Обробка помилок
Класифікація помилок
...
- У межах POC система не виконує:
- Автоматичну ретро-обробку awards, створених під час зупинки інтеграції.
- Масовий ручний запуск має мати обмеження на кількість awards за одну операцію.
- Ручний запуск має бути доступний тільки користувачам з відповідними адміністративними правами.
- Ручний запуск має пріоритет над статусом інтеграції
- Ручний запуск НЕ залежить від моменту створення award
- Масовий запуск має виконуватись асинхронно
- Повторний запуск перезаписує beneficiaries
- Обмеження на масовий запуск (наприклад, ≤100 awards)
Статуси обробки даних
| Статус | Опис |
|---|---|
| processing | Триває обробка даних |
| complete | Дані внесено |
| error | Не вдалось отримати інформацію з сервісу |
Послідовність зміни статусів
- При створенні відправці даних для отримання даних з ЄДР про КБВ beneficiaries.status змінюється на processing
- При правильному отриманні відповіді 200 з даними beneficiaries.status змінюється з processing на complete
- При отриманні помилки beneficiaries.status змінюється з processing на error і в залежності від типу помилки відправляється повідомлення РО
Статуси інтеграції
| Статус | Опис |
|---|---|
active | Запити до ЄДР виконуються |
payment_required | Отримано 402, запити зупинено |
rate_limit_exceeded | Отримано 429, запити зупинено |
suspended | Інтеграцію вручну зупинено адміністратором |
| auth_error | Проблема з токеном |
| access_denied | 403 |
| invalid_request | 400/406 |
Статус suspended_manual має пріоритет над автоматичними статусами.
Обробка помилок
Класифікація помилок
| Тип | Коди |
|---|---|
| Tech | 500, 502 |
| Auth | 401 |
| Business | 402, 429 |
| Access | 403 |
| Data | 400, 404, 406 |
Таблиця зведених правил обробки помилок
| HTTP code | Retry | Зупинка інтеграції | Slack | Дія |
|---|---|---|---|---|
| 400 | Ні | Ні |
Таблиця зведених правил обробки помилок
| HTTP code | Retry | Зупинка інтеграції | Slack | Дія |
|---|---|---|---|---|
| 400 | Ні | Ні (можливо) | Так | помилка запиту |
| 401 | Ні | Так / auth_error | Так | невалідний або відкликаний API Token |
| 402 | Ні | Так | Так | очікування оплати |
| 403 | Ні | Ні (можливо) | Так | перевірка доступу |
| 404 | Ні | Ні | Ні | суб'єкт відсутній |
| 406 | Ні | Ні (можливо) | Так | помилка формату |
| 429 | НІ | Так | Так | перевищено ліміт |
| 500 | Так (3 рази) | Ні | Ні | тимчасова помилка |
| 502 | Так (3 рази) | Ні | Ні | сервіс недоступний |
...
Обробка 401
означає невалідний або відкликаний токен
retry НЕ виконується
надсилається Slack alert
статус інтеграції → auth_error
Обробка 404
- Отримано 404
- запис в поле beneficiaries.fallback.systemReason = "Суб'єкт не знайдено в ЄДР"зміна beneficiaries.status з processing на error
Slack повідомлення
Відправляються для:
...
Після 402
внесення коштів
ручне відновлення
статус → active
Після 429
відновлення ліміту
- ручне відновлення
- статус → active
Поведінка після відновлення інтеграції
- Після відновлення інтеграції система обробляє тільки нові awards, створені після зміни статусу інтеграції на active.
- Awards, створені під час зупинки інтеграції, автоматично не обробляються повторно в межах POC.
- За потреби такі awards можуть бути оброблені через ручний запуск з адмінки.
| Info | ||
|---|---|---|
| ||
Старі awards НЕ обробляються повторно після відновлення інтеграції - для POC
|
Логування
Обовʼязково логувати:
- correlationId
- request/response
- error code
- retry count
Timeout
|
Адміністративне керування інтеграцією - Покращення
Адміністратор має можливість:
- Вручну зупинити інтеграцію;
- Вручну відновити інтеграцію;
- Запустити інтеграцію для конкретного award;
- Запустити інтеграцію для переліку awards через множинний вибір.
Ручний запуск інтеграції по award виконує стандартну логіку запиту до ЄДР та обробки відповіді.
Ручний запуск не залежить від тригера створення award.
Для масового запуску обробка має виконуватись асинхронно через чергу.
Логування
Обовʼязково логувати:
- correlationId
- request/response
- error code
- retry count
Timeout
- timeout = 5-10 секунд
- retry = ексоненційна затримка
...
Назва | Отримання та запис КБВ з ЄДР в award |
| Актори |
|
| Передумови |
|
| Основний сценарій | Дані невалідні → UC2 Помилка API → UC3/UC11-15
|
| Результат | award містить список валідних КБВ (може бути декілька) |
...
Назва | Відмова у записі КБВ |
| Актори |
|
| Передумови | Отримано відповідь ЄДР |
| Основний сценарій |
|
| Альтернативний сценарій | Всі КБВ валідні → UC1 |
| Результат | award без змін |
...
Назва | Повторна спроба отримання даних |
| Актори |
|
| Передумови | Отримано HTTP код: |
| Основний сценарій |
|
| Альтернативний сценарій | Всі retry невдалі → UC4 beneficiaries.status змінюється з processing на error |
| Результат |
|
...
1 | Given | Отримано 500/502 |
When | Виконується retry | |
Then | Система повторює запит до 3 разів | |
2 | Given | Всі retry невдалі |
Then | Записується повідомлення в поле beneficiaries.fallback.systemReason: |
...
USE CASE 4 —
...
Інтеграція не запускається
Назва Внесення системної помилки | Неініціювання запиту до ЄДР |
| Актори | ЦБД (primary) |
| Передумови | retry завершився невдачею |
| Основний сценарій |
|
| Результат | award містить fallback |
Acceptance Criteria
...
1
...
Then
...
AND
...
Відправляється повідомлення в Slack
USE CASE 5 — Інтеграція не запускається
Назва | Неініціювання запиту до ЄДР |
| Актори | ЦБД (primary) |
| Передумови | Будь-яка з умов НЕ виконуєтьсяБудь-яка з умов НЕ виконується:
|
| Основний сценарій |
|
| Результат | Жодних запитів до ЄДР |
Acceptance Criteria
1 | Given | Умови не виконані |
When | Створюється award | |
Then | запит до ЄДР не виконується |
...
USE CASE
...
5 — Обробка множинних КБВ
Назва | Запис кількох бенефіціарів |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Альтернативний сценарій | хоча б один невалідний КБВ → UC2→ UC2 |
| Результат | Збережено всі КБВ |
Acceptance Criteria
1 | Given | ЄДР повертає кілька КБВ |
When | Відбувається запис | |
Then | Всі КБВ зберігаються в масиві |
User Story 2. Зупинка запитів в разі отримання помилок 402 або 429
| Як | ЦБД Prozorro.Sale |
| я хочу | зупиняти направлення запитів до ЄДР після першого отримання помилки 402 або 429 |
| щоб | не створювати зайве навантаження на сервіс, не витрачати ліміти та уникати повторних неуспішних запитів до моменту відновлення доступу/поповнення коштів. |
| додатково | Після внесення коштів або відновлення ліміту система має відновити направлення запитів до ЄДР. |
USE CASE 6 — Зупинка запитів після отримання 402
Назва | Автоматичне призупинення інтеграції з ЄДР при помилці 402 Payment Required |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | ЦБД отримала від ЄДР відповідь 402 |
When | Система обробляє відповідь | |
Then | Інтеграція з ЄДР переходить у статус призупинення. | |
2 | Given | Інтеграція має статус призупинення через |
When | Створюється новий award, який відповідає умовам інтеграції | |
Then | ЦБД не направляє запит до ЄДР. | |
3 | Given | Отримано 402 |
| When | Система фіксує помилку | |
Then | Повідомлення надсилається в Slack канал. |
...
USE CASE 7 — Зупинка запитів після отримання 429
Назва | Автоматичне призупинення інтеграції з ЄДР при помилці 429 Many Requests |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | ЦБД отримала відповідь 429 |
When | Система обробляє відповідь | |
Then | Направлення нових запитів до ЄДР зупиняється. | |
2 | Given | Інтеграція призупинена через |
When | Створюється новий award | |
Then | ЦБД не направляє запит до ЄДР | |
3 | Given | Отримано 429 |
| When | Система обробляє помилку | |
Then | Повідомлення надсилається в Slack канал. |
...
USE CASE 8 — Відновлення запитів після внесення коштів
Назва | Ручне або автоматичне відновлення інтеграції з ЄДР після внесення коштів |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Інтеграція призупинена через 402 |
| And | Кошти внесено | |
When | Адміністратор активує інтеграцію | |
Then | Статус інтеграції змінюється на active. | |
2 | Given | Інтеграція активна після відновлення |
When | Створюється новий award | |
Then | ЦБД направляє запит до ЄДР | |
3 | Given | ЄДР після відновлення повертає 200 |
| When | ЦБД отримує валідні дані | |
Then | Дані записуються в |
...
USE CASE 9 — Відновлення після вичерпання ліміту запитів
Назва | Відновлення інтеграції після помилки 429 | ||
| Актори |
| ||
| Передумови |
| ||
| Основний сценарій |
| ||
| Результат |
| Результат | Збережено всі КБВ |
Acceptance Criteria
1 | Given | Інтеграція призупинена через 429 |
When | Ліміт запитів відновлено | |
And | Адміністратор активує інтеграцію | |
Then ЄДР повертає кілька КБВ | ЦБД знову направляє запити до ЄДР | |
2 | Given | Інтеграція активована після |
When Відбувається | записСтворюється award | |
Then Всі КБВ зберігаються в масиві | Запит до ЄДР виконується |
User Story
...
3. Обробка помилок інтеграції з ЄДР та забезпечення стабільності системи
| Як | ЦБД Prozorro.Sale |
| я хочу | зупиняти направлення запитів до ЄДР після першого отримання помилки 402 або 429 |
| щоб | не створювати зайве навантаження на сервіс, не витрачати ліміти та уникати повторних неуспішних запитів до моменту відновлення доступу/поповнення коштів. |
| додатково | Після внесення коштів або відновлення ліміту система має відновити направлення запитів до ЄДР. |
USE CASE 7 — Зупинка запитів після отримання 402
...
Назва
...
- ЦБД
- ЄДР
- Адміністратор/відповідальна команда
- Slack канал
...
- Інтеграція з ЄДР активна
- ЄДР повертає HTTP
402
...
- ЦБД направляє запит до ЄДР.
- ЄДР повертає відповідь
402 Payment Required. - ЦБД фіксує помилку
- ЦБД змінює внутрішній статус інтеграції з ЄДР на →
payment_required - ЦБД припиняє направлення нових запитів до ЄДР.
- ЦБД відправляє повідомлення в Slack канал.
- Для нових awards, які підпадають під умови інтеграції, запит до ЄДР не виконується.
...
- Інтеграція зупинена
- Нові запити до ЄДР не направляються.
- Команда отримала повідомлення про необхідність внесення коштів.
- Дані КБВ для нових awards тимчасово не збагачуються.
| коректно обробляти всі типи помилок від ЄДР (400, 401, 403, 404, 406, 500, 502) | |
| щоб | забезпечити стабільну роботу системи, не втрачати дані та мати можливість відновлення інтеграції |
USE CASE 10 — Обробка 401 Unauthorized при невалідному API Token
Назва | Автоматичне оновлення токена при помилці 401 |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | GivenЦБД | отримала від ЄДР відповідь 402Отримано 401 | |
When | Система обробляє відповідь | ||
Then | Інтеграція з ЄДР переходить у статус призупинення. | ||
| Given | Інтеграція має статус призупинення через | When | Створюється новий award, який відповідає умовам інтеграції |
Then | ЦБД не направляє запит до ЄДР. | Retry не виконується | |
23 | Given | Отримано 402401 | |
When | Система фіксує помилку | ||
Then | Повідомлення надсилається в Slack канал. |
USE CASE 8 — Зупинка запитів після отримання 429
...
Назва
...
- ЦБД
- ЄДР
- Slack канал
- Адміністратор/відповідальна команда
...
- Інтеграція з ЄДР активна
- ЄДР повертає HTTP
429 (означає, що вичерпано обмеження запитів до ресурсу)
...
- ЦБД направляє запит до ЄДР.
- ЄДР повертає відповідь
429 Many Requests. - ЦБД фіксує помилку.
- ЦБД змінює внутрішній статус інтеграції з ЄДР на → rate_limit_exceeded
- ЦБД призупиняє направлення нових запитів до ЄДР.
- ЦБД відправляє повідомлення в Slack канал. (
Перевищено ліміт запитів до ЄДР) - Нові awards, які підпадають під інтеграцію, не ініціюють запит до ЄДР.
...
- Інтеграція тимчасово зупинена.
- Нові запити до ЄДР не виконуються.
- Команда повідомлена про перевищення ліміту.
- Дані КБВ для нових awards тимчасово не збагачуються.
Acceptance Criteria
...
1
...
When
...
Then
...
2
...
Інтеграція призупинена через 429
...
When
...
Then
...
3
...
Then
...
Повідомлення надсилається в Slack канал.
USE CASE 9 — Відновлення запитів після внесення коштів
...
Назва
...
- Адміністратор/відповідальна команда
- ЦБД
- ЄДР
...
- Інтеграція з ЄДР була призупинена через
402 - Статус інтеграці = payment_required
- Кошти внесено / доступ до сервісу відновлено
...
- Відповідальна команда вносить кошти.
- Адміністратор ініціює відновлення інтеграції.
- ЦБД змінює статус інтеграції з payment_required на active
- ЦБД відновлює направлення запитів до ЄДР.
- При створенні наступного award ЦБД знову виконує стандартну логіку запиту до ЄДР.
- Якщо ЄДР повертає
200, дані КБВ обробляються та записуються вaward.
...
- Інтеграція з ЄДР активна.
- Запити до ЄДР відновлені.
- Система продовжує автоматичне збагачення awards даними КБВ.
| Статус інтеграції змінюється на auth_error | ||
3 | Given | Отримано 401 |
When | Система фіксує помилку | |
Then | Повідомлення надсилається в Slack канал | |
4 | Given | Статус інтеграції = auth_error |
When | Створюється новий award, який відповідає умовам інтеграції | |
Then | Запит до ЄДР не виконується до заміни/актуалізації API Token |
...
USE CASE 11 — Помилка 400 (Bad Request)
Назва | Обробка некоректного запиту до ЄДР |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення | Виправлення формату запиту (dev fix) |
| Результат |
|
Acceptance Criteria
1 | Given | Отримано 400 |
When | Обробляється помилка | |
Then | Retry не виконується | |
And | Slack отримує повідомлення |
...
USE CASE 12 — Помилка 403 (Forbidden)
Назва | Обробка відсутності прав доступу |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення |
|
| Результат | Інтеграція не працює до виправлення |
Acceptance Criteria
1 | Given | Отримано 403 |
Then | Retry не виконується | |
And | Slack отримує повідомлення |
...
USE CASE 13 — Помилка 404 (Not Found)
Назва | Обробка відсутності суб’єкта в ЄДР |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Отримано 404 |
Then | Retry не виконується | |
And | Змінює beneficiaries status з processing на error |
...
USE CASE 14 — Помилка 406 (Not Acceptable)
Назва | Обробка помилки формату даних |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення |
|
| Результат |
|
Acceptance Criteria
1 | Given | Отримано 406 |
Then | Retry не виконується | |
And | Slack отримує повідомлення |
User Story 4. Обробка випадків, коли дані не знайдені або недоступні
Acceptance Criteria
...
1
...
When
...
Then
...
2
...
Інтеграція активна після відновлення
...
When
...
Then
...
3
...
Then
...
Дані записуються в award.beneficiaries
USE CASE 10 — Відновлення після вичерпання ліміту запитів
...
Назва
...
- Адміністратор/відповідальна команда
- ЦБД
- ЄДР
...
- Інтеграція була призупинена через
429 - Статус інтеграці = rate_limit_exceeded
- Ліміт запитів поновлено або відповідальна команда підтвердила можливість повторного використання сервісу
...
- Відповідальна команда перевіряє, що ліміт запитів відновлено.
- Адміністратор активує інтеграцію.
- ЦБД змінює статус інтеграції з rate_limit_exceeded на active
- Наступні awards знову запускають запит до ЄДР.
- Якщо ЄДР повертає успішну відповідь — дані обробляються за стандартним сценарієм.
...
- Інтеграція з ЄДР активна.
- Запити до ЄДР відновлені.
- Система продовжує автоматичне збагачення awards даними КБВ.
Acceptance Criteria
...
1
...
When
...
And
...
Then
...
2
...
Інтеграція активована після 429
...
When
...
Then
...
| Як | ЦБД Prozorro.Sale |
| я хочу | коректно обробляти всі типи помилок від ЄДР (400, 401, 403, 404, 406, 500, 502) |
| щоб | забезпечити стабільну роботу системи, не втрачати дані та мати можливість відновлення інтеграції |
USE CASE 11 — Обробка 401 Unauthorized при невалідному API Token
| оректно обробляти випадки, коли ЄДР не повертає дані або повертає пустий результат | |
| щоб | забезпечити прозору причину відсутності КБВ у системі |
USE CASE 15 — Порожній результат (200, але без даних)
Назва | Суб’єкт не знайдений за кодом ЄДРПОУ (порожній результат) |
Назва
| Актори |
|
| Передумови |
|
|
401 Unauthorized
| |
| Основний сценарій |
|
|
auth_error
| |
| Результат |
|
Acceptance Criteria
1 | GivenОтримано 401 | ЦБД отримала від ЄДР відповідь 200 |
And | Список результатів порожній | |
When | Система обробляє відповідь | |
Then | Retry КБВ не виконуєтьсязаповнюються | |
2 | Given | Отримано 401 |
When | Система фіксує помилку | |
Then | Статус інтеграції змінюється на auth_error | |
3 | Given | Отримано 401 |
When | Система фіксує помилку | |
Then | Повідомлення надсилається в Slack канал | Given | Статус інтеграції = auth_error |
When | Створюється новий award, який відповідає умовам інтеграції | |
Then | Запит до ЄДР не виконується до заміни/актуалізації API Token |
USE CASE 12 — Помилка 400 (Bad Request)
Пустий результат | |
Then | Змінює в beneficiaries status з processing на error |
...
User Story 5. Узгодженість даних при зміні статусу award
| Як | ЦБД Prozorro.Sale |
| я хочу | завершувати обробку запиту до ЄДР навіть якщо статус award змінився |
| щоб | уникнути втрати даних через асинхронність |
USE CASE 16 — Award змінив статус під час запиту
Назва | Обробка відповіді ЄДР після зміни статусу award |
Назва
| Актори |
|
| Передумови |
|
400
| |
| Основний сценарій |
|
400- помилка у формуванні запиту
Виправлення формату запиту (dev fix)
| |
| Результат |
|
Acceptance Criteria
1 | GivenОтримано 400 | Запит до ЄДР відправлено |
And | Award змінив статус | |
When | Обробляється помилка | |
Then | Retry не виконується | |
And | Slack отримує повідомлення |
USE CASE 13 — Помилка 403 (Forbidden)
| Отримано відповідь | |
Then | Відповідь обробляється |
And | Дані записуються незалежно від поточного статусу award |
...
User Story 6. Обробка timeout
| Як | ЦБД Prozorro.Sale |
| я хочу | коректно обробляти timeout від ЄДР |
| щоб | забезпечити стабільність інтеграції |
USE CASE 17 — Timeout від ЄДР
Назва | Обробка перевищення часу очікування відповіді |
Назва
| Актори |
|
| Передумови |
|
403- змінились права доступу до API
- акаунт не має доступу
- ЦБД отримує
403 - Аналізує помилку
- НЕ виконує retry
- Відправляє повідомлення в Slack
- Переводить інтеграцію в статус
access_denied
- перевірка прав доступу
- перевидача ключів / ролей
Інтеграція не працює до виправлення
Acceptance Criteria
1
...
Then
...
And
...
USE CASE 14 — Помилка 404 (Not Found)
...
Назва
...
- ЦБД
- ЄДР
- Slack
...
- Запит до ЄДР виконано
- Отримано
404
...
- ЦБД отримує
404 - Аналізує помилку
- Визначає, що суб'єкт відсутній
- НЕ виконує retry
- Записує beneficiaries тільки fallback в поле beneficiaries.fallback.systemReason:
- "Суб'єкт не знайдено в ЄДР"
...
- award без КБВ
- award містить beneficiaries.fallback.systemReason
Acceptance Criteria
1
...
Then
...
And
...
Записує beneficiaries тільки поле beneficiaries.fallback.systemReason:
- "Суб'єкт не знайдено в ЄДР"
USE CASE 15 — Помилка 406 (Not Acceptable)
...
Назва
...
- ЦБД
- ЄДР
- Slack
...
- Запит до ЄДР виконано
- Отримано
406
...
- ЦБД отримує
406 - Аналізує помилку
- НЕ виконує retry
- Відправляє alert в Slack
- Переводить інтеграцію в статус invalid_request
...
- перевірка контракту API
- виправлення формату
...
- інтеграція не виконується для цього запиту
Acceptance Criteria
1
...
Then
...
And
...
User Story 4. Обробка випадків, коли дані не знайдені або недоступні
...
USE CASE 16 — Порожній результат (200, але без даних)
...
Назва
...
Суб’єкт не знайдений за кодом ЄДРПОУ (порожній результат)
...
- ЦБД
- ЄДР
...
- Інтеграція з ЄДР активна
- Запит до ЄДР виконано
- ЄДР повертає HTTP 200
- Список
beneficiariesпорожній
...
- ЦБД отримує відповідь 200
- Перевіряє тіло відповіді
- Визначає, що список результатів порожній
- Не виконує заповнення КБВ
- Записує fallback з причиною
...
- Інтеграція зупинена
- Нові запити до ЄДР не направляються.
- Команда отримала повідомлення про необхідність внесення коштів.
- Дані КБВ для нових awards тимчасово не збагачуються.
| |
| Основний сценарій |
|
| Альтернативний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Перевищено timeout |
When | Система обробляє запит | |
Then | Виконується retry | |
2 | Given | Retry неуспішний |
Then | Записується fallback |
...
User Story 7. Відсутність автоматичної ретро-обробки
| Як | ЦБД Prozorro.Sale |
| я хочу | Не обробляти старі awards після відновлення інтеграції |
| щоб | Уникнути неочікуваного навантаження та складної логіки в межах POC |
USE CASE 18 — Відсутність ретро-обробки
Назва | Обробка перевищення часу очікування відповіді |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Альтернативний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Інтеграція була зупинена |
And | Існують awards без КБВ | |
When | Інтеграція відновлена | |
Then | Обробляються тільки нові awards | |
2 | Given | Існують старі awards |
Then | Вони НЕ обробляються автоматично |
...
User Story 8. Ручне керування інтеграцією
| Як | Адміністратор ЦБД Prozorro.Sale |
| я хочу | Мати можливість вручну керувати інтеграцією |
| щоб | Контролювати її роботу незалежно від автоматичних сценаріїв |
USE CASE 19 — Ручна зупинка інтеграції
Назва | Зупинка інтеграції через Адміністративну панель |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Інтеграція активна |
When | Адміністратор її зупиняє | |
Then | Статус = suspended | |
And | Запити до ЄДР не виконуються |
...
USE CASE 20 — Ручне відновлення інтеграції
Назва | Відновлення інтеграції через Адміністративну панель |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Інтеграція зупинена |
When | Адміністратор її відновлює | |
Then | Статус = active |
...
User Story 9. Ручний запуск інтеграції для awards
| Як | Адміністратор ЦБД Prozorro.Sale |
| я хочу | Запускати інтеграцію для конкретних awards |
| щоб | Обробляти пропущені або проблемні записи |
USE CASE 21 — Ручний запуск для одного award
Назва | Зупинка інтеграції через Адміністративну панель |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Альтернативний сценарій | Інтеграція глобально зупинена → ручний запуск дозволений |
| Результат | beneficiaries оновлено |
Acceptance Criteria
1 | Given | Обрано award |
When | Адміністратор запускає інтеграцію | |
Then | Виконується запит до ЄДР | |
And | beneficiaries перезаписуються |
...
USE CASE 22 — Масовий запуск інтеграції
Назва | Зупинка інтеграції через Адміністративну панель |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Альтернативний сценарій | перевищено ліміт → операція блокується |
| Результат | всі awards оброблені асинхронно |
Acceptance Criteria
1 | Given | Обрано список awards |
When | Запускається обробка | |
Then | Кожен award обробляється незалежно | |
2 | Given | Масовий запуск |
| Then | Обробка виконується через чергу |
Acceptance Criteria
...
1
...
And
...
When
...
Then
...
2
...
Пустий результат
...
Then
...
User Story 5. Узгодженість даних при зміні статусу award
...
USE CASE 17 — Award змінив статус під час запиту
...
Назва
...
Обробка відповіді ЄДР після зміни статусу award
...
- ЦБД
- ЄДР
...
- Запит до ЄДР вже відправлений
- Award змінив статус (наприклад:
- дискваліфіковано
- cancelled
- unsuccessful)
...
- ЦБД відправляє запит
- Award змінює статус
- ЦБД отримує відповідь від ЄДР
- НЕ перевіряє актуальний статус award
- Обробляє відповідь за стандартною логікою:
- або запис КБВ
- або fallback
...
- Дані КБВ (або fallback) збережені незалежно від статусу award
Acceptance Criteria
1
...
And
...
When
...
Then
...
And
...
User Story 6. Обробка timeout
...
забезпечити стабільність інтеграції
USE CASE 18 — Timeout від ЄДР
...
Назва
...
Обробка перевищення часу очікування відповіді
...
- ЦБД
- ЄДР
...
- Запит відправлено
- Відповідь не отримано в межах timeout (5–10 сек)
...
- ЦБД очікує відповідь
- Timeout перевищено
- ЦБД фіксує помилку
- Виконує retry (як для 500/502)
- До 3 спроб
...
- retry успішний → UC1
- retry неуспішний → fallback
...
- або отримані дані
- або fallback
Acceptance Criteria
1
When
Then
2
Then
...