Легенда
Всі нові зміни виділено зеленим шрифтом.
Червоним шрифтом виділено все, що потребує уточнення.
Мета
Сервіс додавання додаткової інформації створений для можливості внесення змін у будь-яку процедуру, в не залежності від її статусу співробітником АТ Прозоро.Продажі
Документація
- BRD BRD. Внесення додаткових даних у ЕТС в незалежності від статусу процедури
- ТЗ для адміністративної частини Створення/редагування додаткової інформації до процедури [Add/Edit additional information commands]
Процедури: | Всі |
Хто | Співробітник АТ Прозоро.Продажі |
Передумови | На адресу АТ Прозоро.Продажі надійшло прохання про необхідність внесення додаткової інформації до існуючої процедури |
Дії |
|
Запит: | [Додати після реалізації] |
Валідації: | Описані нижче |
Результат: |
|
Бізнес вимоги
User Stories
# | User Storie | Priority | Actor |
---|---|---|---|
1 | Я, як адміністратор ЦБД Прозоро.Продажі, хочу мати можливість додати/редагувати до процедуру додаткову інформацію в не залежності від її статусу, для того аби уникнути неточностей і зберігати усі зміни по процедурі | 1 | Адміністратор ЦБД Прозоро.Продажі |
2 | Я, як майданчик-партнер, хочу мати можливість відобразити наявні дані додаткової інформації у себе на майданчику, аби відображати дійсний статус проведення аукціону | 2 | Майданчик партнер |
3 | Я, як портал Прозоро.Продажі, хочу мати можливість відобразити наявні дані додаткової інформації у себе на порталі, аби відображати дійсний статус проведення аукціону | 3 | Портал Прозоро.Продажі |
4 | Я, як BI Прозоро.Продажі, хочу мати доступ до додаткової інформації у процедурах, аби відображати і мати статистику по кількості таких змін, їх ініціаторів і причини | 4 | BI Прозоро.Продажі |
5 | Я, як система, хочу мати можливість виконати міграцію історичних даних, аби мати до них доступ і створити цілісну картину, що до проведення аукціону | 5 | ЦБД Прозоро.Продажі |
6 | Я, як Прозоро.Продажі, хочу, аби майданчики (учасник аукціону, переможець) мали можливість публікувати причини відмови від підписання протоколу/договору, аби в подальшому проаналізувати причини зривів аукціонів | 6 | ЦБД Прозоро.Продажі |
Вимоги до процедури в ЦБД
Acceptance criteria
- Має бути реалізовано модель у якій можна зберігати дані про додаткову інформацію у процедурі
- Додавання та редагування даних моделі має відбуватись через адміністративну частину ЦБД (командою)
- Доступ до створення запису, чи зміни має бути реалізовано окремою роллю (User permisssion) на стороні адміністративної частини ЦБД
- Має бути реалізована історія змін запису, і доступний її перегляд
- Має фіксуватись Дата змін, Команда, яка була виконана і Автор, що виконав цю команду (користувач адміністративної частини ЦБД)
- До однієї процедури може бути додано більше ніж один запис про додаткову інформацію
- Створити або редагувати запис в моделі можливо у будь-який час (в не залежності від періоду та статусу поточної процедури).
- При додаванні чи зміні запису в моделі дата останньої зміни процедури - залишається без змін.
- При цьому "Дата створення", "Дата змін" запису моделі створюється/оновлюється.
- Запис ДІ має містити певну кількість параметрів і файли
- Опис параметрів наведено нижче (див. таблицю)
- Вимоги до файлів:
- Файли мають зберігатись в файловому сховищі ЦБД (Document service) після того, як успішно пройдуть перевірку на загрози.
- Типи даних (файлів) - не обмежені (стандартні вимоги до файлів в ЦБД)
- Розмір файлів -
обмеженийу 50 Мб для файлуне обмежені (стандартні вимоги до файлів в ЦБД) - Перед завантаженням файлів у файлове сховище має виконуватись антивірусна перевірка файлів на наявність вразливостей:
- Має бути реалізована асинхронна перевірка файлів, що завантажуються
- Флоу: Завантажити файл → Перевірка (асинхронна) на наявність вірусів → повідомлення про результат перевірки (емейл) → Завантаження в ЦБД/Попередження про неможливість завантаження
- Для виконання антивірусної перевірки файлів можна використати стороннє open source рішення ClamAV (https://docs.clamav.net/Introduction.html)
- Якщо всі файли перевірені і в них не виявлено загроз - відбувається публікація ДІ в ЦБД
- Якщо перевірка виявила хоча б один файл, що містить загрозу - публікація в ЦБД не відбувається, файл, що містить загрозу переноситься в Карантин.
- На емейл-адресу користувача, що виконував команду система формує і надсилає лист, що містить інформацію про статус виконання команди
- При успішному виконання команди: "Вітаємо, команда по створенню/зміні додаткової інформації до аукціону [Ідентифікатор запису зв'язаного аукціону], була успішно виконана."
- При не успішному виконанні: "Вітаємо, команда по створенню/зміні додаткової інформації до аукціону [Ідентифікатор запису зв'язаного аукціону], не була виконана. Помилка [код помилки], [опис помилки]"
- Флоу: Завантажити файл → Перевірка (асинхронна) на наявність вірусів → повідомлення про результат перевірки (емейл) → Завантаження в ЦБД/Попередження про неможливість завантаження
- Має бути реалізована асинхронна перевірка файлів, що завантажуються
- Запис у моделі може містити опис та один, або кілька файлів (кількість необмежена).
- Команди, що виконуються на стороні ЦБД для роботи з ДІ
- Створити
- Редагувати
- Виконати перевірки
- Скасувати команду
- Максимальна вага тіла будь-якого запиту - 50 Мб (якщо запит більший за 50 Мб - помилка 413 з перевищенням тіла запиту)
- Структура даних прописана нижче:
Legal_name | Legal_name_eng | Заголовок в ЦБД | Тип даних | Обов’язковість | Видимість на клієнтській частині ЦБД | Логіка заповнення | Опис | Приклад заповнення |
---|---|---|---|---|---|---|---|---|
[Ідентифікатор запису додаткової інформації] | [] | AdditionalInfoID | ID | + | - | Автоматично | Унікальний ідентифікатор запису в реєстрі "Додаткова інформація" | |
[Назва файлу] | [] | FileName | String | - | + | Заповнюється автоматично і дорівнює назві завантаженого файлу | Назва завантаженого файлу | Лист про розміщення додаткової інформації (1) |
[Файл] | [] | File | Binary data | - | + | Вручну користувачем | Файл. До одного запису реєстру може бути додано необмежену кількість файлів | |
[] | [] | Type |
| + | - | Автоматично - "AdditionalInformatiomDocument" |
| AdditionalInformatiomDocument |
Дата створення | Date Published | DatePublished | Data time | + | - | Заповнюється автоматично і дорівнює поточній даті та часу на момент створення запису | Дата створення запису "Додаткова інформація" | 2023.09.02 14:35 |
Дата редагування | Date Modified | DateModified | Data time | + | - | Заповнюється автоматично і дорівнює поточній даті та часу на момент збереження запису | Дата змін запису "Додаткова інформація". | 2023.09.02 14:38 |
Опис | Description | Description | Multilang | + | + | Вручну користувачем | Довільний опис запису "Додаткова інформація" | Орган приватизації не встиг завантажити рішення про викуп щодо аукціону № UA-PS-2021-04-28-000115-2. У зв’язку з чим електронний аукціон автоматично було визначено таким, що не відбувся. |
Ініціатор публікації | Iniciator | Iniciator | String | + | + | Вручну користувачем Посилання на довідник "Ініціатор публікації додаткової інформації" | Автор звернення, що до внесення додаткової інформації. | Інше |
[] | [] | IniciatorOther | Multilang | - | - | Вручну користувачем. Якщо в полі "Ініціатор публікації" вибрано значення "Інше", то поле:
Плейсхолдер: "Ініціатор публікації" | Орган приватизації | |
Причина публікації | Reason | Reason | String | + | + | Вручну користувачем Посилання на довідник "Причина публікації додаткової інформації" | Причина за якою вноситься додаткова інформація в процедуру. | Інше |
[] |
| ReasonOther | Multilang | - | - | Вручну користувачем. Якщо в полі "Причина публікації" вибрано значення "Інше", то поле:
Плейсхолдер: "Причина публікації" |
| Не встигли внести інформацію |
Створено | Owner | Owner | String | + | - | Автоматично Посилання на довідник користувачів адміністративної частини ЦБД | Користувач, який вніс зміни, чи створив запис моделі Довідник - користувачі системи | Адміністратор |
Статус | Status | Status | String | + | + | Автоматично Посилання на довідник "Статус додаткової інформації" | Не відправляти на ЦБД | Опубліковано |
Можливість приховання документів ДІ
Через Адмінку ЦБД є можливість змінювати scope (public <=> private) документа ДІ.
Токен зміненого документа логується в адмінці ЦБД так як це працює зараз з документами Процедури (в логах зміни scope Адміністратор ЦБД може побачити url на документ з Токеном до цього документа).
Власник Процедури, не маючи Токена private документа ДІ, не має можливості завантажувати/переглядати private документ ДІ. (endpoint */documents/{doc_id}/download НЕ реалізовуємо для ДІ)
В Адмінці ЦБД інтерфейс команди зміни scope для документа ДІ має давати можливість адміністратору вказати:
- procedure._id
- Link на документ ДІ для якого треба змінити scope
- New Scope
- Reason
- Дата і час виконання запиту (автоматично)
- id адміністратора, який виконує запит (підтягується автоматично)
- Command result (стандартна існуюча логіка)
Для зміни scope використовуємо стандартну існуючу команду Move procedure document commands
Історія змін ДІ (Архів ДІ)
Кожна зміна у Процедурі ініціює створення копії Процедури перед її оновленням. Так як при оновленні полів/документів ДІ сам обʼєкт Процедури не змінюється, є необхідність створити окремо Архів змін ДІ.
Необхідно розробити функціонал, що дозволить підтримувати історичність змін, що відбуваються у ДІ.
Має бути можливість по окремому endpoint отримувати історію всіх обʼєктів ДІ у форматі: {obj_1_id: [obj_1_archive_1, obj_1_archive_2], ...}
- /api/procedures/{procedure_id}/additionalInformation/history
Має бути можливість по окремому endpoint отримувати історію конкретного об'єкта ДІ у форматі [obj_1_archive_1, obj_1_archive_2, ...]
- /api/procedures/{procedure_id}/additionalInformation/{add_info_id}/history
Має бути можливість по окремому endpoint отримувати історію всіх документів по {add_info_id} у вигляді {doc_1_id: [doc_1_archive_1, doc_1_archive_2], ...}
- /api/procedures/{procedure_id}/additionalInformation/{add_info_id}/documents/history
Має бути можливість по окремому endpoint отримувати історію певного документа по {doc_id} у вигляді [doc_1_archive_1, doc_1_archive_2, ...]
- /api/procedures/{procedure_id}/additionalInformation/{add_info_id}/documents/{doc_id}/history
Якщо історія по Обʼєкту відсутня, то запит повертає пустий масив.
Якщо історія у документа, по якому виконується запит відсутня, віддавати:
"message": "Not found documents history object with id {{doc_id}}"
Вимоги до міграції даних
Повний перелік існуючої ДІ, яку необхідно мігрувати знаходиться з користувацької сторони тут
Мігрувати є можливість тільки ДІ із ЦБД3 процедур. Немає можливості змінювати моделі обʼєктів ЦБД2.
При міграції у обʼєктів Процедур необхідно оновити systemDateModified, щоб Процедури потрапили в Mirror і Майданчики оновили у себе обʼєкти з ДІ
Acceptance criteria
- Має бути реалізована міграція існуючих даних із "Додаткова інформація" порталу Прозоро.Продажі у ЦБД
- Міграція має бути виконана автоматичною системою (не вручну переносити із БД Порталу)
- Мапінг полів при міграції:
Портал Прозоро.Продажі | ЦБД | Логіка |
---|---|---|
ID Аукціону | - | Із поля Порталу "ID Аукціону" необхідно взяти ID Процедури у тілі якої створити модель additionalInformation |
- | additionalInformation.id | Автоматично створюється унікальний [Ідентифікатор запису додаткової інформації] additionalInformation.id для кожного запису ДІ |
- | owner | Автоматично заповнюється значенням system |
Дата створення | datePublished | ЦБД генерує автоматично при створенні обʼєкта ДІ |
- | dateModified | при міграції == datePublished |
Опис | description.uk_UA | Переносимо текст as-is |
- | initiator | При міграції заповнюємо значенням "Не визначено" |
- | reason | При міграції заповнюємо значенням "Не визначено" |
Документи додаткової інформації до аукціону | documents[*] | Кожен документ необхідно "забрати" зі сховища Порталу і завантажити в DS як public. |
Назва файла | documents[*].title.uk_UA | Назву кожного файлу переносимо as-is |
- | documents[*].url | url сформується автоматично при завантаженні документа |
- | documents[*].documentOf | При міграції заповнюємо значенням "additional_information" |
- | documents[*].documentType | При міграції заповнюємо значенням "additionalInformationDocument" |
- | documents[*].datePublished | При міграції заповнюємо значенням sysdate (дата і час міграції чи перенесення в DS) |
- | documents[*].dateModified | При міграції заповнюємо значенням sysdate (дата і час міграції чи перенесення в DS) |
Приклади оголошень з ДІ на порталі Прозоро.Продажі
Локація: Портал Прозоро.Продажі (https://prozorro.sale/) → Аукціон→ Блок "Додаткова інформація"
BRE001-UA-20230518-79594
LLP001-UA-20230410-88502
LSP001-UA-20230407-03951
SPE001-UA-20230517-74896
LSE001-UA-20230427-30844
SPD001-UA-20230522-97850
SPE001-UA-20230417-34421
UA-PS-2022-01-27-000033-2
LSE001-UA-20230418-52681
SPE001-UA-20230422-43215
LRE001-UA-20230308-97678
SPE001-UA-20230505-76007
LRE001-UA-20230320-94476
UA-PS-2021-09-05-000005-2
LRE001-UA-20230321-02622
LSE001-UA-20230323-88980
LSP001-UA-20230203-46720
LSP001-UA-20230310-26569
SPE001-UA-20230302-16833
UA-PS-2021-11-24-000020-1
BSE001-UA-20230301-79169
SUE001-UA-20230223-49035
SPE001-UA-20230302-85727
SPE001-UA-20230217-49301
Вимоги до API
Acceptance criteria
- Записи моделі "Додаткова інформація" мають бути доступні в API Прозоро.Продажі на читання
- Майданчики-партнери та портал Прозоро.Продажі мають мати можливість “забрати” інформацію моделі "Додаткова інформація" по конкретній процедурі для подальшого відображення на своєму майданчику/порталі.
- Майданчики-партнери та портал Прозоро.Продажі мають мати можливість “забрати” оновлення інформації про вже існуючий запис в моделі "Додаткова інформація"
- Необхідно врахувати, можливість в подальшому надати можливість майданчикам-партнерам публікувати (створювати) та редагувати записи моделі "Додаткова інформація" на своїй стороні і передати ці записи в ЦБД:
- Створення нових записів ДІ до оголошень
- Редагування існуючих записів ДІ (окрім редагування файлів)
- BI Прозоро.Продажі має мати можливість “забрати” інформацію про наявність записів моделі "Додаткова інформація" в розрізі процедур
- BI Прозоро.Продажі має мати можливість “забрати” оновлення інформації про вже існуючі записи в моделі "Додаткова інформація"
Вимоги до інтерфейсу порталу Прозоро.Продажі
Acceptance criteria
- На Порталі має відображатися ДІ із API Процедури (нова реалізація) так і ДІ, що зберігаються у сховищі Порталу (стара реалізація). Тобто, треба не втратити відображення ДІ у процедурах, в яких ДІ має "стару" логіку"
- Вимоги до пошуку на порталі по ДІ Прозоро.Продажі - відсутні
- Посилання на опис логіки відображення на Порталі
Вимоги до BI Прозоро.Продажі
Приклад Процедури з ДІ тут
Acceptance criteria
- Необхідно реалізувати фільтр, який дозволить відбирати Аукціони, у яких присутня ДІ (в обʼєкті присутній масив additionalInformation[] )
- Необхідно додати фільтри, що будуть давати можливість відбирати Аукціони по наявності значення у полях:
- additionalInformation[].reason (Причина ДІ)
- additionalInformation[].initiator (Ініціатор ДІ)
- additionalInformation[].datePublished (Дата створення ДІ)
- additionalInformation[].dateModified (Дата редагування ДІ)
- additionalInformation[].description.uk_UA (Опис ДІ)
Необхідно звернути увагу, що Процедура може отримати зміни в procedure.additionalInfo[] навіть в термінальному статусі. Концептуально поля Процедури не змінюються, тому ми НЕ оновлюємо procedure.dateModified
Тому, якщо Ваша логіка оновлення об'єктів зав'язана на стандартному procedure.dateModified, необхідно розширити цю логіку, та також відслідковувати зміни поля procedure._meta.systemDateModified
Вимоги до інтерфейсів майданчиків
Acceptance criteria
- Необхідно розширити/переглянути логіку синхронізації об'єктів з ЦБД: коли до Об'єкта додається/змінюється Додаткова Інформація (ДІ), то значення параметру procedure.dateModified НЕ зміниться. Об'єкт попаде в Mirror ЦБД зі зміненою датою procedure._meta.systemDateModified
Необхідно звернути увагу, що Процедура може отримати зміни в procedure.additionalInfo навіть в термінальному статусі. Концептуально поля Процедури не змінюються, тому ми НЕ оновлюємо procedure.dateModified
Тому, якщо Ваша логіка оновлення об'єктів зав'язана на стандартному procedure.dateModified, необхідно розширити цю логіку, та також відслідковувати зміни поля procedure._meta.systemDateModified
2. На сторінці Процедури необхідно відобразити розділ з Додатковою Інформацією.
- Назва блоку - Додаткова інформація.
- Дані для параметрів блоку ДІ беруться безпосередньо з процедури
- Записи ДІ може існувати в будь-якій процедурі ЦБД
- Додаткова інформація (ДІ), це масив, у якому може існувати необмежена кількість записів.
- Додаткова інформація - не обов'язкова, тому, при відсутності записів в об'єкті, блок Додаткова інформація не відображається
3. НЕ обовʼязкова вимога: додати відображення історії змін документів ДІ
Приклад обʼєкта з ДІ тут
Публічні для відображення поля:
- Заголовок: "Додаткова інформація"
- Опис: "{{procedure.additionalInformation[*].description.uk_UA}}
- Перелік файлів (масив): {{procedure.additionalInformation[*].documents.title.uk_UA}} + {{procedure.additionalInformation[*].documents.url}} (!Використовуєтся стандартна модель documents)
Приклад вигляду ДІ (на Порталі):
Довідники
Acceptance criteria
- Значення довідників мають бути відсортовані в алфавітному порядку
Legal_name | Legal_name_eng | Заголовок в ЦБД | Опис | Key | Значення довідника укр | Значення довідника eng |
---|---|---|---|---|---|---|
Ініціатор публікації додаткової інформації | The initiator of the publication of additional information | AdditionalInfoIniciator | Новий довідник
| auctionOrganizer | Організатор аукціону | Auction organizer |
winnerBroker | Майданчик переможця | Winner broker | ||||
participantBroker | Майданчик учасника | Participant's broker | ||||
prozoroSales | АТ Прозоро.Продажі | Prozoro. Sales | ||||
auctionParticipant | Учасник аукціону | Auction participant | ||||
auctionWinner | Переможець аукціону | Auction winner | ||||
other | Інше | Other | ||||
notSpecified | Не визначено | Not specified | ||||
Причина публікації додаткової інформації | Reason for publishing additional information | AdditionalInfoReason | Новий довідник
| error | Помилка | Error |
courtDecision | Судове рішення | Court decision | ||||
dgfDecision | Рішення ФГВФО | Decision of DGFDGFDGFDGF | ||||
other | Інше | Other | ||||
notSpecified | Не визначено | Not specified | ||||
Створено | Created by | AdditionalAnfoCreatedBy | Існуючий довідник - користувачі адміністративної частини ЦБД |
| ||
Статус додаткової інформації* | Additional information status | AdditionalInfoStatus | Новий довідник
|
| Опубліковано | Published |
| Виконується перевірка | Checking is in progress | ||||
Помилка при виконанні перевірки | Error |
* не зберігається в ЦБД.
Права доступу
Адміністративна частина ЦБД | Портал Прозоро.Продажі | Майданчики партнери | ||
---|---|---|---|---|
Операція | Адміністратор (admin | dop info) | Будь-яка роль | Будь-яка роль | Будь-яка роль |
Перегляд | + | + | + | + |
Створення | + | - | - | - |
Редагування | + (на всі поля, крім file) | - | - | - |
Видалення | - | - | - | - |
Видалення файлів, у яких статус = "Виявлено загрози" | + | - | - | - |
Видалення файлів, у яких статус != "Виявлено загрози" | - | - | - | - |