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

Private. Create contract

Purpose

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

 

Specification

Link

https://ehealthmisapi1.docs.apiary.io/#reference/private.-contracts/private-contracts/private.-create-contract

Resource

/api/admin/contracts

Scope

private_contracts:write

Components

Contracts

Microservices

API paragraph not found

Protocol type

REST

Request type

POST

Sync/Async

Sync

Public/Private/Internal

Private

 

Logic

WS sets all data for creating contract

 

Request structure

See on Apiary

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", "medical_programs": [ "d313342c-0b3c-443b-a92e-afb78d1e8086" ] }

 

Authorize

  1. Verify the validity of api-key

    1. Return 401 in case validation fails

  2. Verify the validity of token

    1. Return 401 in case validation fails

  3. Check scopes in order to perform this action (scope = 'private_contracts:write')

    1. Return 403 in case invalid scope(s)

Request to process the request using a token in the headers

 

Headers

Наприклад:

  • Content-Type:application/json

  • api-key:c2778f3064753ea70de870a53795f5c9

 

Request data validation

Validations

The following attributes must be validated

  1. Validate status

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

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

  2. 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')

  3. 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')

  4. 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}')

  5. 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')

  6. 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}')

  7. 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')

  8. 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')

  9. 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}')

  10. 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}')

  11. 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')

  12. 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}')

  13. Validate type

    1. Check that type is 'GB_CBP'

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

  14. 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]+)$')

  15. 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')

  16. 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")

  17. Validate medical_programs

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

      1. in case of error return 404 $.medical_programs ('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')

 

Processing

  1. Set system attributes

id

Generate uuid

is_active

Const: true

inserted_at

now() timastamp

inserted_by

User from token

updated_at

now() timastamp

updated_by

User from token

2. Store to DB

3. Audit log (trigger logic)

 

Response structure

See on Apiary

Example:

{ "meta": { "code": 201, "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

HTTP status code

Message

What caused the error

HTTP status code

Message

What caused the error

 201

 

 

 

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