Двофазний коміт

Механізм створення двофазного коміта

Двофазний коміт пропонує механізм, завдяки якому в ЦБД будуть опубліковані тільки ті закупівлі, над якими майданчик має контроль і змогу самостійно скасувати їх дублікати.

Причиною виникнення дублікатів закупівель є ситуації, коли автор запиту на створення закупівлі не отримував відповіді від сервера про її створення, і, відповідно, повторював спробу, що призводило до дублювання закупівлі. Видалення таких закупівель вимагало адміністративного втручання.

Створення закупівлі за допомогою однофазного коміта

Відсилання однофазного запиту на створення закупівлі (POST /tenders), за “старим” механізмом, після якого закупівля створюється одразу в статусі active.enquiries:

POST /api/2.3/tenders?opt_pretty=1 HTTP/1.0
Authorization: Basic YnJva2VyOg==
Content-Length: 2359
Content-Type: application/json
Host: api-sandbox.openprocurement.org

{
  "data": {
    "tenderPeriod": {
      "endDate": "2017-08-08T17:36:49.306344"
    },
    "title": "футляри до державних нагород",
    "minimalStep": {
      "currency": "UAH",
      "amount": 35
    },
    "enquiryPeriod": {
      "endDate": "2017-08-01T17:36:49.306344"
    },
    "procurementMethodType": "belowThreshold",
    "value": {
      "currency": "UAH",
      "amount": 500
    },
    "procuringEntity": {
      "contactPoint": {
        "name": "Державне управління справами",
        "telephone": "0440000000"
      },
      "identifier": {
        "scheme": "UA-EDR",
        "id": "00037256",
        "uri": "http://www.dus.gov.ua/"
      },
      "name": "Державне управління справами",
      "kind": "general",
      "address": {
        "countryName": "Україна",
        "postalCode": "01220",
        "region": "м. Київ",
        "streetAddress": "вул. Банкова, 11, корпус 1",
        "locality": "м. Київ"
      }
    },
    "items": [
      {
        "description": "футляри до державних нагород",
        "classification": {
          "scheme": "ДК021",
          "id": "44617100-9",
          "description": "Cartons"
        },
        "additionalClassifications": [
          {
            "scheme": "ДКПП",
            "id": "17.21.1",
            "description": "папір і картон гофровані, паперова й картонна тара"
          }
        ],
        "deliveryAddress": {
          "countryName": "Україна",
          "postalCode": "79000",
          "region": "м. Київ",
          "streetAddress": "вул. Банкова 1",
          "locality": "м. Київ"
        },
        "deliveryDate": {
          "startDate": "2017-07-27T17:36:49.306344",
          "endDate": "2017-07-30T17:36:49.306344"
        },
        "unit": {
          "code": "44617100-9",
          "name": "item"
        },
        "quantity": 5
      }
    ]
  }
}


201 Created
Content-Type: application/json; charset=UTF-8
Location: http://api-sandbox.openprocurement.org/api/2.3/tenders/f3641d0ba0f042e8b49de06d5c7921af

