Versions Compared

Key

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

...

This WS is designed to sign Request fo for Medication request (patch). If successful signed - automatically create Medication request.

Key points

  1. Only authenticated and authorized users with appropriate scope can Sign Medication request Request (MRR)

  2. Request should be signed with DS.

  3. MRR data should be changed when it has been submitted to the method.

Specification

Page Properties

Link

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

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

Resource

/api/medication_request_requests/{{id}}/actions/sign

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

Scope

medication_request_request:sign

Scope для доступу

Components

ePrescription

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

Microservices

API paragraph not found

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

Protocol type

REST

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

Request type

PATCH

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

Sync/Async

Sync

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

Logic

Method receives signed message (pkcs7) including signed content, digital signature and signer public key in signed_content property. All signature fields will be validated (including signer certificate authority).

...

Expand
titleRequest example
Code Block
{
  "signed_medication_request_request": "MIIWmAYJKoZIhvcNAQcCoIIWiTCCFoUCAQExCzAJBgUrDgMCGgUAMIISuwYJKoZIhvcNAQcBoIISrASCEqh7XHJ0ZjFcYW5zaVxhbnNpY3BnMTI1Mlxjb2NvYXJ0ZjE1MDRcY29jb2FzdWJydGY4MTANCntcZm9udHRibFxmMFxmc3dpc3NcZmNoYXJzZXQwIEhlbHZldGljYTt9DQp7XGNvbG9ydGJsO1xyZWQyNTVcZ3JlZW4yNTVcYmx1ZTI1NTtccmVkNzBcZ3JlZW41M1xibHVlOTY7XHJlZDI0OVxncmVlbjI0OVxibHVlMjUxO30NCntcKlxleHBhbmRlZGNvbG9ydGJsOztcY3NzcmdiXGMzNDUxMFxjMjc4NDNcYzQ1MDk4O1xjc3NyZ2JcYzk4MDM5XGM5ODAzOVxjOTg4MjQ7fQ0KXG1hcmdsMTQ0MFxtYXJncjE0NDBcdmlld3cxMDgwMFx2aWV3aDg0MDBcdmlld2tpbmQwDQpcZGVmdGFiNzIwDQpccGFyZFxwYXJkZWZ0YWI3MjBccGFydGlnaHRlbmZhY3RvcjANCg0KXGYwXGZzMjggXGNmMiBcY2IzIFxleHBuZDBcZXhwbmR0dzBca2VybmluZzANClx7XA0KICAgImlkIjoiYjA3NWYxNDgiLFwNCiAgICJzdGFydF9kYXRlIjoiMjAxNy0wMy0wMlQxMDo0NToxNi4wMDBaIixcDQogICAiZW5kX2RhdGUiOiIyMDE3LTAzLTAyVDEwOjQ1OjE2LjAwMFoiLFwNCiAgICJwZXJzb24iOlx7XA0KICAgICAgImZpcnN0X25hbWUiOiJcdWMwXHUxMDU1IFx1MTA3NyBcdTEwOTAgXHUxMDg4IFx1MTA4NiAiLFwNCiAgICAgICJsYXN0X25hbWUiOiJcdWMwXHUxMDMwIFx1MTA3NCBcdTEwNzIgXHUxMDg1IFx1MTA4NiBcdTEwNzQgIixcDQogICAgICAic2blic Vjb25kX25hbWUiOiJcdWMwXHUxMDUyIFx1MTA4MCBcdTEwODIgXHUxMDg2IFx1MTA4MyBcdTEwNzIgXHUxMDgxIFx1MTA4NiBcdTEwNzQgXHUxMDgwIFx1MTA5NSAiLFwNCiAgICAgICJiaXJ0aF9kYXRlIjoiMTk5MS0wOC0xOVQwMDowMDowMC4wMDBaIixcDQogICAgICAiYmlydGhfcGxhY2UiOiJcdWMwXHUxMDQyIFx1MTExMCBcdTEwODUgXHUxMDg1IFx1MTA4MCBcdTEwOTQgXHUxMTAzICwgXHUxMDU5IFx1MTA4MiBcdTEwODggXHUxMDcyIFx1MTExMSBcdTEwODUgXHUxMDcyICIsXA0KICAgICAgImdlbmRlciI6Ik1BTEUiLFwNCiAgICAgICJlbWFpbCI6ImVtYWlsQGV4YW1wbGUuY29tIixcDQogICAgICAidGF4X2lkIjoiMzEyNjUwOTgxNiIsXA0KICAgICAgIm5hdGlvbmFsX2lkIjoiQ0M3MTUwOTg1MjQzIixcDQogICAgICAic2VjcmV0Ijoic2VjcmV0IixcDQogICAgICAiZG9jdW1lbnRzIjpbXA0KICAgICAgICAgXHtcDQogICAgICAgICAgICAidHlwZSI6IlBBU1NQT1JUIixcDQogICAgICAgICAgICAibnVtYmVyIjoiMTIwNTE4IixcDQogICAgICAgICAgICAiaXNzdWVfZGF0ZSI6IjIwMTUtMDQtMDdUMDA6MDA6MDAuMDAwWiIsXA0KICAgICAgICAgICAgImV4cGlyeV9kYXRlIjoiMjAxNS0wNC0wN1QwMDowMDowMC4wMDBaIixcDQogICAgICAgICAgICAiaXNzdWVkX2J5IjoiRE1TVSJcDQogICAgICAgICBcfVwNCiAgICAgIF0sXA0KICAgICAgImFkZHJlc3NlcyI6W1wNCiAgICAgICAgIFx7XA0KICAgICAgICAgICAgInR5cGUiOiJSRVNJREVOQ0UiLFwNCiAgICAgICAgICAgICJjb3VudHJ5IjoiVUEiLFwNCiAgICAgICAgICAgICJhcmVhIjoiXHVjMFx1MTA0NiBcdTEwODAgXHUxMDkwIFx1MTA4NiBcdTEwODQgXHUxMDgwIFx1MTA4OCBcdTEwODkgXHUxMTAwIFx1MTA4MiBcdTEwNzIgIixcDQogICAgICAgICAgICAicmVnaW9uIjoiXHVjMFx1MTA0MSBcdTEwNzcgXHUxMDg4IFx1MTA3NiBcdTEwODAgXHUxMDk1IFx1MTExMCBcdTEwNzQgXHUxMDg5IFx1MTEwMCBcdTEwODIgXHUxMDgwIFx1MTA4MSAiLFwNCiAgICAgICAgICAgICJjaXR5IjoiXHVjMFx1MTA1MCBcdTEwODAgXHUxMTExIFx1MTA3NCAiLFwNCiAgICAgICAgICAgICJjaXR5X3R5cGUiOiJDSVRZIixcDQogICAgICAgICAgICAic3RyZWV0IjoiXHVjMFx1MTA3NCBcdTEwOTEgXHUxMDgzIC4gXHUxMDUzIFx1MTExMCBcdTEwNzggXHUxMDgwIFx1MTA4NSBcdTEwODkgXHUxMTAwIFx1MTA4MiBcdTEwNzIgIixcDQogICAgICAgICAgICAiYnVpbGRpbmciOiIxNSIsXA0KICAgICAgICAgICAgImFwYXJ0bWVudCI6IjIzIixcDQogICAgICAgICAgICAiemlwIjoiMDIwOTAiXA0KICAgICAgICAgXH1cDQogICAgICBdLFwNCiAgICAgICJwaG9uZXMiOltcDQogICAgICAgICBce1wNCiAgICAgICAgICAgICJ0eXBlIjoiTU9CSUxFIixcDQogICAgICAgICAgICAibnVtYmVyIjoiKzM4MDUwMzQxMDg3MCJcDQogICAgICAgICBcfVwNCiAgICAgIF0sXA0KICAgICAgImF1dGhlbnRpY2F0aW9uX21ldGhvZHMiOltcDQogICAgICAgICBce1wNCiAgICAgICAgICAgICJ0eXBlIjoiU01TIixcDQogICAgICAgICAgICAicGhvbmVfbnVtYmVyIjoiKzM4MDUwODg4NzcwMCJcDQogICAgICAgICBcfVwNCiAgICAgIF0sXA0KICAgICAgImVtZXJnZW5jeV9jb250YWN0Ijpce1wNCiAgICAgICAgICJmaXJzdF9uYW1lIjoiXHVjMFx1MTA1NSBcdTEwNzcgXHUxMDkwIFx1MTA4OCBcdTEwODYgIixcDQogICAgICAgICAibGFzdF9uYW1lIjoiXHVjMFx1MTAzMCBcdTEwNzQgXHUxMDcyIFx1MTA4NSBcdTEwODYgXHUxMDc0ICIsXA0KICAgICAgICAgInNlY29uZF9uYW1lIjoiXHVjMFx1MTA1MiBcdTEwODAgXHUxMDgyIFx1MTA4NiBcdTEwODMgXHUxMDcyIFx1MTA4MSBcdTEwODYgXHUxMDc0IFx1MTA4MCBcdTEwOTUgIixcDQogICAgICAgICAicGhvbmVzIjpbXA0KICAgICAgICAgICAgXHtcDQogICAgICAgICAgICAgICAidHlwZSI6Ik1PQklMRSIsXA0KICAgICAgICAgICAgICAgIm51bWJlciI6IiszODA1MDM0MTA4NzAiXA0KICAgICAgICAgICAgXH1cDQogICAgICAgICBdXA0KICAgICAgXH0sXA0KICAgICAgImNvbmZpZGFudF9wZXJzb24iOlx7XA0KICAgICAgICAgInJlbGF0aW9uX3R5cGUiOiJ0cnVzdGVlIixcDQogICAgICAgICAiZmlyc3RfbmFtZSI6Ilx1YzBcdTEwNTUgXHUxMDc3IFx1MTA5MCBcdTEwODggXHUxMDg2ICIsXA0KICAgICAgICAgImxhc3RfbmFtZSI6Ilx1YzBcdTEwMzAgXHUxMDc0IFx1MTA3MiBcdTEwODUgXHUxMDg2IFx1MTA3NCAiLFwNCiAgICAgICAgICJzZWNvbmRfbmFtZSI6Ilx1YzBcdTEwNTIgXHUxMDgwIFx1MTA4MiBcdTEwODYgXHUxMDgzIFx1MTA3MiBcdTEwODEgXHUxMDg2IFx1MTA3NCBcdTEwODAgXHUxMDk1ICIsXA0KICAgICAgICAgImJpcnRoX2RhdGUiOiIxOTkxLTA4LTE5VDAwOjAwOjAwLjAwMFoiLFwNCiAgICAgICAgICJiaXJ0aF9wbGFjZSI6Ilx1YzBcdTEwNDIgXHUxMTEwIFx1MTA4NSBcdTEwODUgXHUxMDgwIFx1MTA5NCBcdTExMDMgLCBcdTEwNTkgXHUxMDgyIFx1MTA4OCBcdTEwNzIgXHUxMTExIFx1MTA4NSBcdTEwNzIgIixcDQogICAgICAgICAiZ2VuZGVyIjoiTUFMRSIsXA0KICAgICAgICAgInRheF9pZCI6IjMxMjY1MDk4MTYiLFwNCiAgICAgICAgICJkb2N1bWVudHMiOltcDQogICAgICAgICAgICBce1wNCiAgICAgICAgICAgICAgICJ0eXBlIjoiUEFTU1BPUlQiLFwNCiAgICAgICAgICAgICAgICJudW1iZXIiOiIxMjA1MTgiLFwNCiAgICAgICAgICAgICAgICJpc3N1ZV9kYXRlIjoiMjAxNS0wNC0wN1QwMDowMDowMC4wMDBaIixcDQogICAgICAgICAgICAgICAiZXhwaXJ5X2RhdGUiOiIyMDE1LTA0LTA3VDAwOjAwOjAwLjAwMFoiLFwNCiAgICAgICAgICAgICAgICJpc3N1ZWRfYnkiOiJETVNVIlwNCiAgICAgICAgICAgIFx9XA0KICAgICAgICAgXSxcDQogICAgICAgICAicGhvbmVzIjpbXA0KICAgICAgICAgICAgXHtcDQogICAgICAgICAgICAgICAidHlwZSI6Ik1PQklMRSIsXA0KICAgICAgICAgICAgICAgIm51bWJlciI6IiszODA1MDM0MTA4NzAiXA0KICAgICAgICAgICAgXH1cDQogICAgICAgICBdXA0KICAgICAgXH0sXA0KICAgICAgInJlbmV3YWxfY29uc2VudCI6dHJ1ZSxcDQogICAgICAicGF0aWVudF9zaWduZWQiOnRydWUsXA0KICAgICAgImRpc2Nsb3N1cmVfY29uc2VudCI6dHJ1ZSxcDQogICAgICAicHJvY2Vzc19kYXRhX2NvbnNlbnQiOnRydWVcDQogICBcfSxcDQogICAiZW1wbG95ZWUiOlx7XA0KICAgICAgImlkIjoiZDI5MGYxZWUtNmM1NC00YjAxLTkwZTYtZDcwMTc0OGYwODUxIixcDQogICAgICAidGl0bGUiOiJcdWMwXHUxMDgzIFx1MTExMCBcdTEwODIgXHUxMDcyIFx1MTA4OCAiLFwNCiAgICAgICJwYXJ0eSI6XHtcDQogICAgICAgICAiaWQiOiJiMDc1ZjE0OC03ZjkzLTRmYzItYjJlYy0yZDgxYjE5YTliN2IiLFwNCiAgICAgICAgICJmaXJzdF9uYW1lIjoiXHVjMFx1MTA1NSBcdTEwNzcgXHUxMDkwIFx1MTA4OCBcdTEwODYgIixcDQogICAgICAgICAibGFzdF9uYW1lIjoiXHVjMFx1MTAzMCBcdTEwNzQgXHUxMDcyIFx1MTA4NSBcdTEwODYgXHUxMDc0ICIsXA0KICAgICAgICAgInNlY29uZF9uYW1lIjoiXHVjMFx1MTA1MiBcdTEwODAgXHUxMDgyIFx1MTA4NiBcdTEwODMgXHUxMDcyIFx1MTA4MSBcdTEwODYgXHUxMDc0IFx1MTA4MCBcdTEwOTUgIlwNCiAgICAgIFx9XA0KICAgXH0sXA0KICAgIm1zcCI6XHtcDQogICAgICAiaWQiOiJkMjkwZjFlZSIsXA0KICAgICAgIm5hbWUiOiJcdWMwXHUxMDUwIFx1MTA4MyBcdTExMTAgXHUxMDg1IFx1MTExMCBcdTEwODIgXHUxMDcyICBcdTEwNDEgXHUxMDg2IFx1MTA4OCBcdTEwODAgXHUxMDg5ICIsXA0KICAgICAgInNob3J0X05hbWUiOiJcdWMwXHUxMDQxIFx1MTA4NiBcdTEwODggXHUxMDgwIFx1MTA4OSAiLFwNCiAgICAgICJ0eXBlIjoiXHVjMFx1MTA2MCBcdTEwNTQgXHUxMDU1ICIsXA0KICAgICAgImVkcnBvdSI6IjU0MzIzNDU0MzIiXA0KICAgXH0sXA0KICAgInNjb3BlIjoiZmFtaWx5IGRvY3RvciIsXA0KICAgInBsYWludGV4dF9jb250ZW50IjoiRGVjbGFyYXRpb24gY29udGVudCJcDQpcfX2gggIuMIICKjCCAZOgAwIBAgIJANj0sC/v0hWYMA0GCSqGSIb3DQEBBQUAMBkxFzAVBgNVBAMUDlBLQ1MjNyBleGFtcGxlMB4XDTE3MDMyNzE0NTczM1oXDTE3MDQyNjE0NTczM1owGTEXMBUGA1UEAxQOUEtDUyM3IGV4YW1wbGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAMuqrxE/0txT+ZVRKU1O85a8eaaUAOkbcAIy1mMoxQ+UBwcBeXt07Oxu32+p51HSY93Pp5AlDLKE48sjSNvMbTk5vtZ6g8sqMpZxlBVqHLkXLXYBMf2rmtE4hfV6yTP5YUJEs+a9cotsPN0r5KlI9g8aSpIj9Ie8mML5Vh1taQHNAgMBAAGjejB4MB0GA1UdDgQWBBTET2SwL5UfUMKDyhuBGCA+CaflnzBJBgNVHSMEQjBAgBTET2SwL5UfUMKDyhuBGCA+Cafln6EdpBswGTEXMBUGA1UEAxQOUEtDUyM3IGV4YW1wbGWCCQDY9LAv79IVmDAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4GBAF1uOGjUb6IVS28UqZ2qLc/kd2oNU2hOEuAp1YeaKRL2OaG4bTubJO1ejoxCJNfVj0FFw5PXIgjnw87JzkAy5KLDTiotQl8eknkd1bR3nIWINemck3GeGYkR8giG3gkNxz6ky1+63ZcoJkEiS46aneDhmS6BdH0V2G/3delos8+ZMYIBgDCCAXwCAQEwJjAZMRcwFQYDVQQDFA5QS0NTIzcgZXhhbXBsZQIJANj0sC/v0hWYMAkGBSsOAwIaBQCggbEwGAYJKoZIhvcNAQkDMQsGCSqGSIb3DQEHATAcBgkqhkiG9w0BCQUxDxcNMTcwMzI4MTE1NDEwWjAjBgkqhkiG9w0BCQQxFgQU5NSvVRVYHz5tG1GW8gXrjHSnLj8wUgYJKoZIhvcNAQkPMUUwQzAKBggqhkiG9w0DBzAOBggqhkiG9w0DAgICAIAwDQYIKoZIhvcNAwICAUAwBwYFKw4DAgcwDQYIKoZIhvcNAwICASgwDQYJKoZIhvcNAQEBBQAEgYCdqnN8gGXw9OUmtxOvQQgHK5Ni/4/2WQWj7rxERh5AI6rhXs/hh3DNS5Z5mN6wO8z47SQuedbsMQ5hf6+9BbKhXD7WKeU+DtGyfa1ner5/ubz6BeVvuT98D4PrzHlqNSpe/7AirrA70QVO9kPoFSmGtBG6JjaqaCZBYbvF9InPRw==",
  "signed_content_encoding": "base64"
}

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_request:sign')

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

