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

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
  "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!
 programDevices.graphql
"""
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. Відобразити відповідь у відповідності до специфікації.

  • No labels