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

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 Next »

Мета

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

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

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

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

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

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

 index.graphql
"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!
 deviceDefinitions.graphql
"""
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. Відобразити відповідь у відповідності до специфікації.

  • No labels