ЕСОЗ - публічна документація

Add Item to the Forbidden group_UA

Ціль

Даний веб-сервіс дозволяє додавати елементи, такі як код чи послуга/service_group, до забороненої групи з панелі адміністратора груп.

Ключові моменти

  1. Даний сервіс на graphQl використовується лише з панелі адміністрування.

  2. Тільки авторизований та уповноважений працівник національної служби охорони здоров’я з відповідною областю може додавати елемент до забороненої групи.

  3. Можуть бути додані такі види елементів: послуги, групи послуг, коди словників.

  4. Елемент слід додати з накладанням цифрового підпису.

  5. Доданий елемент повинен бути унікальним, в тому числі всі включні елементи у заборонених групах.

  6. Один або кілька елементів можна додати тільки один раз.

Специфікація

""" Input for `createForbiddenGroupItems` mutation. User must have a scope **forbidden_group:write** """ input CreateForbiddenGroupItemsInput{ "Forbidden group identifier." forbiddenGroupId: ID! "List of service identifiers." serviceIds: [ID!] "List of service group identifiers." serviceGroupIds: [ID!] "List of dictionary codes." codes:[CreateForbiddenGroupCodeInput!] } """ Input for `codes` in `createForbiddenGroupItems` mutation. """ input CreateForbiddenGroupCodeInput { "The name of the dictionary. Allowed names: eHealth/ICD10AM/condition_codes, eHealth/ICPC2/actions, eHealth/ICPC2/condition_codes, eHealth/ICPC2/reasons." system: String! "The value from dictionary. It should be present in the dictionary specified in `system` property" code: String! } """ Return type for `createForbiddenGroupItems` mutation. """ type CreateForbiddenGroupItemsPayload { "Updaed `ForbiddenGroup`." forbiddenGroup: ForbiddenGroup }

Валідації

При мутації даних CreateForbiddenGroupItemsMutation використовуються такі перевірки.

Авторизація

  • Перевірити валідність токену доступу

    • у випадку неуспішної валідації - повернути  401 (“Invalid access token”)

  • Перевірити, що термін дії токену не минув

    • у випадку помилки - повернути 401 (“Invalid access token”)

  • Перевірити скоупи користувача, на можливість виконання даної дії (scope = 'forbidden_group:write')

    • повернути 403 (“Your scope does not allow to access this resource. Missing allowances: forbidden_group:write”) в разі невалідних скоупів

Перевірити юридичну організацію

  • Отримати client_id з токену.

  • Перевірити скоупи користувача, на можливість виконання даної дії (scope = 'forbidden_group:write')

    • у випадку помилки - повернути 403 (“Your scope does not allow to access this resource. Missing allowances: forbidden_group:write”)

  • Перевірити статус юридичної особи (status = ACTIVE)

    • у випадку помилки - повернути 409 ('client_id refers to legal entity that is not active')

Перевірити цифровий підпис

  • Перевірити, що запит підписано

    • у випадку помилки - повернути 422 (“document must be signed by 1 signer but contains 0 signatures”)

  • Перевірити, що цифровий підпис дійсний та чи не минув термін дії

  • Перевірити чи належить цифровий підпис користувачу

    • Перевірити, що ЕДРПОУ з цифрового підпису та party.tax_id співпадають

      • у випадку помилки - повернути 409 (“Signer DRFO doesn't match with requester tax_id“)

Перевірити запит

  1. Перевірити, що forbidden_group_id вказано в запиті

  • у випадку, якщо не надісланий - повернути  422 ('required property forbidden_group_id was not present')

  • у випадку, якщо не існує або не активний - поверніть  404 ('not found')

2. Перевірити, що хоча б один з полів масиву вказано: service_group_ids, service_ids, codes

  • у випадку помилки - повернути 422 ('One of the required property should be present: service_groups, services, codes')

3. Якщо вказано service_group_ids, для кожного service_group_id в масиві:

  • Перевірити, чи існує та чи активний:

    • у випадку помилки - повернути 422 ('not found')

  • Перевірити, чи він унікальний у запиті

    • у випадку помилки - повернути 422 ('Service group with id <id> is duplicated in the request')

  • Перевірити, чи він унікальний в існуючих активних заборонених елементах групи (prm.forbidden_group_services)

    • у випадку помилки - повернути 422 ('Service group already present in forbidden group')

4. Якщо вказано service_ids, для кожного service_id в масиві:

  • Перевірити, чи існує та чи активний:

    • у випадку помилки - повернути 422 ('not found')

  • Перевірити, чи він унікальний у запиті:

    • у випадку помилки - повернути 422 ('Service with id <id> is duplicated in the request')

  • Перевірити, чи він унікальний в існуючих активних заборонених елементах групи  (prm.forbidden_group_services)

    • у випадку помилки - повернути 422 ('Service already present in forbidden group')

5. Якщо вказано codes, для кожного об'єкту в масиві:

  • Перевірити, що вказано system

    • у випадку помилки - повернути 422 ('required property system was not present')

  • Перевірити, що значення system це одне зі значень довідників: eHealth/ICD10_AM/condition_codes, eHealth/ICPC2/actions, eHealth/ICPC2/condition_codes, eHealth/ICPC2/reasons

    • у випадку помилки - повернути 422 ('not allowed in enum')

  • Перевірити, що вкащано code

    • у випадку помилки - повернути 422 ('required property code was not present')

  • Перевірити, що значення code в словнику вказано у властивості system

    • у випадку помилки - повернути422 ('value is not allowed in enum')

  • Перевірити, що значення code унікальне дляsystem в рамках запиту

    • у випадку помилки - повернути 422 ('Code <code> of <system> dictionary is duplicated in the request')

  • Перевірити, що code та system унікальні в рамках активних існуючих елементів забороненої групи (prm.forbidden_group_codes)

    • у випадку помилки - повернути 422 ('Code <code> of <system> dictionary already present in forbidden groups')

6. Перевірити, що вказано creation_reason

  • у випадку помилки - повернути 422 ('required property creation_reason was not present')

Сервісна логіка

Наступна логіка використовується при мутації даних CreateForbiddenGroupItemsMutation

  1. Зберегти підписний контект до медіа-сховища

  2. 1.Для кожного елемента масиву service_group_ids зберегти дані в таблицю forbidden_group_services (PRM DB):

    1. встановити forbidden_group_id = $.forbidden_group_id

    2. встановити service_id = null

    3. встановити service_group_id = $.service_group_id

    4. встановити creation_reason = $.creation_reason

  3. Для кожного елемента масиву service_ids зберегти дані в таблицю forbidden_group_services table:

    1. встановити forbidden_group_id = $.forbidden_group_id

    2. встановити service_id = $.service_id

    3. встановити service_group_id = null

    4. встановити creation_reason = $.creation_reason

  4. Для кожного елемента масиву codes зберегти дані в таблицю forbidden_group_codes (PRM DB):

    1. встановити forbidden_group_id = $.forbidden_group_id

    2. встановити system = $.system

    3. встановити code = $.code

    4. встановити creation_reason = $.creation_reason

  5. Задати інші поля відповідно до  https://e-health-ua.atlassian.net/wiki/spaces/FORBIDDEN/pages/2087190529

  6. Очистити кеш

ЕСОЗ - публічна документація