| Table of Contents |
|---|
Ініціація перенесення обʼєкта
На Prozorro.Sale надходить письмовий запит на перенесення обʼєкта В разі виникнення необхідності перенести обʼєкт ЦБД з одного Майданчика на інший , на Майданчик. (Технічно - просять змінити owner-а)
(Ніяких змін в ініціації процесу переносу не відбувається!)
Частина Prozorro.Sale
...
В процесі виконання операції переносу обʼєктаразі отримання звернення, адміністратор ЦБД виконує технічну команду.
В результаті Результатом виконання команди в обʼєкті в модель зміни owner-а, в обʼєкті в _meta{} додається масив transfer[] поле ownerTransfer зі значенням owner name майданчика, на який переносять обʼєкт.
...
Дане поле заповнюється значенням, яке вказав виконавець заявки в Адмінці в полі Owner
Приклад структури _meta{} з масивом transfer[]:
| Code Block |
|---|
"_meta": |
...
{ "ownerTransfer": "filip.kuzmin@prozorro.sale" "systemDateModified": "2025-04-09T18:00:03.751000Z" |
...
} |
Приклад
де,
_id - технічний ідентифікатор обʼєкта, для якого змінюють owner-а. Наприклад, _id процедури або біда
objType - тип обʼєкта, для якого змінюють owner. Може приймати одне із значень:
...
ownerTo - це owner name майданчика, на який переносять обʼєкт (майданчик-реціпієнт)
Команда має виконуватись повторно для обʼєкта, навіть якщо в transfer[] вже присутній _id цього обʼєкта. В такому випадку значення поля ownerTo заміняється на нове.
Видалити обʼєкт із масива transfer[] неможливо, якщо його вже додали командою.
Можна замінити значення в полях обʼєкта в масиві transfer[] повторним виконанням команди Change procedure owner commands.
...
виконали команду і цей обʼєкт готовий для передачі: https://procedure-dev.prozorro.sale/api/procedures/680f67d2196e27e271cc2c2a
Частина Майданчика-реціпієнта
| Anchor | ||||
|---|---|---|---|---|
|
Ознакою того, що на Майданчик хочуть перенести обʼєкт є наявність в обʼєкті поля _meta{}.ownerTransfer в якому записано значення owner name майданчика-реціпієнта.
Наприклад, якщо в Адмінці була виконана команда на переніс обʼєкта на Майданчик "test_broker_1", то в обʼєкті, який переносять буде:
| Code Block |
|---|
"_meta": {
"systemDateModified": "2025-05-15T06:39:31.450000Z",
"ownerTransfer": "filip.kuzmin@prozorro.sale"
} |
ВАЖЛИВО! Токен до обʼєкта процедури на цьому етапі не змінюється! Навіть при наявності в обʼєкті поля _meta.trasfer[] попередній ownerTransfer попередній owner обʼєкта може виконувати дії над обʼєктом використовуючи свій токен.
Перевірити успішність виконання команди, зокрема, можна переглянувши JSON обʼєкта.
Після виконання команди в обʼєкті має бути масив transfer[] в якому буде обʼєкт з полем ownerTo, де має бути записано owner name майданчика на який переносили обʼєкт.
Особливості
в масиві transfer[] може бути декілька обʼєктів, якщо, наприклад, виконати дві команди в адмінці: на зміну owner-а для процедури та на зміну owner-а біда
|
Логіка роботи з обʼєктом і отримання токену Майданчиком реціпієнтом
В результаті виконання команди в обʼєкті для якого виконували команду має бути присутній масив transfer[] в якому присутні поля _id, objType та ownerTo
На цьому етапі Токен до процедури не змінився, Майданчик-донор може виконувати дії над Процедурою використовуючи свій токен.
Для фактичної зміни токена до процедури Майданчику-реціпієнту потрібно зробити виклик API-запиту
API -запит на отримання токену
Необхідно розробити команду за допомогою якої Майданчик-реціпієнт отримує токен до обʼєкта, який на нього хочуть перенести.
Ознакою того, що на Майданчик хочуть перенести обʼєкт є наявність в обʼєкті поля _meta{} масиву transfer[] з полями _id, objType та поля ownerTo в якому записано значення owner name майданчика-реціпієнта.
Наприклад, якщо в Адмінці була виконана команда на переніс обʼєкта на Майданчик "test_broker_1", то в обʼєкті, який переносять буде:
|
...
Authorization
...
{{broker_token}}
Щоб отримати токен до обʼєкту, Майданчику-реціпієнту необхідно виконати запит в залежності від типу обʼєкта (запити будуть в Swagger):
| Тип обʼєкта | Бізнес назва | Приклад запиту |
|---|---|---|
| Procedure | Процедура | POST /api/procedures/{{_id}}/transfer Header Authorization: {{broker_token} |
| Asset | Обʼєкт малої приватизації | POST /api/registry/assets/{{_id}}/transfer Header Authorization: {{broker_token} |
| Large Asset | Обʼєкт великої приватизації | POST /api/registry/large_assets/{{_id}}/transfer Header Authorization: {{broker_token} |
| Execution | Виконання умов малої приватизації | POST /api/registry/executions/{{_id}}/transfer Header Authorization: {{broker_token} |
| Large Execution | Виконання умов великої приватизації | POST /api/registry/large_executions/{{_id}}/transfer Header Authorization: {{broker_token} |
| Registry | Обʼєкт реєстру оренди | POST /api/registry/objects/{{_id}}/transfer Header Authorization: {{broker_token} |
| Action | Дія над обʼєктом оренди | POST /api/registry/actions/{{_id}}/transfer Header Authorization: {{broker_token} |
| Lease_request | Запит на обʼєкт оренди | POST /api/registry/lease_requests/{{_id}}/transfer Header Authorization: {{broker_token} |
| Announcement | Інформаційне повідомлення малої приватизації | POST /api/jobber/announcements/jas/{{_id}}/transfer Header Authorization: {{broker_token} |
| Large Announcement | Інформаційне повідомлення великої приватизації | POST /api/jobber/announcements/jal/{{_id}}/transfer Header Authorization: {{broker_token} |
| Redemption | Приватизація шляхом викупу малої приватизації | POST /api/jobber/redemption/jrs/{{_id}}/transfer Header Authorization: {{broker_token} |
| Large Redemption | Приватизація шляхом викупу великої приватизації | POST /api/jobber/redemption/jrl/{{_id}}/transfer Header Authorization: {{broker_token} |
Приклад запиту:
POST https://{host}/api/procedures/{object_id}/transfer
Authorization: {{broker_token}}
Приклад сURL
| Expand | ||
|---|---|---|
| ||
curl --location --request POST 'https://procedure-dev.prozorro.sale/api/procedures/67c7fb9b150280fe7b87f69b/transfer' \ |
params:
host -
| Назва | host |
|---|
Приклад запиту:
GET {{host}}/api/transfer/{{object_id}}/getObjectToken
params:
...
| Dev | |
| Sandbox | |
| Prod | https://procedure.prozorro.sale |
object_id - технічний ідентифікатор обʼєкта "_id". Приклад: 67f3889fe820f82002c07a04 67c7fb9b150280fe7b87f69b
Відповідь 200 ОК:
| Code Block | ||
|---|---|---|
| ||
{ |
...
"id": |
...
" |
...
67c7fb9b150280fe7b87f69b", |
...
"acc_token": |
...
" |
...
a4082115- |
...
ae38- |
...
409f- |
...
9093- |
...
bcacdb701cb5" |
...
} |
Запит обовʼязково має бути аутентифікований (відпрацьовує тільки з використанням унікального токену Майданчика)
ВАЖЛИВО! Результатом успішного виконання запиту має бути видача токена новому власнику, а також прибирання із обʼєкта, для якого виконувався переніс, полів _id, objType та ownerTo в масиві transfer[]поля ownerTransfer
Тобто, поля в transfer[] відображаються поле ownerTransfer відображається з моменту успішного виконання команди в Адмінці і до моменту успішного GET POST запиту майданчиком-реціпієнтом.
Відповідь 403 Forbidden:
...
| Code Block |
|---|
{ "message": |
...
"Forbidden. You are not authorized to receive token to this object" |
...
} |
Якщо обʼєкт ще не передано (відсутнє поле metaInfo. ownerTransfer), то повертаємо 403
Відповідь 404 Not Found:
...
| Code Block |
|---|
{ "message": |
...
"Not found procedure object with id 67f38f3de820f002c07a0644" } |
Як можна налаштувати логіку на Майданчику
Коли в mirror прилітає обʼєкт, то необхідно дивитись на наявність поля ownerTransfer в _meta{}
...
Якщо в обʼєкті присутнє поле ownerTransfer, то перевірити чи вказано в цьому поліownerName Вашого Майданчика?
- Вказано.
- Необхідно забрати обʼєкт виконавши POST запит описаний вище (можна автоматизувати, можна викликати запит вручну. Отримати токен і записати в БД)
- Якому саме користувачу Вашого Майданчика належить обʼєкт можна спробувати дізнатись порівнявши ЄДРПОУ\ІПН із поля sellingEntity.identifier.id з реєстраційними даними на Майданчику. Має бути користувач з таким ЄДРПОУ, йому і привʼязати обʼєкт (ці дії за межами Prozorro.Sale і приклад описано теоретичний)
- НЕ вказно
- Необхідно перевірити "Чи в полі owner вказано ownerName Вашого Майданчика?"
- Вказано.
- Обʼєкт хочуть перенести з Вашого Майданчика на інший. Можна відвʼязувати обʼєкт від кабінету.
- Не Вказано.
- Не виконувати ніяких дій. Ви не являєтесь власником обʼєкта і на Вас його не переносять
- Вказано.
- Необхідно перевірити "Чи в полі owner вказано ownerName Вашого Майданчика?"
...
- .