{
  "access": {
    "token": "2ef61fa89e8a451ba4149d2f8e31173b"
  },
  "data": {
    "procurementMethod": "open",
    "status": "active.enquiries",
    "awardCriteria": "lowestCost",
    "tenderPeriod": {
      "startDate": "2017-08-01T17:36:49.306344+03:00",
      "endDate": "2017-08-08T17:36:49.306344+03:00"
    },
    "title": "футляри до державних нагород",
    "minimalStep": {
      "currency": "UAH",
      "amount": 35.0,
      "valueAddedTaxIncluded": true
    },
    "items": [
      {
        "description": "футляри до державних нагород",
        "classification": {
          "scheme": "ДК021",
          "description": "Cartons",
          "id": "44617100-9"
        },
        "additionalClassifications": [
          {
            "scheme": "ДКПП",
            "id": "17.21.1",
            "description": "папір і картон гофровані, паперова й картонна тара"
          }
        ],
        "deliveryAddress": {
          "postalCode": "79000",
          "countryName": "Україна",
          "streetAddress": "вул. Банкова 1",
          "region": "м. Київ",
          "locality": "м. Київ"
        },
        "deliveryDate": {
          "startDate": "2017-07-27T17:36:49.306344+03:00",
          "endDate": "2017-07-30T17:36:49.306344+03:00"
        },
        "id": "4ee2b0431a064e0eb155eeb650bdfdd0",
        "unit": {
          "code": "44617100-9",
          "name": "item"
        },
        "quantity": 5
      }
    ],
    "procurementMethodType": "belowThreshold",
    "value": {
      "currency": "UAH",
      "amount": 500.0,
      "valueAddedTaxIncluded": true
    },
    "submissionMethod": "electronicAuction",
    "date": "2017-07-25T17:36:55.659566+03:00",
    "next_check": "2017-08-01T17:36:49.306344+03:00",
    "procuringEntity": {
      "contactPoint": {
        "name": "Державне управління справами",
        "telephone": "0440000000"
      },
      "identifier": {
        "scheme": "UA-EDR",
        "id": "00037256",
        "uri": "http://www.dus.gov.ua/"
      },
      "name": "Державне управління справами",
      "kind": "general",
      "address": {
        "postalCode": "01220",
        "countryName": "Україна",
        "streetAddress": "вул. Банкова, 11, корпус 1",
        "region": "м. Київ",
        "locality": "м. Київ"
      }
    },
    "enquiryPeriod": {
      "startDate": "2017-07-25T17:36:55.659520+03:00",
      "endDate": "2017-08-01T17:36:49.306344+03:00"
    },
    "owner": "broker",
    "dateModified": "2017-07-25T17:36:55.662421+03:00",
    "id": "f3641d0ba0f042e8b49de06d5c7921af",
    "tenderID": "UA-2017-07-25-000001"
  }
}

Створення закупівлі за допомогою двофазного коміта

Закупівля стає доступною після успішного та послідовного виконання двох наступних запитів:

  1. Створення закупівлі у статусі draft.

  2. Переведення закупівлі в статус active.enquiries окремим запитом (публікація).

Створення закупівлі

При запиті POST /tenders передається закупівля зі статусом draft. В результаті виконання запиту віддається acc_token для подальшого управління закупівлею.

POST /api/2.3/tenders?opt_pretty=1 HTTP/1.0
Authorization: Basic YnJva2VyOg==
Content-Length: 2378
Content-Type: application/json
Host: api-sandbox.openprocurement.org

{
  "data": {
    "status": "draft",
    "tenderPeriod": {
      "endDate": "2017-08-08T17:36:49.306344"
    },
    "title": "футляри до державних нагород",
    "minimalStep": {
      "currency": "UAH",
      "amount": 35
    },
    "enquiryPeriod": {
      "endDate": "2017-08-01T17:36:49.306344"
    },
    "procurementMethodType": "belowThreshold",
    "value": {
      "currency": "UAH",
      "amount": 500
    },
    "procuringEntity": {
      "contactPoint": {
        "name": "Державне управління справами",
        "telephone": "0440000000"
      },
      "identifier": {
        "scheme": "UA-EDR",
        "id": "00037256",
        "uri": "http://www.dus.gov.ua/"
      },
      "name": "Державне управління справами",
      "kind": "general",
      "address": {
        "countryName": "Україна",
        "postalCode": "01220",
        "region": "м. Київ",
        "streetAddress": "вул. Банкова, 11, корпус 1",
        "locality": "м. Київ"
      }
    },
    "items": [
      {
        "description": "футляри до державних нагород",
        "classification": {
          "scheme": "ДК021",
          "id": "44617100-9",
          "description": "Cartons"
        },
        "additionalClassifications": [
          {
            "scheme": "ДКПП",
            "id": "17.21.1",
            "description": "папір і картон гофровані, паперова й картонна тара"
          }
        ],
        "deliveryAddress": {
          "countryName": "Україна",
          "postalCode": "79000",
          "region": "м. Київ",
          "streetAddress": "вул. Банкова 1",
          "locality": "м. Київ"
        },
        "deliveryDate": {
          "startDate": "2017-07-27T17:36:49.306344",
          "endDate": "2017-07-30T17:36:49.306344"
        },
        "unit": {
          "code": "44617100-9",
          "name": "item"
        },
        "quantity": 5
      }
    ]
  }
}


