Ціль
Сервіс розроблено для закантаження нового медичного реєстру. Процес використовує сервіси jabba. По факту виконання запиту, створюється job, на основі якої створюються задачі. Кожна задача це один запит на створення сутності з реєстру.
Основні положення
Адміністратор НСЗУ завантажує файл з полями відповідно до структури.
Файл повинен бути в форматі .csv.
Специфікація
Авторизація
Перевірити валідність токену доступу
в разі помилки - повернути 401 (“Invalid access token”) в разі невалідних валідацій
Перевірити, що токен дійсний
в разі помилки - повернути 401 (“Invalid access token”)
Перевірити скоупи користувача (scope = 'medication_registry:write') на можливість виконання даної дії
в разі помилки - повернути 403 (“Your scope does not allow to access this resource. Missing allowances: medication_registry:write”)
Перевірити запит
Перевірити запит використовуючи схему
Повернути 422 з переліком помилок валідації в разі їх неуспішності.
Перевірити, що registerType = ‘FULL_MEDICATIONS_REGISTRY'
Повернути 422 з переліком помилок валідації в разі їх неуспішності.
Перевірити, що reasonDescription заповнено
Повернути 422 з переліком помилок валідації в разі їх неуспішності.
Перевірити вхідний файл у відповідності до структури файлу
Повернути 422 з переліком помилок валідації в разі їх неуспішності.
Приклад файлу:
*Примітка. Поля innms.sctid
, innms.name
, innms.name_original
, innm_dosage_ingredients.is_primary
, innm_dosage_ingredients.dosage.numerator_value
, innm_dosage_ingredients.dosage.numerator_unit
, innm_dosage_ingredients.dosage.denumerator_value
, innm_dosage_ingredients.dosage.denumerator_unit
, brand.code_atc
can exist as an array. Values повинні розділятися | (відповідно).
Сервісна логіка
Перевірити вхідні дані у відповідності до схеми
Створити job з типом
create_medication_registry
Для кожного рядка вхідного файлу створити окрему задачу по job
Когда задача повинна перевіряти існуючі та створені нові сутності медичного реєстру:
Отримати лікарські засоби з
type = INNM_DOSAGE
,is_active = TRUE
,innm_dosage.name
,innm_dosage.form
таinnm_dosage.ingredients.dosage
,innm_dosage.ingredients.is_primary
):в разі, якщо знайдено отримати пов'язані ЛЗ з
type = BRAND
,is_active = TRUE
,brand.name
,brand.form
,brand.package_qty
,brand.package_min_qty
,brand.certificate
,brand.container
таbrand.ingredients.dosage
,brand.ingredients.is_primary
):в разі, якщо знайдено отримати пов'язаних учасників програми по medication_id та
program_medications.medical_program_id
та додати медикаменти бренд у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#program_medications якщо не знайдено учасника програми
в разі, якщо innm_dosage не знайдено додати їх у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#medications-(type-=-INNM_DOSAGE) та їх інгрідієнтів https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#ingredients-(for-INNM_DOSAGE), https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#innms (пропустити створення innms в разі, якщо існують).
в разі, якщо brand не знайдено додати їх у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#medications-(type-=-BRAND) та їх інгрідієнтів https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#ingredients-(for-BRAND).
додати учасника програми з брендом у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/17153654796/RC_Create+full+medication+registry_EN#program_medications
в разі, якщо знайдено brand та учасника програми - повернути статус задачі
FAILED
з помилкою ('Such medication already exist')
Повернути ідентифікатор job зі статусом.
innms
Атрибут | Джерело та логіка | Типи та обмеження | Н/О |
---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О |
sctid | innms.sctid, from request | varchar(255) | Н |
name | innms.name, from request | varchar(255) | О |
name_original | innms.name_original, from request | varchar(255) | О |
is_active | true, auto | bool | О |
inserted_by | user_id, from token | uuid | О |
updated_by | user_id, from token | uuid | О |
inserted_at | now(), auto | timestamp | О |
updated_at | now(), auto | timestamp | О |
medications (type = INNM_DOSAGE)
Атрибут | Джерело та логіка | Типи та обмеження | Н/О |
---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О |
name | innm_dosage.name | varchar(255) | О |
type | auto (INNM_DOSAGE) | varchar(255) | О |
is_active | true, auto | bool | О |
form | innm_dosage.form | varchar(255) Dictionary MEDICATION_FORM | О |
inserted_by | user_id, from token | uuid | О |
updated_by | user_id, from token | uuid | О |
inserted_at | now(), auto | timestamp | О |
updated_at | now(), auto | timestamp | О |
daily_dosage | innm_dosage.daily_dosage | float | Н |
max_daily_dosage | innm_dosage.max_daily_dosage | float | Н |
mr_blank_type | innm_dosage.mr_blank_type | varchar(64) Dictionary MR_BLANK_TYPES | О |
dosage_form_is_dosed | innm_dosage.dosage_is_dosed | bool | О |
ingredients (for INNM_DOSAGE)
Атрибут | Джерело та логіка | Типи та обмеження | Н/О | ||
---|---|---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О | ||
dosage | numerator_value | innm_dosage_ingredients.dosage.numerator_value, from request | jsonb | float8 | О |
numerator_unit | innm_dosage_ingredients.dosage.numerator_unit, from request | varchar(255) Dictionary MEDICATION_UNIT | О | ||
denumerator_value | innm_dosage_ingredients.dosage.denumerator_value, from request | float8 | О | ||
denumerator_unit | innm_dosage_ingredients.dosage.denumerator_unit, from request | varchar(255) Dictionary MEDICATION_UNIT | О | ||
is_primary | innm_dosage_ingredients.is_primary, from request | bool At least one of the ingredients must be is_primary = true | О | ||
innm_child_id | uuid_generate_v4(), auto | uuid innm_id | О | ||
parent_id | uuid_generate_v4(), auto | uuid medication_id (type = INNM_DOSAGE) | О | ||
inserted_at | now(), auto | timestamp | О | ||
updated_at | now(), auto | timestamp | О |
medications (type = BRAND)
Атрибут | Джерело та логіка | Типи та обмеження | Н/О | ||
---|---|---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О | ||
name | varchar(255) | О | |||
type | auto (BRAND) | varchar(255) | О | ||
manufacturer | name | jsonb | varchar(255) | О | |
country | brand.manufacturer.country | varchar(255) Dictionary COUNTRY | О | ||
code_atc | brand.code_atc | jsonb | varchar(255) | О | |
is_active | true, auto | bool | О | ||
form | brand.form | varchar(255) Dictionary MEDICATION_FORM | О | ||
container | numerator_value | brand.container.numerator_value | jsonb | float8 | О |
numerator_unit | brand.container.numerator_unit | varchar(255) Dictionary MEDICATION_UNIT | О | ||
denumerator_value | brand.container.denumerator_value | float8 | О | ||
denumerator_unit | brand.container.denumerator_unit | varchar(255) Dictionary MEDICATION_UNIT | О | ||
package_qty | brand.package_qty | float | Н | ||
package_min_qty | brand.package_min_qty | float | Н | ||
certificate | brand.certificate | varchar(255) | Н | ||
certificate_expired_at | brand.certificate_expired_at | date | Н | ||
inserted_by | user_id, from token | uuid | О | ||
updated_by | user_id, from token | uuid | О | ||
inserted_at | now(), auto | timestamp | О | ||
updated_at | now(), auto | timestamp | О | ||
form_pharm | brand.form_pharm | varchar(255) | Н | ||
max_request_dosage | brand.max_request_dosage | int | Н |
ingredients (for BRAND)
Атрибут | Джерело та логіка | Типи та обмеження | Н/О | ||
---|---|---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О | ||
is_primary | brand_ingredients.is_primary, from request | bool Only one ingredient should be is_primary = true | О | ||
dosage | numerator_value | brand_ingredients.dosage.numerator_value, from request | jsonb | float8 | О |
numerator_unit | brand_ingredients.dosage.numerator_unit, from request | varchar(255) Dictionary MEDICATION_UNIT | О | ||
denumerator_value | brand_ingredients.dosage.denumerator_value, from request | float8 | О | ||
denumerator_unit | brand_ingredients.dosage.denumerator_unit, from request | varchar(255) Dictionary MEDICATION_UNIT | О | ||
medication_child_id | uuid_generate_v4(), auto | uuid medication (type = INNM_DOSAGE) | О | ||
parent_id | uuid_generate_v4(), auto | uuid medication_id (type = BRAND) | О | ||
inserted_at | now(), auto | timestamp | О | ||
updated_at | now(), auto | timestamp | О |
program_medications
Атрибут | Джерело та логіка | Типи та обмеження | Н/О | |
---|---|---|---|---|
id | uuid_generate_v4(), auto | uuid | О | |
reimbursement | type | program_medications.reimbursement.type | varchar(64) Dictionary REIMBURSEMENT_TYPE | О |
reimbursement_amount | program_medications.reimbursement.reimbursement_amount | float | О | |
percentage_discount | program_medications.reimbursement.percentage_discount | float | О | |
is_active | true, auto | bool | О | |
medication_request_allowed | true, auto | bool | О | |
care_plan_activity_allowed | true, auto | bool | О | |
inserted_by | user_id, from token | uuid | О | |
updated_by | user_id, from token | uuid | О | |
medication_id | medication_id (type = BRAND), auto | uuid | О | |
medical_program_id | program_medications.medical_program_id | uuid | О | |
inserted_at | now(), auto | timestamp | О | |
updated_at | now(), auto | timestamp | О | |
wholesale_price | program_medications.wholesale_price | float8 | Н | |
consumer_price | program_medications.consumer_price | float8 | Н | |
reimbursement_daily_dosage | program_medications.reimbursement_daily_dosage | float8 | Н | |
estimated_payment_amount | program_medications.estimated_payment_amount | float8 | Н | |
start_date | program_medications.start_date | date | Н | |
end_date | program_medications.end_date | date | Н | |
registry_number | program_medications.registry_number | varchar(255) | Н |
Приклад зі значеннями: