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)

Table of Contents

Properties of a REST API method document

...

idpage_properties_method_REST API

...

Document type

...

Метод REST API

...

Guideline ID

...

GUI-0011

...

Author

...

@

...

Document version

...

1

...

Document status

...

DRAFT

...

Date of creation

...

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

...

Date of update

...

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

...

Method API ID

...

API-001-001-001-0001

...

Microservices (namespace)

...

MPI

...

Component

...

Auth

...

Component ID

...

COM-001-001

...

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

...

https://medicaleventsmisapi.docs.apiary.io/#reference/service-requests/manage-service-requests/complete-service-request

...

Resource

...

{{host}}//api.ehealth.gov.ua/api/patients/id/encounter_package

...

Scope

...

Protocol type

...

Request type

...

Sync/Async

...

Public/Private

Purpose

Describe the purpose of the API method, add Key points (if necessary)

Logic

Description of the working algorithm of the API method and the interaction of services with each other add Service logic (if necessary)

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

...

composition_id

...

 M

...

String ($uuid) (path)

...

Composition object ID

...

 89678f60-4cdc-4fe3-ae83-e8b3ebd35c59

...

Request structure

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

Description of the REST API request structure, example

...

titleExample

...

Headers

...

Key

...

Value

...

Mandatory

...

Description

...

Example

...

Content-Type

...

application/json

...

M

...

Тип контенту

...

Content-Type:application/json

...

Authorization

...

Bearer c2778f3064753ea70de870a53795f5c9

...

M

...

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

...

Authorization:Bearer c2778f3064753ea70de870a53795f5c9

...

Request data validation

Describe the process of checking the input data transmitted in the request for compliance with the given rules and restrictions set in the API

Processing

A list of processes related to receiving, changing or transmitting data according to the logic defined in the REST API

Response structure examples

Description of the REST API response structure, example

...

titleExample

...

HTTP status codes

...

Response code

...

HTTP Status code

...

Message

...

Internal name

...

Description

...

Базові

...

1000

...

404

...

Composition not found

...

COMPOSITION_NOT_FOUND_404

...

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

...

401

...

Unauthorized

...

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

...

Специфічні

...

422

...

Only for active MPI record can be created medication request!

Post-processing processes

...

Note

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

Info

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

Table of Contents

Properties of a REST API method document

Page Properties
idpage_properties_method_REST API

Document type

Метод REST API

Document title

[DRAFT] Complete Service request [API-007-010-001-0320]

Guideline ID

GUI-0011

Author

@

Document version

1

Document status

DRAFT

Date of creation

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

Date of update

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

Method API ID

API-007-010-001-0320

Microservices (namespace)

ME

Component

Service request

Component ID

COM-007-010

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

https://medicaleventsmisapi.docs.apiary.io/#reference/service-requests/manage-service-requests/complete-service-request

Resource

{{host}}/api/service_requests/{{service_request_id}}/actions/complete

Scope

service_request:complete

Protocol type

REST

Request type

PATCH

Sync/Async

Async(def)/Sync

Public/Private

Public

Purpose

This WS is designed to use Service request after providing services.

Logic

Погашення направлення

Service logic

  1. Update program_processing_status to "completed" if it was not null

  2. Update status to "completed"

  3. Depending on changes update a status history and program_processing_status history

  4. Save  status_reason to service_request, including status_history

  5. Save completed_with, program_service to service_request

  6. If the service request is based on activity with quantity:

    1. Recalculate and set remaining_quantity for the activity as described at PreQualify Service Request | Validate service request

Configuration parameters

N/A

Dictionaries

N/A

Input parameters

Input parameter

Mandatory

Type

Description

Example

1

service_request_id

 

String

Unique service request identifier

aff00bf6-68bf-4b49-b66d-f031d48922b3

2

Request structure

See on API-specification

Expand
titleExample
Code Block
languagejson
{
  "completed_with": {
    "identifier": {
      "type": {
        "coding": [
          {
            "system": "eHealth/resources",
            "code": "diagnostic_report"
          }
        ]
      },
      "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
    }
  },
  "program_service": {
    "identifier": {
      "type": {
        "coding": [
          {
            "system": "eHealth/resources",
            "code": "program_service"
          }
        ]
      },
      "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
    }
  }
}

Headers

Headers

Request data validation

Authorize

  • Verify the validity of access token

    • in case of error - return 401 (“Invalid access token”) in case of validation fails

  • Verify that token is not expired

    • in case of error - return 401 (“Invalid access token”)

  • Check user scopes in order to perform this action (scope = 'service_request:complete')

    • return 403 (“Your scope does not allow to access this resource. Missing allowances: service_request:complete”) in case of invalid scope(s)

