Мета
Даний веб-сервіс WS розроблений, щоб дозволити співробітнику з відповідними скоупами створити медичний виріб в системі.
Ключові положення
Це квері метод GraphQL, який використовується тільки в адміністративній панелі.
Тільки автентифіковані та авторизовані співробітники з відповідними скоупами можуть створити медичний виріб.
Перевірки медичного виробу також використовуються в методі https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17782014260 WS.
Специфікація
Авторизація
Перевірити валідність токену доступу
Повернути (401, 'Invalid access token') в разі неуспішних валідацій
Перевірити, що токен дійсний
в разі помилки - повернути (401, 'Invalid access token')
Перевірити скоупи користувача на можливість виконання даної дії (scope = 'device_definition:write')
Повернути (403, 'Your scope does not allow to access this resource. Missing allowances: device_definition:write') в разі невалідних скоупів
Перевірити юридичну особу
Отримати client_id з токену.
Перевірити статус юридичної особи (status = ACTIVE)
в разі помилки - повернути 409 ('client_id refers to legal entity that is not active.')
Перевірити тип клієнта (type = NHS)
в разі помилки - повернути 403 ('You don't have permission to access this resource')
Перевірити запит
Перевірити, що необхідні поля у відповідності до специфікації вказані
в разі помилки - повернути 422 ('In field <<field_name>>: Expected type <<field_type>>, found null.') де field_name - назва відсутнього поля, field_type - тип поля, що відсутнє
Перевірити, що ніякі додаткові поля, які не відповідають схемі, є вказаними
в разі помилки - повернути 422 ('In field <<field_name>>: Unknown field.') де field_name - назва додаткового поля, яке не відповідає схемі
Перевірити, що кожне поле в запиті відповідає його типу в специфікації
в разі помилки - повернути 422 ('In field <<field_name>>: Expected type <<field_type>>, found <<actual_value>>.') де field_name - назва поля з помилкою, field_type - очікуваний тип поля, actual_value - значення, що було вказано в полі
Перевірити медичний виріб
Перевірити, що значення наступних полів існують в довідниках:
$.classificationType
–device_classification_type
довідник$.manufacturerCountry
–COUNTRY
довідник$.packagingType
–device_definition_packaging_type
довідник$.packagingUnit
–DEVICE_UNIT
довідник$.deviceNames.type
–device_name_type
довідник$.properties.type
–device_properties
довідникв разі помилки - повернути 422 ('value is not allowed in enum')
Перевірити, що відсутні задубльовані типи для
$.deviceNames
($.deviceNames.type
має бути унікальним для$.deviceNames
)в разі помилки - повернути 422 ('Values are not unique by 'type'.)
Якщо
$.properties
вказано, перевірити, що хоча б один з полів$.value[X]
вказано в об'єктів разі помилки - повернути 422 ('One and only one key is allowed from the list')
Якщо
$.properties
вказано, перевірити, що тільки одне поле$.value[X]
вказано в кожному об'єктів разі помилки - повернути 422 ('One and only one key is allowed from the list')
Якщо
$.parentId
вказано, перевірити, що медичний виріб існує і є активним записом https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17782014038#Device-definition в таблиці PRM DBв разі помилки - повернути 422 ('Parent device definition is not found.')
Якщо
$.externalId
вказано, перевірити, що не існуює активних медичних виробів з тим же external_idв разі помилки - повернути 422 ('Active device definition with the same external_id already exists.')
Перевірити, що не існує активного медичного виробу з тією ж комбінацією полів
$.classificationType
,$.manufacturerName
,$.modelNumber
,$.packagingCount
,$.partNumber
в разі помилки - повернути 422 ('Active device definition with the same classification_type, manufacturer_name, model_number, packaging_count, part_number already exists.')
Сервісна логіка
Зберегти дані до таблиць device_definitions та device_definition_names (PRM DB) у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17782014038
Відобразити відповідь у відповідності до специфікації.