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

[DRAFT] Private. Update contract [API-005-002-001-0025]

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

https://e-health-ua.atlassian.net/wiki/spaces/EN/pages/17591304241 (remove the link block before publishing the document)

Properties of a REST API method document

Document type

Метод REST API

Document title

[Document status] REST API [Назва методу] [ID методу]

Guideline ID

GUI-0011

Author

@

Document version

1

Document status

DRAFT

Date of creation

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

Date of update

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

Method API ID

API-005-002-001-0025

Microservices (namespace)

IL

Component

Contracts

Component ID

COM-005-002

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

 

Resource

{{host}}/api/admin/contracts/{{id}}

Scope

private_contracts:write

Protocol type

REST

Request type

PUT

Sync/Async

Sync

Public/Private

Private

Purpose

This method allows to update new contract record in DB through the NHS IT system

Logic

This method allows to update new contract record in DB through the NHS IT system

Configuration parameters

Description of the configuration parameters that are used when processing a request in the system

Dictionaries

Provides a list of links to dictionaries that are available in Confluence

Input parameters

Description of input parameters

Input parameter

Mandatory

Type

Description

Example

Input parameter

Mandatory

Type

Description

Example

1

id

 

String

 

801f37f5-52c8-477e-aba5-a1d01876d210

2

 

 

 

 

 

Request structure

See on API-specification (посилання на сторінку з API-специфікацією)

Description of the REST API request structure, example

{ "start_date": "2017-04-20", "end_date": "2017-04-20", "status": "VERIFIED", "contractor_legal_entity_id": "56440c03-e218-432a-b417-9574b2b287bd", "contractor_owner_id": "54fea667-62cf-4688-ae9e-31acc19d986d", "contractor_base": "на підставі закону про Медичне обслуговування населення", "contractor_payment_details": { "bank_name": "Банк номер 1", "MFO": "351005", "payer_account": "32009102701026" }, "contractor_rmsp_amount": 50000, "external_contractor_flag": true, "external_contractors": [ { "legal_entity": { "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b", "name": "Клініка Ноунейм" }, "contract": { "number": "1234567", "issued_at": "2018-01-01", "expires_at": "2019-01-01" }, "divisions": [ { "id": "2922a240-63db-404e-b730-09222bfeb2dd", "name": "Бориспільське відділення Клініки Ноунейм", "medical_service": "Послуга ПМД" } ] } ], "nhs_signer_id": "da8cc932-7bca-4048-a3ff-9b07f901a860", "nhs_signer_base": "на підставі наказу", "nhs_legal_entity_id": "e5f76afb-4d96-4279-bcf1-0308457e6b64", "nhs_payment_method": "prepayment", "is_suspended": false, "issue_city": "Київ", "nhs_contract_price": 50000, "contract_number": "0000-9EAX-XT7X-3115", "status_reason": "default", "parent_contract_id": "09106b70-18b0-4726-b0ed-6bda1369fd52", "id_form": "PMD", "nhs_signed_date": "2017-04-20", "type": "CAPITATION", "reason": "не було виконано умов контракту", "signed_content_location": "bucket_name/folder_identifier/file_name" }

Headers

Key

Value

Mandatory

Description

Example

Key

Value

Mandatory

Description

Example

1

Content-Type

application/json

M

Тип контенту

Content-Type:application/json

2

Authorization

Bearer c2778f3064753ea70de870a53795f5c9

M

Перевірка користувача

Authorization:Bearer c2778f3064753ea70de870a53795f5c9

3

 

 

 

 

 

Request data validation

