Purpose
This WS allows to create a unique requisition number that can be later used as a Composition title in Create Composition method. Generated requisition number is stored in ME database until it is expired.
Specification
Authorization
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 = 'composition:create')
return 403 (“Your scope does not allow to access this resource. Missing allowances: composition:create”) in case of invalid scope
If BLOCK_UNVERIFIED_PARTY_USERS is true, then check party's data match following condition: verification_status != NOT_VERIFIED or (verification_status = NOT_VERIFIED and updated_at > current_date - UNVERIFIED_PARTY_PERIOD_DAYS_ALLOWED):
in case not match - return 403 ("Access denied. Party is not verified")
If BLOCK_DECEASED_PARTY_USERS is true, check that party is not deceased (party_verification record does not equal to: dracs_death_verification_status = VERIFIED and dracs_death_verification_reason = MANUAL_CONFIRMED):
in case of error - return 403 ("Access denied. Party is deceased")
Validations
Validate composition_type is
COMPOSITION_TYPES
dictionaryin case of error - return 422 ('value is not allowed in enum')
Check that сomposition_type is NOT from COMPOSITION_TYPE_BLACK_LIST
Return 422 ("сomposition_type is not allowed by configuration") in case of error
Service logic
Generate requisition number using Human readable requisition number algorithm based on patient_id
Use prefix from configuration instead of first 4 symbols: {{composition_type}}
_TITLE_PREFIX
(ex.ADOPTION_TITLE_PREFIX
)Check that there is no Composition in ME.Compositions collection with such title
if it already exists generate new requisition as it is described in https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/583402257/Human+readable+requisition+number#Solution section
Check that there is no record in ME.requisition_number with such requisition
if it already exists generate new requisition as it is described in https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/583402257/Human+readable+requisition+number#Solution section
Save generated title in ME.requisition_number
requisition_number = generated requisition
patient_id = patient id from the request
expiration_date = current datetime + COMPOSITION_TITLE_EXPIRATION_PERIOD (config parameter in ehealth.charts)
composition_type = composition_type from query parameters