Required parameters are marked with "*"
Якщо інформації по відповідному параметру немає, потрібно зазначити: “API paragraph not found”.
Purpose*
This method allows to update new contract record in DB through the NHS IT system
Specification*
Logic*
This method allows to update new contract record in DB through the NHS IT system
Input parameters
Input parameter | Values | Type | Description | Example |
---|---|---|---|---|
id | String |
|
Request structure*
See on Apiary
Authorize*
Verify the validity of api-key
Return 401 in case validation fails
Verify the validity of token
Return 401 in case validation fails
Check scopes in order to perform this action (scope = 'private_contracts:write')
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
Validate request*
Only authenticated and authorized user can use this service
Contract must be valid and consistent, i.e. all "foreign keys" must be valid
Deleted contract (is_active = false) couldn't be updated
Request data validation*
The following attributes must be validated
Validate id
Check that contract with id from URL exist and is_active = true
in case of error return 404 error ('Contract with such id is not found')
Check that contract with such id have type = 'GB_CBP'
in case of error return 409 error ('Only contracts with type GB_CBP can be updated')
Validate status
Check that status is one of ('VERIFIED', 'TERMINATED')
in case of error return 422 error $.status ('Invalid contract status')
Validate contractor_legal_entity_id
Check that legal entity exist and is_active = true
in case of error return 409 error $.contractor_legal_entity_id ('Invalid contractor legal entity id')
Validate contractor_owner_id
Check that employee exist
in case of error return 404 error $.contractor_owner_id ('Employee is not found')
Check that contractor_owner_id correspond to contractor_legal_entity_id and employee_type = OWNER and status = APPROVED and is_active = true
in case of error return 422 error $.contractor_owner_id ('Contractor owner must be an active and within current legal entity')
Validate contractor_base
Check that the contractor_base string and maximum length is 255 characters
in case of error return 422 error $.contractor_base ('expected value to have a maximum length of 255 but was %{actual}')
Validate nhs_signer_id
Check that employee exist
in case of error return 404 error $.contractor_owner_id ('Employee is not found')
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
in case of error return 422 error $.contractor_owner_id ('Contractor signer must be an active and within NHS legal entity')
Validate nhs_signer_base
Check that the nhs_signer_base string and maximum length is 255 characters
in case of error return 422 error $.nhs_signer_base ('expected value to have a maximum length of 255 but was %{actual}')
Validate nhs_legal_entity_id
check that legal entity exist and is_active = true and nhs_legal_entity_id=legal_entities.type = NHS
in case of error return 409 error $.contractor_legal_entity_id ('Invalid nhs signer id')
Validate nhs_payment_method
check that nhs_payment_method one of ('BACKWARD', 'FORWARD')
in case of error return 422 error $.nhs_payment_method ('Invalid nhs payment method')
Validate is_suspended
Check that the is_suspended boolean
in case of error return 422 error $.is_suspended ('type mismatch. Expected boolean but got %{actual}')
Validate issue_city
Check that the issue_city string and maximum length is 255 characters
in case of error return 422 error $.issue_city ('expected value to have a maximum length of 255 but was %{actual}')
Validate contract_number
С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, Xin case of error return 422 error $.contract_number ('string does not match pattern \"^\\d{4}-[\\dAEHKMPTX]{4}-[\\dAEHKMPTX]{4}$\"')
check there is a contract with such contract_number already exist
in case of error return 422 error $.contract_number ('Verified contract with such number already exists')
Validate nhs_signer_base
Check that nhs_signer_base string and maximum length is 255 characters
in case of error return 422 error $.nhs_signer_base ('expected value to have a maximum length of 255 but was %{actual}')
Validate type
Check that type is 'GB_CBP'
in case of return 409 error $.type ('Invalid contract type')
Validate contractor_payment_details
Check that MFO in the ^[0-9]{6}$ format
in case of error return error 422 $.contractor_payment_details.MFO ('string does not match pattern \"^[0-9]{6}$\')
Check that payer_account in the ^(UA[0-9]{22}|UA[0-9]{27}|[0-9]+)$ format
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]+)$')
Validate id_form
Сheck that value exists in the CONTRACT_TYPE dictionary
in case of error return error 422 $.id_form ('value is not allowed in enum')
Validate parent_contract_id
Check that parent_contract_id exist in contracts.id and correspond to contractor_legal_entity_id
in case of error return error 422 $.parent_contract_id ('Parent contract id should be correspond to contractor legal entity')
Check that id from parent_contract_id is Terminated
in case of error return 409 $.parent_contract_id ("Parent contract should be in Terminated status")
Validate medical_programs
Check that medical_programs exist and medical_programs.type = 'SERVICE'
in case of error return 404 $.medical_program_id ('Medical program is not found')
Validate that list of medical programs in array doesn't contain duplicates ids:
in case of error return 409 error view $medical_programs ('The list of medical programs contains duplicates')
Processing*
Update system attributes
Attribute | Value |
---|---|
updated_at | now() timastamp |
updated_by | User from token |
2. Update record in DB
3. Audit log (trigger logic)
4. Event manager (trigger logic)
Response structure*
See on Apiary
Example:
Post-processing processes*
API paragraph not found
HTTP status codes*
HTTP status code | Message | What caused the error |
---|---|---|
200 |
|
|