Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Purpose

This WS allows to create Specimen entity by employees without submitting Encounter Data Package.

Specification

Link

 Apiary

Resource

 api/patients/patient_id/specimens

Scope

 specimen:write

Components

 Specimen

Microservices

 

Protocol type

 REST

Request type

 POST

Sync/Async

 Async

Public/Private/Internal

 Public

...

  • Array item has type of {Reference} to Service Request resource

    • in case of error - return 422 ('value is not allowed in enum')

  • Service Request exists in the DB and relates to the patient ($.subject)

    • in case of error - return 422 ("Service request with such id is not found")

  • Service Request’s status is active or program_processing_status is in_progress (any status is valid in case program_processing_status= in_progress)

    1. in case of error - return 422 ("Service request is not active or in progress")

  • If used_by_legal_entity is set in the Service request (program_processing_status=in_progress), then check it matches the client_id from token

    • in case of error - return 422 ("Service request must be related to the same legal entity")

  • Check if Service Request’s expiration date is less then or equal to current date

    1. in case of error - return 422 ("Service request expiration date must be greater than or equal to current date")

...

  • Check there is no specimen with the same ID in the DB

    • in case of error return 422 “Specimen with such id <id> already exists“

8. Managing organization

...

Validate there is one of the required $.collection.collected_[x] field is set: collected_date_time or collected_period.

  • Return 422 ('Only At least one of the parameters must be present') in case more then one submitted

...

  • Check that $.collection.duration.system is eHealth/ucum/units dictionary, required

    • in case of error - return 422 ('value is not allowed in enum')

  • Check that $.collection.duration.code comply with $.collection.duration.system and one of SPECIMEN_DURATION_ALLOWED_CODES, required

    • in case of error - return 422 ('value is not allowed in enum')

  • Check $.collection.duration.value is not empty, is float, greater than zero

    • in case of error - return corresponding 422 ('must be greater than 0')

...

  1. Save signed content to media storage, in the bucket pointed in MEDIA_STORAGE_SPECIMEN_BUCKET chart parameter

  2. Generate accession_identifier number:

    1. Generate requisition number (see Human readable requisition number) based on the specimen id. Note: requisition number should be unique for each specimen and should not match with number of another entities. So, if generated number match to existing in DB - it should be regenerated

    2. Encode and set it into $.accession_identifier attribute

  3. Set display_value for:

    1. registered_by attribute

    2. managing_organization attribute

    3. collection.collector attribute, only if type is employee (not patient)

  4. Set context, received_time, status_reason, collection.procedure to null

  5. Set subject with hashed mpi identifier

  6. Save data to specimens collection in DB according to https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17629118845 RC.__Specimen data model_EN

  7. Save link from media storage to the $.signed_content_links field in specimens collection

  8. Create job and return it’s id.

...

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

HTTP status code

Message

What caused the error

400

Invalid signed content

401

Invalid access token

403

Access denied. Party is deceased

403

Access denied. Party is not verified

403

Your scope does not allow to access this resource. Missing allowances: specimen:write

404

Person is not found

409

client_id refers to legal entity that is not active

409

Patient is not verified

409

Person is not active

422

Collected quantity must not be exceeded by the specimen quantity distributed among the containers

422

Date must be greater than <current date - SPECIMEN_MAX_DAYS_PASSED>

422

Does not match the code of the collected quantity

422

Does not match the signer drfo

422

Employee doesn't belong to your legal entity

422

Employee with such ID is not found

422

End date must be greater than or equal the start date

422

End date must be in past

422

Identifier already exists in the specimen

422

In case collector is patient it must be the current patient

422

Invalid employee status

422

Invalid signed content

422

Invalid specimen status

422

Legal entity not found

422

Managing_organization does not correspond to user's legal_entity

422

must be greater than 0

422

Must be in past

422

Only one of the parameters must be present

422

Person is not active

422

Person is not found

422

schema validation error

422

Service request expiration date must be greater than or equal to current date

422

Service request is not active or in progress

422

Service request must be related to the same legal entity

422

Service request not found

422

Specimen not found

422

Specimen with id <id> already exists

422

Start date must be in past

422

User is not allowed to register a specimen for the employee

422

value is not allowed in enum

422

value must be greater than 0