Versions Compared

Key

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

Overview

Procedure can be registered in eHealth as a part of encounter pckg or just by itself with reference on Service Request. This WS is designed to create a new procedure separately from encounter pckg. 

...

  1. Apiary

Validations

Authorization

  • Verify the validity of access token
    • Return (401, 'unauthorized') in case of validation fails
  • Verify that token is not expired
    • in case of error - return (401, 'unauthorized')
  • Check user scopes in order to perform this action (scope = 'procedure:write')
    1. Return (403, 'invalid scopes') in case of invalid scope(s)

Validate digital signature

Decode content that is encrypted in an electronic digital signature.
Use Digital signature WS. Method checks digital signature and returns result.
See service specification

1. Ensure that digital signature is valid

2. Validate that recorded_by of procedure is a current user

2.1. Get token metadata

  • Extract user_id, client_id, client_type

...

  1. Validate id
    1. ID is unique for MongoDB.procedures
    2. ID is UUID
  2. Validate based_on
    1. Validate based_on as Reference(Referencevalidation)
    2. Validate that service_request is
      1. in status is active or in progress
        1. in case of error return 409 "Invalid service request status"
      2. used_by_legal_entity==token.client_id 
        1. in case of error return 409 "Service request is used by another legal_entity"
  3. Validate status
    1. Procedure status must refer to a certain dictionary (values: ENTERED_IN_ERROR, COMPLETED). 
      1. in case error return 422, "Status not in the dictionary"
    2. On create procedure status could be only COMPLETED. There is no necessity to publish another procedure to e-Health. ENTERED_IN_ERROR could be set on update procedure.
      1. error 422 by json schema
  4. Validate code
    1. Validate code as Reference(Referencevalidation)
    2. If service_requests.code.identifier.value is service, validate $procedure.code.identifier.value = service_requests.code.identifier.value
      1. in case error return 409, "Service in procedure differ from service in service request"
    3. if service_requests.code.identifier.value is service_group, validate $procedure.code.identifier.value in (SELECT service_id from service_inclusions where service_group_id='service_requests.code.identifier.value')
      1. in case error return 409, "Service in procedure differ from services in service request's service_group"
    4. Validate procedure.service.is_active = true
      1. in case error return 409, "Service in is not active"
  5. Validate performed_date_time
    1.  performed_date_time is real
      1. in case error return 422, "Performed_date_time in invalid"
    2. performed_date_time <= now
      1. in case error return 422 "Procedure cannot be registered in future"
  6. Validate recorded_by
    1. Validate recorded_by as Reference(Referencevalidation)
    2. $..recorded_by.identifier.value is an ID of existing employee in PRM.employee
      1. in case of error  return 422, "Employee with such id is not found"
    3. Validate recorded_by is employee with status='APPROVED' and is_active= true and end_date is null or more than today
      1. in case error return 409, "This action is prohibited for current employee" 
    4. Validate employees.legal_entity_id=$managing_organization.identifier.value
      1. in case error return 409, "Employee should be from current legal entity"
  7. Performer(asserter) validation
    1. case $..primary_source==true
      1. $..performer(or $..asserter) must be filled
        1. in case of error "Performer (asserter) must be filled"
      2. $..report_origin must be absent
        1. in case of error "Report_origin can not be submitted in case primary_source is true" 
      3. validate performer(asserter) is a valid value from corresponding dictionary
        1. $..performer.identifier.type.coding[*].system == "eHealth/resources"
          1. in case of error "Submitted system is not allowed for this field"
        2. $..performer.identifier.type.coding[*].code=="employee"
          1. in case of error "Submitted code is not allowed for this field"
      4. validate performer(asserter) is an active medical staff from current legal_entity
        1. $..performer.identifier.value is an ID of existing employee in PRM.employee
          1. in case of error "Employee with such id is not found"
        2. $..performer.identifier.value == PRM.employees.id where (PRM.employees.status == "APPROVED" and PRM.employees.employee_type in ('DOCTOR','SPECIALIST','ASSISTANT'))
    2. case primary_source=false
      1.  error 422. (Procedure with primary_source=false could be send only with encounter package)
  8. Validate division
    1. Validate division as Reference(Referencevalidation)
    2. $division is an ID in PRM.divisions
      1. in case return 422, "Division with such id is not found"
    3. division.status=ACTIVE and is_active=true
      1. in case error return 409, "Division is not active"
    4. division.legal_entity_id = $client_id or division.legal_entity_id=$managing_organization.identifier.value
      1. in case error return 409, "Division is not in current legal_entity"
  9. Validate managing_organization is a current active legal_entity with proper type
    1.  as Reference(Referencevalidation)
    2. $managing_organization is an ID in PRM.legal_entities
      1. in case return 422, "Legal entity with such id is not found"
    3. validate managing_organization status is 'ACTIVE' and is_active=true
      1. in case error return 422 ('Legal entity is not active')
    4. validate legal_entity type is in ('PRIMARY_CARE','MSP','MSP_PHARMACY','MSP_PHARMACY') (use `ME_ALLOWED_TRANSACTIONS_LE_TYPES` from charts)
      1. in case error return 422, "Legal entity with type $legal_entity.type cannot perform procedures"
    5. validate $managing_organization.identifier.value = $client_id
      1. in case of error 409 "Managing organization does not correspond to user's legal entity."
  10. Validate reason_references
    1. Validate reason_reference as a Reference (Referencevalidation)
    2. Validate reason_refernce.identifier.value is condition not in status ENTERED_IN_ERROR
      1. in case error return 422, "Condition is canceled"
  11. Validate outcome
    1. validate outcome as a Reference (Referencevalidation)
    2. validate outcome.coding.object.system is in dictionary eHealth/procedure_outcomes
      1. in case error return 422, "outcome not in dictionary eHealth/procedure_outcomes"

...