Versions Compared

Key

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

...

Note that different legal entity types can register specific division types and address types accordingly More details can be found here.

Specification

Page Properties
idAPI_Specification

Link

https://ehealthmisapi1.docs.apiary.io/#reference/public.-medical-service-provider-integration-layer/divisions/update-division

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

Resource

/api/divisions/{{id}}

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

Scope

division:write

Scope для доступу

Components

Divisions

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

Microservices

API paragraph not foundil/api

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

Protocol type

REST

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

Request type

PATCH

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

Sync/Async

Sync

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

Public/Private/Internal

Public

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

Logic

...

  1. Only authenticated and authorized user of this legal entity with appropriate scope can update division.

  2. Division can be updated for RESIDENCE, REGISTRATION addresses types.

  3. Division can be updated for legal entities in ACTIVE or SUSPENDED statuses.

  4. Editable information on division:

    • name

    • addresses

    • phones

    • email

    •  add the gps-coordinates attributed to the division (location)

    • working hours

Input parameters

Input parameter

Values

Type

Description

Example

id

String

Required

d290f1ee-6c54-4b01-90e6-d701748f0851

Parameter

Source

action

`PATCH`

id

 

external_id

$.external_id

name

$.name

type

$.type

addresses

$.addresses

phones

$.type, $.number

email

$.email

inserted_at

:timestamp

updated_at

:timestamp

legal_entity_id

take from token

location

$.latitude, $.longitude

status

ACTIVE

is_active

true

working_hours

$.working_hours

Dictionaries

Dictionary ADDRESS_TYPE
Dictionary PHONE_TYPE
Dictionary SETTLEMENT_TYPE
Dictionary STREET_TYPE
Dictionary DIVISION_TYPE
Dictionary COUNTRY

Request structure

Example:

Expand
titleRequest example
Code Block
{
  "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",
  "working_hours": {
    "mon": [
      [
        "08.00",
        "12.00"
      ],
      [
        "14.00",
        "18.00"
      ]
    ],
    "tue": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "wed": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "thu": [
      [
        "08.00",
        "12.00"
      ]
    ],
    "fri": [
      [
        "08.00",
        "12.00"
      ]
    ]
  },
  "type": "CLINIC",
  "legal_entity_id": "c8aadb87-ecb9-41ca-9ad4-ffdfe1dd89c9",
  "external_id": "3213213",
  "location": {
    "latitude": 30.1233,
    "longitude": 50.32423
  }
}

Authorize

Request to process the request using a token in the headers

Headers

...

  1. Verify the validity of access token

  2. Check user scope (scope = 'division:write') in order to perform this action

    1. In case error generate 401 response

  3. If BLOCK_UNVERIFIED_PARTY_USERS is true, then check party's data match following condition: verification_status != NOT_VERIFIED or (verification_status = NOT_VERIFIED and updated_at > current_date - UNVERIFIED_PARTY_PERIOD_DAYS_ALLOWED):

    1. in case not match - return 403 ("Access denied. Party is not verified")

Headers

Content-Type:application/json
Authorization:Bearer {{access_token}}
API-key:{{secret}}

Request data validation

API paragraph not found

Processing

...

Validate location

Location is required for divisions related to legal entity with type PHARMACY

  1. Check that location exists in request for legal entity with type PHARMACY

    1. In case of error - generate 422 response

Validate addresses

  1. Check that addresses.type exists in dictionaries.

    1. In case error generate 422 "value is not allowed in enum"

  2. Check that addresses.area exists in Uaddresses.areas

    1. in case error generate 422 "invalid area value"

  3. Check that addresses.settlement exists in Uaddresses.settlements

    1. in case error generate 422 "invalid settlement value"

  4. Check that addresses.settlement_type exists in dictionaries.

    1. in case error generate 422 "value is not allowed in enum"

  5. Check that addresses.settlement_id exists in Uaddresses.settlements

    1. in case error generate 422 "settlement with id = <id> does not exist"

  6. Check that addresses.street_type exists in dictionaries.

    1. In case error generate 422 "value is not allowed in enum"

  7. Check that addresses.zip in "^[0-9]{5}$" format.

    1. In case error generate 422 "string does not match pattern \"^[0-9]{5}$\""

  8. Check mapping legal_entity_type, division_type and address_type and its obligation. See validation rules here: Validation rules on Divisions 

    1. in case error generate 422 response

Validate phone

  1. Check that phone type exists in dictionaries. PHONE_TYPE required (MOBILE,LAND_LINE)

    1. in case error generate 422 response

  2. Check phone number is valid according to "^\\+38[0-9]{10}$"

    1. in case error generate 422 response

Validate email

  1. Check that email is valid according to "~r/^[\\w!#$%&'*+\\/=?`{|}~^-]+(?:\\.[\\w!#$%&'*+\\/=?`{|}~^-]+)*@(?:[A-Z0-9-]+\\.)+[A-Z]{2,6}$/i"

    1. in case error generate 422 response

Validate type

  1. Check that type exists in dictionaries. Type required  (DRUGSTORE,DRUGSTORE2,CLINIC,AMBULANT_CLINIC,FAP)

    1. in case error generate 422 response

  2. Check mapping of legal_entity_type and division type. 

    1. in case error generate 422 response

Processing

Response structure

Example:

Expand
titleResponse example
Code Block
{
  "meta": {
    "code": 200,
    "url": "https://example.com/resource",
    "type": "object",
    "request_id": "6617aeec-15e2-4d6f-b9bd-53559c358f97#17810"
  },
  "data": {
    "id": "d290f1ee-6c54-4b01-90e6-d701748f0851",
    "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",
    "working_hours": {
      "mon": [
        [
          "08.00",
          "12.00"
        ],
        [
          "14.00",
          "18.00"
        ]
      ],
      "tue": [
        [
          "08.00",
          "12.00"
        ]
      ],
      "wed": [
        [
          "08.00",
          "12.00"
        ]
      ],
      "thu": [
        [
          "08.00",
          "12.00"
        ]
      ],
      "fri": [
        [
          "08.00",
          "12.00"
        ]
      ]
    },
    "type": "CLINIC",
    "legal_entity_id": "c8aadb87-ecb9-41ca-9ad4-ffdfe1dd89c9",
    "external_id": "3213213",
    "location": {
      "latitude": 30.1233,
      "longitude": 50.32423
    },
    "status": "ACTIVE",
    "mountain_group": false,
    "dls_id": "2872985",
    "dls_verified": true
  }
}

Post-processing processes

API paragraph not found

HTTP status codes

Page Properties
idAPI_HTTP status codes

HTTP status code

Message

What caused the error

 200

 Response

 

401

Authorization failed

403

Access denied

422

Validation failed