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

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 розроблено, щоб дозволити співрбітникуз відповідним скоупом деактивувати медичний виріб в eHealth.

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

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

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

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

 index.graphql
  "Deactivates a single `DeviceDefinition` using its globally unique ID."
  deactivateDeviceDefinition(input: DeactivateDeviceDefinitionInput!): DeactivateDeviceDefinitionPayload
 deviceDefinitions.graphql
"""
Input for `deactivateDeviceDefinition` mutation.

User must have scopes **device_definition:write**
"""
input DeactivateDeviceDefinitionInput {
  "The ID of an object"
  id: ID!
}

"""
Return type for `deactivateDeviceDefinition` mutation.
"""
type DeactivateDeviceDefinitionPayload {
  "Deactivated `DeviceDefinition`."
  deviceDefinition: DeviceDefinition
}

"""
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')

  • Перевірити скоупи користувача на можливість виконання даної дії (скоуп = '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 ('required property <field_name> was not present') де field_name - назва відсутнього поля

  • Перевірити, що додаткові поля відповідають вказаній схемі

    • в разі помилки - повернути 422 ('Unknown field')

  • Перевірити, що медичний виріб існує по $.id в таблиці device_definitions в PRM DB

    • в разі помилки - повернути 404 ('Device definition is not found')

  • Перевірити, що медичний виріб активний (is_active = true)

    • в разі помилки - повернути 409 ('Device definition should be active')

  • Перевірити, що активна програма для девайсів існує в таблиці program_devices в PRM DB з device_definition_id = $.id

    • в разі помилки - повернути 422 ('Device definition has active Program devices')

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

  1. Оновити запис в таблиці device_definitions в PRM DB, встановити значення:

    1. is_active = false

    2. updated_at = now()

    3. updated_by = user_id from token

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

  • No labels