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

AR_[NEW] (GraphQl) Update Program device_UA

Мета

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

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

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

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

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

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

"Updates a single `ProgramDevice` using its globally unique ID and a patch." updateProgramDevice(input: UpdateProgramDeviceInput!): UpdateProgramDevicePayload
""" 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. Відобразити відповідь у відповідності до специфікації.

 

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