Validate legal entity

  • Check legal entity type: it has to be in me_allowed_transactions_le_types config parameter, has status = active 

    • in case of error return 409 "Action is not allowed for the legal entity"

Validate request using JSON Schema

Return 422 with the list of validation errors in case validation fails

Validations

  1. Validate used_by_legal_entity

    1. ME.service_request.used_by_legal_enity.identifier.value=token.client_id

      1. in case of error return 409 "Service request is used by another legal entity" 

  2. Validate program_processing_status                                     

    1. ME.service_request.program_processing_status  == "in_progress"

      1. in case of error return 409 "Invalid program processing status status"

  3. Validate completed_with if exist:

    1. $.completed_with as a Reference(encounter| diagnostic_report| procedure)

    2. if ME.service_request.category and resource according to config file

    3. $.completed_with.managing_organization== token.client_id

      1. Could not complete service request with an entity, created by another legal entity

    4. SR could be completed only with resource that referenced this SR

      1. in case error return 422, msg "$completed_with.code is not connected with this SR"

    5. If SR.category in ('hospitalization', 'transfer_of_care') validate resource is encounter.type = discharge

      1. in case error, return 422, "Service request with category $category could not be completed with current resource"

    6. if $.completed_with.identifier.code == “encounter”:

      1. check that episode from encounters.episode has status “active”

        1. in case of error return 422 “Encounter refers to episode that is not active"

    7. Check resource status:

      1. If resource is procedure, check that procedure.status not in (entered_in_error, not_done)

      2. Else check that resource.status != entered_in_error

        1. in case error, return 422, "<Resource> in <status> status can not be referenced"

  4. Validate program_service

    1. $.program_service is an existing record from PRM.program_services where is_active=true

      1. in case of error return 422 "Program service does not exist"

    2. $.program_service should be only as a service (check that PRM.program_service.service_id IS NOT NULL)

      1. in case of error return 422 "Program service with service group is not allowed for completing current resource"

  5. Validate that service code from completed with and from program service (if both exist) matches (except service requests  where category in ('hospitalization', 'transfer_of_care')):

    1. if completed_with.identifier.type.coding[].code="diagnostic_report" or "procedure" than

      1. completed_with.code.identifier.value==program_service.service_id (enrich from ME and PRM)

    2. else if completed_with.identifier.type.coding[].code="encounter"

      1. if ME.service_request.code.identifier.type.coding[].code="service"

        1. ME.service_request.code.identifier.value==program_service.service_id (enrich from ME and PRM)

      2. if service_request.code.identifier.type.coding[].code="service_group"

        1. there is a record in status active in PRM.service_inclusions where PRM.service_inclusions.service_group_id=ME.service_request.code.identifier.value and  PRM.service_inclusions.service_id=program_service.service_id

    3. in case of error return 409 "Services from program service and completed with does not match"

  6. Else, if service request has no program:

  7. Validate the service request has been referenced by at least one not entered_in_error procedure/encounter/diagnostic_report.

    1. in case of error - return 409 error ('Service request must be referenced by at least one procedure, encounter or diagnostic_report that is not entered_in_error ')

  8. Validate status_reason filled according to eHealth/service_request_complete_reasons dictionary

    1. in case system is another dictionary - return 422 error ('not allowed in enum')

    2. in case code value is not active in corresponding dictionary - return 422 error ("Value is not active")

Validate transition

  1. If service request has a program:

    1. Check status is active and program_processing_status is, in_progress.

      1. in case of error - return 409 error ('Service request only in status 'active' and program_processing_status 'in_progress' can be completed')

  2. else, if service request has no program:

    1. Check status is ‘active’

      1. in case of error - return 409 error ('Service request only in status 'active' can be completed')

Processing

N/A

Response structure examples

See on API-specification

Expand
titleExample
Code Block
languagejson

