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

RC_Create Program medication (Admin CDB)

Purpose

This WS allows to create new medication program participant

Key points

  1. This is a graphQl method used in Administration panel only

  2. Only authenticated and authorized NHS employee with appropriate scope can create a Program medication.

  3. Program medication can be created only for medical program with type MEDICATION.

Specification

"Creates a single `ProgramMedication`." createProgramMedication( input: CreateProgramMedicationInput! ): CreateProgramMedicationPayload

 

""" Input for `createProgramMedication` mutation. User must have a scope **program_medication:write** """ input CreateProgramMedicationInput { "Id of medication" medicationId: ID! "Medical program Identifier" medicalProgramId: ID! "Reimbursement information" reimbursement: CreateReimbursementInput! "Factory gate price for package of medications" wholesalePrice: Float "Consumer price for package of medications" consumerPrice: Float "Reimbuersement amount for recommended daily dosage of medication" reimbursementDailyDosage: Float "The estimatied amount which patient should pay for package of medications after reimbursement" estimatedPaymentAmount: Float "Start date of action for this entry" startDate: Date "End date for this entry" endDate: Date "General registry identifier" registryNumber: String } """ Input for `Reimbursement` of `createProgramMedication` mutation. """ input CreateReimbursementInput { "Reimbursement type" type: ReimbursementType! "Reimbursement amount" reimbursementAmount: Float "Percentage of reimbursement." percentageDiscount: Float }

 

""" Return type for `createProgramMedication` mutation. """ type CreateProgramMedicationPayload { "Created `ProgramMedication`." programMedication: ProgramMedication } """ Program Medication linkes medication and medical program. In order to obtain details user must have a scope **program_medication:read** """ type ProgramMedication implements Node { "The ID of an object." id: ID! "Primary key identifier from the database." databaseId: UUID! "MedicalProgram." medicalProgram: MedicalProgram! "Medication" medication: Medication! "Reimbursement information." reimbursement: Reimbursement! "Factory gate price for package of medications" wholesalePrice: Float "Consumer price for package of medications" consumerPrice: Float "Reimbuersement amount for recommended daily dosage of medication" reimbursementDailyDosage: Float "The estimatied amount which patient should pay for package of medications after reimbursement" estimatedPaymentAmount: Float "Start date of action for this entry" startDate: Date "End date for this entry" endDate: Date "General registry identifier" registryNumber: String "Whether `ProgramMedication` is active or not?" isActive: Boolean! "Whether requesting medications allowed for the `ProgramMedication` or not?" medicationRequestAllowed: Boolean! "Date and time when record was inserted" insertedAt: DateTime! "Date and time when record was updated" updatedAt: DateTime! }

Authorization

  • Verify the validity of access token

    • in case of error - return 401 (“Invalid access token”) in case of validation fails

  • Verify that token is not expired

    • in case of error - return 401 (“Invalid access token”)

  • Check user scopes in order to perform this action (scope = 'program_medication:write')

    • return 403 (“Your scope does not allow to access this resource. Missing allowances: program_medication:read”) in case of invalid scope(s)

Validate legal entity

  • Extract client_id from token.

  • Check client scopes in order to perform this action (scope = 'program_medication:write')

    • in case of error - return 403 (“Your scope does not allow to access this resource. Missing allowances: program_medication:write”)

Validate request

  1. Check medicalProgramId:

    1. exists in DB

      1. in case of error - return 404 ('not_found')

    2. has type = MEDICATION

      1. in case of error - return 409 ('MedicalProgram type should be MEDICATION')

    3. is_active = true

      1. in case of error - return 409 ('Medical program is not active')

  2. Check start_date < end_date

    1. in case of error - return 422 ('must be earlier than the end date')

  3. Validate reimbursement:

    1. If reimbursement type = FIXED, than reimbursementAmount field required

    2. If reimbursement type = PERCENTAGE, percentageDiscount field required

      1. in case of error - return 422 ('can't be blank')

  4. If percentageDiscount submitted in the reimbursement structure:

    1. Check it’s value in range from 0 to 100

      1. in case of error - return 422 ('expected the value to be <= 100')

  5. Validate medicationId:

    1. Check it is active and it’s type is BRAND

      1. in case of error - return 409 ('Medication is not active')

Service logic

  1. Create new program medication entity: store input into program_medications table (prm). Also, set:

    1. medication_request_allowed = true

    2. is_active = true

    3. inserted_at, updated_at = user_id (from token)

    4. inserted_at, updated_at = current date and time

 



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