Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Мета

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

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

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

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

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

Expand
titleindex.graphql
Code Block
languagegraphql
  "Reads and enables pagination through a set of `ProgramDevice`."
  programDevices(
    "A condition to be used in determining which values should be returned by the collection."
    filter: ProgramDeviceFilter
    "The method to use when ordering collection items."
    orderBy: ProgramDeviceOrderBy
    "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
  ): ProgramDeviceConnection!
Expand
titleprogramDevices.graphql
Code Block
languagegraphql
"""
Fields to filter reimbursement program device in the system.
"""
input ProgramDeviceFilter {
  "Primary key identifier from the database."
  databaseId: UUID
  "Medical program filter."
  medicalProgram: MedicalProgramFilter
  "is_active status."
  isActive: Boolean
  "Device request allowed status."
  deviceRequestAllowed: Boolean
  "Device definition filter."
  deviceDefinition: DeviceDefinitionFilter
  "Registry number filter."
  registryNumber: String
  "Type of reimbursement."
  reimbursementType: ReimbursementType
  "Start date for program device entry."
  startDate: DateInterval
  "End date for program device entry."
  endDate: DateInterval
}

"""
Methods to use when ordering `ProgramDevice`.
"""
enum ProgramDeviceOrderBy {
  "Sort by inserted_at in ascending order."
  INSERTED_AT_ASC
  "Sort by inserted_at in descending order."
  INSERTED_AT_DESC
}

"""
A connection to a list of `ProgramDevice` items.
"""
type ProgramDeviceConnection {
  "Information to aid in pagination."
  pageInfo: PageInfo!
  "A list of nodes."
  nodes: [ProgramDevice]
  "A list of edges."
  edges: [ProgramDeviceEdge]
}

"""
An edge in a connection of `ProgramDevice`.
"""
type ProgramDeviceEdge {
  "The item at the end of the edge."
  node: ProgramDevice!
  "A cursor for use in pagination."
  cursor: String!
}

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

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

    • Повернути (403, 'Your scope does not allow to access this resource. Missing allowances: program_device: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. Отримати всі записи з таблиці program_devices в базі даних PRM

  2. Задіяти додаткові пошукові параметри (пов'язані логічним AND):

    1. databaseId - пошук по program_devices.id (використовуючи точне співпадіння з оператором =)

    2. medicalProgram - задіяти фільтр медичної програми, потім здійснити пошук по program_devices.medical_program_id (використовуючи точне співпадіння з оператором =)

    3. isActive - пошук по program_devices.is_active (використовуючи точне співпадіння з оператором =)

    4. deviceRequestAllowed - пошук по program_devices.device_request_allowed (використовуючи точне співпадіння з оператором =)

    5. deviceDefinition - задіяти фільтр по медичним виробам, потім здійснити пошук по program_devices.device_definition_id (використовуючи точне співпадіння з оператором =)

    6. registryNumber - здійснити пошук по program_devices.registry_number (використовуючи правило співпадіння like, нечутливий до регістру)

    7. reimbursementType - здійснити пошук по program_devices.reimbursement_type (використовуючи точне співпадіння з оператором =)

    8. startDate - здійснити пошук по program_devices.start_date (використовуючи точне співпадіння з оператором between)

    9. endDate - здійснити пошук по program_devices.end_date (використовуючи точне співпадіння з оператором between)

  3. Задіясти опційне сортування

    1. якщо не передано $.orderBy - відсотрувати записи по полю inserted_at в спадаючому порядку.

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