Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Оновлено відповідно до наданої вендором документації.

Table of Contents
minLevel1
maxLevel3

...

Use this method to approve previously created Declaration Request.

Specification

Link

https://ehealthmisapi1.docs.apiary.io/#reference/public.-medical-service-provider-integration-layer/declaration-requests/approve-declaration-request-

Approve declaration request v3

Resource

/api/v3/declaration_requests/{{id}}/actions/approve

Scope

declaration_request:approve

Components

Declarations

Using Microservices

il/api

ops/api

Protocol type

REST

Request type

PATCH

Sync/Async

Sync

Public/Private/Internal

Public

...

Key points

  1. In case if persons current authentication

...

  1. method is OTP, request

...

  1. body must contain verification_code

...

  1. field with OTP.

  2. For any other authentication method, request body

...

  1. must be empty

...

Before approve patient's scanned documents should be uploaded to the (Signed URL's). All links are generated for one one-page document in jpeg format. Document should be no more than 10 MB. If make declaration request via cabinet then nothing must be uploaded to URL. Clients can use signed URL's to directly access s3 storage and upload files via API.

Input parameters

...

Filter

...

Values

...

Type

...

Description

...

Example

...

 id

...

String

...

Required

...

b075f148-7f93-4fc2-b2ec-2d81b19a9b7b

Request structure

Code Block
{
  "verification_code": 2836
}

Authorize

  1. Verify the validity of access token

  2. Check user scopes declaration_request:write in order to perform this action

    1. In case error - generate 401 response

Request to process the request using a token in the headers

Headers

  • Content-Type:application/json

  • Authorization:Bearer c2778f3064753ea70de870a53795f5c9

  1. , but additional documents upload is needed for OFFLINE authentication method.

Validate request

  1. Validate request using JSON schema

    1. In case validation failed - generate 422 error

JSON Schema 

Expand
Code Block
{
  "meta": {
    "code"$schema": "422",
    "url": "https://example.com/resource",
    http://json-schema.org/draft-04/schema#",
  "type": "object",
    "request_idproperties": "6617aeec-15e2-4d6f-b9bd-53559c358f97#17810"{
  },   "errorverification_code": {
      "type": "request_malformed",
string"
    }
  },
  "messagerequired": "This[
doctor has X declarations and"verification_code"
could not sign],
more"  "additionalProperties": }false
}

...

Authorize user

  1. Verify the validity of access token

  2. Check user scopes declaration_request:write in order to perform this action

    1. In case error - generate 401 response

Validate person verification status

  • validate patient's verification_status is not equal to NOT_VERIFIED.

    • in case of error return 409, "Patient is not verified"

Processing

Get declaration request details

Get declaration request from IL_DB.declaration_request

Determine authorization method

Get authorization_method from IL_DB.declaration_request

Code Block
SELECT IL_DB.declaration_request.authentication_method
FROM   IL_DB.declaration_request
WHERE IL_DB.declaration_request.id = :id

If authentication_method_current is NULL - return Error

...

If authentication_method_current = OTP - verify SMS code

If authentication_method_current = NA - verify Parent declaration

Verify code

Invoke verification module to verify OTP

OTP Verification

Check uploaded documents

Invoke Media Content Storage to check documents exist

Media Content Storage

Verify Parent declaration

Get parent_declaration_id from IL_DB.declaration_requests.parent_declaration_id:

  • If parent_declaration_id is null, validate declaration request with current authentication_method_current = NA logic

  • If parent_declaration_id is not null, check that parent declaration exists and in status 'active'

    • In case of error - return 404 (‘Active parent declaration was not found’)

Processing

Generate printout form

Prepare data for declaration request printout form

  1. Call MAN service to render printout form

  2. Get template id from config (DECLARATION_REQUEST_PRINTOUT_FORM_TEMPLATE_ID)

  3. Prepare printout content based on declaration request data

  4. Render printout form and save to declaration request

 

Set IL.declaration_request.printout_content:

Expand