201 Created
Content-Type: application/json; charset=UTF-8
Location: http://api-sandbox.openprocurement.org/api/2.3/tenders/e66dcc48a19e498984e3e5e51131ad68

{
  "access": {
    "token": "75424b9a8c2842d0a9c24e477ccef649"
  },
  "data": {
    "procurementMethod": "open",
    "status": "draft",
    "awardCriteria": "lowestCost",
    "tenderPeriod": {
      "startDate": "2017-08-01T17:36:49.306344+03:00",
      "endDate": "2017-08-08T17:36:49.306344+03:00"
    },
    "title": "футляри до державних нагород",
    "minimalStep": {
      "currency": "UAH",
      "amount": 35.0,
      "valueAddedTaxIncluded": true
    },
    "items": [
      {
        "description": "футляри до державних нагород",
        "classification": {
          "scheme": "ДК021",
          "description": "Cartons",
          "id": "44617100-9"
        },
        "additionalClassifications": [
          {
            "scheme": "ДКПП",
            "id": "17.21.1",
            "description": "папір і картон гофровані, паперова й картонна тара"
          }
        ],
        "deliveryAddress": {
          "postalCode": "79000",
          "countryName": "Україна",
          "streetAddress": "вул. Банкова 1",
          "region": "м. Київ",
          "locality": "м. Київ"
        },
        "deliveryDate": {
          "startDate": "2017-07-27T17:36:49.306344+03:00",
          "endDate": "2017-07-30T17:36:49.306344+03:00"
        },
        "id": "3e25bda8806e4d27a03dc5f9e4805f5e",
        "unit": {
          "code": "44617100-9",
          "name": "item"
        },
        "quantity": 5
      }
    ],
    "procurementMethodType": "belowThreshold",
    "value": {
      "currency": "UAH",
      "amount": 500.0,
      "valueAddedTaxIncluded": true
    },
    "submissionMethod": "electronicAuction",
    "date": "2017-07-25T17:36:50.226421+03:00",
    "procuringEntity": {
      "contactPoint": {
        "name": "Державне управління справами",
        "telephone": "0440000000"
      },
      "identifier": {
        "scheme": "UA-EDR",
        "id": "00037256",
        "uri": "http://www.dus.gov.ua/"
      },
      "name": "Державне управління справами",
      "kind": "general",
      "address": {
        "postalCode": "01220",
        "countryName": "Україна",
        "streetAddress": "вул. Банкова, 11, корпус 1",
        "region": "м. Київ",
        "locality": "м. Київ"
      }
    },
    "enquiryPeriod": {
      "startDate": "2017-07-25T17:36:50.226395+03:00",
      "endDate": "2017-08-01T17:36:49.306344+03:00"
    },
    "owner": "broker",
    "dateModified": "2017-07-25T17:36:50.228135+03:00",
    "id": "e66dcc48a19e498984e3e5e51131ad68",
    "tenderID": "UA-2017-07-25-000001"
  }
}

Закупівля зі статусом draft “невидима” в переліку GET /tenders. Її, зокрема, не помічає хронограф і не перемикає статуси.

Публікування закупівлі

Запит PATCH /tenders/{id}?acc_token=... {“data”:{“status”:”active.enquiries”}} змінює статус закупівлі (згідно із запитом) і, відповідно, цим публікує її (“візуалізує” її в переліку GET /tenders).

PATCH /api/2.3/tenders/e66dcc48a19e498984e3e5e51131ad68?acc_token=75424b9a8c2842d0a9c24e477ccef649 HTTP/1.0
Authorization: Basic YnJva2VyOg==
Content-Length: 40
Content-Type: application/json
Host: api-sandbox.openprocurement.org

{
  "data": {
    "status": "active.enquiries"
  }
}


200 OK
Content-Type: application/json; charset=UTF-8

