Переніс логіки PQ бота до ЦБД
В цьому розділі описана логіка відмови від PQ бота і переносу валідацій з боту в ЦБД під час активації тендеру.
Створення тендеру
Створення тендеру залишається незмінним для PQ. Створюється тендер так само як і раніше в статусі draft:
POST /api/2.5/tenders?opt_pretty=1 HTTP/1.0
Authorization: Bearer broker
Content-Length: 4542
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"title": "Комп’ютерне обладнання",
"mainProcurementCategory": "goods",
"procuringEntity": {
"name": "Державне управління справами",
"identifier": {
"scheme": "UA-EDR",
"id": "00037256",
"uri": "http://www.dus.gov.ua/"
},
"address": {
"countryName": "Україна",
"postalCode": "01220",
"region": "м. Київ",
"locality": "м. Київ",
"streetAddress": "вул. Банкова, 11, корпус 1"
},
"contactPoint": {
"name": "Державне управління справами",
"telephone": "+0440000000"
},
"kind": "general"
},
"value": {
"amount": 22000,
"currency": "UAH"
},
"tenderPeriod": {
"endDate": "2023-10-04T01:00:00+03:00"
},
"procurementMethodType": "priceQuotation",
"procurementMethod": "selective",
"items": [
{
"description": "Комп’ютерне обладнання",
"quantity": 5,
"deliveryDate": {
"startDate": "2023-09-22T01:00:00+03:00",
"endDate": "2023-09-25T01:00:00+03:00"
},
"unit": {
"name": "кг",
"code": "KGM",
"value": {
"amount": 6
}
},
"deliveryAddress": {
"countryName": "Україна",
"postalCode": "79000",
"region": "м. Київ",
"locality": "м. Київ",
"streetAddress": "вул. Банкова 1"
},
"classification": {
"scheme": "ДК021",
"id": "44617100-9",
"description": "Cartons"
},
"profile": "655360-30230000-889652-40000777",
"additionalClassifications": [
{
"scheme": "INN",
"id": "17.21.1",
"description": "папір і картон гофровані, паперова й картонна тара"
}
]
}
],
"agreement": {
"id": "2e14a78a2074952d5a2d256c3c004dda"
},
"criteria": [...]
},
"config": {
"hasAuction": false,
"hasAwardingOrder": true,
"hasValueRestriction": true,
"valueCurrencyEquality": true,
"hasPrequalification": false,
"minBidsNumber": 1,
"hasPreSelectionAgreement": true
}
}
HTTP/1.0 201 Created
Content-Type: application/json
Location: http://lb-api-sandbox.prozorro.gov.ua/api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f
{
"data": {
"mainProcurementCategory": "goods",
"procurementMethod": "selective",
"title": "Комп’ютерне обладнання",
"procurementMethodType": "priceQuotation",
"awardCriteria": "lowestCost",
"status": "draft",
"agreement": {
"id": "2e14a78a2074952d5a2d256c3c004dda"
},
"value": {
"amount": 22000.0,
"currency": "UAH",
"valueAddedTaxIncluded": true
},
"tenderPeriod": {
"endDate": "2023-10-04T01:00:00+03:00",
"startDate": "2023-09-20T01:00:00+03:00"
},
"procuringEntity": {
"name": "Державне управління справами",
"identifier": {
"scheme": "UA-EDR",
"id": "00037256",
"uri": "http://www.dus.gov.ua/"
},
"address": {
"streetAddress": "вул. Банкова, 11, корпус 1",
"locality": "м. Київ",
"region": "м. Київ",
"postalCode": "01220",
"countryName": "Україна"
},
"contactPoint": {
"telephone": "+0440000000",
"name": "Державне управління справами"
},
"kind": "general"
},
"items": [
{
"id": "6d463cf854bc4c0eb04915ba7c172bea",
"description": "Комп’ютерне обладнання",
"classification": {
"description": "Cartons",
"scheme": "ДК021",
"id": "44617100-9"
},
"quantity": 5.0,
"deliveryDate": {
"startDate": "2023-09-22T01:00:00+03:00",
"endDate": "2023-09-25T01:00:00+03:00"
},
"deliveryAddress": {
"streetAddress": "вул. Банкова 1",
"locality": "м. Київ",
"region": "м. Київ",
"postalCode": "79000",
"countryName": "Україна"
},
"additionalClassifications": [
{
"scheme": "INN",
"id": "17.21.1",
"description": "папір і картон гофровані, паперова й картонна тара"
}
],
"unit": {
"name": "кг",
"value": {
"amount": 6.0,
"currency": "UAH",
"valueAddedTaxIncluded": true
},
"code": "KGM"
},
"profile": "655360-30230000-889652-40000777"
}
],
"criteria": [...],
"tenderID": "UA-2023-09-20-000001-a",
"owner": "broker",
"date": "2023-09-20T01:00:00+03:00",
"dateCreated": "2023-09-20T01:00:00+03:00",
"dateModified": "2023-09-20T01:00:00+03:00",
"id": "bb8949e735294cbaa864bd3bc68a1e5f"
},
"config": {
"hasAuction": false,
"hasAwardingOrder": true,
"hasValueRestriction": true,
"valueCurrencyEquality": true,
"hasPrequalification": false,
"minBidsNumber": 1,
"hasPreSelectionAgreement": true
},
"access": {
"token": "d3c6750ff65148df856b59e65feba396",
"transfer": "310d898a127548d195e67ab4293aaa05"
}
}
Редагування тендеру
Замовник може редагувати закупівлю перед активацією. В попередньому флоу з використанням PQ бота був такий самий етап перед публікацією (до зміни статусу на draft.publishing).
Активація тендеру
В попередньому флоу після створення Замовник публікував процедуру, змінивши статус на draft.publishing, де робот priceQuotationBot запускав перевірку процедури та доповнював процедуру додатковими даними, отриманими з бази даних електронних каталогів ProZorro, включаючи shortListedFirms.
Після успішної валідації priceQuotationBot переводив процедуру в статус: active.tendering чи draft.unsuccessful у разі, якщо процедура не проходила перевірку через недійсні параметри.
Тепер ми переносимо всю логіку валідації до ЦБД і перевіряємо це на моменті, коли замовник змінює статус процедури на active.tendering через PATCH тендеру.
Валідації бота PQ:
Наявність профілю товару в каталозі
Наявність відповідного договору
Перевірка, що угода в профілі та пов’язана угода в тендері однакові
Угода не повинна бути розірвана (статус terminated)
Угода має кваліфікованих постачальників (suppliers)
Можливі помилки
Якщо Замовник спробує активувати процедуру PQ з неіснуючим профілем у каталозі, ми побачимо помилку:
PATCH /api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f?acc_token=d3c6750ff65148df856b59e65feba396 HTTP/1.0
Authorization: Bearer broker
Content-Length: 40
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"status": "active.tendering"
}
}
HTTP/1.0 422 Unprocessable Entity
Content-Type: application/json
{
"status": "error",
"errors": [
{
"location": "body",
"name": "items.profile",
"description": "Profile 655360-30230000-889652-40000777 not found in catalogue."
}
]
}
Якщо Замовник спробує активувати процедуру PQ з неіснуючим договором, буде згенеровано наступну помилку:
PATCH /api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f?acc_token=d3c6750ff65148df856b59e65feba396 HTTP/1.0
Authorization: Bearer broker
Content-Length: 40
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"status": "active.tendering"
}
}
HTTP/1.0 422 Unprocessable Entity
Content-Type: application/json
{
"status": "error",
"errors": [
{
"location": "body",
"name": "agreement",
"description": "Agreement not found"
}
]
}
Якщо угода (agreement) в профілі та угода в тендері не однакові, буде згенеровано наступну помилку:
PATCH /api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f?acc_token=d3c6750ff65148df856b59e65feba396 HTTP/1.0
Authorization: Bearer broker
Content-Length: 40
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"status": "active.tendering"
}
}
HTTP/1.0 422 Unprocessable Entity
Content-Type: application/json
{
"status": "error",
"errors": [
{
"location": "body",
"name": "agreement",
"description": "Tender agreement doesn't match profile agreement"
}
]
}
Якщо угода розірвана:
PATCH /api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f?acc_token=d3c6750ff65148df856b59e65feba396 HTTP/1.0
Authorization: Bearer broker
Content-Length: 40
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"status": "active.tendering"
}
}
HTTP/1.0 422 Unprocessable Entity
Content-Type: application/json
{
"status": "error",
"errors": [
{
"location": "body",
"name": "agreement",
"description": "Agreement status is not active"
}
]
}
Якщо є проблема з підключенням до електронних каталогів ProZorro, ми побачимо помилку:
PATCH /api/2.5/tenders/bb8949e735294cbaa864bd3bc68a1e5f?acc_token=d3c6750ff65148df856b59e65feba396 HTTP/1.0
Authorization: Bearer broker
Content-Length: 40
Content-Type: application/json
Host: lb-api-sandbox.prozorro.gov.ua
{
"data": {
"status": "active.tendering"
}
}
HTTP/1.0 409 Conflict
Content-Type: application/json
{
"status": "error",
"errors": [
{
"location": "body",
"name": "data",
"description": "Error while getting data from ProZorro e-Catalogues: Connection closed. Try again later"
}
]
}
Успішний сценарій
Якщо процедура PQ відповідає всім вимогам, вона буде переведена в статус active.tendering:
GET /api/2.5/tenders/511ad32c232540d693bcdda2dd603406 HTTP/1.0
Authorization: Bearer broker
Host: public-api-sandbox.prozorro.gov.ua
HTTP/1.0 200 OK
Content-Type: application/json
{
"data": {
"date": "2023-09-20T01:00:00+03:00",
"dateModified": "2023-09-20T01:00:00+03:00",
"dateCreated": "2023-09-20T01:00:00+03:00",
"tenderID": "UA-2023-09-20-000001-a",
"owner": "broker",
"title": "Комп’ютерне обладнання",
"mainProcurementCategory": "goods",
"procurementMethod": "selective",
"procurementMethodType": "priceQuotation",
"awardCriteria": "lowestCost",
"status": "active.tendering",
"agreement": {
"id": "2e14a78a2074952d5a2d256c3c004dda"
},
"value": {
"amount": 22000.0,
"currency": "UAH",
"valueAddedTaxIncluded": true
},
"tenderPeriod": {
"startDate": "2023-09-20T01:00:00+03:00",
"endDate": "2023-10-04T01:00:00+03:00"
},
"procuringEntity": {
"name": "Державне управління справами",
"identifier": {
"scheme": "UA-EDR",
"id": "00037256",
"uri": "http://www.dus.gov.ua/"
},
"address": {
"streetAddress": "вул. Банкова, 11, корпус 1",
"locality": "м. Київ",
"region": "м. Київ",
"postalCode": "01220",
"countryName": "Україна"
},
"contactPoint": {
"telephone": "+0440000000",
"name": "Державне управління справами"
},
"kind": "general"
},
"noticePublicationDate": "2023-09-20T01:00:00+03:00",
"items": [
{
"id": "1624a28ab11b43cabcaef9018c023a16",
"description": "Комп’ютерне обладнання",
"classification": {
"description": "Cartons",
"scheme": "ДК021",
"id": "44617100-9"
},
"quantity": 5.0,
"deliveryDate": {
"startDate": "2023-09-22T01:00:00+03:00",
"endDate": "2023-09-25T01:00:00+03:00"
},
"deliveryAddress": {
"streetAddress": "вул. Банкова 1",
"locality": "м. Київ",
"region": "м. Київ",
"postalCode": "79000",
"countryName": "Україна"
},
"additionalClassifications": [
{
"scheme": "INN",
"id": "17.21.1",
"description": "папір і картон гофровані, паперова й картонна тара"
}
],
"unit": {
"name": "кг",
"value": {
"amount": 6.0,
"currency": "UAH",
"valueAddedTaxIncluded": true
},
"code": "KGM"
},
"profile": "655360-30230000-889652-40000777"
}
],
"criteria": [...],
"contractTemplateName": "00000000-0.0001.01",
"next_check": "2023-10-04T01:00:00+03:00",
"id": "bb8949e735294cbaa864bd3bc68a1e5f"
},
"config": {
"hasAuction": false,
"hasAwardingOrder": true,
"hasValueRestriction": true,
"valueCurrencyEquality": true,
"hasPrequalification": false,
"minBidsNumber": 1,
"hasPreSelectionAgreement": true
}
}
В процедурі більше не буде поля shortlistedFirms. Під час подання/активації біда буде працювати валідація, що bid.tenderers має бути вказаний в договорі як кваліфікований постачальник.
Висновки
Процедура PQ більше не матиме статусів draft.publishing, draft.unsuccessful.
Якщо процедура PQ не відповідає всім вимогам, її не буде переведено в active.tendering, доки не буде виконано всі вимоги.
Логіка створення та редагування процедури PQ не буде змінена.
Подальші дії після статусу active.tendering залишаються незмінними.