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

AR_[NEW] (GraphQl) Create Program device_UA

Мета

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

Ключові параметри

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

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

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

"Creates a single `ProgramDevice`." createProgramDevice(input: CreateProgramDeeviceInput!): CreateProgramDevicePayload
""" 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. Відобразити відповідь у відповідності до специфікації.

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