Headers

Content-Type:application/json

...

Request data validation

Validate employee

  1. Validate employee from the medication request request relates to user from token.

    1. in case of error - return 403 “Only doctor that in Medication request Request can sign it“

  2. Perform another validation described at Create MRR: Validate employee

Validate division

Validate division as described on Create MRR: Validate division

...

Validate division as described on Create MRR: Validate context

Validate medical program

  1. Validate medical_program_id: medical_program_id exists and has medication_request_allowed = true

    1. in case of error return 422 ("Forbidden to create medication request for this medical program!")

Validate existing medication request request

...

Purpose validation: Valid ability transition.

  1. For info - status charts: Medication request status model

  2. Get Medication request Request status by $.id

  3. Check status == NEW

    1. if invalid - return 409 error (message: "Invalid status Medication request Request for sign transition!")'

Validate person

Validate person with it’s verification status as described on Create MRR: Validate person

...

Purpose validation: Check equality decoded signed content with previously created on IL.db.

  1. Get data 

    Code Block
    SELECT data FROM medication_request_requests
    WHERE id = $.id
  2. If they are not equal with decoded signed content - generate 422 error (message: "Signed content does not match the previously created content!")

Parameters that are used when processing the request

...

Save signed medication request request to media storage

  1. Get url for medication request upload.

  2. Upload signed medication request request to media storage

