...
- Інтеграція тригериться тільки при створенні award в модель даних beneficiariesGeneralInfo
- Запит асинхронний
- Дані записуються тільки якщо валідні
- Запис — атомарний (все або нічого):
- або записуються всі КБВ (якщо хоча б один КБД не валідний - не записується жоден)
- або записується один fallback - обʼєкт
- Основний сценарій:
- Створюється award
- Перевіряються умови
- Виконується авторизація аутентифікація в ЄДР
- Виконується запит до ЄДР
- Отримується відповідь
- Відбувається валідація
- Якщо валідно:
- запис у
award.beneficiaries[] - оновлення:
- award.dateModified
- procedure.dateModified
- systemDateModified
- запис у
- Retry (до 3 разів) тільки для: 500, 502
- retry з exponential backoff
- після 3 спроб → fallback де systemReason де beneficiaries.fallback.systemReason = "Не вдалось отримати інформацію з сервісу"
- API_TOKEN зберігається:
- у захищеному конфігураційному середовищі
- не логуються
- не передається у відкритому вигляді
...
| HTTP code | Retry | Зупинка інтеграції | Slack | Дія |
|---|---|---|---|---|
| 400 | Ні | Ні (можливо) | Так | помилка запиту |
| 401 | НіНІ | Так / auth_error | Так | невалідний tokenабо відкликаний API Token |
| 402 | Ні | Так | Так | очікування оплати |
| 403 | Ні | Ні (можливо) | Так | перевірка доступу |
| 404 | Ні | Ні | Ні | суб'єкт відсутній |
| 406 | Ні | Ні (можливо) | Так | помилка формату |
| 429 | НІ | Так | Так | перевищено ліміт |
| 500 | Так (3 рази) | Ні | Ні | тимчасова помилка |
| 502 | Так (3 рази) | Ні | Ні | сервіс недоступний |
...
Обробка 401
означає невалідний або відкликаний токен
retry НЕ виконується
надсилається Slack alert
статус інтеграції → auth_error
Обробка 404
- Отримано 404
- запис в поле systemReason beneficiaries.fallback.systemReason = "Суб'єкт не знайдено в ЄДР"
...
Назва | Отримання та запис КБВ з ЄДР в award | |
| Актори |
| |
| Передумови |
| |
| Основний сценарій | Альтернативний сценарій | Дані невалідні → UC2 Помилка API → UC3/UC11-15
|
| Результат | award містить список валідних КБВ (може бути декілька) |
...
Назва | Повторна спроба отримання даних | ||
| Актори |
| ||
| Передумови | Отримано HTTP код: | ||
| Основний сценарій |
| ||
| Альтернативний сценарій | Всі retry невдалі → UC4 | ||
| Результат | 1 | Given | Отримано
|
Acceptance Criteria
|
Acceptance Criteria
1 | Given | Отримано 500/502 |
When | Виконується retry | |
Then | Система повторює запит до 3 разів | |
2 | Given | Всі retry невдалі |
Then | Записується повідомлення в поле beneficiaries.fallback.systemReason: |
...
Назва | Внесення системної помилки |
| Актори | ЦБД (primary) |
| Передумови | retry завершився невдачею |
| Основний сценарій |
|
| Результат | award містить fallback |
...
Назва | Неініціювання запиту до ЄДР |
| Актори | ЦБД (primary) |
| Передумови | Будь-яка з умов НЕ виконується:
|
| Основний сценарій |
|
| Результат | Жодних запитів до ЄДР |
...
| Як | ЦБД Prozorro.Sale |
| я хочу | коректно обробляти всі типи помилок від ЄДР (400, 401, 403, 404, 406, 500, 502) |
| щоб | забезпечити стабільну роботу системи, не втрачати дані та мати можливість відновлення інтеграції |
USE CASE 11 — Обробка 401
...
Unauthorized
...
при невалідному API Token
Назва | Автоматичне оновлення токена при помилці 401 |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Отримано 401 |
When Токен протермінований | Система обробляє відповідь | |
Then Система виконує refresh token | Retry не виконується | |
2 | GivenТокен оновлено | Отримано 401 |
When | Система фіксує помилку | |
Then Запит повторюється 1 раз | Статус інтеграції змінюється на auth_error | |
3 | Givenповторний запит успішний | Отримано 401 |
When | Система фіксує помилку | |
Thenдані записуються в award | Повідомлення надсилається в Slack канал | |
4 | Given | Статус інтеграції = auth_error |
When | Створюється новий award, який відповідає умовам інтеграції | |
Then | Запит до ЄДР не виконується до заміни/актуалізації API Token |
...
USE CASE 12 — Помилка 400 (Bad Request)
Назва | Обробка некоректного запиту до ЄДР |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення | Виправлення формату запиту (dev fix) |
| Результат |
|
...
Назва | Обробка відсутності прав доступу |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення |
|
| Результат | Інтеграція не працює до виправлення |
...
Назва | Обробка відсутності суб’єкта в ЄДР |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Результат |
|
Acceptance Criteria
1 | Given | Отримано 404 |
Then | Retry не виконується | |
And | Записує beneficiaries тільки поле reasonполе beneficiaries.fallback.systemReason:
|
...
Назва | Обробка помилки формату даних |
| Актори |
|
| Передумови |
|
| Основний сценарій |
|
| Рішення |
|
| Результат |
|
...