Versions Compared

Key

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

Purpose

This WS allows to update existing medication program participant.

Key points

  1. This is a graphQl method

...

  1. used in Administration panel only

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

Specification

Page Properties

Link

https://uaehealthapi.docs.apiary.io/#reference/internal.-nhs-admin/program-medications/update-program-medication

Resource

/program_medications/{{id}}graphQl method

Scope

program_medication:write

Components

Drugs and Program medications

Microservices

API paragraph not found

Protocol type

API paragraph not found

Request type

PUTREST

Sync/Async

Sync

Public/Private/Internal

Internal. NHS Admin

Logic

  1. Update params submitted on input in the program medication entity. Also, set:

    1. updated_by = current user (from token)

    2. updated_at = current date and time.

Key points

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

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

Input parameters

...

Parameter

...

Value

...

Type

...

Description

...

Example

...

id

...

String

...

Record id

...

b3af52d9-e5c0-4876-b717-0dc954a69a28

GraphQl Specification

Expand
Code Block
Expand
titleSpecification for updateProgramMedication
Code Block
  "Updates a single `ProgramMedication` using its globally unique ID and a patch."
  updateProgramMedication(
    input: UpdateProgramMedicationInput!
  ): UpdateProgramMedicationPayload
Code Block
"""
Input for `updateProgramMedication` mutation.

User must have a scope **program_medication:write**
"""
input UpdateProgramMedicationInput {
  "The ID of an object."
  id: ID!
  "Whether `ProgramMedication` is active or not?"
  isActive: Boolean
  "Whether requesting medications allowed for the `ProgramMedication` or not?"
  medicationRequestAllowed: Boolean
  "Whether creating care plan activity allowed for the `ProgramMedication` or not?"
  medicationCarePlanActivityAllowed: Boolean!
  "Reimbursement information."
  reimbursement: UpdateReimbursementInput
  "Start date of action for this entry"
  startDate: Date
  "End date for this entry"
  endDate: Date
  "General registry identifier"
  registryNumber: String
  "Reimbursement daily dosage"
  reimbursementDailyDosage: Float
  "Consumer price"
  consumerPrice: Float
  "Wholesale price"
  wholesalePrice: Float
  "Estimated payment amount"
  estimatedPaymentAmount: Float
}
Code Block
"""
Input for `Reimbursement` of `updateProgramMedication` mutation.
"""
input UpdateReimbursementInput {
  "Amount to reimburse for medication package by `MedicalProgram`."
  reimbursementAmount: Float
  "Percentage to reimburse for medication package by `MedicalProgram`."
  percentageDiscount: Float
}