Parameter

Source

action

GET

bucket

from MEDIA_STORAGE_MEDICATION_REQUEST_REQUEST_BUCKET chart var

resource_id

medication_request_request_id

resource_name

signed_content

Create medication request

  1.  Create new record in medication_requests with status ACTIVE

    1. if there is existing record in the medication_requests table with the same id and medication_request_request_id, return ok to IL

  2. Mapping (where <rd>medication_request_request.data )

Destination

Source

id

request_number

<rd>.request_number

verification_code

<rd>.verification_code

created_at

<rd>.created_at

started_at

<rd>.started_at

ended_at

<rd>.ended_at

dispense_valid_from

<rd>.dispense_valid_from

dispense_valid_to

<rd>.dispense_valid_to

person_id

<rd>.person_id

employee_id

<rd>.employee_id

division_id

<rd>.division_id

medication_id

<rd>.medication_id

medication_qty

<rd>.medication_qty

medical_program_id

<rd>.medical_program_id

status

ACTIVE

is_active

true

recall_at

NULL

recalled_by

NULL

recall_reason

NULL

request_for_medication_request_id

$.id

inserted_at

:timestamp

inserted_by

user_id

updated_at

:timestamp

updated_by

user_id

intent

<rd>.intent

category

<rd>.category

context

<rd>.context

