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

AR_[NEW] (GraphQl) Search Device definitions_UA

Мета

Даний веб-сервіс WS розроблений, щоб дозволити співробітнику з відповідними скоупами здійснювати пошук медичних виробів.

Ключові положення

  1. Це квері метод GraphQL використовується тільки в адміністративній панелі.

  2. Тільки автентифіковані та авторизовані співробітники з відповідним скоупом можуть здійснювати пошук.

  3. Користувач може профільтрувати перелік по пошуковим параметрам.

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

"Reads and enables pagination through a set of `DeviceDefinition`." deviceDefinitions( "A condition to be used in determining which values should be returned by the collection." filter: DeviceDefitinionFilter "The method to use when ordering collection items." orderBy: DeviceDefitinionOrderBy "Read all values in the set after (below) this cursor." after: String "Read all values in the set before (above) this cursor." before: String "Only read the first _n_ values of the set." first: Int "Only read the last _n_ values of the set." last: Int ): DeviceDefinitionConnection!
""" DeviceDefitinion filter. """ input DeviceDefitinionFilter { "Primary key identifier from the database." databaseId: UUID "Device name." deviceNames: DeviceDefinitionName "is_active status." isActive: Boolean "A classification or risk class of the device model. The value should be present in the `device_classification_type` dictionary." classificationType: String "Name of device manufacturer." manufacturerName: String "The catalog or model number for the device for example as defined by the manufacturer." modelNumber: String } """ Methods to use when ordering `DeviceDefitinion`. """ enum DeviceDefitinionOrderBy { "Sort by classification_type in ascending order." CLASSIFICATION_TYPE_ASC "Sort by classification_type in descending order." CLASSIFICATION_TYPE_DESC "Sort by inserted_at in ascending order." INSERTED_AT_ASC "Sort by inserted_at in descending order." INSERTED_AT_DESC "Sort by model_number in ascending order." MODEL_NUMBER_ASC "Sort by model_number in descending order." MODEL_NUMBER_DESC } """ A connection to a list of `DeviceDefinition` items. """ type DeviceDefinitionConnection { "Information to aid in pagination." pageInfo: PageInfo! "A list of nodes." nodes: [DeviceDefinition] "A list of edges." edges: [DeviceDefinitionEdge] } """ An edge in a connection of `DeviceDefinition`. """ type DeviceDefinitionEdge { "The item at the end of the edge." node: DeviceDefinition! "A cursor for use in pagination." cursor: String! } """ A component part of medication. User must have a scope **device_definition:read** """ type DeviceDefinition implements Node { "The ID of an object." id: ID! "Primary key identifier from the database." databaseId: UUID! "Device identifier in external system." externalId: String "Device names." deviceNames: [DeviceName]! "A classification or risk class of the device model. The value should be present in the `device_classification_type` dictionary." classificationType: String! "Description of the device." description: String "Name of device manufacturer" manufacturerName: String! "Country of manufacture. The value should be present in the `COUNTRY` dictionary." manufacturerCountry: String! "The catalog or model number for the device for example as defined by the manufacturer." modelNumber: String! "The part number or catalog number of the device." partNumber: String "A code that defines the specific type of packaging. The value should be present in the `device_definition_packaging_type` dictionary." packagingType: String! "The number of items contained in the package." packagingCount: Int! "Unit of measurement. The value should be present in the `DEVICE_UNIT` dictionary." packagingUnit: String! "Device notes and comments." note: String "Array of device properties." properties: [DeviceDefinitionProperty] "Reference to parent device definition." parentId: UUID "is_active status." isActive: Boolean! "Date and time when record was inserted" insertedAt: DateTime! "Date and time when record was updated" updatedAt: DateTime! } """ A component part of DeviceDefinition. """ type DeviceName implements DeviceDefinition { "Device name type. The value should be present in the `device_name_type` dictionary." type: String! "Device name." name: String! } """ A component part of DeviceDefinition. """ type DeviceDefinitionProperty implements DeviceDefinition { "Device property type. The value should be present in the `device_properties` dictionary." type: String! "Device property value in integer format." valueInteger: Int "Device property value in string format." valueString: String "Device property value in boolean format." valueBoolean: Boolean "Device property value in decimal format." valueDecimal: Float }

Авторизація

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

    • Повернути (401, 'Invalid access token') в разі неуспішних перевірок

  • Перевірити, що токен дійсний

    • в разі помилки - повернути (401, 'Invalid access token')

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

    • Повернути (403, 'Your scope does not allow to access this resource. Missing allowances: device_definition:read') в разі невалідних скоупів

Перевірити юридичну особу

  • Отримати 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')

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

  1. Отримати всі записи з таблиць device_definitions та device_definition_names в базі даних PRM

  2. Задіяти додаткові пошукові параметри (пов'язані за допомогою логічного І):

    1. databaseId - здійснити пошук по device_definitions.id (використовуючи виключне співпадіння з = operator)

    2. deviceNames.type - здійснити пошук по device_definition_names.type (використовуючи виключне співпадіння з = operator )

    3. deviceNames.name - device_definition_names.name (використовуючи порівняння like, нечутливий до регістру)

    4. isActive - здійснити пошук по device_definitions.is_active (використовуючи виключне співпадіння з = operator)

    5. classificationType - пошу по device_definitions.classification_type (використовуючи виключне співпадіння з = operator)

    6. manufacturerName - пошук по device_definitions.manufacturer_name (використовуючи порівння like , нечутливий до регістру)

    7. modelNumber - пошук по device_definitions.model_number (використовуючи порівняння like, нечутливий до регістру)

  3. Використовувати опційний порядок

    1. якщо не передано $.orderBy - відсортувати записи по полю inserted_at в спадаючому порядку.

  4. Відобразити відповідь у відповідності до специфікації.

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