{
  "data": {
    "procurementMethod": "open",
    "status": "active.enquiries",
    "awardCriteria": "lowestCost",
    "tenderPeriod": {
      "startDate": "2017-08-01T17:36:49.306344+03:00",
      "endDate": "2017-08-08T17:36:49.306344+03:00"
    },
    "title": "футляри до державних нагород",
    "minimalStep": {
      "currency": "UAH",
      "amount": 35.0,
      "valueAddedTaxIncluded": true
    },
    "items": [
      {
        "description": "футляри до державних нагород",
        "classification": {
          "scheme": "ДК021",
          "description": "Cartons",
          "id": "44617100-9"
        },
        "additionalClassifications": [
          {
            "scheme": "ДКПП",
            "id": "17.21.1",
            "description": "папір і картон гофровані, паперова й картонна тара"
          }
        ],
        "deliveryAddress": {
          "postalCode": "79000",
          "countryName": "Україна",
          "streetAddress": "вул. Банкова 1",
          "region": "м. Київ",
          "locality": "м. Київ"
        },
        "deliveryDate": {
          "startDate": "2017-07-27T17:36:49.306344+03:00",
          "endDate": "2017-07-30T17:36:49.306344+03:00"
        },
        "id": "3e25bda8806e4d27a03dc5f9e4805f5e",
        "unit": {
          "code": "44617100-9",
          "name": "item"
        },
        "quantity": 5
      }
    ],
    "procurementMethodType": "belowThreshold",
    "value": {
      "currency": "UAH",
      "amount": 500.0,
      "valueAddedTaxIncluded": true
    },
    "submissionMethod": "electronicAuction",
    "date": "2017-07-25T17:36:50.255342+03:00",
    "next_check": "2017-08-01T17:36:49.306344+03:00",
    "procuringEntity": {
      "contactPoint": {
        "name": "Державне управління справами",
        "telephone": "0440000000"
      },
      "identifier": {
        "scheme": "UA-EDR",
        "id": "00037256",
        "uri": "http://www.dus.gov.ua/"
      },
      "name": "Державне управління справами",
      "kind": "general",
      "address": {
        "postalCode": "01220",
        "countryName": "Україна",
        "streetAddress": "вул. Банкова, 11, корпус 1",
        "region": "м. Київ",
        "locality": "м. Київ"
      }
    },
    "enquiryPeriod": {
      "startDate": "2017-07-25T17:36:50.226395+03:00",
      "endDate": "2017-08-01T17:36:49.306344+03:00"
    },
    "owner": "broker",
    "dateModified": "2017-07-25T17:36:50.255342+03:00",
    "id": "e66dcc48a19e498984e3e5e51131ad68",
    "tenderID": "UA-2017-07-25-000001"
  }
}

Всі закупівлі, які були створені в ЦБД, але не опубліковані, не будуть відображатись на майданчику і, відповідно, не будуть призводити до їх оголошення.

Повторення запиту на публікацію, у випадку проблем з отриманням відповіді від сервера, не буде спричиняти помилок.

Новий механізм доступний паралельно зі “старим”. “Старий”, імовірно, буде вимкнено в одному з наступних release-ів.

Робота з помилками

У випадку неуспішності запиту та/або 5xx помилки, перевірте модифікований об’єкт (закупівлю, пропозицію, контракт і т.п.), оскільки 5xx помилка не обов’язково означає, що запит не відбувся. Варто повторювати запит з певним інтервалом, доки він не пройде успішно.

Детальніший опис помилок та рекомендацій щодо дій при їх виникненні описаний у розділі Коди стану.

Ось приклад помилки неправильно сформованого запиту. Ця помилка вказує, що data не знайдено у тілі JSON.

POST /api/2.3/tenders?opt_pretty=1 HTTP/1.0
Authorization: Basic YnJva2VyOg==
Content-Length: 4
Content-Type: application/json
Host: api-sandbox.openprocurement.org


422 Unprocessable Entity
Content-Type: application/json; charset=UTF-8

{
  "status": "error",
  "errors": [
    {
      "description": "No JSON object could be decoded",
      "location": "body",
      "name": "data"
    }
  ]
}