dosage_instructions

<rd>.dosage_instructions

container_dosage

<rd>.container_dosage

priority

<rd>.priority

prior_prescription

<rd>.prior_prescription

Generate printout form

Invoke ael.api in order to render MEDICATION_REQUEST_TEMPLATE

...

Parameter

Source

<%=get_in(assigns, ~w(request_number)a) %>

bar code

<%= render_barcode(assigns[:request_number], xdim: 2, margin: 0) %>

request_number

<%=get_in(assigns, ~w(created_at)a) %>

created_at

<%=get_in(assigns, ~w(dispense_valid_to)a) %>

dispense_valid_to

<%=get_in(assigns, ~w(program name)a) %>

program.name

<%=get_in(assigns, ~w(person short_name)a) %>

person.short_name

<%=get_in(assigns, ~w(person age)a) %>

person.age

<%=get_in(assigns, ~w(medication name)a) %>

medication.name

<%=get_in(assigns, ~w(medication_qty)a) %>

medication_qty

<%=get_in(assigns, ~w(started_at)a) %>

started_at

<%=get_in(assigns,~w(ended_at)a) %>

ended_at

<%=get_in(assigns, ~w(dosage_instruction_text)a) %>

dosage_instruction_text

<%=get_in(assigns, ~w(employee short_name)a) %>

