АРМА

Етап 1: Складний актив

Загальний опис

  • Створити новий тип закупівлі (procurementMethodType) на основі aboveThresholdEU.

  • Налаштувати обмеження конфігурацій. Відключити непотрібну функціональність.

  • Реалізувати новий тип value для проведення тендеру по розміру винагороди (у відсотках).

Закупівля АРМА (загальна інформація)

Процес відбору управителя складних активів

Різниця між структурами тендеру простого активу та складного активу

Загальний план

API ЦБД

  • Створити новий тип тендера

    • Створити новий модуль тендерінгу з новим procurementMethodType (див. нижче)

    • Налаштувати для нового типу процедури словники standards (див. нижче)

    • Відключити непотрібну функціональність (див. нижче)

    • Реалізувати новий тип поля value (див. нижче)

      • Нова структура поля value (див. нижче)

      • Робота аукціону з новою структурою поля value (див. нижче)

    • Відключити нецінові критерії (див. нижче)

    • Відключити життєвий цикл (див. нижче)

    • Заборонити використання contractTemplateName (див. нижче)

    • Адаптувати логіку роботи milestones (див. нижче)

    • Повний набір тестів процедури по аналогії з іншими типами процедур

  • Налаштувати роботу контрактів

    • Реалізувати роботу з новим типом поля value

      • Створення контракту

      • Оновлення контракту

      • Зміни до контракту

    • Змінити логіку роботи amountPaid

    • Тести для нового типа поля value

  • Оновлення документації

    • Структура нового value

    • Туторіал нової процедури

Модуль аукціонів

Додати новий procurementMethodType в модуль аукціонів

ЦБД - Створити новий модуль тендерінгу з новим procurementMethodType

Створити новий модуль тендерінгу з новим procurementMethodType на основі модуля openeu (aboveThresholdEU)

Standards - Налаштувати для нового типу процедури словники

1. Налаштувати конфігурації для створення процедури відповідно до ТЗ

https://github.com/ProzorroUKR/standards/tree/master/data_model/schema/TenderConfig

Процес відбору управителя складних активів

2. Налаштувати перелік критеріїв

Обов’язкових критеріїв немає тому зробити пустим масивом

https://github.com/ProzorroUKR/standards/tree/master/criteria/rules

Процес відбору управителя складних активів

Різниця між структурами тендеру простого активу та складного активу

Деякі валідації критеріїв можуть потребувати змін в цбд.

3. Налаштувати перелік дозволених типів організацій

https://github.com/ProzorroUKR/standards/blob/master/organizations/kind_procurementMethodType_mapping.json

Перелік значень для нового типу процедури

[
  "authority"
]

Адаптація функціоналу

Процес відбору управителя складних активів

Різниця між структурами тендеру простого активу та складного активу

1. Відключити обов’язковість tender.milestones

Відключити обов’язковість tender.milestones (і відповідно contract.milestones) з типами:

  • delivery

  • financing

def validate_milestones(self, data, value):
    if tender_created_after(MILESTONES_VALIDATION_FROM):
        if value is None or len(value) < 1:
            raise ValidationError("Tender should contain at least one milestone")

2. Адаптація award.milestones

Функціональність майлстоунів для нової процедури аналогічна стандартній функціональності майлстоунів за виключенням того що:

  • alp dueDate має бути через 2 робочих дні після спрацювання

  • прибрати extensionPeriod з допустимих значень для award.milestones.сode

3. Заборонити використання tender.contractTemplateName

Заборонити встановлення значення для поля contractTemplateName на етапі створення тендера.

4. Заборонити використання tender.features

Нецінові критерії не будуть застосовуватися. Заборонити встановлення значення для поля tender.features на етапі створення тендера.

5. Встановити тип tender.awardCriteria

Дозволити тільки ratedCriteria в полі tender.awardCriteria

6. Додатково дозволити замовнику додавати документи

Додавання документів будь якого documentType з існуючого списку відповідно батьківської сутності (tender/award/contract) + документ без вказання documentType:

  • tender.status=draft >> дозволити додавати tender.documents

  • tender.status=active.tendering >> дозволити додавати tender.documents

  • tender.status=active.pre-qualification >> дозволити додавати tender.documents

  • tender.status=active.qualification >> дозволити додавати award.documents

  • tender.status=active.awarded >> дозволити додавати award.documents

  • contract.status=pending/active >> дозволити додавати contract.documents

Розробка нової структури поля value

1 фаза:

  • тендерінг

  • подання пропозицій

  • деактивація аукціону (hasAuction = false)

2 фаза:

  • аукціон (hasAuction = true)

3 фаза:

  • контрактінг

