ЕСОЗ - публічна документація

RC_Create declaration request v3 (modified - UA)

Авторизація

  1. Перевірити валідність токену доступу

    1. в разі помилки повернути 401 

  2. Перевірити скоупи користувача (declaration_request:write) на можливість виконання даної дії

    1. в разі помилки повернути 403 - заборонено

Перевірити запит з використанням схеми JSON

{ "$schema": "http://json-schema.org/declaration_request_new/schema#", "type": "object", "properties": { "person_id": { "type": "string" }, "employee_id": { "type": "string" }, "division_id": { "type": "string" }, "authorize_with": { "type": "string" }, "parent_declaration_id": { "type": "string" } }, "required": [ "person_id", "employee_id", "division_id" ] }

 

Перевірити тип юридичної особи

Перевірити юридичну особу по токену:  legal_entities.type повинен відповідати DECLARATION_REQUEST_LEGAL_ENTITY_TYPES("MSP,PRIMARY_CARE,MSP_PHARMACY") та legal_entities.status =='active' 

Перевірити лікаря

 

Отримати дані співробітника

Викликати Get employee details

Перевірити відповідь $.data.employee_type == DOCTOR

Отримати doctor_id та division_id з токену

Перевірити персону 

  • перевірити person_id UUID

    • в разі помилки повернути 422

  • здійснити пошук персони по person_id in MPI 

    • в разі помилки повернути 404, "Such person doesn't exist"

  • перевірити person.auth_method != NA

    • в разі помилки повернути 422, "Person must have authentication method"

  • перевірити person.status = ‘active’ та is_active =true

    • в разі помилки повернути 404, "Such person doesn't exist"

Перевірити статус верифікації персони

  • перевірити, що verification_status верифікації персони не дорівнює NOT_VERIFIED.

    • in case of error return 409, "Patient is not verified"

Перевірити authorize_with

Персона може передати id його auth_method, який потрібен для підтвердження при запиті на створення декларації. Потрібний метод автентифікації може бути отриманий при виклику Get person's auth methods

  1. перевірити, що auth_method.id це UUID

    1. в разі помилки повернути 422

  2. знайти метод автентифікації в MPI.person_authentication_method

    1. в разі помилки повернути 422, "such authentication method doesn't exist"

  3. знайти метод автентифікації даної персони, де  MPI.person_authentication_method.person_id = $.person.id

    1. в разі помилки повернути 422, "such authentication method does not belong to this person"

  4. Перевірити, що auth_method.type = NA

    1. в разі помилки повернути 422, "Сannot be confirmed by a method with type= NA. Use a different method."

  5. Перевірити, що даний метод активний ( authentication_method.ended_at > now() and is_active = true)

Дане поле опційне та встановити для il.declaration_reques.authentication_method_current.

Якщо запит на персону не містить дане поле, то вибрати той метод, який повертається з mpi як person's default method

Перевірити первинну декларацію

  • перевірити, що первинна декларація існує та в статусі ‘active’

    • в разі помилки - повернути 404 (‘Active parent declaration was not found’)

  • перевірити, що первинна декларація належить вказаній персоні (person_id первинної декларації та person_id з запиту однакові)

    • в разі помилки - повернути 422 (‘Parent declaration does not belong to this person’)

  • перевірити, що юридична особа первинної декларації та поточна юридична особа знаходяться в процесі реорганізації Приєднання, Злиття, Виділ, Поділ (запит: select * from related_legal_entities where is_active=true and merged_from_id=parent_declaration_id.legal_entity_id and merged_to_id=employee_id.legal_entity_id and type in (‘ACCESSION’, ‘MERGING’, ‘DIVIDING’, ‘SEPARATING’); повертає хоча б один запис)

    • в разі помилки - повернути 422 (‘Legal entities of parent declaration and current are not in reorganization process’)    

  • перевірити, що party_id співробітника з первинної декларації та party_id поточного співробітника однакові

    • в разі помилки - повернути 422 (‘Employee of parent declaration and current employee are not the same’)