employee.short_name

<%=get_in(assigns, ~w(employee phone_number)a) %>

employee.phone_number

<%=get_in(assigns, ~w(legal_entity name)a) %>

legal_entity.name

<%=get_in(assigns, ~w(division name)a) %>

 

division.name

<% division_address = get_in(assigns, ~w(division address)a) %>

 

Expand

<%=Keyword.get(division_address, :zip) %>
<%=Keyword.get(division_address, :street_type) %>
<%=if Keyword.get(division_address, :street) do %>
<%=Keyword.get(division_address, :street) %>, <% end %>
<%=if Keyword.get(division_address, :building) do %> буд.
<%=Keyword.get(division_address, :building) %>, <% end %>
<%=if Keyword.get(division_address, :apartment) do %> кв.
<%=Keyword.get(division_address, :apartment) %>, <% end %>
<%=Keyword.get(division_address, :settlement_type) %>
<%=if Keyword.get(division_address, :settlement) do %>
<%=Keyword.get(division_address, :settlement) %>, <% end %>
<%=if Keyword.get(division_address, :region) do %>
<%=Keyword.get(division_address, :region) %> район, <% end %>
<%=if Keyword.get(division_address, :area) do %>
<%=Keyword.get(division_address, :area) %> область <% end %>

legal_entity.address

