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

[DRAFT] Create Declaration Request online [API-005-010-002-0194]

Сторінка знаходиться в процесі розробки. Інформація на ній може бути застарілою.

REST API method / Метод REST API (настанова) (remove the link block before publishing the document)

Properties of a REST API method document

Document type

Метод REST API

Document title

[DRAFT] Create Declaration Request online [API-005-010-002-0194]

Guideline ID

GUI-0011

Author

@Viacheslav Tybin (SoE eHealth)

Document version

1

Document status

DRAFT

Date of creation

ХХ.ХХ.ХХХХ (дата фінальної версії документа – RC або PROD)

Date of update

ХХ.ХХ.ХХХХ (дата зміни версії)

Method API ID

API-005-010-002-0194

Microservices (namespace)

IL

Component

Patient Cabinet

Component ID

COM-005-010

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

https://ehealthmisapi1.docs.apiary.io/#reference/public.-patient-cabinet/cabinet/create-declaration-request-online

Resource

{{host}}//api.ehealth.gov.ua/api/patients/id/encounter_package

Scope

declaration_request:write

Protocol type

REST

Request type

POST

Sync/Async

Sync

Public/Private

Public

Purpose

This method is used to create Declaration Request online (as part of Declaration creation process)

Logic

 

13526967-f4a7-469e-bb92-b11515c054c0.png

Global and configurable parameters

Get global parameters

Invoke Global parameters to get following parameters:

  • ADULT_AGE

  • DECLARATION_TERM

cURL example
curl -X GET \ {:host}/prm/api/global_parameters

Configuration parameters

N/A

Dictionaries

  • EMPLOYEE_TYPE

  • DOCUMENT_TYPE

  • ADDRESS_TYPE

  • SETTLEMENT_TYPE

  • STREET_TYPE

  • PHONE_TYPE

  • DOCUMENT_RELATIONSHIP_TYPE

  • POSITION

  • LEGAL_FORM

  • ACCREDITATION_CATEGORY

  • DIVISION_TYPE

  • GENDER

  • AUTHENTICATION_METHOD

  • PREFERRED_WAY_COMMUNICATION

Input parameters

Input parameter

Mandatory

Type

Description

Example

Input parameter

Mandatory

Type

Description

Example

1

 

 

 

 

 

2

 

 

 

 

 

Request structure

See on API-specification

{ "person_id": "4d0d790c-cbf1-44f5-ab21-ba8db67da161", "employee_id": "1a8b10ea-ba09-40f2-8f9e-55608e9208c6", "division_id": "d290f1ee-6c54-4b01-90e6-d701748f0851" }

Headers

Headers

Request data validation

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 = 'declaration_request:write')

    1. Return 403 in case invalid scope(s)

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 = 'declaration_request:write')

    1. Return 403 in case invalid scope(s)

Validate request

Validate request according to JSON Schema

  1. Return 422 with list of validation errors in case of validation fails (422 EView)

Get Person from token

  1. Extract person_id from token.

Validate Person

User can create declaration request via cabinet only for himself

  1. Check that person_id from request ($.person_id) matches with person_id from token

  2. Check tax_id from users.tax_id=persons.tax_id

  3. Check that person_id exists

In case error - return 422 error:

{:error, [{%{ description: "Invalid person", params: [], rule: :invalid }, "$.person_id"}]}

Validate Employee

  1. Validate that employee_id exists

In case error - return 422 error:

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

Validate Division

  1. Validate that division_id exists

In case error - return 422 error:

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

Calculate patient age

Calculate patient age

age = MONTHS_BETWEEN (now(), Person.birth_date) / 12

Check that doctor speciality meets the patient age requirements

Check age requirements according to values in response from previous step.

Doctor speciality

Age

Doctor speciality

Age

FAMILY DOCTOR

All ages

THERAPIST

Greater or equal to $.data.adult_age

PEDIATRICIAN

Less than $.data.adult_age

Processing

Calculate declaration end/start date

Start date:

start_date = Current_date()

End date:

if (person.age < 18) { end_date = min(birth_date + 18y - 1d, start_date + declaration_term); } else { end_date = start_date + declaration_term; }

Set default authorization method

Do not check current authorization method in MPI

Set default value to "NA" for all declaration requests online (cabinet)

