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

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 з відповідним скоупом можуть створити учасника медичної програми по медвиробу.

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

 index.graphql
"Creates a single `ProgramDevice`."
  createProgramDevice(input: CreateProgramDeeviceInput!): CreateProgramDevicePayload
 programDevices.graphql
"""
Input for `createProgramDevice` mutation.
"""
input CreateProgramDeviceInput {
  "Device definition identifier."
  deviceDefinitionId: ID!
  "Medical program identifier."
  medicalProgramId: ID!
  "Reimbursement information."
  reimbursement: CreateReimbursementInput!
  "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
  "The maximum allowable daily quantity of the device."
  maxDailyCount: Int
  "Is it allowed to prescribe this device definition?"
  deviceRequestAllowed: Boolean!
  "Is it allowed to create care plan activity for this device definition?"
  carePlanActivityAllowed: Boolean!
}

"""
Input for `Reimbursement` of `createProgramDevice` mutation.

User must have a scope **program_device:write**
"""
input CreateReimbursementInput {
  "Reimbursement type."
  type: ReimbursementType!
  "Reimbursement amount."
  reimbursementAmount: Float
  "Percentage of reimbursement."
  percentageDiscount: Float
}

"""
Return type for `createProgramDevice` mutation.
"""
type CreateProgramDevicePayload {
  "Created `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')

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

  • Перевірити вказаний медичний виріб в$.deviceDefinitionId

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

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

  • Перевірити медичну програму, що вказана в $.medicalProgramId

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

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

    • Перевірити, що медична програма має тип DEVICE

      • в разі помилки - повернути 422 ('Medical program type should be DEVICE')

  • Перевірити деталі реімбурсації, вказаної в $.reimbursement

    • якщо $.reimbursement.type = FIXED, то поле $.reimbursement.reimbursementAmount обов'язкове

    • якщо $.reimbursement.type = PERCENTAGE, то поле $.reimbursement.percentageDiscount обов'язкове

      • в разі помилки - повернути 422 ('can't be blank')

    • якщо вказано $.reimbursement.percentageDiscount, перевірити, що її значення в рангу від 0 до 100

      • в разі помилки - повернути 422 ('expected the value to be <= 100')

  • Перевірити по медвиробу по програмі вказано дату початку в $.startDate

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

      • в разі помилки - повернути 422 ('must be earlier than the end date')

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

  1. Створити сутність медвиробу по програмі в таблиці program_devices в PRM DB зі значеннями звхідних параметрів. Також, встановити значення:

    1. id = autogenerate uuid

    2. is_active = true

    3. inserted_at = now()

    4. updated_at = now()

    5. inserted_by = user_id з токену

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

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

  • No labels