The following attributes must be validated

  1. Validate id

    1. Check that contract with id from URL exist and is_active = true

      1. in case of error return 404 error ('Contract with such id is not found')

    2. Check that contract with such id have type = 'GB_CBP'

      1. in case of error return 409 error ('Only contracts with type GB_CBP can be updated')

  2. Validate status

    1. Check that status is one of ('VERIFIED', 'TERMINATED')

      1. in case of error return 422 error $.status ('Invalid contract status')

  3. Validate contractor_legal_entity_id

    1. Check that legal entity exist and is_active = true

      1. in case of error return 409 error $.contractor_legal_entity_id ('Invalid contractor legal entity id')

  4. Validate contractor_owner_id

    1. Check that employee exist

      1. in case of error return 404 error $.contractor_owner_id ('Employee is not found')

    2. Check that contractor_owner_id correspond to contractor_legal_entity_id and employee_type = OWNER and status = APPROVED and is_active = true

      1. in case of error return 422 error $.contractor_owner_id ('Contractor owner must be an active and within current legal entity')

  5. Validate contractor_base

    1. Check that the contractor_base string and maximum length is 255 characters

      1. in case of error return 422 error $.contractor_base ('expected value to have a maximum length of 255 but was %{actual}')

  6. Validate nhs_signer_id

    1. Check that employee exist

      1. in case of error return 404 error $.contractor_owner_id ('Employee is not found')

    2. Check that nhs_signer_id correspond to nhs_legal_entity_id and nhs_legal_entity_id = legal_entities.type = NHS and status = APPROVED and is_active = true

      1. in case of error return 422 error $.contractor_owner_id ('Contractor signer must be an active and within NHS legal entity')

  7. Validate nhs_signer_base

    1. Check that the nhs_signer_base string and maximum length is 255 characters

      1. in case of error return 422 error $.nhs_signer_base ('expected value to have a maximum length of 255 but was %{actual}')

  8. Validate nhs_legal_entity_id

    1. check that legal entity exist and is_active = true and nhs_legal_entity_id=legal_entities.type = NHS

      1. in case of error return 409 error $.contractor_legal_entity_id ('Invalid nhs signer id')

  9. Validate nhs_payment_method

    1. check that nhs_payment_method one of ('BACKWARD', 'FORWARD')

      1. in case of error return 422 error $.nhs_payment_method ('Invalid nhs payment method')

  10. Validate is_suspended

    1. Check that the is_suspended boolean

      1. in case of error return 422 error $.is_suspended ('type mismatch. Expected boolean but got %{actual}')

  11. Validate issue_city

    1. Check that the issue_city string and maximum length is 255 characters

      1. in case of error return 422 error $.issue_city ('expected value to have a maximum length of 255 but was %{actual}')

  12. Validate contract_number

    1. Сheck format contract_number: contract number structure XXXX-1234-5678-C , where:
      XXXX - series: numbers + only some letters (A, E, H, K, M, P, T, X)
      1234-5678 - randomly generated numbers and letters A, E, H, K, M, P, T, X

      1. in case of error return 422 error $.contract_number ('string does not match pattern \"^\\d{4}-[\\dAEHKMPTX]{4}-[\\dAEHKMPTX]{4}$\"')

    2. check there is a contract with such contract_number already exist

      1. in case of error return 422 error $.contract_number ('Verified contract with such number already exists')

  13. Validate nhs_signer_base

    1. Check that nhs_signer_base string and maximum length is 255 characters

      1. in case of error return 422 error $.nhs_signer_base ('expected value to have a maximum length of 255 but was %{actual}')

  14. Validate type

    1. Check that type is 'GB_CBP'

      1. in case of return 409 error $.type ('Invalid contract type')

  15. Validate contractor_payment_details

    1. Check that MFO in the ^[0-9]{6}$ format

      1. in case of error return error 422 $.contractor_payment_details.MFO ('string does not match pattern \"^[0-9]{6}$\')

    2. Check that payer_account in the ^(UA[0-9]{22}|UA[0-9]{27}|[0-9]+)$ format

      1. in case of error return error 422 $.contractor_payment_details.payer_account ('string does not match pattern \"^(UA[0-9]{22}|UA[0-9]{27}|[0-9]+)$')

  16. Validate id_form

    1. Сheck that value exists in the CONTRACT_TYPE dictionary

      1. in case of error return error 422 $.id_form ('value is not allowed in enum')

  17. Validate parent_contract_id

    1. Check that parent_contract_id exist in contracts.id and correspond to contractor_legal_entity_id

      1. in case of error return error 422 $.parent_contract_id ('Parent contract id should be correspond to contractor legal entity')

    2. Check that id from parent_contract_id is Terminated

      1. in case of error return 409 $.parent_contract_id ("Parent contract should be in Terminated status")

  18. Validate medical_programs

    1. Check that medical_programs exist and medical_programs.type = 'SERVICE'

      1. in case of error return 404 $.medical_program_id ('Medical program is not found')

    2. Validate that list of medical programs in array doesn't contain duplicates ids:

      1. in case of error return 409 error view $medical_programs ('The list of medical programs contains duplicates')

Validate request

  1. Only authenticated and authorized user can use this service

  2. Contract must be valid and consistent, i.e. all "foreign keys" must be valid

  3. Deleted contract (is_active = false) couldn't be updated

Processing

  1. Update system attributes

Attribute

Value

Attribute

Value

updated_at

now() timastamp

updated_by

User from token

  1. Update record in DB

  1. Audit log (trigger logic)

  1. Event manager (trigger logic)

Response structure examples

See on API-specification (посилання на сторінку з API-специфікацією)

Description of the REST API response structure, example

{ "meta": { "code": 200, "url": "https://example.com/resource", "type": "object", "request_id": "req-adasdoijasdojsda" }, "data": { "id": "8be63914-a278-470b-b868-1af5b9087332", "start_date": "2017-04-20", "end_date": "2017-04-20", "status": "VERIFIED", "contractor_legal_entity_id": "56440c03-e218-432a-b417-9574b2b287bd", "contractor_owner_id": "54fea667-62cf-4688-ae9e-31acc19d986d", "contractor_base": "на підставі закону про Медичне обслуговування населення", "contractor_payment_details": { "bank_name": "Банк номер 1", "MFO": "351005", "payer_account": "32009102701026" }, "contractor_rmsp_amount": 50000, "external_contractor_flag": true, "external_contractors": [ { "legal_entity": { "id": "b075f148-7f93-4fc2-b2ec-2d81b19a9b7b", "name": "Клініка Ноунейм" }, "contract": { "number": "1234567", "issued_at": "2018-01-01", "expires_at": "2019-01-01" }, "divisions": [ { "id": "2922a240-63db-404e-b730-09222bfeb2dd", "name": "Бориспільське відділення Клініки Ноунейм", "medical_service": "Послуга ПМД" } ] } ], "nhs_signer_id": "da8cc932-7bca-4048-a3ff-9b07f901a860", "nhs_signer_base": "на підставі наказу", "nhs_legal_entity_id": "e5f76afb-4d96-4279-bcf1-0308457e6b64", "nhs_payment_method": "prepayment", "is_suspended": false, "issue_city": "Київ", "nhs_contract_price": 50000, "contract_number": "0000-9EAX-XT7X-3115", "status_reason": "default", "parent_contract_id": "09106b70-18b0-4726-b0ed-6bda1369fd52", "id_form": "PMD", "nhs_signed_date": "2017-04-20", "type": "CAPITATION", "reason": "не було виконано умов контракту", "signed_content_location": "bucket_name/folder_identifier/file_name", "medical_programs": [ "d313342c-0b3c-443b-a92e-afb78d1e8086" ], "is_active": true, "inserted_at": "2017-04-20T19:14:13Z", "inserted_by": "e1453f4c-1077-4e85-8c98-c13ffca0063e", "updated_at": "2017-04-20T19:14:13Z", "updated_by": "2922a240-63db-404e-b730-09222bfeb2dd" } }

HTTP status codes

Response code

HTTP Status code

Message

Internal name

Description

Response code

HTTP Status code

Message

Internal name

Description

1

Базові

2

1000

401

Unauthorized

 

Помилка підтвердження

3

1000

404

Composition not found

COMPOSITION_NOT_FOUND_404

Не знайдено медичний висновок

4

 

404

Contract with such id is not found

 

 

5

 

404

Employee is not found

 

 

6

 

404

Medical program is not found

 

 

7

 

409

Invalid contractor legal entity id

 

 

8

 

409

Invalid nhs signer id

 

 

9

 

409

Invalid contract type

 

 

10

 

409

Only contracts with type GB_CBP can be updated

 

 

11

 

409

Parent contract should be in Terminated status

 

 

12

 

409

The list of medical programs contains duplicates

 

 

13

 

422

Contractor owner must be an active and within current legal entity

 

 

14

 

422

Contractor signer must be an active and within NHS legal entity

 

 

15

 

422

expected value to have a maximum length of 255 but was %{actual}

 

 

16

 

422

Invalid nhs payment method

 

 

17

 

422

Invalid contract status

 

 

18

 

422

Parent contract id should be correspond to contractor legal entity

 

 

19

 

422

string does not match pattern \"^\\d{4}-[\\dAEHKMPTX]{4}-[\\dAEHKMPTX]{4}$\

 

 

20

 

422

string does not match pattern \"^[0-9]{6}$\

 

 

21

 

422

string does not match pattern \"^(UA[0-9]{22}|UA[0-9]{27}|[0-9]+)$

 

 

22

 

422

type mismatch. Expected boolean but got %{actual}

 

 

23

 

422

Verified contract with such number already exists

 

 

24

 

422

value is not allowed in enum

 

 

25

Специфічні

26

 

422

Only for active MPI record can be created medication request!

 

 

Post-processing processes

Description of actions performed on data after processing

Technical modules where the method is used

List of pages describing technical modules where the method is used

 

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