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

Get Reimbursement Report

Purpose

This method is designed to create reimbursement report which is based on Medication request and Medication dispense data. 

Specification

Link

https://ehealthmisapi1.docs.apiary.io/#reference/public.-reimbursement/reimbursement-report/get-reimbursement-report

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

Resource

/api/reimbursement_report

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

Scope

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

API paragraph not found

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

Public/Private/Internal

Public

Потрібно зазначити тип методу за ступенем доступності

Logic

The access and ability to create and get the report have

  1. MSP (OWNER)

  2. PHARMACY (PHARMACY_OWNER)

To get the report the creator must input requested period (date_from_request, date_to_request, date_from_dispense, date_to based on date of dispense or request). In response will be received the json with data.

  • OWNER will receive info only about Medication Requests which were made by his legal_entity and corresponding Medication Dispenses.

  • PHARMACY_OWNER is allowed to view only info related to Medication Dispenses which were made by his PHARMACY and corresponding Medication Requests.

Filters

See on Apiary

Authorize

  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 = 'reimbursement_report:read')

    1. Return 403 in case invalid scope(s)

Headers

Наприклад:

Content-Type:application/json

Authorization:Bearer c2778f3064753ea70de870a53795f5c9

Request data validation

Get legal entity from token

  1. Extract legal_entity_id (client_id) from token

Get Party from token

  1. Extract party_user (user_id) from token.

Validate FK

  1. Validate 

legal_entity_id - legal_entity_id exists (for MSP and PHARMACY)

In case error - return 422 error:

{:error, [{%{ description: "Legal entity not found", params: [], rule: :invalid }, "$.legal_entity_id"}]}
  1. Validate 

party_id - party_id exists

{:error, [{%{         description: "Party not found",         params: [],         rule: :invalid       }, "$.party_id"}]}

 

  1. Validate

legal_enity type - type [MSP, PHARMACY]

In case of error - show 403 error ('Legal_entity type is not allowed to get the report')

Validate statuses

  1. Legal entity should be active in order to create report

    • is_active = true

    • status = 'ACTIVE'

    • in case of error show 403 error ('Legal entity is not active')

  2. Party should refer to active employee in current legal_entity

    • employees.is_active = true

    • employees.status = 'APPROVED'

    • employees.legal_entity_id = client_id (context)

    • in case of error show 403 error ('Employee is not active')

Validate input dates

  1. There is 4 available dates for the filtering: by dispense or/and by request. At least one pair of those dates must be not empty.

          In case of error show 422 error with message must be shown (date_from_request:  "At least one of input dates must be not empty")

  1. Validate input date_from and date_to

    • if date_from_request is not null then: date_from_request<=date_to_request and date_to_request must be filled

      in case of error - return 422 error:

      {:error, [{%{ description: "Input dates are not valid", params: [], rule: :invalid }, "$.date_from_request"}]}

       

  2. if date_from_dispense is not null then: date_from_dispense<=date_to_dispense and date_to_dispense must be filled

    in case of error - return 422 error:

     

    Input dates filter the field: 

    • date_from_request/date_to_request comparing to field medication_requests.created_at

    • date_from_dispense/date_to_dispense comparing to field medication_dispenses.dispensed_at

If there is no data available for the requested period of time in response must be sent empty json, no error is shown. 

Processing

Prepare response

  1. Prepare response with fields described below.

  2. To get most of the fields FULL OUTER JOIN tables medication_requests and medication_dispenses (in case there is no dispense to request fill only first part of the table related to Medication Request). To get more details about employee, division, legal_entity, medication, medical_program, dispense_details next tables also should be joined:

    • employees

    • parties

    • legal_entities

    • divisions

    • medications

    • medical_programs

    • medication_dispense_details

Source

Field

Name

Description

Source

Field

Name

Description

medication_requests

id

medication_request_id

 

medication_requests

request_number

request_number

 

medication_requests

created_at

request_created_at

 

medication_requests

started_at

request_started_at

 

medication_requests

ended_at

request_ended_at

 

medication_requests

dispense_valid_from

dispense_valid_from

 

medication_requests

dispense_valid_to

dispense_valid_to

 

medication_requests

person_id

request_person_id

 

employees 

employee_id

employee_id

 

employees

legal_entity_id

msp_id

 

legal_entities 

name

msp_name

 

legal_entities

edrpou

msp_edrpou

 

employees

party_id

doctor_party_id

 

parties

last_name

doctor_last_name

 

parties

first_name

doctor_first_name

 

parties

second_name

doctor_second_name

 

employees

position

doctor_position

 

employees

employee_type

employee_type

 

medication_requests

division_id

msp_division_id

 

divisions

name

msp_division_name

 

divisions

addresses.[type='RESIDENCE']

msp_addresses

 

divisions

mountain_group

msp_division_mountain_group

 

medication_requests

medication_id

innm_dosage_id

 

medications

name

innm_dosage_name

 

medications

form

innm_dosage_form

 

medication_requests

medication_qty

request_medication_qty

 

medication_requests

status

request_status

 

medication_requests

rejected_at

request_rejected_at

 

medication_requests

rejected_by

request_rejected_by

 

medication_requests

reject_reason

request_reject_reason

 

medication_requests

medical_program_id

request_medical_program_id

 

medical_programs

name

request_medical_program_name

 

medical_programs

is_active

request_medical_program_is_active

 

medication_dispenses 

id

medication_dispense_id

 

medication_dispense_details

medication_id

medication_id

 

medications

name

medication_name

 

medications

manufacturer.name

manufacturer_name

 

medications

code_atc

code_atc

 

medications

form

medication_form

 

medications

{container}

container

 

medications

package_qty

package_qty

 

medication_dispense_details

medication_qty

disbursed_medication_qty

 

medication_dispense_details

sell_price

sell_price

 

medication_dispense_details

sell_amount

sell_amount

 

medication_dispense_details

discount_amount

discount_amount

 

medication_dispense_details

reimbursement_amount

reimbursement_amount

 

medication_dispenses

medical_program_id

dispense_medical_program_id

 

medical_programs

name

dispense_medical_program_name

 

medication_dispenses

dispensed_at

dispensed_at

 

medication_dispenses

legal_entity_id

pharmacy_id

 

medication_dispenses

party_id

pharmacist_id

 

parties

first_name

pharmacist_first_name

 

parties

second_name

pharmacist_second_name

 

parties

last_name

pharmacist_last_name

 

legal_entities

name

pharmacy_name

 

legal_entities

edrpou

pharmacy_edrpo

 

medication_dispenses

division_id

pharmacy_divsion_id

 

divisions

division_name

pharmacy_divsion_name

 

divisions

addresses.[type='RESIDENCE']

pharmacy_addresses

 

divisions

mountain_group

pharmacy_division_mountain_group

 

medication_dispenses

status

dispense_status

 

 

Response structure

Example:

Post-processing processes

API paragraph not found

HTTP status codes

HTTP status code

Message

What caused the error

HTTP status code

Message

What caused the error

 200

 Response

 

 401

 

 Access token validation failed

403

  • Invalid scope

  • Legal_entity type is not allowed to get the report

  • Legal entity is not active

  • Employee is not active

 

422

 

Validation failed







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