Для забезпечення приватності та покращення якості вказаних особистих даних (адреса проживання, контактний телефон, email) учасників аукціонів у публічному АРІ процедури, а також для запобіганню використання зазначеної інформації у маркетингових активностях (небажані дзвінки, сповіщення, розсилки), внесено зміни у логіку роботи API ЦБД і повертати відповідь з Контактною інформацІєю виключно користувачам-власникам Обʼєктів Процедури/Біда.

Загальна інформація

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

  • bids[*].bidders[*].contactPoint.email
  • bids[*].bidders[*].contactPoint.telephone
  • bids[*].bidders[].address.*
  • awards[*].buyers[*].contactPoint.email

  • awards[*].buyers[*].contactPoint.telephone

  • awards[*].buyers[*].address.*

  • contracts[*].buyers[*].contactPoint.email

  • contracts[*].buyers[*].contactPoint.telephone

  • contracts[*].buyers[].address.*

  • questions[*].author.email
  • questions[*].author.telephone
  • currentTenants.address.*
  • previousAuctionBidder.address.*

відображати у вигляді "зірочок" для користувачів, які не є власниками цього обʼєкта.

Приклад відображення:

Логіка відображення КІ

Отримання контактних даних учасників у межах процедури має здійснюватись на основі авторизаційного токена (broker token)

Отримання контактних даних учасників НЕ має здійснюється на основі токенів доступу до обʼєктів (acc_token)

Рішення щодо доступу до Контактної інформації учасників приймається на основі:

  • токена майданчика (broker token)
  • належності обʼєкта до відповідного майданчика

Наприклад, при виконанні запиту GET /api/procedures/{id} з токеном майданчика в header:

  • ЦБД визначає майданчик на основі broker token
  • для кожного обʼєкта у процедурі:
    • якщо обʼєкт був створений з цим broker token — контактні дані відкриваються
    • якщо обʼєкт був створений Не з цим broker token — контактні дані залишаються прихованими.

Критерієм належності обʼєкта до майданчика є ідентифікатор власника обʼєкта - owner, що співпадає з майданчиком, з токеном якого виконується запит.

Важливо

Варто враховувати логіку роботи GET запитів, яка описана ТУТ

При виконанні GET запиту до обʼєкта з:

broker_token +

acc_token +

відкритіЯкщо в запиті присутній коректний broker_token, то КІ має бути доступна

broker_token +

acc_token -

відкритіЯкщо в запиті присутній коректний broker_token, то КІ має бути доступна

broker_token -

acc_token +

закритіЯкщо в запиті відсутній коректний broker_token, то КІ має бути НЕдоступна


Майданчикам

Майданчик не зобовʼязаний виконувати окремі запити з токенами кожного біда для отримання контактних даних власних учасників.
Достатньо одного запиту до процедури з використанням broker token для майданчика-власника декількох бідів, щоб отримати по всім одразу відкриту КІ.

АЛЕ це правило не порушує загальну існуючу логіку повернення інфор мації про Біди, яка описана тут

ВАЖЛИВО На прикладі:
Майданчик є власником Процедури і Біда в цій процедурі.

ДО моменту публічного відкриття інформації про Біди:

Для отримання інформації про Біда - необхідно робити запит з використанням acc_token цього біда, згідно Логіка роботи GET запитів

З моменту публічного відкриття інформації про Біди:
Як власник обʼєкта "верхнього" рівня - процедури, Майданчик при запиті отримає КІ по всіх бідам (і своїм і чужим)
На інтерфейсі, в кабінеті Біда необхідно буде власнику біда відображати КІ свою і НЕ показувати КІ інших учасників.
Тобто, API віддасть всю КІ Майданчику-власнику Процедури. А ось Майданчик вже робить на своїй стороні логіку "кому що показати" і логіка має відображати користувачам тільки "свою" КІ.

Важливо

Приклад:

broker_1 опублікував Процедуру

broker_2 опублікував Біда до Процедури

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

Статус процедуриbroker_1broker_2broker_3

