| Table of Contents |
|---|
| Code Block |
|---|
SACJSC (master object) ├── Procedure #1 (англійський) ├── Procedure #2 (-50% від стартової) ├── Procedure #3 (голландський з -50% від першого) └── Procedure status controller |
...
З метою автоматичного перевиставлення лотів, що відповідає Постанові №75 від 21 січня 2026 в системі Prozorro.Sale на сервісі Jobber реалізовано нову сутність з pipelineMethod: sanctionedAuctionChain
| Info |
|---|
Реалізація найбільше схожа на Інформаційні Повідомлення (announcement), які використовуються для Приватизаційних процедур |
Бізнес назва - Процес реалізації санкційного активу
Посилання
Глоссарій
| Термін | Пояснення |
|---|---|
| Ланцюжок | це master-об’єкт в ЦБД на сервісі Jobber, який представляє бізнес-процес реалізації одного санкційного активу через послідовність автоматично створюваних аукціонних процедур. Ланцюжок створюється Організатором як первинний об’єкт процесу реалізації активу та містить:
Ланцюжок є технічною сутністю, яка використовується для автоматизації перевиставлення активу відповідно до нормативних вимог. |
Master-об’єкт | це основна сутність, яка:
У цьому ТЗ master-об’єктом є SACJSC. |
| Автоматично створена процедура | це процедура, створена ЦБД без участі Організатора на основі правил Ланцюжка. |
| Попередня процедура | це процедура, на основі якої була створена наступна процедура в Ланцюжку. В розрізі данного ТЗ "Попередня процедура" може бути лише процедурою цього самого одного ланцюжка і вона не може бути створена раніше до ланцюжка. |
| Стартова ціна | це початкова ціна продажу активу для конкретної процедури. Особливості:
Розрахунок і округлення виконуються автоматично ЦБД. |
| Гарантійний внесок | це сума коштів, яку учасник повинен сплатити для участі в аукціоні. Розмір:
Гарантійний внесок:
|
| Реєстраційний внесок | це плата за реєстрацію заяви на участь в аукціоні. Цей внесок:
|
...
Створення та робота із ланцюжком:
- При створенні ланцюжка немає НЕМАЄ повʼязаного обʼєкта типу "Обʼєкт реєстру". "Ланцюжок" - перший обʼєкт, який створюється на ЦБД в процесі реалізації Санкційного майна
- При створенні ланцюжка Організатор має вказати:
- Дату аукціону для першої процедури
- Період експозиції (tenderPeriod) для другої і третьої процедури в ланцюжку (присутні валідації, які детально описані нижче)
- При створенні ланцюжка Організатор має вказати:
- Стартову ціну реалізації для першого аукціону, а для другого і третього ЦБД розрахує автоматично згідно описаних нижче правил
- розмір Гарантійного внеску для першого аукціону, а для другого і третього ЦБД розрахує автоматично згідно описаних нижче правил
- Мінімальний крок для першого аукціону, а для другого і третього ЦБД розрахує як 1% від стартової ціни відповідного аукціону
- В ланцюжку зберігаються ідентифікатори Процедур, які були автоматично створені цим ланцюжком (в producedEntities)
- Лацюжок складається максимум з трьох процедур, де кожна наступна процедура створюється автоматично за умови, що попередня процедура "неуспішна" (unsuccessful з будь-якої причини)
- Якщо будь-яка процедура в Ланцюжку успішна - ланцюжок не продовжується.
Обʼєкт SanctionedAuctionChain
...
| draw.io Diagram | ||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
| tech | УКР назва | АНГЛ назва | Перехід з | За умови | Коментар |
|---|---|---|---|---|---|
| pending | Опубліковано | Created | - | перший статус, який отримує обʼєкт при публікації | Статус, в якому перебуває обʼєкт до моменту створення першої процедури в ланцюжку Протягом 5 хвилин має автоматично опублікуватися Перша процедура SAE |
| active | Проходить аукціон | Auction | pending | Створено першу процедуру в ланцюжку | Обʼєкт має цей статус з моменту створення першої процедури в ланцюжку і до моменту, поки:
|
| sold | Продано | Sold | active | Будь-яка процедура в цьому ланцюжку набуває статусу procedure.status: complete | Термінальний статус |
| dissolved | Не продано | Dissolved | active | Будь-яка процедура в цьому ланцюжку набуває статусу procedure.status: cancelled Третя в ланцюжку процедура набуває статусу procedure.status: unsuccessful | Термінальний статус |
...
Періоди відсутні
Документи обʼєкта
Відсутні обовʼязкові документи. "Ланцюжок" можна створити з пустим масивом documents[]
При публікації обʼєкта "ланцюжка" необхідно передати Організатор за потреби додає документи першої Процедури ланцюжка. Тобто, при авто-публікації процедури всі документи будуть скопійовані в Першу процедуру.
В другу і третю процедури модель documents[] копіюється із попередньої процедури цього ланцюжка . (не із JSC, а саме з попередньої процедури)
Перелік документів описано в ТЗ до Процедури ТУТ
| documentType | Назва УКР | Назва АНГЛ | Опис | Обовʼязковість | Публічність | ||||
|---|---|---|---|---|---|---|---|---|---|
illustration | Ілюстрація | Illustration | Зображення, що можуть додаватися Організатором до оголошення | ні | так | ||||
technicalSpecifications | Копії документів та матеріалів на лот | Technical specifications | Детальна інформація про лот | ні | так | ||||
evaluationCriteria | Кваліфікаційні вимоги | Evaluation criteria | Інформація про те, як будуть оцінюватись цінові пропозиції учасників | ні | так | ||||
contractProforma | Типова форма договору | Contract proforma | Шаблон договору купівлі-продажу | ні | так | ||||
x_presentation | Презентація | Presentation | Презентація | ні | так | ||||
clarifications | Погодження змін до опису лоту. Опис причин редагування | Clarifications | Документ не потрібно вносити до списку документів при створенні аукціону. Має бути доступний для завантаження протягом rectificationPeriod. | ні (при редагуванні організатор може опціонально завантажити даний документ) | так | ||||
| digitalSignature | Цифровий підпис | Digital signature | Цифровий підпис ( | digitalSignature | Цифровий підпис | Digital signature | Цифровий підпис | ні | так |
Логіка роботи Ланцюжка
Публікація ланцюжка
Організатор публікує обʼєкт "Ланцюжка", в якому передає:
- всі поля, які потрібні для публікації англійської і голландської (initialProps)
- включно зі Стартовою ціною та розміром Гарантійного внеску для першої процедури
- період експозиції (в днях) для другої процедури (extraSpecs[1].periods)
- період експозиції (в днях) для третьої процедури (extraSpecs[2].periods)
| Info |
|---|
Повний перелік полів з вказанням із обовʼязковості, назв і логіки нижче в таблиці |
Обʼєкт створюється у статусі pending
В цьому статусі редагування полів "ланцюжка" недоступне.
Публікація першої процедури
Після успішно опублікованого обʼєкта "ланцюжок", протягом 5 хвилин автоматично створюється перша процедура.
Овнером процедури стає Майдачник, який опублікував обʼєкт ланцюжка.
Майданчик-овнер може отримати токен від автоматично створеної процедури за по endpoint:
...
...
{{baseUrl}}/api/jobber/sanctionedAuctionChain/
...
jsc/{{object_id}}/produced_entities?acc_token=
...
{{object_acc_token}}З моменту створення першої процедури "ланцюжок" набуває статусу статусу active.
В цьому статусі "ланцюжка" Організатор може редагувати поля:
...
Організатор може редагувати поля створеної процедури протягом 48 годин. Зміни потрібно робити безпосередньо в створеній процедурі, а не в обʼєкті SACJSC. В SAC JSC редагуються тільки два вищевказані параметри.
Редагування Процедури згідно ТЗ процедури ТУТ (окрім поля tenderAttemps!). Вся логіка процедури залишається без змін. Немає різниці чи Процедура була створена руками до запуску "ланцюжків" чи створена автоматично "ланцюжком".
Публікація другої процедури
Якщо перша процедура в ланцюжку отримала статус unsuccessful, то протягом 5 хвилин створюється друга процедура, в яку копіюються значення полів із першої процедури + встановлюється дата auctionPeriod.startDate відповідно до періода експозиції із "ланцюжка".
...
При авто-створенні другої процедури у ланцюжку ЦБД має автоматично для другої процедури проставити tenderAttempt: 2 та у полі previousAuctionId проставити ID першої процедури із ланцюжка.
Публікація третьої процедури
Якщо друга процедура в ланцюжку отримала статус unsuccessful, то протягом 5 хвилин створюється третя процедура, в яку копіюються значення полів із другої процедури + встановлюється дата auctionPeriod.startDate відповідно до періода експозиції із "ланцюжка".
...
| Info | ||
|---|---|---|
| ||
Організатор створює ланцюжок, де передає:
Протягом 5 хвилин створилася перша процедура SAE. Організатор протягом 48 годин редагує в Процедурі SAE:
В обʼєкті SAC JSC залишиться першочергова Стартова ціна 100 000 грн, а в першіій процедурі SAE Організатор змінив на 80 000 грн. За результатами - Перша процедура SAE НЕ успішна і отримує статус unsuccessful. ЦБД протягом 5 хвилин, після отримання Першою процедурою статуса unsuccessful автоматично створює другу процедуру SAE ЦБД автоматично розраховує:
Організатор протягом 48 годин редагує в другій Процедурі SAE:
В обʼєкті SAC JSC залишиться першочергова Стартова ціна 100 000 грн і першочерговий Гарантійний внесок 10 000 грн. За результатами - Друга процедура SAE НЕ успішна і отримує статус unsuccessful. ЦБД протягом 5 хвилин, після отримання Другою процедурою статуса unsuccessful автоматично створює третью процедуру SAD ЦБД автоматично розраховує:
Організатор протягом 48 годин від моменту створення процедури може редагувати Стартову ціну, Гарантійку, Мінімальний крок і інші поля згідно ТЗ процедури. |
Скасування
Скасувати "ланцюжок" окремим запитом неможливо.
При скасуванні будь-якої процедури ланцюжка - автоматично скасовується ланцюжок.
| Anchor | ||||
|---|---|---|---|---|
|
Відповідно до пунктів 70 та 71 Порядку реалізації санкційних активів, ЦБД автоматично створює наступні процедури у разі, якщо попередня процедура визнана такою, що не відбулася.
При цьому ЦБД автоматично розраховує та встановлює значення окремих полів для другої та третьої процедур ланцюжка.
Стартова ціна (initialProps.value)
Перша процедура
При публікації об’єкта SAC JSC Організатор зобов’язаний передати стартову ціну активу у полі initialProps.value
Перша процедура автоматично створюється ЦБД із тим самим значенням стартової ціни, яке було передано в об’єкті SACJSC.
Друга процедура
У разі якщо перша процедура набуває статусу unsuccessful, ЦБД автоматично створює другу процедуру протягом 5 хвилин.
Стартова ціна другої процедури розраховується за формулою:
...
Округлення результату виконується відповідно до правил математичного округлення до двох знаків після коми.
Третя процедура
У разі якщо друга процедура набуває статусу unsuccessful, ЦБД автоматично створює третю процедуру протягом 5 хвилин.
Стартова ціна третьої процедури встановлюється рівною стартовій ціні другої процедури:
...
Розрахунок виконується ЦБД автоматично без участі Організатора.
| Anchor | ||||
|---|---|---|---|---|
|
...
| Info | ||
|---|---|---|
| ||
гарантійний внесок - сума коштів
|
Перша процедура
Розмір гарантійного внеску
Перша процедура
Розмір гарантійного внеску для першої процедури автоматично втановлюється той, який Організатор вказав при публікації обʼєкта SACJSC
Друга та третя процедура
Гарантійний внесок для другої та третьої процедур розраховується автоматично на основі стартової ціни відповідної процедури
...
Організатор не передає гарантійний внесок окремо для другої та третьої процедур.
Номер спроби продажу (tenderAttempts)
При публікації обʼєкта SAC JSC Організатор НЕ передає параметр tenderAttempts
...
3-й процедурі: tenderAttempts = 3 та у полі previousAuctionId значення auctionId від другої процедури цього ланцюжка
Скасування
Скасувати "ланцюжок" окремим запитом неможливо.
При скасуванні будь-якої процедури ланцюжка - автоматично скасовується ланцюжок.
...
Anchor minimalStep minimalStep
Мінімальний крок аукціону
| minimalStep | |
| minimalStep |
При публікації обʼєкта JSC Організатор передає параметр minimalStep.amount та minimalStep.currency
При автоматичній публікації першої процедури ЦБД встановлює значення поля minimalStep.amount та minimalStep.currency точно таким, як вказав Організатор при публікації JSC
При автоматичній публікації другої процедури ЦБД розраховує значення поля minimalStep.amount, як 1% від Стартової ціни другої процедури (minimalStep.amount == value.amount * 0,01)
minimalStep.currency копіюється із першої процедури.
При автоматичній публікації третьої процедури ЦБД розраховує значення поля minimalStep.amount, як 1% від Стартової ціни третьої процедури (minimalStep.amount == value.amount * 0,01)
minimalStep.currency копіюється із другої процедури.
| Anchor | ||||
|---|---|---|---|---|
|
| Field name | Required for publishing | Type | readOnly |
|---|
| x-legalNameUa | x-legalNameEn | comment | |||||
|---|---|---|---|---|---|---|---|
| 1 | owner | - | string | true | Ідентифікатор майданчика | Broker Name | |
| 2 | ownerToken | - | string($uuid) | true | x-default: hex | ||
| 3 | _id | - | string | true | Внутрішній ідентифікатор | ID | x-default: object_id x-serialize_when_none: false x-format: object-id |
| 4 | datePublished | - | string($date-time) | true | Дата публікації | Published date | x-default: now |
| 5 | dateModified | - | string($date-time) | true | Остання дата зміни | Date modified | |
| 6 | objectId | - | string | true | Ідентифікатор ланцюжка | Chain ID | example: |
| JSC001-UA-20260217-12345 | |||||||||||||||||
| 7 | status | - | string | true | Статус процедури | Procedure status | enum:
| ||||||||||
| 8 | pipelineMethod | + | string | false | Тип | Chain type | enum:
| ||||||||||
| 9 | initialProps | + | object | false | Загальна інформація про процедури | Procedure informantion | |||||||||||
| 10 | extraSpecs | + | list[ ] of objects | false | Інформація для базових специфікацій | Base information | minItems: 3 | ||||||||||
| 11 | producedEntities | - | list[ ] of objects | true | Створені обʼєкти | Produced entities | base.ProducedEntity{
| ||||||||||
| 12 | _ |
| specs | - |
| object | true | Розрахункові дані | Calculated data |
|
| 13 |
| _meta | - | object |
| true | Використовується стандартна логіка | ||
| 14 |
| additionalInformation | - | object |
| true | Використовується стандартна логіка |
...
| 15 | activeScenario | - | string | true | Використовується стандартна логіка Відображається поточний стан JSC | ||||||||||||||||||||||
| 16 | archiveId | - | string | true | x-format: object-id Використовується стандартна логіка | ||||||||||||||||||||||
| 17 | _protected | - | boolean | true | default: false Використовується стандартна логіка | ||||||||||||||||||||||
| 18 | _version | - | integer($int64) | true | Використовується стандартна логіка | ||||||||||||||||||||||
| 19 | timer | string($date-time) | true | x-format: timer Використовується стандартна логіка | |||||||||||||||||||||||
| 20 | periods | - | object base.Period | true | Час до створення першої процедури | First procedure creation time |
| ||||||||||||||||||||
| Anchor | ||||
|---|---|---|---|---|
|
| field name | Required for publishing | type | readOnly | x-legalNameUa | x-legalNameEn | comment | |
|---|---|---|---|---|---|---|---|
| 1 | sellingEntity | + | base.SellingEntity | false | Інформація про Організатора аукціону | Organizer information | Використовується стандартна модель |
Використовується стандартна модель
Очікуємо цей параметр в запиті на публікації SAC
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Використовується стандартна модель
Очікуємо цей параметр в запиті на публікації SAC
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Використовується стандартна модель
Очікуємо цей параметр в запиті на публікації SAC
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Очікуємо цей параметр в запиті на публікації SAC
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Очікуємо цей параметр в запиті на публікації |
JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 2 |
| lotId | + | string | false |
enum:
| Номер лота | Lot number |
Очікуємо цей параметр в запиті на публікації |
JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 3 |
| title | + | base. |
| MultiLang | false |
| Назва аукціону | Auction title |
Використовується стандартна модель |
Comment
default: UAH
x-legalNameUa: Валюта
x-legalNameEn: Currency
Enum:
[ UAH, USD, EUR ]
minimum: 2
exclusiveMinimum: true
x-format: decimal-float
x-legalNameUa: Сума
x-legalNameEn: Amount
Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка | |||||||
| 4 | description | + | base.MultiLang | false | Опис аукціону | Auction description | Використовується стандартна модель Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 5 | saleCondition | + | string | false | Наявність умов продажу | Sale conditions | enum:
|
x-legalNameUa: Податок
x-legalNameEn: Tax
Очікуємо цей параметр в запиті на публікації |
JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку |
default: false
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значеннякопіюємо це значення із попередньої процедури ланцюжка |
| 6 |
| value | + | base. |
| ValueWithTax | false |
| Стартова ціна лота | Start price | Використовується стандартна модель |
|
|
|
При авто-створенні першої процедури копіюємо значення в неї.
Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку відбувається авторозрахунок згідно правил |
| 7 |
| valueAddedTaxCharged |
| - |
- 5 % стартової ціни, якщо вона дорівнює або перевищує 250 млн. гривень
- 20 % стартової ціни, якщо вона є меншою, ніж 250 млн. гривень
| boolean | false | На фінальну суму нараховується ПДВ | Value added tax charged | default: false При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка | |
| 8 | minimalStep |
| + | base.Value | false | Розмір |
| кроку аукціону | Minimal step | Використовується стандартна модель
Описано ТУТ | |||||||||||||
| 9 | guarantee | + | base.Value | false | Розмір гарантійного внеску | Guarantee Fee |
|
x-legalNameUa: Валюта
x-legalNameEn
|
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
minimum: 1
maximum: 2
При публікації обʼєкта можна не передавати. ЦБД автоматично згенерує == 1.
Організатор може передати явно 1 або 2 за необхідності.
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Використовується стандартна модель
При авто-створенні першої процедури копіюємо значення в неї.
При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка
Використовується стандартна модель
Очікуємо цей параметр в запиті на публікації SAC
|
| Info | ||
|---|---|---|
| ||
Реєстраційний внесок - плата за реєстрацію заяви про участь в аукціоні, що вноситься особою, яка має намір взяти участь в аукціоні, на відповідний рахунок оператора, у розмірі
|
Залишаємо на відповідальність Майданчика. ЦБД отримує значення і не валідує їх
Тільки, що значення >0
При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку відбувається авторозрахунок згідно правил
Логіка розрахунку описана ТУТ | ||||||||||||||||||||||||||
| 10 | registrationFee | - | base.Value | false | Розмір реєстраційного внеску |
Значення >0 |
При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 11 | bankAccounts | + | sanctionedAssets.BankAccountsByType | false | Банківські рахунки |
| Bank accounts | Використовується стандартна модель Обов'язково один банківський рахунок з типом guarantee і валютою UAH. Рахунків для кожного типу в UAH/USD/EUR може бути безліч.
Очікуємо цей параметр в запиті на публікації |
JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 12 |
| items | + |
Не повинно відображатися в моделі SAC як окреме поле, але має авто-розраховуватись і відображатись в Процедурі
При публікації SAC не очікуємо в запиті поля tenderAttempts.
При авто-публікації першої процедури ЦБД має проставити:
1-й процедурі: tenderAttempts = 1
2-й процедурі: tenderAttempts = 2 та у полі previousAuctionId значення auctionId від першої процедури цього ланцюжка
3-й процедурі: tenderAttempts = 3 та у полі previousAuctionId значення auctionId від другої процедури цього ланцюжка
| sanctionedAssets.Item | false | Склад лота | Lot composition | Використовується стандартна модель x-format: list-object При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо items із попередньої процедури ланцюжка | |||
| 13 | documents | - | base.Documents | false | Всі документи аукціону та пов'язані додатки | Documents | Використовується стандартна модель x-format: list-object |
Очікуємо цей параметр в запиті на публікації SAC
При авто-створенні першої процедури копіюємо значення в неї.При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо |
documents із попередньої процедури ланцюжка |
| 14 |
| minNumberOfQualifiedBids |
| - | integer($int64) |
| false |
Використовується стандартна модель
x-format: list-object| Мінімальна кількість заяв | Minimal number of bids | default: 1 minimum |
minItems
| : 1 |
| maximum: |
Використовується стандартна модель
x-format: list-object
default: List []
...
enum:
- auctionPeriod
- tenderPeriod
...
- b_day
- c_day
- hour
- minute
- second
...
При публікації "ланцюжка", ЦБД очікує, що в extraSpecs обовʼязково буде передано обʼєкт для кожної процедури.
Тобто, всього три обʼєкта в extraSpecs, бо процедур в ланцюжку три.
Валідації
На рівні ЦБД необхідно встановити валідації для pipelineMethod: sanctionedAuctionChain:
Якщо tenderAttempts = 1
ТА
value.amount < 250 000 000 (двісті п'ятдесят мільйонів)
ТО
ЦБД має приймати тільки значення для auctionPeriod.startDate в діапазоні currentDate+25 c_day <= auctionPeriod.startDate <= currentDate+35 c_day
ЦБД повинна відхилити запит, якщо auctionPeriod.startDate знаходиться поза цим діапазоном.
Якщо tenderAttempts = 1
ТА
value.amount >= 250 000 000 (двісті п'ятдесят мільйонів)
ТО
currentDate + 60 c_day <= auctionPeriod.startDate <= currentDate + 90 c_day
Якщо tenderAttempts > 1
ТА
value.amount < 250 000 000 (двісті п'ятдесят мільйонів)
ТО
Необхідно відобразити організатору часовий проміжок, коли можна обрати дату початку аукціону (auctionPeriod.startDate). Мінімальна дата початку - на 20 КД, максимальна - на 35 КД
Якщо tenderAttempts > 1
ТА
value.amount >= 250 000 000 (двісті п'ятдесят мільйонів)
ТО
Необхідно відобразити організатору часовий проміжок, коли можна обрати дату початку аукціону (auctionPeriod.startDate). Мінімальна дата початку - на 30 КД, максимальна - на 90 КД
Приклад:
| Code Block |
|---|
"extraSpecs": [
{
"periods": [
{
"periodName": "auctionPeriod",
"startDate": "2026-04-20T10:00:00.000000Z"
}
]
},
{
"periods": [
{
"periodName": "tenderPeriod",
"duration": [
{
"unit": "b_day",
"quantity": 25
}
]
}
]
},
{
"periods": [
{
"periodName": "tenderPeriod",
"duration": [
{
"unit": "b_day",
"quantity": 25
}
]
}
],
"dutchStep": {
"dutchStepQuantity": 99
}
}
] |
| 2 При публікації обʼєкта можна не передавати. ЦБД автоматично згенерує == 1. Організатор може передати явно 1 або 2 за необхідності. При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка | |||||||
| 15 | accessDetails | - | base.MultiLang | false | Порядок ознайомлення з майном, час і місце проведення огляду об’єкта | Auction access details | Використовується стандартна модель Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 16 | x_documentRequirements | - | base.MultiLang | false | Перелік та вимоги до оформлення документів | List and requirements of registration documents | Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 17 | x_additionalInformation | - | base.MultiLang | false | Додаткові відомості | Other requirements and additional information | Очікуємо цей параметр в запиті на публікації JSC При авто-створенні першої процедури копіюємо значення в неї. При авто-створенні другої та\або третьої процедури в ланцюжку копіюємо це значення із попередньої процедури ланцюжка |
| 18 | tenderAttempts | - | integer($int64) | true | Лот виставляється | Attempt number | Не повинно відображатися в моделі JSC як окреме поле, але має авто-розраховуватись і відображатись в Процедурі При публікації JSC не очікуємо в запиті поля tenderAttempts. При авто-публікації першої процедури ЦБД має проставити: 1-й процедурі: tenderAttempts = 1 2-й процедурі: tenderAttempts = 2 та у полі previousAuctionId значення auctionId від першої процедури цього ланцюжка 3-й процедурі: tenderAttempts = 3 та у полі previousAuctionId значення auctionId від другої процедури цього ланцюжка |
| Anchor | ||||
|---|---|---|---|---|
|
| field name | required for publishing | type | readOnly | x-legalNameUa | x-legalNameEn | comment | |||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| periods | + | base.PeriodSpec | false | Інформація про періоди аукціонів | Periods info |
При публікації "ланцюжка", ЦБД очікує, що в extraSpecs обовʼязково буде передано обʼєкт для кожної процедури. Тобто, всього три обʼєкта в extraSpecs, бо процедур в ланцюжку три. Валідації На рівні ЦБД необхідно встановити валідації для pipelineMethod: sanctionedAuctionChain:
Приклад для value.amount < 250 000 000 (двісті п'ятдесят мільйонів):
| |||||||||||||||||||||||||||||||||||||||
| dutchStep | + | base.DutchStep | false | Крок голландського раунду | Dutch step | Поля dutchStepPercent та dutchStepValue автогенеруються на рівні ЦБД, без можливості внесення змін Організатором
|
| Anchor | ||||
|---|---|---|---|---|
|
1. Коли тільки створено ланцюжок (status: pending), відповідь на запит має містити:
- Кількість Процедур у ланцюжку - три;
- Порядковий номер кожної процедури:
- Для Першої Процедури tenderAttempts == 1
- Для Другої Процедури tenderAttempts == 2
- Для Третьої Процедури tenderAttempts == 3
- Статус кожної Процедури - scheduled;
- sellingMethod:
- Перша Процедура - sanctionedAsset-english
- Друга Процедура - sanctionedAsset-english
- Третя Процедура - sanctionedAsset-dutch
- Стартова ціна Об'єкта (value):
- Перша Процедура - initialProps.value
- Друга Процедура - initialProps.value *0.5
- Третя Процедура - initialProps.value *0.5
- Крок аукціону (minimalStep):
- Для Першої Процедури - значення, що вказав Організатор при створенні в initialProps.minimalStep
- Для Другої Процедури - значення, що дорівнює 1% від value Поточної Другої Процедури.
- Для Третьої Процедури - значення, що дорівнює 1% від value Поточної Третьої Процедури.
- Дата проведення аукціону (periods.periodName:auctionPeriod:startDate):
- Для Першої Процедури це дата, яку вказав Організатор у полі extraSpecs.periods:"auctionPeriod".startDate при створенні ланцюжка
- Для Другої і Третьої Процедури ця дата не визначена і поле виводити не потрібно.
- Період між аукціонами (periods.periodName:"tenderPeriod".duration):
- Для Першої Процедури - відсутній
- Для Другої і Третьої Процедури значення, що вказав Організатор при створенні ланцюжка у extraSpecs.periods.periodName:"tenderPeriod".duration
- Розмір гарантійного внеску (guarantee):
- Для Першої Процедури значення, що Організатор вніс у initialProps.guarantee
- Для Другої і Третьої Процедури по формулі: initialProps.guarantee == розраховується по формулі, залежить від Стартової ціни. Формули ТУТ
2. Коли створено Першу Процедуру (status: active), відповідь має містити:
- Кількість Процедур у ланцюжку - три;
- Порядковий номер кожної процедури (tenderAttempts):
- Для Першої Процедури tenderAttempts == 1
- Для Другої Процедури tenderAttempts == 2
- Для Третьої Процедури tenderAttempts == 3
- Статус Процедури (status):
- Перша Процедура - active
- Друга і Третя Процедура - scheduled
- sellingMethod (sellingMethod):
- Перша Процедура - sanctionedAsset-english
- Друга Процедура - sanctionedAsset-english
- Третя Процедура - sanctionedAsset-dutch
- Стартова ціна Об'єкта (value):
- Перша Процедура - initialProps.value
- Друга Процедура - initialProps.value *0.5
- Третя Процедура - initialProps.value *0.5
- Крок аукціону (minimalStep):
- Для Першої Процедури - значення, що вказав Організатор при створенні ланцюжка у initialProps.minimalStep
- Для Другої Процедури - значення, що дорівнює 1% від value Поточної Другої Процедури.
- Для Третьої Процедури - значення, що дорівнює 1% від value Поточної Третьої Процедури.
- Дата проведення аукціону (periods.periodName:"auctionPeriod":startDate):
- Для Першої Процедури це дата, яку вказав Організатор у полі auctionPeriod.startDate при створенні ланцюжка
- Для Другої і Третьої Процедури ця дата не визначена і поле виводити не потрібно.
- Період між аукціонами (periods.periodName:tenderPeriod.duration):
- Для Першої Процедури - відсутній
- Для Другої і Третьої Процедури значення, що вказав Організатор при створенні ланцюжку у tenderPeriodDuration
- Розмір гарантійного внеску (guarantee):
- Для Першої Процедури значення, що Організатор вніс у initialProps.guarantee
- Для Другої і Третьої Процедури initialProps.guarantee розраховується по формулі, залежить від Стартової ціни. Формули ТУТ
- auctionID створеної Першої Процедури (relatedEntities)
- Для першої Процедури вказано
- Для другої і третьої - ні
3. Коли створено Другу Процедуру (status: active), відповідь має містити:
- Кількість Процедур у ланцюжку - три;
- Порядковий номер кожної процедури (tenderAttempts):
- Для Першої Процедури tenderAttempts == 1
- Для Другої Процедури tenderAttempts == 2
- Для Третьої Процедури tenderAttempts == 3
- Статус Процедури (status):
- Перша Процедура - unsuccessful
- Друга Процедура - active
- Третя Процедура - scheduled
- sellingMethod (sellingMethod):
- Перша Процедура - sanctionedAsset-english
- Друга Процедура - sanctionedAsset-english
- Третя Процедура - sanctionedAsset-dutch
- Стартова ціна Об'єкта (value):
- Перша Процедура - initialProps.value
- Друга Процедура - initialProps.value *0.5
- Третя Процедура - initialProps.value *0.5
- Крок аукціону (minimalStep):
- Для Першої Процедури - значення, що вказав Організатор при створенні ланцюжка у initialProps.minimalStep
- Для Другої Процедури - значення, що дорівнює 1% від value Поточної Другої Процедури
- Для Третьої Процедури - значення, що дорівнює 1% від value Поточної Третьої Процедури
- Дата проведення аукціону (periods.periodName:"auctionPeriod":startDate):
- Для Першої Процедури це дата, яку вказав Організатор у полі auctionPeriod.startDate при створенні ланцюжка
- Для Другої і Третьої Процедури поле виводити не потрібно.
- Період між аукціонами (periods.periodName:"tenderPeriod".duration):
- Для Першої Процедури - відсутній
- Для Другої і Третьої Процедури значення, що вказав Організатор при створенні ланцюжка у tenderPeriod.duration
- Розмір гарантійного внеску (guarantee):
- Для Першої Процедури значення, що Організатор вніс у initialProps.guarantee
- Для Другої Процедури initialProps.guarantee розраховується по формулі, залежить від Стартової ціни. Формули ТУТ (Варто в розрахунок брати Стартову ціну Другої створеної процедури)
- Для Третьої Процедури initialProps.guarantee розраховується по формулі, залежить від Стартової ціни. Формули ТУТ
- auctionID створеної Першої Процедури (relatedEntities)
- Для першої і другої Процедури вказано
- Для третьої - ні
4. Коли створено Третю Процедуру (status: active), відповідь має містити:
- Кількість Процедур у ланцюжку - три;
- Порядковий номер кожної процедури (tenderAttempts):
- Для Першої Процедури tenderAttempts == 1
- Для Другої Процедури tenderAttempts == 2
- Для Третьої Процедури tenderAttempts == 3
- Статус Процедури (status):
- Перша Процедура - unsuccessful
- Друга Процедура - unsuccessful
- Третя Процедура - active
- sellingMethod (sellingMethod):
- Перша Процедура - sanctionedAsset-english
- Друга Процедура - sanctionedAsset-english
- Третя Процедура - sanctionedAsset-dutch
- Стартова ціна Об'єкта (value):
- Перша Процедура - initialProps.value
- Друга Процедура - initialProps.value *0.5
- Третя Процедура - initialProps.value *0.5
- Крок аукціону (minimalStep):
- Для Першої Процедури - значення, що вказав Організатор при створенні у initialProps.minimalStep
- Для Другої Процедури - значення, що дорівнює 1% від value Поточної Другої Процедури.
- Для Третьої Процедури - значення, що дорівнює 1% від value Поточної Третьої Процедури.
- Дата проведення аукціону (periods.periodName:"auctionPeriod":startDate):
- Для Першої Процедури це дата, яку вказав Організатор у полі auctionPeriod.startDate при створенні ланцюжка
- Для Другої і Третьої Процедури поле виводити не потрібно.
- Період між аукціонами (periods.periodName:tenderPeriod.duration):
- Для Першої Процедури - відсутній
- Для Другої і Третьої Процедури значення, що вказав Організатор при створенні ланцюжка у tenderPeriod.duration
- Розмір гарантійного внеску (guarantee):
- Для Першої Процедури значення, що Організатор вніс у initialProps.guarantee
- Для Другої Процедури initialProps.guarantee розраховується по формулі, залежить від Стартової ціни. Формули ТУТ (Варто в розрахунок брати Стартову ціну Другої створеної процедури)
- Для Третьої Процедури initialProps.guarantee розраховується по формулі, залежить від Стартової ціни. Формули ТУТ (Варто в розрахунок брати Стартову ціну Третьої створеної процедури)
- auctionID Першої Процедури, auctionID Другої Процедури і auctionID створеної Третьої Процедури
| Note | ||
|---|---|---|
| ||
Значення в _specs розраховується один раз під час публікації JSC і далі є “замороженим” прогнозом/планом, а не “дзеркалом” фактичних значень процедур. При публікаії кожної наступної процедури змінюється тільки Статус і заповнюється producedEntities. Інші значення НЕ перезаписуються. |
Приклад:
| Code Block |
|---|
"_specs": {
"pipeline": {
"stages": [
{
"producedEntities": [
{
"type": "procedure",
"_id": "69945eec410e8611f93bb132",
"objectId": "SAE001-UA-20260320-17748",
"url": "/api/procedures/69945eec410e8611f93bb132"
}
],
"status": "unsuccessful",
"name": "sa-english-first",
"calculatedData": {
"value": {
"currency": "UAH",
"amount": 100000,
"valueAddedTaxIncluded": true
},
"guarantee": {
"currency": "UAH",
"amount": 10000
},
"tenderAttempts": 1,
"auctionPeriod": {
"startDate": "2026-03-20T14:30:31.326000+02:00"
},
"sellingMethod": "sanctionedAsset-english",
"minimalStep": {
"currency": "UAH",
"amount": 1200
}
}
},
{
"producedEntities": [
{
"type": "procedure",
"_id": "69945f5d410e8611f93bb134",
"objectId": "SAE001-UA-20260417-44432",
"url": "/api/procedures/69945f5d410e8611f93bb134"
}
],
"status": "active",
"name": "sa-english-second",
"calculatedData": {
"value": {
"currency": "UAH",
"amount": 50000,
"valueAddedTaxIncluded": true
},
"guarantee": {
"currency": "UAH",
"amount": 10000
},
"sellingMethod": "sanctionedAsset-english",
"tenderAttempts": 2,
"tenderPeriod": [
{
"unit": "с_day",
"quantity": 25
}
],
"minimalStep": {
"currency": "UAH",
"amount": 500
}
}
},
{
"producedEntities": [],
"status": "sheduled",
"name": "sa-dutch-first",
"calculatedData": {
"value": {
"currency": "UAH",
"amount": 50000,
"valueAddedTaxIncluded": true
},
"guarantee": {
"currency": "UAH",
"amount": 10000
},
"sellingMethod": "sanctionedAsset-dutch",
"tenderAttempts": 3,
"tenderPeriod": [
{
"unit": "c_day",
"quantity": 35
}
],
"minimalStep": {
"currency": "UAH",
"amount": 500
}
}
}
]
}
} |
Search
Потрібно реалізувати публічні ендпоінти, які будуть давати можливість отримувати перелік JSC обʼєктів за заданим пошуком
POST {{baseUrl}}/api/search/sanctionedAuctionChain
Мають бти реалізовані фільтри:
| Code Block | ||
|---|---|---|
| ||
{
"page": 1,
"limit": 10,
"filters": [
{
"field": "dateModified",
"operator": "gt",
"value": "2020-01-01T05:12:47.00Z"
},
{
"field": "dateModified",
"operator": "gte",
"value": "2020-01-01T05:12:47.00Z"
},
{
"field": "dateModified",
"operator": "lte",
"value": "2022-01-01T05:12:47.00Z"
},
{
"field": "dateModified",
"operator": "lt",
"value": "2026-04-01T05:12:47.00Z"
},
{
"field": "datePublished",
"operator": "lt",
"value": "2026-04-01T05:12:47.00Z"
},
{
"field": "owner",
"operator": "eq",
"value": "auction"
},
{
"field": "producedEntities.type",
"operator": "eq",
"value": "procedure"
},
{
"field": "producedEntities.objectId",
"operator": "eq",
"value": "SAE001-UA-20221216-99328"
},
{
"field": "producedEntities._id",
"operator": "eq",
"value": "639c8a6a8646c52cb6413d2c"
},
{
"field": "extended_filters.human_id",
"operator": "eq",
"value": "JSC001-UA-20221216-41456"
}
]
} |
Має бути можливість отримувати обʼєкти з сортуванням:
POST {{baseUrl}}/api/search/sanctionedAuctionChain
| Code Block | ||
|---|---|---|
| ||
{
"page": 1,
"limit": 10,
"sort": [
{
"field": "dateModified",
"direction": "desc"
}
]
} |
Mirror
Має бути реалізована можливість майданчикам отримувати обʼєкти JSC по Mirror для сервісу Jobber
Допрацювання процедур SAE SAD
В модель обʼєкта процедури необхідно додати поле relatedEntities (base.RelatedEntity)
| field name | required for publishing | type | readOnly | x-legalNameUa | x-legalNameEn | comment |
|---|---|---|---|---|---|---|
| type | - | string | true | Тип споріднення | Relate type | enum: sanctioned_auction_chain |
| _id | - | string | true | Внутрішній ідентифікатор повʼязаного обʼєкта | Internal related object id | x-default: object_id Поле має заповнитися значенням _id повʼязаного JSC обʼєкта |
| objectId | - | string | true | Ідентифікатор повʼящаного обʼєкта | Related object id | example: SAE001-UA-20260220-12345 Поле має заповнитися значенням objectId повʼязаного JSC обʼєкта |
| url | - | string | true | Посилання на повʼязаний обʼєкт | URL | Посилвання на JSC обʼєкт |
| Note |
|---|
Важливо врахувати, що на рівні процедури ці поля мають бути НЕ обовʼязкові, бо публікація процедури SAE та SAD можлива ДО запровадження ланцюжків. Тобто, процедури, які опубліковані до запуску ланцюжків не мають заповнених значень для цих полів Процедури, які будуть авто-публікуватися Джоббером - повинні мати заповнені поля в relatedEntities |
Вимоги до Адмінки ЦБД
Додаткова інформація
Функціонал "Додавання додаткової інформації" не вимагається, але може автоматично працювати для JSC. Бізнес запиту на додвання ДІ до JSC не буде, бо бізнесово не існує сутності JSC а також інфо з JSC не буде виводитися на жодному фронті, відповідно і ДІ з JSC також не буде виводитися, якщо ДІ буде додано до обʼєкта.
Але має бути можливість додавати ДІ до авто-опублікованих процедур SAE та SAD за стандартною логікою.
Перенесення обʼєкта з одного Майданчика на інший
Бізнес запит на перенесення обʼєкта буде надходити тільки відносно Процедури. Але реальна бізнес-потреба, однозначно, - в перенесенні всього ланцюжка (обʼєкта JSC)
НЕ реалізовуємо перенос "звʼязки".
Кожен обʼєкт має переноситись індивідуально, незалежно від того, чи це Процедура, чи обʼєкт Джоббера.
Інструкція буде містити інформацію, що для коректного переносу, окрім вказання ідентифікатора Процедури також необхідно вказати ідентифікатор батьківського обʼєкта-ланцюжка.
Організатор на інтерфейсах Майданчика чи на Порталі НЕ має бачити ID ланцюжка. Нормативно ланцюжка не існує, це виключно технічний обʼєкт.
Для переносу всіх повʼязаних обʼєктів їх ID-шники має доповнити в заявку представник зі сторони Prozorro.Sale, який обробляє запит, який надійшов від Організатора.
Організатор точно в своїй заяві не вкаже ID обʼєкта JSC. Його має знайти і дозаповнити представник від Prozorro.Sale
| Note | ||
|---|---|---|
| ||
|
...
Поля dutchStepPercent та dutchStepValue автогенеруються на рівні ЦБД, без можливості внесення змін Організатором
Для поля dutchStepQuantity ЦБД формує дефолтне значення згідно процедури, Організатор має можливість змінити дефолтне значення.
...
integer($int64)
...
integer($int64)
...
x-legalNameUa: Розмір кроку голландського раунду, грн
x-legalNameEn: Dutch step value
автогеровано, розраховується як 1 % від стартової ціни
...
| Note | ||
|---|---|---|
| ||
На ЦБД буде присутня валідація лише на мінімальний термін тривалості tenderPeriod в 19 днів (тобто найближча дата проведення аукціону (auctionPeriod.startDate) може бути на 20 день від дати створення процедури). Майданчик зі своєї сторони має реалізувати валідацію на проміжок, в який може бути призначено дату початку аукціону (auctionPeriod.startDate) за наступною логікою:
|