Specification
Apiary | |
JSON Schema request | new_medication_schema.json |
JSON Schema response | SPECS |
Purpose
This WS is designed to create new medication (post).
Input parameters
- name
- manufacturer (object)
- code_atc
- form
- container info
- package_qty
- package_min_qty
- certificate
- expired_certificate_at
- ingredients (array)
- id
- dosage info
- is_active_substance
Authorize
- Verify the validity of access token
- Check user scope (scope = 'medication:write') in order to perform this action
- In case error - generate 401 response
Validate request (JSON schema)
- Validate request using JSON schemas (new_medication_type_medication_schema.json):
- Return 422 with list of validation errors in case validation fails (422 EView)
Validate FK
Purpose validation: Check on existing Substance/Innm in ingredients
Check exist `Medications` by $.ingredients[].id.
if invalid - return 422 error (message: "INNM in ingredients is not found!")
Validate status & type ingredients
Purpose validation: Id's in ingredients must be active
Invoke GetInnmByID($.ingredients[].id). Check exist any innm.is_active=FALSE.
if exists - return 422 error (message: "INNM in ingredients must be active!")
Purpose validation: Ingredients for TYPE=MEDICATION must be TYPE=INNM
Check exists Ingredients with type=MEDICATION.
if exists - return 422 error (message: "Only INNMs can be ingredients!")
Validate status ingredients.is_active_substance
Purpose validation: in ingredients only one item must be is active substance (TRUE)
Calc count() where is_active_substance=TRUE in ingredients. Check count()=1.
if invalid - return 422 error (message: "One of ingredients must be is active substance!")
Validate Equal Dosage & Container
Purpose validation: Denumerator unit from Ingredients.dosage must be equal Numerator unit from Container. See examples: Medications model
Check exist any ($.ingredients[].dosage.denumerator_unit != $.container.numerator_unit).
if invalid - return 422 error (message: "Denumerator unit from Dosage ingredients must be equal Numerator unit from Container medication!")
Validate multiplicity
Purpose validation: Package_qty for container_dosage must have multiplicity package_min_qty. Result (Mod or % operator) must = 0 .
- MEDICATION - Vaildate multiplicity (Mod == 0) $.package_qty Mod $.package_min_qty == 0
- if result NOT 0 - return 409 eror (message: "Only a multiplicity package quantity for the minimum package quantity medication!")
Validate atc code
- Check that all elements in array of atc_code are different
- in case of error return 422 error (message `atc codes are duplicated`)
Create new Medication
- Create new record in Medications
- Fill data
Destination | Source |
---|---|
id | |
name | $.name |
TYPE | MEDICATION |
is_active | TRUE |
form | $.form |
ingredients | $.ingredients |
container | $.container |
package_qty | $.package_qty |
package_min_qty | $.package_min_qty |
code_atc | $.code_atc |
manufacturer | $.manufacturer |
certificate | $.certificate |
expired_certificate_at | $.expired_certificate_at |
inserted_at | :timestamp |
inserted_by | user_id |
updated_at | :timestamp |
updated_by | user_id |