Table of Contents
minLevel1
maxLevel3

Required parameters are marked with "*"

...

Purpose*

Необхідно зазначити призначення методу.

Наприклад: This method allows to receive active person declarations issued by the current legal entity (based on access_token)

Specification*

...

Project Name

...

COVID-certificate

...

Project abreviation

...

SVC

...

Developer

...

Розробник методу API. Наприклад, Edenlab

...

Project Manager

...

@Єлизавета Гессен-Дармштадська

...

Tech Lead

...

@Іоанн Воїнов

...

Product Owner

...

@Нікодім Святогорцев

...

Вusiness analyst

...

@Пантелеймон Нікомедійський

...

Status

Status
colourGreen
titleAPPROVED

...

Version

...

1.0

...

Date of release

...

...

Link

...

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

...

Resource

...

/api/admin/contracts

...

Scope

...

private_contracts:write

...

Components

...

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

...

Microservices

...

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

...

Protocol type

...

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

...

Request type

...

POST

...

Sync/Async

...

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

Logic*

Потрібно по пунктах описати логіку методу API або додати діаграму

Filters

Потрібно вказати фільтри. Наприклад, для GET /api/medication_requests/{{id}}/dispenses?status=PROCESSED фільтр:

...

Filter

...

Values

...

Type

...

Description

...

Example

...

start_date

...

string

...

contract start date

...

2017-04-20

...

end_date

...

string

...

contract end date

...

2017-04-20

...

status

...

string

...

contract status

...

VERIFIED

...

contractor_legal_entity_id

...

string

...

56440c03-e218-432a-b417-9574b2b287bd

...

contractor_owner_id

...

string

...

54fea667-62cf-4688-ae9e-31acc19d986d

...

contractor_base

...

string

...

documents which allows to represent clinic

...

на підставі закону про Медичне обслуговування населення

...

contractor_payment_details

...

как заполнять вложенные переменные ??

...

object

...

contractor_rmsp_amount

...

number

...

the amount of population which were served by this MSP

...

50000

...

external_contractor_flag

...

boolean

...

the existence of second appendix

...

true

...

external_contractors

...

как заполнять вложенные переменные ??

...

array

...

nhs_signer_id

...

string

...

da8cc932-7bca-4048-a3ff-9b07f901a860

...

nhs_signer_base

...

string

...

documents which allows to represent nhs

...

на підставі наказу

...

nhs_legal_entity_id

...

string

...

e5f76afb-4d96-4279-bcf1-0308457e6b64

...

nhs_payment_method

...

как заполнять вложенные переменные ??

...

enum

...

is_suspended

...

boolean

...

whether the contract is active or temporary suspended

...

false

...

issue_city

...

string

...

place of contract request

...

Київ

...

nhs_contract_price

...

number

...

contract price

...

50000

...

contract_number

...

string

...

human readable number of contract request

...

0000-9EAX-XT7X-3115

...

status_reason

...

string

...

The reason of terminated status

...

default

...

parent_contract_id

...

string

...

09106b70-18b0-4726-b0ed-6bda1369fd52

...

id_form

...

string

...

PMD

...

nhs_signed_date

...

string

...

Date when contract was signed by NHS

...

2017-04-20

...

type

...

string

...

CAPITATION

...

reason

...

string

...

additional the reason of terminated status

...

не було виконано умов контракту

...

signed_content_location

...

string

...

Location of the signed content in media storage

...

bucket_name/folder_identifier/file_name

...

medical_programs

...

как заполнять вложенные переменные ??

...

array

Request structure*

See on Apiary

Example:

...

titleRequest example

...

Table of Contents
minLevel1
maxLevel3

Required parameters are marked with "*"

Якщо інформації по відповідному параметру немає, потрібно зазначити: “APIparagraph not found”.

Purpose*

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

Specification*

Page Properties

Project Name

COVID-certificate

Project abreviation

SVC

Developer

Розробник методу API. Наприклад, Edenlab

Project Manager

@Єлизавета Гессен-Дармштадська

Tech Lead

@Іоанн Воїнов

Product Owner

@Нікодім Святогорцев

Вusiness analyst

@Пантелеймон Нікомедійський

Status

Status
colourGreen
titleAPPROVED

Version

1.0

Date of release

Link

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

Resource

/api/admin/contracts

Scope

private_contracts:write

Components

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

Microservices

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

Protocol type

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

Request type

POST

Sync/Async

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

Logic*

API paragraph not found

Filters

Filter

Values

Type

Description

Example

start_date

string

contract start date

2017-04-20

end_date

string

contract end date

2017-04-20

status

string

contract status

VERIFIED

contractor_legal_entity_id

string

56440c03-e218-432a-b417-9574b2b287bd

contractor_owner_id

string

54fea667-62cf-4688-ae9e-31acc19d986d

contractor_base

string

documents which allows to represent clinic

на підставі закону про Медичне обслуговування населення

contractor_payment_details

как заполнять вложенные переменные ??

object

contractor_rmsp_amount

number

the amount of population which were served by this MSP

50000

external_contractor_flag

boolean

the existence of second appendix

true

external_contractors

как заполнять вложенные переменные ??

array

nhs_signer_id

string

da8cc932-7bca-4048-a3ff-9b07f901a860

nhs_signer_base

string

documents which allows to represent nhs

на підставі наказу

nhs_legal_entity_id

string

e5f76afb-4d96-4279-bcf1-0308457e6b64

nhs_payment_method

как заполнять вложенные переменные ??

enum

is_suspended

boolean

whether the contract is active or temporary suspended

false

issue_city

string

place of contract request

Київ

nhs_contract_price

number

contract price

50000

