Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
  1. Verify the validity of access token

    1. Return 401 in case validation fails

    2. Check user scopes in order to perform this action (scope = 'medication_request:read')

      1. Return 403 in case invalid scope(s)

    3. Search Medication requests by filters: 

      Code Block
      SELECT * FROM medication_request MR	
      WHERE AND (MR.employee_id == $.employee_id OR $.employee_id IS NULL) 
      		AND (MR.status == $.status OR $.status IS NULL)
      		AND (MR.person_id == $.person_id OR $.person_id IS NULL)
      		AND (MR.medication_id = $.medication_id OR $.medication_id IS NULL)
      		AND (MR.number = $.request_number OR $.request_number IS NULL)
      		AND (MR.created_at >= $.created_from OR $.created_from IS NULL)
      		AND (MR.created_at <= $.created_to OR $.created_to IS NULL)
      		AND (MR.legal_entity_id == $.legal_entity_id OR $.legal_entity_id IS NULL)
      
      

Response (output)

  1. If according to filters requests are not found, WS returns empty data array.

    1. WS also returns pagination data - for technical info.

Response (output)

If according to filters requests are not found, WS returns empty data array.

...

Table of Contents

Specification

Get Medication Requests

Purpose

This WS is designed to search (get list) of Medication requests.

According to requirements:

  • User can see all Medication Requests of which he is an author

  • User of MSP, PRIMARY_CARE, OUTPATIENT (DOCTOR, SPECIALIST, etc) can see all Medication requests from the user's legal entity

  • DOCTOR can see all the Medication requests of the patients whom he has an active declaration with doctor (employee_id) 

  • User of NHS_ADMIN can see all Medication requests (without limitations)

  • User of MSP, PRIMARY_CARE, OUTPATIENT (DOCTOR, SPECIALIST, etc) can see all Medication request based on the approval of the care plan that is contained in the Medication request

Input parameters (filters)

  • legal_entity_id (optional)

  • employee_id (optional)

  • person_id (optional)

  • status (optional). By default status=ACTIVE.

  • request_number (optional)

  • created_from  (optional)

  • created_to  (optional)

  • medication_id (optional)

  • intent (optional)

  • care_plan_id (optional)

  • encounter_id (optional)

  • page (optional)

  • page_size (optional)

Logic WS

...

Verify the validity of access token

  1. Return 401 in case validation fails

...

Check user scopes in order to perform this action (scope = 'medication_request:read')

  1. Return 403 in case invalid scope(s)

...

Get `my_party_id`  from `$.context.user_id`

  1. Return 500 in case ("Not found party for this user!")  

Get list of employees to `my_employees_list` for this `party_id`  & `$.context.legal_entity_id`

Code Block
SELECT E.id
	FROM parties P
		JOIN employees E
			ON P.id = E.party_id
		JOIN party_users PU
			ON parties.id = party_users.party_id
WHERE PU.user_id=$.context.user_id
	AND E.legal_entity_id = $.context.legal_entity.id
	

Search Medication requests by filters with use `my_employees_list` : 

Code Block
SELECT * FROM medication_request MR 
	LEFT JOIN declarations D 
		ON MR.person_id = D.person_id
			AND D.status = ACTIVE
WHERE (MR.employee_id IN [my_employees_list] OR D.employee_id IN [my_employees_list] )
		AND (MR.status = $.status OR $.status IS NULL)
		AND (MR.person_id = $.person_id OR $.person_id IS NULL)
		AND (MR.medication_id = $.medication_id OR $.medication_id IS NULL)
		AND (MR.number = $.request_number OR $.request_number IS NULL)
		AND (MR.created_at >= $.created_from OR $.created_from IS NULL)
		AND (MR.created_at <= $.created_to OR $.created_to IS NULL)


Logic WS for `client_type` = NHS_ADMIN

Table of Contents

Purpose

This WS is designed to search (get list) for(of) Medication requests.

