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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

Version 1 Current »

Ціль

Даний веб-сервіс дозволяє додавати елементи, такі як код чи послуга/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. Задати інші поля відповідно до  /wiki/spaces/FORBIDDEN/pages/2087190529

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

  • No labels