Table of Contents |
---|
Purpose
This WS allows to create Specimen entity by employees without submitting Encounter Data Package.
Specification
Link | |
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)
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
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, requiredin 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')
...
Save signed content to media storage, in the bucket pointed in MEDIA_STORAGE_SPECIMEN_BUCKET chart parameter
Generate accession_identifier number:
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
Encode and set it into $.accession_identifier attribute
Set display_value for:
registered_by attribute
managing_organization attribute
collection.collector attribute, only if type is employee (not patient)
Set context, received_time, status_reason, collection.procedure to null
Set subject with hashed mpi identifier
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
Save link from media storage to the $.signed_content_links field in specimens collection
Create job and return it’s id.
...
Expand | ||
---|---|---|
| ||
|
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 |
Patient is not verified
client_id refers to legal entity that is not active |
409 | Patient is not verified | |
409 | Person is not active |
422
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
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
Does not match the signer drfo
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
Employee doesn't belong to your legal entity
422
Employee with such ID is not found
422
422 | End date must be in past | |
422 | Identifier already exists in the specimen |
422
Legal entity with such id is not found
422 | In case collector is patient it must be the current patient | |
422 | Invalid employee status | |
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
End date must be in past
422
Invalid employee status
422
Invalid specimen status
422
Must be in past
422
not allowed in enum
422
value is not allowed in enum
422
Patient is not active
422
Patient not found
422
Specimen not found
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 |
422
schema validation error
422
Managing_organization does not correspond to user's legal_entity
422
Specimen with id <id> already exists
422
Only one of the parameters must be present
422
is not allowed in enum | ||
422 | value must be greater than 0 |