...
- Інтеграція тригериться тільки при створенні award в модель даних beneficiariesGeneralInfo
- Запит асинхронний
- Дані записуються тільки якщо валідні
- Запис — атомарний (все або нічого):
- або записуються всі КБВ (якщо хоча б один КБД не валідний - не записується жоден)
- або записується один fallback - обʼєкт
- Основний сценарій:
- Створюється award
- Перевіряються умови
- Виконується аутентифікація в ЄДР
- Виконується запит до ЄДР
- Отримується відповідь
- Відбувається валідація
- Якщо валідно:
- запис у
award.beneficiaries[] - оновлення:
- award.dateModified
- procedure.dateModified
- systemDateModified
- запис у
- Retry (до 3 разів) тільки для: 500, 502
- retry з exponential backoff
- після 3 спроб → fallback де beneficiaries.fallback.systemReason = "Не вдалось отримати інформацію з сервісу"
- API_TOKEN зберігається:
- у захищеному конфігураційному середовищі
- не логуються
- не передається у відкритому вигляді - Порожній результат (200 без даних) НЕ є помилкою API, але вимагає fallback
- Асинхронність має пріоритет над статусом award — відповідь завжди обробляється
- Timeout прирівнюється до технічної помилки (500/502)
Обмеження
- Система не повинна виконувати безкінечні повторні запити.
- Інтеграція не виконується без умов
- Частковий запис даних заборонений
...
User Story 4. Обробка випадків, коли дані не знайдені або недоступні
| Як | ЦБД Prozorro.Sale |
| я хочу | оректно обробляти випадки, коли ЄДР не повертає дані або повертає пустий результат |
| щоб | забезпечити прозору причину відсутності КБВ у системі |
USE CASE 16 — Порожній результат (200, але без даних)
Назва | Суб’єкт не знайдений за кодом ЄДРПОУ (порожній результат) |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | ЦБД отримала від ЄДР відповідь 200 |
And | Список результатів порожній | |
When | Система обробляє відповідь | |
Then | КБВ не заповнюються | |
2 | Given | Пустий результат |
Then | записується systemReason = "Суб’єкт не знайдений за кодом ЄДРПОУ" |
...
User Story 5. Узгодженість даних при зміні статусу award
| Як | ЦБД Prozorro.Sale |
| я хочу | завершувати обробку запиту до ЄДР навіть якщо статус award змінився |
| щоб | уникнути втрати даних через асинхронність |
USE CASE 17 — Award змінив статус під час запиту
Назва | Обробка відповіді ЄДР після зміни статусу award |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Запит до ЄДР відправлено |
And | Award змінив статус | |
When | Отримано відповідь | |
Then | Відповідь обробляється | |
And | Дані записуються незалежно від поточного статусу award |
...
User Story 6. Обробка timeout
| Як | ЦБД Prozorro.Sale |
| я хочу | коректно обробляти timeout від ЄДР |
| щоб | забезпечити стабільність інтеграції |
USE CASE 18 — Timeout від ЄДР
Назва | Обробка перевищення часу очікування відповіді |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Альтернативний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Перевищено timeout |
When | Система обробляє запит | |
Then | Виконується retry | |
2 | Given | Retry неуспішний |
Then | Записується fallback | Given | Пустий результат | Then | записується
...