4 фаза:

  • вартість активу

  • білінг


Адаптація полів системи для процедури АРМА:

  • tender.value - delete

  • tender.minimalStep - delete

  • tender.guarantee - leave as is

  • tender.lots[].value - new structure

  • tender.lots[].minimalStep - new structure

  • tender.lots[].guarantee - leave as is

  • tender.bids[].value - leave as is

  • tender.bids[].lotsValues[].value - new structure

  • tender.bids[].items[].unit.value - leave as is

  • tender.items[].unit.value - leave as is

  • tender.awards[].value - new structure

  • tender.awards[].items[].value - leave as is

  • contract.value - new structure

Структура

  • Інша назва поля по аналогії з esco.

  • Прибрати поля currency, valueAddedTaxIncluded.

{
    "value": {
        "amountPercentage": 30.5
    }
}

Валідації

  1. Валідації для tender.lots[].value:

  • tender.lots[].value.amountPercentage >= 0

  • tender.lots[].value.amountPercentage <= 100

  1. Валідації для tender.lots[].minimalStep:

  • tender.lots[].minimalStep.amountPercentage >= 0

  • tender.lots[].minimalStep.amountPercentage <= tender.lots[].value.amountPercentage

  1. Валідації для tender.bids[].lotValues[].value:

  • tender.bids[].lotValues[].value.amountPercentage >= 0

  • tender.bids[].lotValues[].value.amountPercentage <= tender.lots[].value.amountPercentage (tender.lots[].value.amountPercentage - верхній поріг в ставках)

  1. Валідації для contract.value:

  • contract.value.amountPercentage >= 0

  • contract.value.amountPercentage <= tender.awards[].value.amountPercentage

  1. Перевірити/адаптувати всі інші валідації що використовували поля:

  • value.amount

  • value.amountNet

  • value.currency

  • value.valueAddedTaxIncluded

Авардінг

Реалізувати визначення переможної пропозиції за полем tender.awards[].value.amountPercentage

awarding_criteria_key: str = "amountPercentage"

Аномально низька ціна (ALP)

Налаштувати розрахунок аномально низької ціни за полем tender.awards.value.amountPercentage використовуючи значення awarding_criteria_key:

Розрахунок weightedValue

Поле weightedValue створюється на основі поля value якщо в тендері використовується неціновий критерій або життєвий цикл. Оскільки нецінові критерії та життєвий цикл не будуть застосовуватися, поле weightedValue не буде створюватися.

Але пропонується адаптувати його роботу за полем tender.awards.value.amountPercentage використовуючи значення awarding_criteria_key, на випадок якщо вищеописана функціональність буде застосована в майбутньому.

Тобто для value:

{
    "value": {
        "amountPercentage": 30.5
    }
}

Генерувати (якщо вимагається умовами проведення тендера що описані вище) weightedValue:

{
    "weightedValue": {
        "amountPercentage": 30.5,
        "addition": 0.0,
        "denominator": 1
    }
}

Аукціон

Реалізувати двусторонню конвертацію value (а також weightedValue за наявності) з старого формату в новий і в зворотньому напрямку.

Етап імпорту тендеру датабріджом аукціонів

ЦБД розуміючи що запит від модуля аукціону у відповіді переформатовує всі value. Використовуючи поле currency для позначення відсотків.

Наприклад (weightedValue теж переводити)

{
    "value": {
        "amountPercentage": 30.5
    }
}

Конвертувати в:

{
    "value": {
        "amount": 30.5,
        "currency": "%"
    }
}
Етап звітування аукціоном про результати

В ендпоінті ЦБД для аукціону робити зворотню конвертацію

Етап 2: Простий актив

Загальний опис

Створити новий тип відбору (frameworkType) та його похідних на основі requirementsForProposal. Налаштувати обмеження конфігурацій. Відключити непотрібну функціональність.

Створити новий тип закупівлі (procurementMethodType) на основі процедури складних активів. Налаштувати обмеження конфігурацій. Відключити непотрібну функціональність. Реалізувати новий тип value для проведення тендеру по розміру винагороди (у відсотках).

Закупівля АРМА (загальна інформація)

Процес відбору управителя простих активів

Різниця між структурами тендеру простого активу та складного активу

Загальний план

TBD

Етап 3: Білінг

Загальний опис

Реалізувати нову логіку білінгу.

Розрахунок білінгу АРМА

Етап 4: Інтеграції

Інтеграції не передбачені в першій ітерації, але необхідно переконатися що вони не вимагають поля value.currency або value.amount в стандартному форматі або адаптувати їх роботу для нового типу value.

Потенційно необхідні інтеграції:

  • ЄДР

  • ДФС

  • НАЗК