{
  "data": {
    "id": "90a9e15b-b71b-4caf-8f2e-ff247e8a5600",
    "requisition": "AX654654T",
    "status": "active",
    "program": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "medical_program"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "program_processing_status": "new",
    "status_history": [
      {
        "status": "closed",
        "status_reason": {
          "coding": [
            {
              "system": "eHealth/service_request_recall_reasons",
              "code": "cured"
            }
          ]
        },
        "inserted_at": "2018-08-02T10:45:16.000Z"
      }
    ],
    "program_processing_status_history": [
      {
        "program_processing_status": "new",
        "inserted_at": "2018-08-02T10:45:16.000Z",
        "inserted_by": "f7bdce4c-9d6e-4b08-913c-97c4b972f9be"
      }
    ],
    "program_service": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "program_service"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "intent": "order",
    "priority": "routine",
    "based_on": [
      {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "care_plan"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        }
      },
      {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "activity"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        }
      }
    ],
    "category": {
      "coding": [
        {
          "system": "eHealth/SNOMED/service_request_categories",
          "code": "409063005"
        }
      ]
    },
    "code": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "service"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "subject": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "patient"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "context": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "encounter"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "occurrence_period": {
      "start": "2018-08-02T10:45:16.000Z",
      "end": "2018-08-02T11:00:00.000Z"
    },
    "requester_employee": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "employee"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "requester_legal_entity": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "legal_entity"
            }
          ]
        },
        "value": "75a6d991-0bf7-476f-b3cf-bec83f044b2a"
      },
      "display_value": "null"
    },
    "reason_references": [
      {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "condition"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        },
        "display_value": "null"
      }
    ],
    "supporting_info": [
      {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "episode_of_care"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        },
        "display_value": "null"
      }
    ],
    "note": "Some notes",
    "patient_instruction": "Some patient instructions",
    "expiration_date": "2018-08-02T10:45:16.000Z",
    "permitted_resources": [
      {
        "identifier": {
          "type": {
            "coding": [
              {
                "system": "eHealth/resources",
                "code": "episode_of_care"
              }
            ]
          },
          "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
        },
        "display_value": "null"
      }
    ],
    "used_by_employee": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "legal_entity"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "inserted_at": "2018-08-02T10:45:16.000Z",
    "updated_at": "2018-08-02T10:45:16.000Z",
    "completed_with": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "diagnostic_report"
            }
          ]
        },
        "value": "9183a36b-4d45-4244-9339-63d81cd08d9c"
      },
      "display_value": "null"
    },
    "used_by_legal_entity": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "legal_entity"
            }
          ]
        },
        "value": "c5a6d991-0bf7-476f-b3cf-bec83f044b2a"
      },
      "display_value": "null"
    },
    "performer": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "legal_entity"
            }
          ]
        },
        "value": "c5a6d991-0bf7-476f-b3cf-bec83f044b2a"
      },
      "display_value": "Опанасенко Олексій Володимирович"
    },
    "location_reference": {
      "identifier": {
        "type": {
          "coding": [
            {
              "system": "eHealth/resources",
              "code": "division"
            }
          ]
        },
        "value": "c5a6d991-0bf7-476f-b3cf-bec83f044b2a"
      },
      "display_value": "null"
    },
    "performer_type": {
      "coding": [
        {
          "system": "SPECIALITY_TYPE",
          "code": "DIETETICS"
        }
      ]
    }
  },
  "meta": {
    "code": 201,
    "url": "http://example.com/resource",
    "type": "object",
    "request_id": "req-adasdoijasdojsda"
  }
}
Expand
titleExample
Code Block
languagejson
{
  "data": {
    "status": "pending",
    "eta": "2018-08-02T10:45:16.000Z",
    "links": [
      {
        "entity": "job",
        "href": "/Jobs/NBXk9EyErUZv1RhXgyvgg"
      }
    ]
  },
  "meta": {
    "code": 202,
    "url": "http://example.com/resource",
    "type": "object",
    "request_id": "req-adasdoijasdojsda"
  }
}

HTTP status codes

Response code

HTTP Status code

Message

Internal name

Description

1

Базові

2

201

use payload from response

sync

3

202

use Get job details to get processing result. Response payload will be returned in the job details

async: default method

4

401

Invalid access token

5

401

Unauthorized

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

6

403

Invalid scopes

7

403

Your scope does not allow to access this resource. Missing allowances: service_request:complete

8

409

Action is not allowed for the legal entity

9

409

Services from program service and completed with does not match

10

409

Invalid program processing status statu

11

409

Service request is used by another legal entity

12

409

Service request must be referenced by at least one procedure, encounter or diagnostic_report that is not entered_in_error 

13

409

Service request only in status 'active' and program_processing_status 'in_progress' can be completed

14

409

Service request only in status 'active' can be completed

15

422

$completed_with.code is not connected with this SR

16

422

<Resource> in <status> status can not be referenced

17

422

Encounter refers to episode that is not active

18

422

'not allowed in enum'

19

422

Program service does not exist

20

422

Program service with service group is not allowed for completing current resource

21

422

Service request with category $category could not be completed with current resource

22

422

Value is not active

23

Специфічні

24

Post-processing processes

N/A

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"

...