open-contracting / bi.dream.gov.ua

DREAM Analytics
https://bi.dream.gov.ua
Apache License 2.0
1 stars 0 forks source link

Data / Filters: Додати блок фільтрів "Проєкто-кошторисна документація" до сторінки "Всі фільтри" #250

Open ndrhzn opened 4 hours ago

ndrhzn commented 4 hours ago

На сторінку "Всі фільтри" нам потрібно додати новий блок фільтрів.

Назва блоку - "Проєктно-кошторисна документація" / Design documentation Розташування блоку - під блоком "Документи та класифікатори"

Перелік фільтрів

ua en endpoint path notes example
Наявність завдання на проєктування Design task availability ideas approaches/items/additionalClassifications/id де approaches/items/additionalClassifications/scheme="UA-SESC" Якщо код починається з ZP ZP01:1742-7151-0066-1612
Наявність проєктної документації Design documents availability deisgn-documentation designDocumentation/code Із кодом завдання на проєктування звертаємось до design-documentation endpoint PD01:1725-9390-5906-6576
Наявність затвердженої проєктної документації Approved design documents availability deisgn-documentation milestones/code де milestones/type = “approve” Із кодом завдання на проєктування звертаємось до design-documentation endpoint ZA01:4755-9918-7050-6019
Наявність експертизи Expertise availability deisgn-documentation milestones/code де milestones/type = “expertise” Із кодом завдання на проєктування звертаємось до design-documentation endpoint EX01:9272-8502-4673-1303
Наявність дозволу на будівництво Construction permission availability deisgn-documentation milestones/code де milestones/type = “constructionPermission” Із кодом завдання на проєктування звертаємось до design-documentation endpoint ІУ012231018792

Життєвий цикл

Процедура

Перевірити, чи має проєкт завдання на проєктування

Тобто, на рівні даних проєкту ми дивимось в елемент approaches/items/additionalClassifications/id де approaches/items/additionalClassifications/scheme="UA-SESC".

Якщо елемент з такою схемою є, і цей елемент починається з літер ZP, тоді ми знаємо, що цей елемент містить код завдання на проєктування. У цьому елементі можуть бути коди, які починаються з інших літер, оскільки раніше валідації на внесенні даних не було. Саме тому нам і потрібно застосовувати цю перевірку.

Наприклад, на рівні проєкту 0056k0ts-0975-4721-at3e-p5qd0ie31psa ми маємо обʼєкт інвестицій (item) із потрібною нам схемою класифікації.

{
"id": "ZP01:1742-7151-0066-1612",
"scheme": "UA-SESC"
}

Перевірити, чи створена проєктна документація

Якщо у нас є код завдання на проєктування, тоді ми можемо з ним звернутися до design-documentation endpoint у форматі https://public-isb.dream.gov.ua/isb/e-construction/design-documentation?design-task-code={design-task-code}.

Тобто, з нашим реальним кодом з попереднього етапу, запит виглядатиме як

https://public-isb.dream.gov.ua/isb/e-construction/design-documentation?design-task-code=ZP01:1742-7151-0066-1612

Якщо за цим завданням на проєктування ще немає проєктної документації, тоді АРІ поверне 404. Але якщо проєктна документація вже є, тоді ми маємо отримати JSON, у котрому буде міститись код проєктної документації.

Наприклад, за наведеним вище запитом, ми отримаємо

{
  "designDocumentation": {
    "code": "PD01:1725-9390-5906-6576",
    "date": "2023-07-10",
    "classification": {
      "scheme": "UA-DKBS",
      "id": "1263.3"
    },
    "nature": "construction",
    "isReusedDesign": false,
    "reusedDesignId": null,
    "costEstimate": {
      "amount": [
        {
          "es_code": null,
          "estimate_val": 15432.984,
          "estimate_val_done": null,
          "estimate_val_equipment": 1286.465,
          "estimate_val_done_equipment": null,
          "estimate_val_other_expenses": 3734.158,
          "estimate_val_construction_works": 10412.361,
          "estimate_val_done_other_expenses": null,
          "estimate_val_done_construction_works": null
        }
      ]
    },
    "sesc-class": null,
    "milestones": [
      {
        "type": "approve",
        "code": "ZA01:4755-9918-7050-6019",
        "dateMet": "2023-07-10"
      },
      {
        "type": "expertise",
        "code": "EX01:9272-8502-4673-1303",
        "dateMet": "2023-08-25"
      },
      {
        "type": "constructionPermission",
        "code": "ІУ012231018792",
        "dateMet": "2023-10-18"
      }
    ]
  }
}

Якщо у відповіді є елемент designDocumentation/code, ми можемо зробити висновок про наявність проєктної документації.

Перевірити, чи проєктна документація затверджена

Аби перевірити, чи проєктна документація вже затверджена, нам потрібно подивитись, чи наявний у відповіді milestone із типом approve.

У нашому прикладі це виглядає ось так:

{
  "type": "approve",
  "code": "ZA01:4755-9918-7050-6019",
  "dateMet": "2023-07-10"
}

Якщо milestone з таким типом є, тоді ми можемо зробити висновок, що проєктна документація затверджена.

Перевірити, чи наявна експертиза проєктної документації

Аби перевірити, чи проєктна документація вже пройшла експертизу, нам потрібно подивитися, чи наявний у відповіді milestone із типом expertise.

У нашому випадку це виглядає наступним чином:

{
  "type": "expertise",
  "code": "EX01:9272-8502-4673-1303",
  "dateMet": "2023-08-25"
}

Якщо milestone з таким типом є, тоді ми можемо зробити висновок, що проєктна документація отримала експертний висновок.

Перевірити, чи наявний дозвіл на будівництво

Аби перевірити, чи вже є дозвіл на будівництво, потрібно подивитися, чи наявний у відповіді milestone із типом constructionPermission.

У нашому випадку це виглядає наступним чином:

{
  "type": "constructionPermission",
  "code": "ІУ012231018792",
  "dateMet": "2023-10-18"
}

Якщо milestone з таким типом є, тоді ми можемо зробити висновок, що за цим завданням на проєктування вже є дозвіл на будівництво.

Нюанси даних

Завдання на проєктування у нас привʼязуються до обʼєктів інвестицій (items). Технічне рішення у проєкті (approaches) може мати декілька обʼєктів інвестицій, однак не всі з них можуть потребувати завдання на проєктування, оскільки проєктна документація потрібна лише для тих обʼєктів інвестицій, що передбачають будівництво.

Для імплементації фільтрів нам це не дуже важливо. Ми перевіряємо не те, чи всі обʼєкти інвестицій, котрі можуть мати завдання на проєктування, справді його мають, а радше, чи бодай один обʼєкт інвестицій має завдання на проєктування. Однак для інших задач нам цей нюанс буде важливий.

ndrhzn commented 4 hours ago

125 #96

ndrhzn commented 4 hours ago

У нас вже є фільтр "Наявність ПКД", однак після того, як ми реалізуємо цю нову логіку, цей фільтр втратить актуальність. В оригінальній імплементації цього фільтру ми використовували досить спрощену і не зовсім коректну логіку.