Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Note

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

Info

/wiki/spaces/EN/pages/17591304241 (remove the link block before publishing the document)

...

Page Properties
idpage_properties_method_REST API

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-002-0041

Microservices (namespace)

IL

Component

Contracts

Component ID

COM-005-002

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

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

Resource

{{host}}/api/contract_requests/{{contract_type}}/{{id}}

Scope

contract_request:create

Protocol type

REST

Request type

POST

Sync/Async

Sync

Public/Private

Public

...

Using this endpoint a reimbursement contract could be created as well as a capitation contract. The difference between those two types of contract is described here- Reimbursement version Data model

Configuration parameters

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

Dictionaries

  • CONTRACT_PAYMENT_METHOD

  • CONTRACT_TYPE

  • REIMBURSEMENT_CONTRACT_TYPE

  • ADDRESS_TYPE

  • COUNTRY

  • SETTLEMENT_TYPE

  • STREET_TYPE

  • PHONE_TYPE

  • SPECIALITY_TYPE

  • SPECIALITY_LEVEL

  • SPEC_QUALIFICATION_TYPE

...

  1. Validate contract_type

    1. legal entities with types in (MSP,PRIMARY_CARE) can create only capitation contracts, legal entities with types in (PHARMACY) can create only reimbursement contracts

      1. in case of error 409 - "Contract type "{contract_type}" is not allowed for legal_entity with type "{legal_entity_type}" "

  2. Validate previous_request_id 

    1. select id from contract_request where id=$.previous_request_id

      1. in case no data found return 422 ("previous_request does not exist")

    2. Check previous_request status not in ('SIGNED')

      1. in case error return 422 ('In case contract exists new contract request should be created')

    3. Check that contractor_legal_entity_id of previous request is equal to contractor_legal_entity_id of current request

      1. in case of error return 422 ('Previous request doesn't belong to legal entity')

    4. For reimbursement contracts: Check that id_form from $.previous_request_id equal to id_form from request

      1. in case of error return 422 ('Id_form from previous request is not equal to id_form from request')

  3. Validate contractor_divisions

    1. Check divisions belongs to legal_entity and divisions.status='active'

      1. in case of error return 422  error view $divisions ('Division must be active and within current legal_entity')

    2. Validate each division in array present exactly one time

      1. in case of error return 422  error view $divisions ('Division duplicates')

  4. Validate start_date

    1. validate that start_date in a date format (^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$)

      1. in case of error return 422 error $start_date ('"expected \"<start_date>" to be a valid ISO 8601 date"')

    2. the year in start_date must be equal to current or next year (current+1).

      1. in case of error return 422 error $start_date ('Start date must be within this or next year')

  5. Validate end_date (Note. These validations are applied for cases when the contract_number isn't passed in the request. If the contract_number is passed, validations from 7.f are applied)

    1. validate that end_date in a date format (^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$)

      1. in case of error return 422 error $end_date ('"expected \"<end_date>" to be a valid ISO 8601 date"')

    2. the year in $end_date can be next year after 'start_date' if the total period of the contract doesn't exceed 1 year.

    3. the $end_date must be greater or equal than the $start_date

      1. in case of error return 422 ('The end_date should be greater or equal than the start_date')

    4. the different between $end_date and $start_date should be no more than than reimbursement(capitation)_contract_max_period_dayglobal param

      1. in case of error return 422 ('The difference between end_date and start_date is more than <reimbursement(capitation)_contract_max_period_day> days') one year')

  6. Validate contractor_owner_id

    1. Check employees.employee_id=contractor_owner_id and client_id=employee.legal_entity_id and employee_type in('OWNER', 'ADMIN') and status='APPROVED' and is_active=true

      1. In case of error return 422 Error ('Contractor owner must be an active OWNER or ADMIN and within current legal entity in contract request')

  7. If in request was sent contract_number:

    1. check contract request number structure XXXX-1234-5678-C , where:

      1. XXXX - series: numbers + only some letters (A, E, H, K, M, P, T, X)

      2. 1234-5678 - randomly generated numbers and letters A, E, H, K, M, P, T, X.

    2. check there is a contract with such contract_number 

      1. in case of error return 422 error ('Contract with such contract number does not exist')

    3. check if contract is not in status 'TERMINATED'

      1. in case of error return 409 error ('Can not update terminated contract')

    4. employee_divisions, start_date, end_datecan't be updated. If there is an active contract with such contract_number copy start_date, end_date and contractor_legal_entity_id from existing contract. It's not allowed in response.

      1. in case of error return 422 error

    5. check submitted contract_type is the same as in existing contract with number =contract_number

      1. in case of error 409 ('Submitted contract_type does not correspond to previously created content`)

    6. for capitation and reimbursement contract requests:

      1. if $contract_number and $end_date is passed in request:

        1. the year of $end_date must be one year greater or equal then the $start_date

          1. in case of error return 422 ('The year of end_date should be one year greater or equal to start_date')

        2. the $end_date should be equal or greater than today and less than or equal to three month from $end_date the previous contract

          1. in case of error return 422 ('The end_date may be equal or greater than today and less than or equal to three month from end_date the previous contract')

      2. if $contract_number w/o $end_date is passed in request:

        1. $end_date is taken from the previous contract.

    7. in case it is reimbursement contract:

      1. check id_form is the same

        1. in case of error 409 ('Submitted id_form does not correspond to previously created content`)

      2. if medical_programs passed - validate them as described at p.13 below

  8. Validate contractor_payment_details:

    1. if payer_account not like ^UA[0-9]{22}$ or ^UA[0-9]{27}$ -> MFO must be required

  9. Validate id_from is from dictionary CONTRACT_TYPE:

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

  10.  Validate there is no other active (VERIFIED) contract created by this legal_entity_id in this period(contract_request.start_date <= contract.end_date and contract_request.end_date => contract.start_date) by same contract_type and id_form (in case of reimbursement contract)

    1. in case of error return 422 error ('Active contract is found. Contract number must be sent in request')

  11. For capitation contract: Validate external_contractors

    1. Check external_contractors.divisions.id is present in contractor_divisions.id

      1. in case of error return 422 error $divisions ('The division is not belong to contractor_divisions')

    2. Check external_contractors.contract.expires_at>start_date

      1. in case of error return 422 error $contract.expires_at ('Expires date must be greater than contract start_date')

    3. Set external_contractors.legal_entity_id='client_id'

    4. division_id from the external_contractors block must be a part of the legal entity that enters into the capitation contract. In the external_contractors.legal_entity_id must be specify the legal entity that is the counter-party of this division_id.

  12. For capitation contract: Validate external_contractor_flag:

    1. If external_contractors is not null then external_contractor_flag must be true

    2. If external_contractors is null then external_contractor_flag must be set to false 

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

    3. If external_contractors wasn't sent in request then set external_contractor_flag to false.

  13. For reimbursement contracts: Validate medical_programs:

    1. Validate that all medical_programs with submitted ids exists

      1. in case of error return 422 error view $medical_programs[...] ('Reimbursement program with such id does not exist')

    2. Validate that medical_programs with submitted id is an active program

      1. in case of error return 422 error view $medical_programs[...] ('Reimbursement program is not active')

    3. Validate that all medical program and with MEDICATION type:

      1. in case of error return 422 error view $medical_programs[...] (‘Program with such id is not a reimbursement program')

    4. Check that medical_programs with submitted id correspond to id_form is in the allowed list:

      1. in case of error return 422 error view $medical_programs[...] ('Medical program is not allowed for this action')
        Note. For id_form=INSULIN_1 and PSYCHIATRY two medical programs must be present.

        1. in case of error return 409 error view $medical_programs ('The composition of medical programs does not correspond to the allowed composition')

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

...

id_form

medical_programs

PMD_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_DOSTUPNI_LIKY

INSULIN_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_IDS_INSULIN

ND_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_NETSUKROVYY_DIABET

PSYCHIATRY

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_IDS_PSYCHIATRY

GENERAL

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_IDS_GENERAL

  1. Note. For GENERAL id_form user can specify any qty of programs (but at least one) from the configuration list. Also user can update list of medical programs using logic from p.7

Processing

Determine parent contract (optional)

...

Response code

HTTP Status code

Message

Internal name

Description

1

Базові

2

 201

 Response

 

3

 401

 Invalid access token

 

4

403

Access denied. Party is not verified

5

403

Client is blocked

 

6

403

Client is not active

7

409

 Validation failed

8

409

Contract type "{contract_type}" is not allowed for legal_entity with type "{legal_entity_type}

9

409

Can not update terminated contract

10

409

Submitted contract_type does not correspond to previously created content

11

409

Submitted id_form does not correspond to previously created content

12

409

The composition of medical programs does not correspond to the allowed composition

13

409

The list of medical programs contains duplicates

14

409

Validation failed

15

422

Active contract is found. Contract number must be sent in request'

16

422

Contractor owner must be an active OWNER or ADMIN and within current legal entity in contract request

17

422

Contract with such contract number does not exist

18

422

Division must be active and within current legal_entity

19

422

Division duplicates

20

422

expected \"<start_date>" to be a valid ISO 8601 date

21

422

expected \"<end_date>" to be a valid ISO 8601 date

22

422

Expires date must be greater than contract start_date

23

422

$external_contractor_flag ('Invalid external_contractor_flag

24

422

In case contract exists new contract request should be created

25

422

Id_form from previous request is not equal to id_form from request

26

422

Invalid external_contractor_flag

27

422

Medical program is not allowed for this action

28

422

Previous request doesn't belong to legal entity

29

422

previous_request does not exist

30

422

Program with such id is not a reimbursement program

31

422

Reimbursement program with such id does not exist

32

422

Reimbursement program is not active

33

422

Start date must be within this or next year

34

422

The end_date should be greater or equal than the start_date

35

422

The end_date may be equal or greater than today and less than or equal to three month from end_date the previous contract

36

422

The division is not belong to contractor_divisions

37

422

The difference between end_date and start_date is more than <reimbursement(capitation)_contract_max_period_day> days') one year

38

422

value is not allowed in enum

39

422

 Validation failed

40

Специфічні

41

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

Page Properties Report
headingsID ТМ, Статус
cqllabel = "tr-mis"

...