...
Забрати employee_id з запиту
Перевірити співробітника
На існування
в разі помилки повернути код 422 з повідомленням ("Employee not found")
Перевірити, що $.employees.status == APPROVED
в разі помилки повернути код 409 з повідомленням ("Employee is not active")
Перевірити, що $.employees.legal_entity_id == client_id from token
в разі помилки повернути код 422 з повідомленням ("Employee does not belong to legal entity from token")
Перевірити, що $.employees.employee_type == <employee_type>
якщо medical_program_id є в запиті перевірити medical_program_settings.skip_employee_validation == false (або відсутня)
перевірити <employee_type>
отримати $.medical_programs.medical_program_setting по medical_program_id з запиту
перевірити, що employee_type наявна в параметрі employee_types_for_create_medication_request
в разі помилки повернути код 422 з повідомленням ("Employee type can't create medication request with medical program from request")
якщо employee_type = DOCTOR
отримати $.declarations by employee_id, person_id, status=ACTIVE або перевірити параметр MEDICATION_REQUEST_DECLARATION_VERIFY (який дозволяє створити запит на рецепт для будь-якого лікаря в LE де персона має декларацію)
якщо не знайдено - повернути код 422 (повідомлення: "Employee must have an active declaration with the patient to create medication request!")
якщо employee_type = SPECIALIST
отримати $.employees.speciality.speciality(speciality_officio == true)
перевірити, що вказана спеціальність in$.medical_programs.medical_program_setting.speciality_types_to_create_medication_request variableallowed variable
в разі помилки повернути код 422 з повідомленням ("Employee's specialty doesn't allow create medication request with medical program from request")
якщо employee_type = <XXX>
в разі помилки повернути код 422 з повідомленням ("Employee type can't create medication request with medical program from request")
якщо medical_program_settings.skip_employee_validation == true або відсутня medical_program_id в запиті, будь-який користувач, який має скоуп може створити запит на рецепт
...
Перевірити, що created_at, started_at, ended_at в форматі дати
в разі помилки повернути код 422 в повідомленні ("expected \"%{actual}\" to be a valid ISO 8601 date")
Перевірити ended_at >= started_at
якщо помилка - повернути код 422 (повідомлення: "Ended date must be >= Started date!")
Перевірити started_at` >= created_at
якщо помилка - повернути код 422 (повідомлення: "Started date must be >= Created date!")
Перевірити started_at >= current_date()
якщо помилка - повернути код 422 (повідомлення: "Started date must be >= current date!")
Перевірити created_at >= current_date() - mrr_delay_input
якщо помилка - повернути код 422 (повідомлення: "Create date must be = current date!")
Перевірити started_at у відповідності до частоти отримання препаратів
отримати $.medical_programs.medical_program_setting по medical_program_id з запиту
перевірити параметр skip_mnn_in_treatment_period
в разі skip_mnn_in_treatment_period == FALSE (or absent)
перевірити запит на відповідність: /wiki/spaces/MRIN/pages/2041217051
в разі skip_mnn_in_treatment_period == TRUE
пропустити перевірку періодичності отримання препаратів
Перевірити created_at у відповідності до періодичності отримання препаратів
отримати $.medical_programs.medical_program_setting по medical_program_id з запиту
перевірити параметр skip_mnn_in_treatment_period
в разі skip_mnn_in_treatment_period == FALSE (або відсутня)
перевірити запит у відповідності до логіки: /wiki/spaces/MRIN/pages/2041217051
в разі skip_mnn_in_treatment_period == TRUE
пропустити перевірку періодичності отримання препаратів
Перевірити тривалість періоду (ended_at - started_at):
Якщо медична программа була вказана:
перевірити запит на відповідність логіки: PreQualify Medication request: 7. Validate period
в іншому випадку:
Перевірити, що період рецепту меньше або дорівнює MEDICATION_REQUEST_MAX_PERIOD_DAY параментру з чартів
в разі помилки - повернути код 409 “Period length exceeds default maximum value“
Перевірити препарат
Ціль валідації: Перевірити FK, status `is_active`=TRUE, type = INNM_DOSAGE
...
Перевірити План лікування:
Від повинен належати тій же персоні, що і набір в MRR
в разі помилки повернути код 422 з повідомленням ("Care plan not found")
Від повинен бути в статусі active
Перевірити вказану активність:
Вона відповідає Плану лікування.
в разі помилки повернути код 422 з повідомленням ("Activity not found")
Вона має activity.detail.kind=medication_request; activity.detail.product_reference=medication_id.
в разі помилки повернути код 422 з повідомленням ("Invalid activity kind")
Вона має статус scheduled, in_progress
Якщо вона має quantity порахувати remaining quantity:
вибрати всі MRR в статусі NEW які створені на основі даної активності
вибрати всі MR в статусах ACTIVE, COMPLETED які створені на основі даної активності
порахувати зарезервовану на сьогодні кількість, як суму medication_qty у профільтрованому MRR та MR списку, включаючи medication_qty з поточного MRR
порахувати вказану кількість шляхом віднімання зарезервованої кількості з кількості активностей
Перевірити remaining quantity більше або дорівнює 0
в разі помилки повернути код 409 "The total amount of the prescribed medication quantity exceeds quantity in care plan activity"
перевірити, що medical_program_id дорівнює $.activity[].program
в разі помилки повернути код 422 з повідомленням ("Medical program from activity should be equal to medical program from request")
Перевірити started_at/ended_at для запиту рецепту:
Якщо активність плану лікування має detail.scheduled_timing.repeat.bounds_period - перевірити started_at/ended_at включаючи bounds_period
Якщо план активності має detail.scheduled_period - перевірити started_at/ended_at включаючи scheduled_period
в іншому випадку - перевірити started_at/ended_at включаючи care_plan.period
у випадку якщо started_at/ended_at не в межах care_plan.period повернути код 422 з повідомленням ("Invalid care plan period")
Перевірити медичну програму
Перевірити, що medical_program_id - medical_program_id існує
в разі помилки повернути код 422 ("Medical program not found")
Перевірити контекст на наявність взаємодії в запиті
в разі помилки повернути 422 ("Context with encounter is required as medical program is present in the request")
Перевірити параметри medical_programs.medical_program_setting
перевірити, що care_plan_required == true тоді запит повинен містити based_on на план лікування і активність, що містять ту ж програму
в разі помилки повернути код 422 з повідомленням ("Care plan and activity with the same medical program should be present in request")
Якщо вказано параметр CONDITIONS_ICD10_AM_ALLOWED, то:
Перевірити що первинні діагнози зі взаємодії в контексті має код з довідника eHealth/ICD10_AM/condition_codes
Перевірити, що код діагнозу з CONDITIONS_ICD10_AM_ALLOWED
в разі помилки - повернути 422 “Encounter in context has no primary diagnosis allowed for the medical program“
Якщо вказано параметр CONDITIONS_ICPC2_ALLOWED, то:
Перевірити що первинні діагнози зі взаємодії в контексті має код з довідника eHealth/ICPC2/condition_codes
Перевірити, що код діагнозу з CONDITIONS_ICPC2_ALLOWED
в разі помилки - повернути 422 “Encounter in context has no primary diagnosis allowed for the medical program“
Перевірити множинність та запит на рецепт дозволений учасникам
...
Згенерувати номер для рецепту (See specs)
Code Block Structure number XXXX-1234-5678-9012-345-C , where: - XXXX - series: numbers + only some letters (A, E, H, K, M, P, T, X) - 1234-5678-9012-345 - randomly generated numbers - C - checksum: Should be calculated using the Damn algorithm or Verhoeff algorithm After new Request number was generated we should check that it is unique in the DB (entity: medication_request + medication_request_request
Згенерувати verification_code для MPI.person_authentication_methods == OTP або OFFLINE
Code Block Structure code 1234, where: - 1234 - randomly generated numbers
...
Згенерувати структуру даних відповіді для веб-сервісу
Встановити структуру для IL.medication_request_requests
якщо відповідь VALID доповнити відповідь urgent_data:
отримати authetification_method по person_id та повернути зашифрований номер (в будь-якому випадку)
|