Ціль
Даний веб-сервіс дозволяє додавати елементи, такі як код чи послуга/service_group, до забороненої групи з панелі адміністратора груп.
Ключові моменти
Даний сервіс на graphQl використовується лише з панелі адміністрування.
Тільки авторизований та уповноважений працівник національної служби охорони здоров’я з відповідною областю може додавати елемент до забороненої групи.
Можуть бути додані такі види елементів: послуги, групи послуг, коди словників.
Елемент слід додати з накладанням цифрового підпису.
Доданий елемент повинен бути унікальним, в тому числі всі включні елементи у заборонених групах.
Один або кілька елементів можна додати тільки один раз.
Специфікація
""" 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“)
Перевірити запит
Перевірити, що 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.Для кожного елемента масиву service_group_ids зберегти дані в таблицю forbidden_group_services (PRM DB):
встановити forbidden_group_id = $.forbidden_group_id
встановити service_id = null
встановити service_group_id = $.service_group_id
встановити creation_reason = $.creation_reason
Для кожного елемента масиву service_ids зберегти дані в таблицю forbidden_group_services table:
встановити forbidden_group_id = $.forbidden_group_id
встановити service_id = $.service_id
встановити service_group_id = null
встановити creation_reason = $.creation_reason
Для кожного елемента масиву codes зберегти дані в таблицю forbidden_group_codes (PRM DB):
встановити forbidden_group_id = $.forbidden_group_id
встановити system = $.system
встановити code = $.code
встановити creation_reason = $.creation_reason
Задати інші поля відповідно до /wiki/spaces/FORBIDDEN/pages/2087190529
Очистити кеш