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

REST API Resend Medication Request [API-005-008-002-0151]

Properties of a REST API method document

Document type

Метод REST API

Document title

REST API Resend Medication Request [API-005-008-002-0151]

Guideline ID

GUI-0011

Author

@Iryna Lishtaba (SoE eHealth)

Document version

1

Document status

PROD

Date of creation

11.10.2024

Date of update

04.03.2025

Method API ID

API-005-008-002-0151

Microservices (namespace)

IL

Link на API-специфікацію

ESOZ · Apiary

Resource

{{host}}/api/medication_requests/{{id}}/actions/resend

Scope

medication_request:resend

Protocol type

REST

Request type

PATCH

Sync/Async

Sync

Public/Private

Public

Purpose

This WS is designed to resend SMS to person with Medication request info.

Key points

  • Only authenticated and authorized user with an appropriate scope can resend Medication request info

  • Medication request info can be resend only to a person with verification_type = OTP

  • Medication request info can be resend only for medication requests with intent order

  • Medication request info can be resend only from ‘ACTIVE' status

Logic

Процеси роботи з випискою електронних рецептів

Технічний опис бізнес-процесу виписування рецепту в ЕСОЗ (загальний процес для усіх рецептурних ЛЗ, в т.ч. і тих, які підлягають реімбурсації)

Configuration parameters

N/A

Dictionaries

MEDICATION_REQUEST_BLOCK_REASON

MEDICATION_REQUEST_INTENT

MEDICATION_REQUEST_CATEGORY

MEDICATION_REQUEST_PRIORITY

eHealth/SNOMED/additional_dosage_instructions

eHealth/SNOMED/anatomical_structure_administration_site_codes

eHealth/SNOMED/route_codes

eHealth/SNOMED/administration_methods

eHealth/SNOMED/dose_and_rate

eHealth/ICD10_AM/condition_codes

eHealth/ICPC2/condition_codes

ADDRESS_TYPE

SETTLEMENT_TYPE

STREET_TYPE

PHONE_TYPE

DIVISION_TYPE

POSITION

MEDICATION_FORM

MEDICATION_UNIT

eHealth/clinical_impression_patient_categories

LICENSE_TYPE

FUNDING_SOURCE

MR_BLANK_TYPES

MEDICATION_REQUEST_REJECT_REASON

Input parameters

Input parameter

Mandatory

Type

Description

Example

Input parameter

Mandatory

Type

Description

Example

1

id

M

String

Medication Request identifier

a89f6a26-4221-4597-a1d2-542d5e40b565

Request structure

See on API-specification

Headers

Headers

Request data validation

Authorize

  1. Verify the validity of access token

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

  2. Verify that token is not expired

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

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

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

Validate Medication request

  1. Get Medication request identifier from the URL. Check Medication request exists in OPS DB

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

Validate intent

  1. Get Medication request by $.id in OPS DB. Check that Medication request intent = ‘order’

    1. if invalid - return 409 ("For medication request plan information cannot be resent")

Validate status

  1. Get Medication request by $.id in OPS DB. Check that Medication request status = ‘ACTIVE’

    1. if invalid - return 409 ("Invalid status Medication request for resend action!")

Validate medical program

Get Medication request by $.id in OPS DB. If medical program exists in the medication request:

  1. Get medical program settings by $.medical_program.id

  2. Check medication_request_notification_disabled = false or null/absent

    1. if true - return 409 ("Notifications are not allowed for the medical program!")

Validate verification code

  1. Get Medication request by $.id in OPS DB. Check that Medication request verification code is not null

    1. if invalid - return 403 ("Can't resend Medication request without verification code!")

Validate person

  1. Get authentication_method of person in MPI DB. Check that persons authentication_method == ‘OTP’ or ‘THIRD_PERSON’ with authentication_method == ‘OTP’

    1. if invalid - return 409 ("Person or third person has no OTP auth method")

Processing

  1. Call SMS timeout procedure to check if resending is allowed using:

    1. MR_MAX_ATTEMPTS_COUNT as MAX_ATTEMPTS_COUNT

    2. MR_SEND_TIMEOUT as SEND_TIMEOUT

    3. "medication_request" as entity_name

    4. medication_request_id as entity_id

    In case of error - return 429 ("Sending SMS timeout. Try later. Next attempt will be available at <attempts.oldest.value + SEND_TIMEOUT>")

  2. Generate SMS text

    1. get template from sign_template_sms parameter

    2. enrich template with data from Medication request

  3. Send SMS to a person

Response structure examples

See on API-specification

{ "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 } } }HTTP status codes

HTTP status codes

Response code

HTTP Status code

Message

Internal name

Description

Response code

HTTP Status code

Message

Internal name

Description

1

Базові

2

 

401

Invalid access token

 

Недійсний токен доступу

3

 

403

Can't resend Medication request without verification code!

 

Неможливо перевідправити інформацію по рецепту без коду верифікації!

4

 

404

Not found

 

не знайдено

5

 

409

For medication request plan information cannot be resent

 

Для рецепту з типом "План лікування" інформація не може бути повторно відправлена

6

 

409

Invalid status Medication request for resend action!

 

Недопустимий статус електронного рецепту для повторної відправки інформації

7

 

409

Notifications are not allowed for the medical program!

 

Надсилання смс повідомлень не дозволенні для обраної медичної програми

8

 

409

Person or third person has no OTP auth method

 

Пацієнт чи законний представник не мають методу автентифікації OTP (Автентифікації через СМС)

9

Специфічні

10

 

422

Your scope does not allow to access this resource. Missing allowances: medication_request:resend

 

Для вашої ролі відсутній доступ до цього ресурсу. Необхідний доступ на повторне надсилання смс з інформацією про електронний рецепт

11

 

429

Sending SMS timeout. Try later. Next attempt will be available at <attempts.oldest.value + SEND_TIMEOUT>

 

Час очікування надсилання SMS. Спробуйте пізніше. Наступна спроба буде доступна за <attempts.oldest.value + SEND_TIMEOUT>

Post-processing processes

N/A

Technical modules where the method is used

 

Related content

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