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

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

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

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

https://e-health-ua.atlassian.net/wiki/spaces/EN/pages/17591304241 (remove the link block before publishing the document)

Properties of a REST API method document

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

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

{ "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

{ "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" } }
{ "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

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

 

403

Invalid scopes

 

 

6

 

403

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

 

 

7

 

409

Action is not allowed for the legal entity

 

 

8

 

409

Services from program service and completed with does not match

 

 

9

 

409

Invalid program processing status statu

 

 

10

 

409

Service request is used by another legal entity

 

 

11

 

409

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

 

 

12

 

409

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

 

 

13

 

409

Service request only in status 'active' can be completed

 

 

14

 

422

$completed_with.code is not connected with this SR

 

 

15

 

422

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

 

 

16

 

422

Encounter refers to episode that is not active

 

 

17

 

422

'not allowed in enum'

 

 

18

 

422

Program service does not exist

 

 

19

 

422

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

 

 

20

 

422

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

 

 

21

 

422

Value is not active

 

 

22

Специфічні

23

 

 

 

 

 

Post-processing processes

N/A

Technical modules where the method is used

 

Related content

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