<%=get_in(assigns, ~w(legal_entity edrpou)a) %>

legal_entity.edrpou

<% legal_entity_license = get_in(assigns, ~w(legal_entity license)a) %>

legal_entity.license

<%=Keyword.get(legal_entity_license, :license_number) %>

legal_entity.license.license_number

<%=Keyword.get(legal_entity_license, :what_licensed) %>

legal_entity.license.what_licensed

<%=Keyword.get(legal_entity_license, :issued_date) %>

legal_entity.license.issued_date

<%=Keyword.get(legal_entity_license, :issued_by) %>

legal_entity.license.issued_by

<%=Keyword.get(legal_entity_license, :active_from_date) %>

legal_entity.license.active_from_date

<%=Keyword.get(legal_entity_license, :expiry_date) %><

legal_entity.license.expiry_date

<%=Keyword.get(legal_entity_license, :order_no) %>

legal_entity.license.order_no

<%=get_in(assigns,
~w(person authentication_method)a) %>

person.authentication_method

<%=get_in(assigns, ~w(program mr_blank_type)a) %>

program.mr_blank_type

getFromDictionary(<rd>.container-dosage.unit;'MR_BLANK_TYPES')

<%=get_in(assigns, ~w(program funding_source)a) %>

 

Code Block
<% funding_source = get_in(assigns, ~w(program funding_source)a) %>
   <%= if funding_source = "PERSON" do %>повна оплата пацієнтом<% else if funding_source in ["NHS", "LOCAL"]) %>з доплатою/безоплатно<% else %><% end %>

 

