Versions Compared

Key

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

...

Специфікація

Apiary

Ціль

Даний веб-сервіс розроблений для створення запиту на рецепт

Є два види запиту на рецепт:

...

plan - Запит відображає намір на формування мед. препаратів без необхідності підтвердження дії. Запит на рецепт з типом план не може бути відпущений та тільки надає інструкцію для адміністрування мед препаратів. 

...

Table of Contents
maxLevel7
minLevel1

Призначення

Даний веб-сервіс розроблений для створення запиту на рецепт

Є два види запиту на рецепт:

  • plan - Запит відображає намір на формування мед. препаратів без необхідності підтвердження дії. Запит на рецепт з типом план не може бути відпущений та тільки надає інструкцію для адміністрування мед препаратів. 

  • order - Запит відображає намір запиту/вимоги авторизації на дію. Запит на рецепт з типом запит може бути відпущений

Специфікація

Page Properties

Link

https://uaehealthapi.docs.apiary.io/#reference/public.-reimbursement/medication-request-requests/create-medication-request-request

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

Resource

/api/medication_request_requests

Наприклад: /api/persons/create

Scope

medication_request_request:write

Зазначається потрібний scope

Components

ePrescription

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

Microservices

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

Protocol type

REST

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

Request type

POST

Тип HTTP методу, який використовується запитом, наприклад: POST | GET…

Sync/Async

Sync

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

Логіка

...

Передумови

Немає даних

Глобальні та конфігураційні параметри

Немає даних

Вхідні параметри

Немає

Фільтри

Немає

Структура запиту

Дивись на Apiary

Приклад:

Expand
Code Block
{
  "medication_request_request": {
    "person_id": "585044f5-1272-4bca-8d41-8440eefe7d26",
    "employee_id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "division_id": "881d6dee-dd3d-43f3-8983-922354c0e6ce",
    "created_at": "2017-08-17",
    "started_at": "2017-08-17",
    "ended_at": "2017-09-16",
    "medication_id": "1349a693-4db1-4a3f-9ac6-8c2f9e541982",
    "medication_qty": 10.34,
    "medical_program_id": "59781de0-2e64-4359-b716-bcc05a32c10f",
    "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"
        }
      }
    ],
    "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
    }
  }
}

Авторизація

  1. Перевірити валідність токену доступу

  2. Перевірити скоупи користувача (scope = 'medication_request_request:write') на можливість виконання даної дії

    1. в разі помилки - надіслати у відповіді код 401

Headers

Content-Type:application/json

Authorization:Bearer c2778f3064753ea70de870a53795f5c9

Перевірити запит (JSON

...

схема)

Перевірити запит використовуючи схему JSON. 

  1. в В разі помилки повернути код 422 з повідомленням ("required property %{property} was not present")

Перевірити дані запиту

Перевірити співробітника

Ціль валідації: Перевірити співробітника на можливість створення запиту на рецепт.

...

а.якщо всі результати для знаку Mod  - NOT 0 - повернути код помилки 409 (повідомлення: "The amount of medications in medication request must be divisible to package minimum quantity") quantity") 

Параметри, які застосовуються при опрацюванні запиту

Конфігураційні параметри

Наприклад: Доступ до методу визначається скоупом covid_certificate:get . Дозвіл на даний скоуп визначається адміністратором Системи шляхом конфігурування скоупів в контексті клієнтів і ролей.

Довідники

Потрібно вказати довідники, які використовує метод API

Обробка

Згенерувати номер та verification_code для рецепту

...

  • Згенерувати номер для рецепту (See specs)

    Code Block
    Structure number XXXX-1234-5678-9012-345-C , where:
    - XXXX - series: numbers + only some letters (A, E, H, K, M, P, T, X)
    - 1234-5678-9012-345 - randomly generated numbers
    - C - checksum: Should be calculated using the Damn algorithm or Verhoeff algorithm
    After new Request number was generated we should check that it is unique in the DB (entity: medication_request + medication_request_request
    

    Згенерувати verification_code для MPI.person_authentication_methods == OTP або OFFLINE

    Code Block
    Structure code 1234, where:
    - 1234 - randomly generated numbers 
    

Згенерувати рецепт

  1. Встановити:

    1. dispense_valid_from = created_at

    2. dispensed_valid_to = dispensed_valid_from + dispense_period

  2. Заповнити структуру 'data' для відповіді & зберегти в IL.medication_request_requests

Згенерувати наповнення для відповіді

  • Згенерувати структуру даних відповіді для веб-сервісу

    • Встановити структуру для IL.medication_request_requests 

  • якщо відповідь VALID доповнити відповідь urgent_data:

    • отримати authetification_method по person_id та повернути зашифрований номер (в будь-якому випадку)

  •  algorithm or Verhoeff algorithm
    After new Request number was generated we should check that it is unique in the DB (entity: medication_request + medication_request_request
    
    • Згенерувати verification_code для MPI.person_authentication_methods == OTP або OFFLINE

      Code Block
      Structure code 1234, where:
      - 1234 - randomly generated numbers 
      

Згенерувати рецепт

  1. Встановити:

    1. dispense_valid_from = created_at

    2. dispensed_valid_to = dispensed_valid_from + dispense_period

  2. Заповнити структуру 'data' для відповіді & зберегти в IL.medication_request_requests

Згенерувати наповнення для відповіді

  • Згенерувати структуру даних відповіді для веб-сервісу

    • Встановити структуру для IL.medication_request_requests 

  • якщо відповідь VALID доповнити відповідь urgent_data:

    • отримати authetification_method по person_id та повернути зашифрований номер (в будь-якому випадку)

Code Block
"urgent": {
    "authentication_method_current": {
      "type": "OTP",
      "number": "+38093*****85"
    }
  }

 

Структура відповіді

Дивись на Apiary

Приклад:

Expand
Code Block
{
  "meta": {
    "code": "422",
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "req-adasdoijasdojsda"
  },
  "error": {
    "type": "

...

unverified",
    

...

"

...

message": "

...

Only active employee with type DOCTOR can create medication request!"
  }
}

Подальша обробка

Немає

HTTP статус коди

HTTP статус код

Повідомлення

Що викликало помилку

 201

 Відповідь

 

 422

 Only active employee with type DOCTOR can create medication request!

 

Зворотна сумісність

Немає даних