Generate printout form

Invoke MAN to render print form.

Declaration request printout template:

DECLARATION_REQUEST_PRINTOUT_FORM_TEMPLATE_ID: "4"

Set IL.declaration_request.printout_content as MANResponse.$.data

Save request to DB

Response structure examples

See on API-specification

{ "meta": { "code": 201, "url": "https://example.com/resource", "type": "object", "request_id": "6617aeec-15e2-4d6f-b9bd-53559c358f97#17810" }, "data": { "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b", "seed": "hash", "start_date": "2017-03-02", "end_date": "2017-03-02", "person": { "first_name": "Петро", "last_name": "Іванов", "second_name": "Миколайович", "birth_date": "1991-08-19", "birth_country": "Україна", "birth_settlement": "Вінниця", "gender": "MALE", "email": "email@example.com", "tax_id": "3126509816", "secret": "secret", "documents": [ { "type": "PASSPORT", "number": "АА120518", "expiration_date": "2021-02-28", "issued_by": "Рокитнянським РВ ГУ МВС Київської області", "issued_at": "2017-02-28" } ], "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" } ], "authentication_methods": [ { "type": "OTP", "phone_number": "+38093*****85" } ], "preferred_way_communication": "email", "emergency_contact": { "first_name": "Петро", "last_name": "Іванов", "second_name": "Миколайович", "phones": [ { "type": "MOBILE", "number": "+380503410870" } ] }, "confidant_person": [ { "relation_type": "PRIMARY", "first_name": "Петро", "last_name": "Іванов", "second_name": "Миколайович", "birth_date": "1991-08-19", "birth_country": "Україна", "birth_settlement": "Вінниця", "gender": "MALE", "email": "confidant_person@example.com", "tax_id": "3126509816", "secret": "secret", "unzr": "19900101-00099", "preferred_way_communication": "email", "documents_person": [ { "type": "PASSPORT", "number": "АА120518", "expiration_date": "2021-02-28", "issued_by": "Рокитнянським РВ ГУ МВС Київської області", "issued_at": "2017-02-28" } ], "documents_relationship": [ { "type": "BIRTH_CERTIFICATE", "number": "АА120518", "issued_by": "Рокитнянським РВ ГУ МВС Київської області", "issued_at": "2017-02-28" } ], "phones": [ { "type": "MOBILE", "number": "+380503410870" } ] } ], "patient_signed": false, "process_disclosure_data_consent": true }, "scope": "family doctor", "declaration_number": "0000-12H4-245D", "declaration_id": "8311ab82-e341-4da0-8a95-235ec9885e23", "status": "NEW", "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" } ] }, "speciality": "FAMILY_DOCTOR" }, "legal_entity": { "name": "Клініка Ноунейм", "short_name": "Ноунейм", "legal_form": "140", "public_name": "ЦПМСД №1", "edrpou": "5432345432", "licenses": [ { "license_number": "fd123443", "issued_by": "Кваліфікацйна комісія", "issued_date": "2017-02-28", "expiry_date": "2017-02-28", "active_from_date": "2017-02-28", "what_licensed": "реалізація наркотичних засобів", "order_no": "ВА43234" } ], "accreditation": { "category": "SECOND", "issued_date": "2017-02-28", "expiry_date": "2017-02-28", "order_no": "fd123443", "order_date": "2017-02-28" }, "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", "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b" }, "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", "type": "clinic", "external_id": "3213213", "dls_id": "2872985", "dls_verified": true }, "content": "Declaration content", "channel": "CABINET" }, "urgent": { "authentication_method_current": { "type": "NA", "number": "+38093*****85" }, "documents": [ { "type": "PASSPORT", "url": "https://storage.ehealth.world" } ] } }

HTTP status codes

Response code

HTTP Status code

Message

Internal name

Description

Response code

HTTP Status code

Message

Internal name

Description

1

Базові

2

 

201

 Response

 

 

3

 

401

 Validation fails

 

 

4

 

403

 Invalid scope(s)

 

 

5

 

422

Division not found

 

 

6

 

422

Employee not found

 

 

7

 

422

Invalid person

 

 

8

 

422

Validation failed

 

 

9

Специфічні

10

 

 

 

 

 

Post-processing processes

N/A

Technical modules where the method is used

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