Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Table of Contents

Авторизація

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

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

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

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

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

Expand
Code Block
 {
  "$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

...

Отримати 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

...

Якщо запит на персону не містить дане поле, то вибрати той метод, який повертається з 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

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

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

Code Block
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 для того, щоб виключити можливість дублювання запитів:

...

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

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

Декларація 

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

Code Block
start_date = Current_date()

...

Code Block
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

...

Кожне посилання генерується для документу на одну сторінку в форматі 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 

...

Code Block
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 до друкованої форми

...