According to requirements:

  • User can see all Medication Requests of which he is an author

  • User of MSP, PRIMARY_CARE, OUTPATIENT (DOCTOR, SPECIALIST, etc) can see all Medication requests from the user's legal entity

  • DOCTOR can see all the Medication requests of the patients whom he has an active declaration with doctor (employee_id) 

  • User of NHS_ADMIN can see all Medication requests (without limitations)

  • User of MSP, PRIMARY_CARE, OUTPATIENT (DOCTOR, SPECIALIST, etc) can see all Medication request based on the approval of the care plan that is contained in the Medication request

Specification

Page Properties

Link

https://ehealthmisapi1.docs.apiary.io/#reference/public.-reimbursement/medication-request/get-medication-requests

Посилання на Apiary або Swagger

Resource

/api/medication_requests

Посилання на ресурс, наприклад: /api/persons/create

Scope

medication_request:read

Scope для доступу

Components

ePrescription

Зазначається перелік бізнес компонентів, які використовують цей метод, наприклад: ePrescription

Microservices

API paragraph not found

Перелік мікросервісів, які використовує метод API, наприклад: Auth, ABAC

Protocol type

REST

Тип протоколу, який використовується запитом, наприклад: SOAP | REST

Request type

GET

Тип запиту API, наприклад: GET, POST, PATCH…

Sync/Async

Sync

Метод є синхронним чи асинхронним?

Public/Private/Internal

Public

Logic

Logic WS

  1. Verify the validity of access token

    1. Return 401 in case validation fails

  2. Check user scopes in order to perform this action (scope = 'medication_request:read')

    1. Return 403 in case invalid scope(s)

  3. Get `my_party_id`  from `$.context.user_id`

    1. Return 500 in case ("Not found party for this user!")  

  4. Get list of employees to `my_employees_list` for this `party_id`  & `$.context.legal_entity_id`

    Code Block
    SELECT E.id
    	FROM parties P
    		JOIN employees E
    			ON P.id = E.party_id
    		JOIN party_users PU
    			ON parties.id = party_users.party_id
    WHERE PU.user_id=$.context.user_id
    	AND E.legal_entity_id = $.context.legal_entity.id
    	
    
    

  5. Search Medication requests by filters with use `my_employees_list` : 

    Code Block
    SELECT * FROM medication_request MR 
    	LEFT JOIN declarations D 
    		ON MR.person_id = D.person_id
    			AND D.status = ACTIVE
    WHERE (MR.employee_id IN [my_employees_list] OR D.employee_id IN [my_employees_list] )
    		AND (MR.status = $.status OR $.status IS NULL)
    		AND (MR.person_id = $.person_id OR $.person_id IS NULL)
    		AND (MR.medication_id = $.medication_id OR $.medication_id IS NULL)
    		AND (MR.number = $.request_number OR $.request_number IS NULL)
    		AND (MR.created_at >= $.created_from OR $.created_from IS NULL)
    		AND (MR.created_at <= $.created_to OR $.created_to IS NULL)
    
    
    

Logic WS for `client_type` = NHS_ADMIN

  1. Verify the validity of access token

    1. Return 401 in case validation fails

    2. Check user scopes in order to perform this action (scope = 'medication_request:read')

      1. Return 403 in case invalid scope(s)

    3. Search Medication requests by filters: 

      Code Block
      SELECT * FROM medication_request MR	
      WHERE AND (MR.employee_id == $.employee_id OR $.employee_id IS NULL) 
      		AND (MR.status == $.status OR $.status IS NULL)
      		AND (MR.person_id == $.person_id OR $.person_id IS NULL)
      		AND (MR.medication_id = $.medication_id OR $.medication_id IS NULL)
      		AND (MR.number = $.request_number OR $.request_number IS NULL)
      		AND (MR.created_at >= $.created_from OR $.created_from IS NULL)
      		AND (MR.created_at <= $.created_to OR $.created_to IS NULL)
      		AND (MR.legal_entity_id == $.legal_entity_id OR $.legal_entity_id IS NULL)
      
      

Preconditions

No

Global and configurable parameters

No

Input parameters

No

Filters

See on Apiary

Request structure

API paragraph not found

Authorize

Request to process the request using a token in the headers

Headers

Content-Type:application/json

Authorization:Bearer c2778f3064753ea70de870a53795f5c9

Validate request

API paragraph not found

Request data validation

API paragraph not found

Processing

  1. If according to filters requests are not found, WS returns empty data array:

    1. WS also returns pagination data - for technical info.