Дане поле опційне та встановлюється для il.declaration_reques.parent_declaration_id.

Якщо parent_declaration_id передано в запиті, перевірка authorize_with та обробка не виконуються, створений запит на декларацію буде оброблено без пацієнта.

Отримати глобальні параметри

Викликати глобальні параметри для отримання наступних сутностей:

  • ADULT_AGE

  • DECLARATION_TERM

  • no_self_auth_ag

Розрахувати вік пацієнта

Розрахувати вік пацієнта

age = MONTHS_BETWEEN (now(), $.mpi.person.birth_date) / 12

Перевірити, що спеціальність лікаря відповідає вимогам стосовно віку пацієнта

  1. Отримати speciality_officio лікаря (об'єкт спеціальність, де speciality_officio == true)

  2. Перевірити вимоги у відповідності до глобальних параметрів

Спеціальність посадової особи

Вік

Спеціальність посадової особи

Вік

FAMILY DOCTOR

Обмеження по віку відсутні

THERAPIST

Більше або дорівнює $.data.adult_age

PEDIATRICIAN

Меньше ніж $.data.adult_age

Перевірити довірену особу

Якщо вік персони < prm.global_parameters.no_self_auth_age то перевірити наявність confidant_person

  • в разі помилки повернути 422 - повідомлення "Confidant person is mandatory for children"

Обробка

Пошук запитів на декларацію, що очікують на розгляд

Здійснити пошук декларацій для IL_DB.declaration_requests для того, щоб виключити можливість дублювання запитів:

where IL.Declaration_request.mpi_id = :($.person.id) and status in ('NEW' or 'APPROVED)
Відмінити запити на декларацію.

Змінити статус всі ризикові (фрод) декларації:

SET   IL_DB.declaration_requests.status = 'CANCELED' WHERE IL_DB.declaration_requests.id IN (:LIST)

Розрахувати дату закінчення/початку декларацій

Декларація 

Дата початку:

Дата закінчення:


Зберегти запит на декларацію

Додати запис до IL.declaration_request в статусі 'NEW'

Згенерувати посилання(URL) для завантаження

Якщо auth_method_requests.auth_method_current = OFFLINE

  • URL для person.documents

В залежності від сховища даних згенерувати перелік  посилань signed для завантаення скан копій документів.

Підписані URLs будуть дійсні тільки деякий період (конфігуруємий `SECRETS_TTL`). Якщо строк дії закінчиться - новий запит на декларацію повинен бути створений.

Кожне посилання генерується для документу на одну сторінку в форматі jpeg. Документ повинен бути не більше ніж 10MB.

Встановити auth_method_current

Отримати parent_declaration_id з il.declaration_requests.parent_declaration_id.

Якщо parent_declaration_id не вказано, встановити за-замовчуванням метод автентифікації персони на IL.auth_method_request.auth_method_current - використовувати function в mpi, що повертає метод автентифікації за-замовчуванням.

Якщо auth_method_current = NA - повернути помилку "person authentication method is undefined".

Якщо parent_declaration_id вказано, встановити auth_method_current = NA (запит опрацьовується без участі пацієнта).

Згенерувати код верифікації

Якщо auth_method_requests.auth_method_current = OTP 

Викликати Initialize OTP для генерації одноразового паролю та направити його для випадків, коли auth_method_requests.auth_method_current = OTP.

Приклад cURL

Згенерувати читабельний номер декларації

  • Використати algorithm для генерації declaration_number

  • Номер декларації мовинен містити 4 серійні символи та 8 числові символи та виглядати як XXXX-12H4-245D

  • Додати поле до ops.declarations та il.declaration_requests - declaration_number 

  • Додати declaration_number до друкованої форми

Перевірити на унікальність читабельного номеру декларації

  • згенерувати declaration_number

  • здійснити пошук declaration_number в declaration_requests.declaration_number

  • якщо знайдено = перейти до 'generate declaration_number'

  • в іншому випадку зберегти declaration_number до declaration_request

ЕСОЗ - публічна документація