MANResponse.$.data

Change patient_signed and process_disclosure_data_consent values

If parent_declaration_id is not null and authentication_method_current = NA, update following fields values at data_to_be_signed field:

  • patient_signed = null

  • process_disclosure_data_consent = null

Generate hash ‘seed’

Generate hash seed - Hash of previous block in declarations chain or other random component that should be signed with declaration

Response structure

Expand
titleRequest example (code 201)
Code Block
{
  "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",
    "start_date": "2017-03-02",
    "end_date": "2017-03-02",
    "person_id": "4d0d790c-cbf1-44f5-ab21-ba8db67da161",
    "employee_id": "1a8b10ea-ba09-40f2-8f9e-55608e9208c6",
    "division_id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "declaration_number": "0000-12H4-245D",
    "declaration_id": "8311ab82-e341-4da0-8a95-235ec9885e23",
    "parent_declaration_id": "8c7753fc-a647-435f-8e43-4ff4546431f6",
    "status": "NEW",
    "channel": "MIS",
    "authorize_with": "cc949559-5dfe-420f-ac05-065e443b2cc6",
    "data_to_be_signed": {
      "id": "b099f148-7f93-4fc2-b2ec-2d81b19a9b7b",
      "declaration_number": "0000-12H4-245D",
      "declaration_id": "8311ab82-e341-4da0-8a95-235ec9885e23",
      "start_date": "2017-03-02",
      "end_date": "2017-03-02",
      "content": "Declaration content",
      "channel": "MIS",
      "person": {
        "id": "5fb57a5d-1457-430e-9678-c81cec72779f",
        "first_name": "Петро",
        "last_name": "Іванов",
        "second_name": "Миколайович",
        "birth_date": "2009-07-05",
        "birth_country": "Україна",
        "birth_settlement": "Вінниця",
        "gender": "MALE",
        "email": "email@example.com",
        "no_tax_id": false,
        "tax_id": "3999869394",
        "secret": "secret",
        "documents": [
          {
            "type": "BIRTH_CERTIFICATE",
            "number": "АА120518",
            "issued_by": "Рокитнянським РВ ГУ МВС Київської області",
            "issued_at": "2017-02-28",
            "expiration_date": "2027-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"
          }
        ],
        "unzr": "20090705-00011",
        "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": "1972-10-26",
            "birth_country": "Україна",
            "birth_settlement": "Вінниця",
            "gender": "MALE",
            "tax_id": "2659719350",
            "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"
              }
            ],
            "email": "emaill@example.com"
          }
        ],
        "preferred_way_communication": "email",
        "patient_signed": false,
        "process_disclosure_data_consent": 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"
            }
          ]
        }
      },
      "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
      },
      "seed": "hash",
      "authorize_with": "cc949559-5dfe-420f-ac05-065e443b2cc6"
    }
  }
}

Expand
titleRequest example (code 422)
Code Block
{
  "meta": {
    "code": "422",
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "req-adasdoijasdojsda"
  },
  "error": {
    "type": "request_malformed",
    "message": "This doctor has X declarations and could not sign more"
  }
}

Post-processing processes

Change patient request

...

Change declaration request

  1. Change entity status in IL_DB.declaration_request to APPROVED

  2. Set status_reason to doctor_confirmed

  3. Set is_shareable to true

  4. Set updated_at - now() (Get current date-time)

  5. Set updated_by - user_id (Extract user from token)

Generate printout form

Invoke MAN to render print form.

Request mapping:

...

Parameter

...

Source

...

id

...

DECLARATION REQUEST

cURL example

Expand
Code Block
curl --request POST \
     --header 'Accept: text/html' \
     --header 'Content-Type: application/json' \
     {:host}/templates/{:declaration_request_printout_id}/actions/render

 

Set IL.declaration_request.printout_content:

...

HTTP status codes

HTTP status code

Message

What caused the error

201

 Response

 

401

Invalid scopes

409

Patient is not verified

422

This doctor has X declarations and could not sign more