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

AR_[NEW] (GraphQl) Search Program devices_UA

Мета

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

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

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

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

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

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

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