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

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

Мета

Даний веб-сервів WS дозволяє оновити деталі по учаснику медичної програми з типом медичного виробу.

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

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

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

  3. Даний метод використовується для оновлення деталей медичного виробу по програмі в тому числі і деактивувати запис по медвирібу по програмі (шляхом вказання is_active = false в запиті).

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

 index.graphql
  "Updates a single `ProgramDevice` using its globally unique ID and a patch."
  updateProgramDevice(input: UpdateProgramDeviceInput!): UpdateProgramDevicePayload
 programDevices.graphl
"""
Input for `updateProgramDevice` mutation.

User must have a scope **program_device:write**
"""
input UpdateProgramDeviceInput {
  "The ID of an object."
  id: ID!
  "Whether `ProgramDevice` is active or not?"
  isActive: Boolean
  "Is it allowed to prescribe this device definition?"
  deviceRequestAllowed: Boolean
  "Is it allowed to create care plan activity for this device definition?"
  carePlanActivityAllowed: Boolean
  "Date of configuration end."
  endDate: Date
}

"""
Return type for `updateProgramDevice` mutation.
"""
type UpdateProgramDevicePayload {
  "Updated `ProgramDevice`."
  programDevice: ProgramDevice
}

"""
Program Device linkes device definition and medical program.

In order to obtain details user must have a scope **program_device:read**
"""
type ProgramDevice implements Node {
  "The ID of an object."
  id: ID!
  "Primary key identifier from the database."
  databaseId: UUID!
  "Medical program."
  medicalProgram: MedicalProgram!
  "Device definition."
  deviceDefinition: DeviceDefinition!
  "Reimbursement information."
  reimbursement: Reimbursement!
  "Wholesale selling price per package."
  wholesalePrice: Float
  "Retail price per package."
  consumerPrice: Float
  "The daily count of the device definition to be compensated."
  reimbursementDailyCount: Int
  "The amount of surcharge for packaging."
  estimatedPaymentAmount: Float
  "Date of configuration start."
  startDate: Date!
  "Date of configuration end."
  endDate: Date
  "Number (version) of reimbursement configuration."
  registryNumber: String
  "Whether `ProgramDevice` is active or not?"
  isActive: Boolean!
  "Is it allowed to prescribe this device definition?"
  deviceRequestAllowed: Boolean!
  "Date and time when record was inserted"
  insertedAt: DateTime!
  "Date and time when record was updated"
  updatedAt: DateTime!
  "The maximum allowable daily quantity of the device."
  maxDailyCount: Int
  "Is it allowed to create care plan activity for this device definition?"
  carePlanActivityAllowed: Boolean!
}

Авторизація

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

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

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

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

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

    • Повернути (403, 'Your scope does not allow to access this resource. Missing allowances: program_device: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')

Перевірити запит

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

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

  • якщо $.isActive = false (медвиріб по програмі деактивований), перевірити, що device_request_allowed = true та care_plan_activity_allowed = true для медвиробу по програмі

    • в разі помилки - повернути 422 ('To deactivate device definition within the program firstly disable medication_request_allowed and care_plan_activity_allowed')

  • якщо $.deviceRequestAllowed = true, перевірити, що медвиріб по програмі активний (is_active = true)

    • в разі помилки - повернути 422 ('To allow device request firstly enable program device')

  • якщо $.carePlanActivityAllowed = true, перевірити, що медвиріб по програмі активний (is_active = true)

    • в разі помилки - повернути 422 ('To allow care plan activity firstly enable program device')

  • якщо $.endDate вказано, перевірити, що її значення більше за start_date медичного виробу по програмі

    • в разі помилки - повернути 422 ('Program device end date should be greater than start date')

Перевірити медичний виріб по програмі

  • Перевірити, що device_definition_id по медвиробу по програмі є активним в таблиці program_devices в PRM DB (is_active = true)

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

  • Перевірити, що medical_program_id медичного виробу по програмі активний в таблиці medical_programs в PRM DB (is_active = true)

    • в разі помилки - повернути 409 ('Medical program is not active')

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

  1. Оновити параметри, вказані у вхідних параметрах в сутності медвиробу програми. Також, встановити значення:

    1. updated_by = user_id з токену

    2. updated_at = now()

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

  • No labels