contract_number

string

human readable number of contract request

0000-9EAX-XT7X-3115

status_reason

string

The reason of terminated status

default

parent_contract_id

string

09106b70-18b0-4726-b0ed-6bda1369fd52

id_form

string

PMD

nhs_signed_date

string

Date when contract was signed by NHS

2017-04-20

type

string

CAPITATION

reason

string

additional the reason of terminated status

не було виконано умов контракту

signed_content_location

string

Location of the signed content in media storage

bucket_name/folder_identifier/file_name

medical_programs

как заполнять вложенные переменные ??

array

Request structure*

See on Apiary

Example:

Expand
titleRequest example
Code Block
{
  "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

Validate request*

API paragraph not found

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:

Expand
titleResponse example
Code Block
{
  "meta": {
    "typecode": {201,
      "codingurl": ["https://example.com/resource",
        {
          "system"type": "eHealth/compositionobject",
     
    "coderequest_id": "stringreq-adasdoijasdojsda"
  },
  "data": {
 }       ]"id": "8be63914-a278-470b-b868-1af5b9087332",
      "textstart_date": "string"
    }2017-04-20",
    "valueend_date": "e49abc302017-6d17-11ea-b83c-673680173afa"04-20",
  },   "sectionstatus": {"VERIFIED",
    "focuscontractor_legal_entity_id": {
 "56440c03-e218-432a-b417-9574b2b287bd",
    "typecontractor_owner_id": {
   "54fea667-62cf-4688-ae9e-31acc19d986d",
    "codingcontractor_base": [
          {"на підставі закону про Медичне обслуговування населення",
    "contractor_payment_details": {
       "systembank_name": "eHealth/compositionБанк номер 1",
 
          "codeMFO": "string351005",
      "payer_account": "32009102701026"
  }  },
      ],
 "contractor_rmsp_amount": 50000,
      "text"external_contractor_flag": "string"true,
    "external_contractors": [
},      {
"value": "e49abc30-6d17-11ea-b83c-673680173afa"
    }   },
  "extension"legal_entity": [
{
   {       "valueCodeid": "AUTHORIZE_WITHb075f148-7f93-4fc2-b2ec-2d81b19a9b7b",
          "valueUuidname": "3fa85f64-5717-4562-b3fc-2c963f66afa6Клініка Ноунейм"
    },    },
 {       "valueCodecontract": "IS_ACCIDENT",{
      "valueBoolean": true     },
"number": "1234567",
   {       "valueCodeissued_at": "TREATMENT_VIOLATION",2018-01-01",
          "valueStringexpires_at": "late_arrival"2019-01-01"
     },   },
 {       "valueCodedivisions": "TREATMENT_VIOLATION_DATE",[
      "valueDate": "2020-12-12"   {
 },
    {       "valueCodeid": "IS_INTOXICATED",2922a240-63db-404e-b730-09222bfeb2dd",
            "valueBooleanname": true"Бориспільське відділення Клініки  Ноунейм",
},     {       "valueCodemedical_service": "IS_FOREIGN_TREATMENT",Послуга ПМД"
      "valueBoolean": true     },
    {    ]
  "valueCode": "IS_FORCE_RENEW",   }
   "valueBoolean": true
    } ],
   ]
}

Authorize*

Вимоги до авторизації: яким чином надається доступ до використання методу

Request to process the request using a token in the headers

Headers*

Наприклад:

  • Content-Type:application/json

  • Authorization:Bearer c2778f3064753ea70de870a53795f5c9

  • api-key:uXhEczJ56adsfh3Ri9SUkc4en

Validate request*

Наприклад:

  1. Validate request using JSON schema

    1. In case validation failed - generate 422 error

Expand
titleJSON schema
Code Block
{
  "$schema": "http://json-schema.org/draft-04/schema#",
  "type": "object",
  "properties": {
    "verification_code": {
      "type": "string"
    }
  },
  "required": [
    "verification_code"
  ],
  "additionalProperties": false
}

Request data validation*

Валідація даних

Parameters that are used when processing the request

Configuration parameters

Наприклад: Доступ до методу визначається скоупом covid_certificate:get . Дозвіл на даний скоуп визначається адміністратором Системи шляхом конфігурування скоупів в контексті клієнтів і ролей.

Dictionaries

Потрібно вказати довідники, які використовує метод API

Processing*

Потрібно описати процеси, які відбуваються з даними

1. Using global parameters

Потрібно викликати глобальні параметри (Global parameters), щоб отримати наведені нижче параметри

Response structure*

See on Apiary

Example:

Expand
titleResponse example
Code Block
{
  "data": {
    "id": "3fa85f64-5717-4562-b3fc-2c963f66afa6 "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",
    "statusreason": "PENDINGне було виконано умов контракту",
    "etasigned_content_location": "stringbucket_name/folder_identifier/file_name",
    "doneAtmedical_programs": "string", [
      "links": [d313342c-0b3c-443b-a92e-afb78d1e8086"
    ],
  {  "is_active": true,
     "entityinserted_at": "eHealth/composition",
   2017-04-20T19:14:13Z",
    "hrefinserted_by": "composition/0daaad78e1453f4c-6cfb1077-11ea4e85-9cd68c98-afab698838bcc13ffca0063e",
 
      "errorupdated_at": "string"2017-04-20T19:14:13Z",
    "updated_by":  }
    ]
  "2922a240-63db-404e-b730-09222bfeb2dd"
  }
}

Post-processing processes*

Що має відбутися в ЦБД після опрацювання та відправлення відповіді, тощо

HTTP status codes*

HTTP status code

Message

What caused the error

 

 

 

  201

 

 

Backward compatibility

...