"""
Return type for `updateProgramMedication` mutation.
"""
type UpdateProgramMedicationPayload {
  "Updated `ProgramMedication`."
  programMedication: ProgramMedication
}
Code Block
"""
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!
  "Whether creating care plan activity allowed for the `ProgramMedication` or not?"
  medicationCarePlanActivityAllowed: Boolean!
  "Date and time when record was inserted"
  insertedAt: DateTime!
  "Date and time when record was updated"
  updatedAt: DateTime!
}

"""
Reimbursement information for current program medication.
"""
type Reimbursement {
  "Type of reimbursement"
  type: ReimbursementType!
  "Amount to reimburse for medication package by `MedicalProgram`."
  reimbursementAmount: Float
  "Percentage to reimburse for medication package by `MedicalProgram`."
  percentageDiscount: Float
}

Request structure*

See on Apiary

...

titleRequest example

...

...

Logic

  1. Update params submitted on input in the program medication entity. Also, set:

    1. updated_by = current user (from token)

    2. updated_at = current date and time

Authorize

  • 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).

Headers

  • Content-Type:application/json
  • Authorization:Bearer c2778f3064753ea70de870a53795f5c9

Request data validation

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”).

  • Check legal entity type (type = NHS)

    • In case of error - return 403 ('You don’t have permission to access this resource').

Validate medication

  1. Get medication by program_medications.medication_id

...

  1. Check medication is_active = true

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

...

Validate request

  1. Check program medication id exists in DB

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

...

  1. If medicationRequestAllowed submitted, than check program medication is_active = true 

    1. in case of error - return 409 ('To allow medication request firstly enable program medication')

  2. If medicationCarePlanActivityAllowed submitted, than check program medication is_active = true 

    1. in case of error - return 409 ('To allow create care plan activity firstly enable program medication')

...

  1. If is_active submitted as false to deactivate program medication, than check medication_request_allowed = false

    1. in case of error - return 409 ('To deactivate medication brand within the program firstly disable medical_request_allowed')

...

  1. if reimbursement structure submitted, than check program medication is_active = true 

    1. in case of error - return 409 ('To update reimbursement firstly enable program medication')

...

API paragraph not found

Response structure

See on Apiary

Expand
titleRequest example
Code Block
{
  "meta": {
    "code": 200,
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "6617aeec-15e2-4d6f-b9bd-53559c358f97#17810"
  },
  "data": {
    "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "medication": {
      "id": "09b2bffb-699a-43c0-bc9a-5066d9b9b5a8",
      "name": "Амідарон",
      "manufacturer": {
        "name": "ПАТ \"Київський вітамінний завод\"",
        "country": "UA"
      },
      "code_atc": [
        "М01АЕ01",
        "C01BD01"
      ],
      "form": "PILL",
      "container": {
        "numerator_unit": "PILL",
        "numerator_value": 1,
        "denumerator_unit": "PILL",
        "denumerator_value": 1
      },
      "package_qty": 30,
      "package_min_qty": 10,
      "daily_dosage": "12",
      "certificate": "UA/4514/01/01",
      "certificate_expired_at": "2021-02-09",
      "ingredients": [
        {
          "id": "1349a693-4db1-4a3f-9ac6-8c2f9e541982",
          "name": "Амідарон",
          "dosage": {
            "numerator_unit": "MG",
            "numerator_value": 200,
            "denumerator_unit": "PILL",
            "denumerator_value": 1
          },
          "is_primary": true
        }
      ],
      "is_active": true,
      "inserted_at": "2017-04-20T19:14:13Z",
      "inserted_by": "e1453f4c-1077-4e85-8c98-c13ffca0063e",
      "updated_at": "2017-04-20T19:14:13Z",
      "updated_by": "2922a240-63db-404e-b730-09222bfeb2dd",
      "drlz_sku_id": "0404466792737630283703997321"
    },
    "medical_program": {
      "id": "c7d52544-0bd4-4129-97b0-2d72633e0490",
      "name": "Доступні ліки",
      "medical_program_settings": {
        "care_plan_required": true,
        "employee_types_to_create_medication_request": [
          "SPECIALIST",
          "DOCTOR"
        ],
        "skip_mnn_in_treatment_period": true,
        "skip_employee_validation": true,
        "speciality_types_allowed": [
          "ENDOCRINOLOGY",
          "PEDIATRIC_NEUROLOGY"
        ],
        "conditions_icd10_am_allowed": [
          "A00.0",
          "A00.1"
        ],
        "conditions_icpc2_allowed": [
          "A01",
          "A02"
        ],
        "providing_conditions_allowed": [
          "INPATIENT",
          "OUTPATIENT"
        ],
        "medication_request_max_period_day": 90,
        "skip_medication_request_employee_declaration_verify": true,
        "skip_medication_request_legal_entity_declaration_verify": true,
        "multi_medication_dispense_allowed": true,
        "skip_medication_dispense_sign": true,
        "medication_request_notification_disabled": true,
        "skip_contract_provision_verify": true,
        "medication_dispense_period_day": 90,
        "medical_program_change_on_dispense_allowed": true,
        "patient_categories_allowed": [
          "insulin_1",
          "insulin_2"
        ],
        "license_types_allowed": [
          "PHARMACY",
          "PHARMACY_DRUGS"
        ]
      },
      "medical_program_settings_text": "Some text",
      "is_active": true,
      "medication_dispense_allowed": true,
      "medication_dispense_allowed_text": "Some text",
      "medication_request_allowed": true,
      "medication_request_allowed_text": "Some text",
      "type": "MEDICATION",
      "funding_source": "NHS",
      "mr_blank_type": "F-1",
      "inserted_at": "2017-04-20T19:14:13Z",
      "inserted_by": "e1453f4c-1077-4e85-8c98-c13ffca0063e",
      "updated_at": "2017-04-20T19:14:13Z",
      "updated_by": "2922a240-63db-404e-b730-09222bfeb2dd"
    },
    "medication_request_allowed": true,
    "reimbursement": {
      "type": "fixed",
      "reimbursement_amount": 450
    },
    "wholesale_price": "148.50",
    "consumer_price": "150.00",
    "daily_dosage": "200",
    "reimbursement_daily_dosage": "10.4858",
    "estimated_payment_amount": "34.50",
    "is_active": true,
    "inserted_at": "2017-04-20T19:14:13Z",
    "inserted_by": "e1453f4c-1077-4e85-8c98-c13ffca0063e",
    "updated_at": "2017-04-20T19:14:13Z",
    "updated_by": "2922a240-63db-404e-b730-09222bfeb2dd"
  }
}

Expand
titleRequest example
Code Block
{
  "meta": {
    "code": "409",
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "6617aeec-15e2-4d6f-b9bd-53559c358f97#17810"
  },
  "error": {
    "type": "unverified",
    "message": "Medications are already inactive in this program"
  }
}

Post-processing processes

API paragraph not found

HTTP status codes

Page Properties

HTTP status code

Message

What caused the error

200

 401401

 Invalid access token

 

 403403

  • Your scope does not allow to access this resource. Missing allowances: program_medication:read

  • You don’t have permission to access this resource

 

404

not_found

Check program medication id exists in DB failed

409

  • Medication is not active

  • To allow medication request firstly enable program medication

  • To allow create care plan activity firstly enable program medication

  • To deactivate medication brand within the program firstly disable medical_request_allowed

  • To update reimbursement firstly enable program medication