active_rectification

active_tendering

active_auction

Не бачить Бідів

Бачить кожного свого Біда окремо з обовʼязковим використанням acc_token

КІ своїх Бідів деанонімізована

Не бачить чужих Бідів

Не бачить Бідів

active_qualification

paused

complete

unsuccessful

cancelled

Бачить всіх Бідів

КІ всіх бідів деанонімізована

Бачить всіх Бідів

КІ своїх Бідів деанонімізована

КІ чужих Бідів анонімізована

Бачить всіх Бідів

КІ всіх Бідів анонімізована


Логіка API

Отримання контактних даних учасників у межах процедури має здійснюватись на основі acc_token-ів

Отримання контактних даних учасників НЕ має здійснюється на основі автризаційних токенів (broker token)

Наприклад, при виконанні запиту GET /api/procedures/{id}:

  • ЦБД визначає приналежність майданчика до обʼєкта на основі acc_token, який Майданчик має вказати в запиті
  • для кожного обʼєкта у процедурі:
    • якщо Майданчик є власником обʼєкта — контактні дані відкриваються
    • якщо Майданчик НЕ є власником обʼєкта — контактні дані залишаються прихованими.

При виконанні GET запиту до обʼєкта з:

УмоваПоля КІКоментар

broker_token +

acc_token +

відкритіЯкщо в запиті присутній коректний acc_token, то КІ має бути доступна

broker_token +

acc_token -

закритіЯкщо в запиті відсутній коректний broker_token, то КІ має бути доступна

broker_token -

acc_token +

відкритіЯкщо в запиті присутній коректний acc_token, то КІ має бути НЕдоступна


Для отримання КІ по кожному окремому Біду, Майданчику потрібно робити окремий запит з токенами кожного біда.

Логіка Mirror

Клієнт, який підключений до Mirror має отримувати контактну інформацію обʼєктів, де він є власником цього обʼєкта (object.owner == broker token)

В розрізі Контактної Інформації існує чотири типи Брокерів:

  • Власник Процедури_А
  • Власник Біда до Процедури_А
  • Власник Запитання до Процедури_А
  • Broker, який НЕ є стороною Процедури_А

Сценарії

  • broker_1 опублікував Процедуру_А
  • broker_2 опублікував два біда (bid_21, bid_22) до Процедури_А.
  • broker_3 опублікував одного біда (bid_31) до Процедури А.
  • broker_4 опублікував запитання до Процедури_А
  • broker_5 НЕ опублікував жодного Біда і жодного Питання до Процедури_А. Він не є стороною Процедури_А

Всі brokers підключені до Mirrror зі своїми авторизаційними даними.

Після завершення роботи Модуля Аукціону Біди стають публічно доступними і в Mirror всім прилітає обʼєкт

Expected result:

Actor/objectbid_21bid_22bid_31questionDescription
broker_1бачить КІбачить КІбачить КІбачить КІ

broker_1 отримує в Mirror обʼєкт процедури, в якому дані НЕ анонімізовані (бо він є власником Процедури, як батьківського обʼєкта) Всі Біди і Запитання є дочірніми обʼєктами до його Процедури.

broker_2бачить КІбачить КІ --

broker_2 отримує в Mirror обʼєкт процедури, в якому дані НЕ анонімізовані для bid_21 та bid_22 (бо він є власником обох Бідів) та анонімізовані для bid_31

broker_3 - -бачить КІ-

broker_3 отримує в Mirror обʼєкт процедури, в якому дані НЕ анонімізовані для bid_31 і анонімізовані по bid_21 та bid_22

broker_4 - - -бачить КІ

Не є власником Процедури і не є власником жодного біда

Є власником Запитання і бачить КІ в своєму запитанні

broker_5 - - --

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

broker_5 отримує в Mirror обʼєкт процедури, в якому дані АНОНІМІЗОВАНІ по всім бідам (бо він не є їх власником)