program.funding_source

 

 

Code Block
<%= if funding_source == "PERSON" do %><% else %><%= if funding_source in ["NHS", "LOCAL"] do %>
    <tr>
        <td>Власник програми:</td>
        <td><%=get_in(assigns, ~w(program funding_source_text)a) %></td>
    </tr>
<% end %><% end %>

program.funding_source_text

if {program.funding_source}<>"PERSON" then

getFromDictionary({program.funding_source},'FUNDING_SOURCE)'

else ""

endif

<%=get_in(assigns, ~w(person age_unit)a) %>

person.age_unit

returns in years ("р.")

<%=get_in(assigns, ~w(medication innm_primary_denumerator_unit)a) %>

medication.innm_primary_denumerator_unit

getFromDictionary({innm_primary.dosage.denumerator_unit};'MEDICATION_UNIT'),

<%=get_in(assigns, ~w(container_dosage value)a) %>

container_dosage.value

<rd>container_dosage.value

<%=get_in(assigns, ~w(container_dosage unit)a) %>

container_dosage.unit

getFromDictionary(<rd>container_dosage.unit;'MEDICATION_UNIT')

Medication request form example: 

...

Code Block
UPDATE medication_request_requests SET status = 'SIGNED' WHERE id = {:id}

Send SMS for person 

If MR has program with medical program setting medication_request_notification_disabled = true, then don't send SMS.

Else:

  1. Get authentication_method of MPI

  2. If authentication_method == OTP -  send SMS:

    1. Generate text SMS (call Man method- templates rendering service with template "TEMPLATE_SMS_FOR_SIGN_MEDICATION_REQUEST".

    2. Sending SMS for MPI

  3. If authentication_method == OFFLINE (or medication_request_notification_disabled = true) -  set medication_request_request.verification_code to MEDICATION_REQUEST_TEMPLATE

Response structure

See on Apiary

...

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:sign

  • Only doctor that in Medication request Request can sign it

409

Invalid status Medication request Request for sign transition!

422

  • Forbidden to create medication request for this medical program!

  • Signed content does not match the previously created content!

...