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

Skip to end of metadata
Go to start of metadata

You are viewing an old version of this content. View the current version.

Compare with Current View Version History

Version 1 Next »

Авторизація

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

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

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

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

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

 Click here to expand...
 {
  "$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)

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

Декларація 

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

start_date = Current_date()

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

if (person.age < prm.global_parametrs.adult_age)&(doctor.speciality = PEDIATRICIAN) {
  end_date = min(birth_date + prm.global_parametrs.adult_age - 1d, start_date + declaration_term - 1d);
} else {
  end_date = start_date + declaration_term - 1d;
}


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

Додати запис до 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

curl -X POST \
  http://localhost:4000/verifications \
  -H 'content-type: application/json' \
  -d '{
  "phone_number": "+380936235985"
}'

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

  • Використати 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

  • No labels