Тобто, якщо Майданчик є власником одного біда в процедурі, то в mirror він має отримувати обʼєкт в якому відкрита КІ тільки по його біду і не відкрита КІ по іншим бідам цієї ж процедури, бо він не є власником інших бідів. (бага)

Правила відображення інформації на майданчиках

Контактна інформація учасників процедури є конфіденційною інформацією та не повинна відображатися публічно.

У публічному API та у відповідях, які не призначені для власника відповідного обʼєкта, значення Контактної інформації мають повертатися у прихованому вигляді, наприклад як "*****" або в іншому форматі маскування, який не дозволяє відновити оригінальне значення.

Якщо сторінка доступна неавторизованому користувачу або є публічною вітриною Майданчика, усі поля Контактної інформації повинні бути приховані.

СценарійОчікуване відображення
Користувач переглядає процедуру на публічній сторінці МайданчикаКонтактна інформація прихована
Майданчик є власником процедури, але сторінка публічнаКонтактна інформація все одно прихована
Майданчик є власником біда, але сторінка публічнаКонтактна інформація все одно прихована
Майданчик не є стороною процедуриКонтактна інформація прихована

Відображення Контактної інформації у кабінеті Організатора

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

Технічно це означає:

procedure.owner == broker, визначений за broker token

Якщо Майданчик є власником процедури, він може відобразити Організатору Контактну інформацію по обʼєктах цієї процедури, зокрема по бідах, учасниках, awards/contracts, якщо така інформація доступна у відповіді ЦБД.

УмоваРезультат
Майданчик є власником процедуриУ кабінеті Організатора можна відображати КІ учасників цієї процедури
Майданчик не є власником процедуриУ кабінеті Організатора КІ учасників не відображається
Користувач не авторизований як Організатор цієї процедуриКІ не відображається

Відображення Контактної інформації у кабінеті Учасника

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

Правило

bid.owner == broker, визначений за broker token

Якщо умова виконується — КІ по цьому біду може бути відображена в кабінеті Учасника.

Якщо умова не виконується — КІ по цьому біду повинна бути прихована.

СценарійОчікуване відображення
Учасник переглядає власний bid у своєму кабінетіКІ цього учасника відображається
Учасник переглядає процедуру з іншими бідамиКІ інших учасників прихована
Майданчик має декілька власних бідів у процедуріКІ відкривається лише по власних бідах цього Майданчика
Майданчик не має власних бідів у процедуріКІ всіх учасників прихована

Матриця

Місце відображенняХто переглядаєУмова доступуЧи показувати КІ
Публічна сторінка процедуриБудь-який користувачНе має значенняНі
Публічна сторінка процедуриМайданчик-власник процедуриНавіть якщо procedure.owner == brokerНі
Кабінет ОрганізатораОрганізатор процедуриprocedure.owner == brokerТак
Кабінет ОрганізатораОрганізатор не через Майданчик-власникprocedure.owner != brokerНі
Кабінет УчасникаУчасник власного бідаbid.owner == brokerТак, тільки власна КІ
Кабінет УчасникаУчасник переглядає інших учасниківother_bid.owner != brokerНі
Кабінет Майданчика-власника questionВласник questionquestion.owner == brokerТак, тільки по власному question

Доступ до Контактної Інформації у BI

BI є звичайним клієнтом ЦБД і, відповідно, має свій Токен.

При підключені до mirror з авторизацією, ВІ може забирати обʼєкт з полями Контактної Інформації.

  1. Бізнес мета: Авторизовані користувачі ВІ з спеціальною роллю мають можливість на окремому дашборді бачити Контактну Інформацію по всіх Процедурах. Маркетинг Prozorro.Sale використовує КІ для проведення комунікацій з Учасниками (Бідами).
  2. Логіка відображення КІ залишається на стороні ВІ. Нам необхідно розробити можливість для BI від mirror отримати обʼєкт ЦБД з КІ.
    1. Ми цю можливість надаємо ідентифікуючи BI по broker token-у


Таска


Анонімізація ТУТ


  • No labels