Response structure

See on Apiary

Example:

Expand
titleResponse example
Code Block
{
  "meta": {
    "code": 200,
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "req-adasdoijasdojsda"
  },
  "data": [
    {
      "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b",
      "status": "ACTIVE",
      "request_number": "0000-243P-1X53-EH38",
      "created_at": "2017-08-17",
      "started_at": "2017-08-17",
      "ended_at": "2017-09-16",
      "dispense_valid_from": "2017-08-17",
      "dispense_valid_to": "2017-09-16",
      "legal_entity": {
        "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b",
        "name": "Клініка Ноунейм",
        "short_name": "Ноунейм",
        "public_name": "Клініка Ноунейм",
        "type": "MSP",
        "edrpou": "5432345432",
        "status": "ACTIVE"
      },
      "division": {
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "legal_entity_id": "c8aadb87-ecb9-41ca-9ad4-ffdfe1dd89c9",
        "name": "Бориспільське відділення Клініки Ноунейм",
        "addresses": [
          {
            "type": "RESIDENCE",
            "country": "UA",
            "area": "Житомирська",
            "region": "Бердичівський",
            "settlement": "Київ",
            "settlement_type": "CITY",
            "settlement_id": "b075f148",
            "street_type": "STREET",
            "street": "вул. Ніжинська",
            "building": "15",
            "apartment": "23",
            "zip": "02090"
          }
        ],
        "phones": [
          {
            "type": "MOBILE",
            "number": "+380503410870"
          }
        ],
        "email": "email@example.com",
        "working_hours": {
          "mon": [
            [
              "08.00",
              "12.00"
            ],
            [
              "14.00",
              "18.00"
            ]
          ],
          "tue": [
            [
              "08.00",
              "12.00"
            ]
          ],
          "wed": [
            [
              "08.00",
              "12.00"
            ]
          ],
          "thu": [
            [
              "08.00",
              "12.00"
            ]
          ],
          "fri": [
            [
              "08.00",
              "12.00"
            ]
          ]
        },
        "type": "CLINIC",
        "external_id": "3213213",
        "location": {
          "latitude": 30.1233,
          "longitude": 50.32423
        },
        "dls_id": "2872985",
        "dls_verified": true
      },
      "employee": {
        "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
        "position": "P6",
        "party": {
          "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b",
          "no_tax_id": true,
          "first_name": "Петро",
          "last_name": "Іванов",
          "second_name": "Миколайович",
          "email": "email@example.com",
          "phones": [
            {
              "type": "MOBILE",
              "number": "+380503410870"
            }
          ]
        }
      },
      "person": {
        "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b",
        "short_name": "Петро І. І.",
        "age": 35
      },
      "medication_info": {
        "medication_id": "4a63b858-c138-4921-9341-ae9e384bcbd6",
        "medication_name": "Аміодарон 200мг таблетки",
        "form": "PILL",
        "dosage": {
          "numerator_unit": "MG",
          "numerator_value": 200,
          "denumerator_unit": "PILL",
          "denumerator_value": 1
        },
        "ingredients": [
          {
            "id": "1349a693-4db1-4a3f-9ac6-8c2f9e541982",
            "name": "Інсулін деглюдек",
            "name_original": "Insulin degludec",
            "sctid": "52574003",
            "dosage": {
              "numerator_unit": "MG",
              "numerator_value": 200,
              "denumerator_unit": "PILL",
              "denumerator_value": 1
            },
            "is_primary": true
          }
        ],
        "medication_qty": 10.34
      },
      "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_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",
        "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"
      },
      "intent": "plan",
      "category": "community",
      "based_on": [
        {
          "identifier": {
            "type": {
              "coding": [
                {
                  "system": "eHealth/resources",
                  "code": "care_plan"
                }
              ]
            },
            "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
          }
        },
        {
          "identifier": {
            "type": {
              "coding": [
                {
                  "system": "eHealth/resources",
                  "code": "activity"
                }
              ]
            },
            "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
          }
        }
      ],
      "context": {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "encounter"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        }
      },
      "dosage_instruction": [
        {
          "sequence": 1,
          "text": "0.25mg PO every 6-12 hours as needed for menses from Jan 15-20, 2015.  Do not exceed more than 4mg per day",
          "additional_instruction": [
            {
              "coding": [
                {
                  "system": "eHealth/SNOMED/additional_dosage_instructions",
                  "code": "311504000"
                }
              ]
            }
          ],
          "patient_instruction": "0.25mg PO every 6-12 hours as needed for menses from Jan 15-20, 2015.  Do not exceed more than 4mg per day",
          "timing": {
            "event": [
              "2017-04-20T19:14:13Z"
            ],
            "repeat": {
              "bounds_duration": {
                "value": 10,
                "unit": "days",
                "system": "eHealth/ucum/units",
                "code": "d"
              },
              "count": 2,
              "count_max": 4,
              "duration": 4,
              "duration_max": 6,
              "duration_unit": "d",
              "frequency": 1,
              "frequency_max": 2,
              "period": 4,
              "period_max": 6,
              "period_unit": "d",
              "day_of_week": [
                "mon"
              ],
              "time_of_day": [
                "2017-04-20T19:14:13Z"
              ],
              "when": [
                "WAKE"
              ],
              "offset": 4
            },
            "code": {
              "coding": [
                {
                  "system": "TIMING_ABBREVIATIONS",
                  "code": "patient"
                }
              ]
            }
          },
          "as_needed_boolean": true,
          "site": {
            "coding": [
              {
                "system": "eHealth/SNOMED/anatomical_structure_administration_site_codes",
                "code": "344001"
              }
            ]
          },
          "route": {
            "coding": [
              {
                "system": "eHealth/SNOMED/route_codes",
                "code": "46713006"
              }
            ]
          },
          "method": {
            "coding": [
              {
                "system": "eHealth/SNOMED/administration_methods",
                "code": "419747000"
              }
            ]
          },
          "dose_and_rate": {
            "type": {
              "coding": [
                {
                  "system": "eHealth/dose_and_rate",
                  "code": "'ordered'"
                }
              ]
            },
            "dose_range": {
              "low": {
                "value": 0,
                "unit": "mg",
                "system": "eHealth/ucum/units",
                "code": "mg"
              },
              "high": {
                "value": 0,
                "unit": "mg",
                "system": "eHealth/ucum/units",
                "code": "mg"
              }
            },
            "rate_ratio": {
              "numerator": {
                "value": 0,
                "unit": "mg",
                "system": "eHealth/ucum/units",
                "code": "mg"
              },
              "denominator": {
                "value": 0,
                "unit": "mg",
                "system": "eHealth/ucum/units",
                "code": "mg"
              }
            }
          },
          "max_dose_per_period": {
            "numerator": {
              "value": 0,
              "unit": "mg",
              "system": "eHealth/ucum/units",
              "code": "mg"
            },
            "denominator": {
              "value": 0,
              "unit": "mg",
              "system": "eHealth/ucum/units",
              "code": "mg"
            }
          },
          "max_dose_per_administration": {
            "value": 0,
            "unit": "mg",
            "system": "eHealth/ucum/units",
            "code": "mg"
          },
          "max_dose_per_lifetime": {
            "value": 0,
            "unit": "mg",
            "system": "eHealth/ucum/units",
            "code": "mg"
          }
        }
      ],
      "rejected_at": "2022-01-28",
      "rejected_by": "e8e5a969-74d8-4620-8496-f5e41f2e8312",
      "reject_reason": "Incompatible drugs",
      "reject_reason_code": "PATIENT_REJECT",
      "is_blocked": false,
      "block_reason": "Підозра на фрод",
      "block_reason_code": "WRONG_QTY_DRUG",
      "priority": "routine",
      "prior_prescription": {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "medication_request"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        }
      },
      "container_dosage": {
        "system": "MEDICATION_UNIT",
        "code": "ML",
        "value": 4
      }
    }
  ],
  "paging": {
    "page_number": 2,
    "page_size": 50,
    "total_entries": 1000,
    "total_pages": 23
  }
}

Post-processing processes

No

HTTP status codes

HTTP status code

Message

What caused the error

200

Response

 

401

Invalid access token

 

403

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

 

500

Not found party for this user!

Backward compatibility

API paragraph not found