Versions Compared

Key

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

Специфікація

...

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

    1. в разі помилки 401 ('Invalid access token')

  2. Перевірити набір даних contract_request:create перед виконанням

    діїв разі помилки 401 у відповіді ('Invalid access token'

    дії

    1. в разі помилки 401 у відповіді ('Invalid access token')

  3. Якщо BLOCK_UNVERIFIED_PARTY_USERS є true, тоді перевірити дані співробітника на свіпадіння наступним умовам: verification_status != NOT_VERIFIED або (verification_status = NOT_VERIFIED та updated_at <= current_date - UNVERIFIED_PARTY_PERIOD_DAYS_ALLOWED):

    1. в разі неспівпадіння - повернути 403 ("Access denied. Party is not verified")

Цифровий підпис

Розшифруйте вміст, зашифрований електронним цифровим підписом. Використовуйте цифровий підпис WS. Метод перевіряє цифровий підпис і повертає результат.

...

  1. Валідація contract_type

    1. юридична особа з типом в (MSP,PRIMARY_CARE) може створити тілько договір капітації, юридична особа з типом в (PHARMACY) може створити тілько договір реімбурсації

      1. в разі помилки 409 - "Contract type "{contract_type}" is not allowed for legal_entity with type "{legal_entity_type}" "

  2. Валідація previous_request_id 

    1. вибрати id from contract_request де id=$.previous_request_id

      1. якщо дані не знайдено згенерувати помилку 422 ("previous_request does not exist")

    2. Перевірити previous_request status не рівно ('SIGNED')

      1. в разі помилки згенерувати код 422 ('In case contract exists new contract request should be created')

    3. Перевір contractor_legal_entity_id попереднього запиту рівний до contractor_legal_entity_id поточного запиту

      1. в разі помилки згенерувати код 422 ('Previous request doesn't belong to legal entity')

    4. Для договоду реімбурсації: Перевірити що id_form з $.previous_request_id рівний до id_form для запиту

      1. в разі помилки згенерувати код 422 ('Id_form from previous request is not equal to id_form from request')

  3. Валідація contractor_divisions

    1. Превірити, що підрозділ належить до legal_entity та divisions.status='active'

      1. в разі помилки згенерувати код 422  переглянути $divisions ('Division must be active and within current legal_entity')

    2. Перевірити, що підрозділ в масиві зустрічається тілько один раз

      1. в разі помилки згенерувати код 422  переглянути $divisions ('Division duplicates')

  4. Валідація start_date

    1. перевірити формат start_date (^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$)

      1. в разі помилки згенерувати код 422 error $start_date ('"expected \"<start_date>" to be a valid ISO 8601 date"')

    2. рік в start_date повинен співпадати з поточним або наступним роком (current+1).

      1. в разі помилки згенерувати код 422 error $start_date ('Start date must be within this or next year')

  5. Валідація end_date (Примітка. Дані валідації дійсні для випадків, коли contract_number не проходить перевірки в запиті. Якщо contract_number перевірено, проводяться валідації з 10.п)

    1. перевірити формат end_date (^(\\d{4}(?!\\d{2}\\b))((-?)((0[1-9]|1[0-2])(\\3([12]\\d|0[1-9]|3[01]))?|W([0-4]\\d|5[0-2])(-?[1-7])?|(00[1-9]|0[1-9]\\d|[12]\\d{2}|3([0-5]\\d|6[1-6])))?)?$)

      1. в разі помилки згенерувати код 422 error $end_date ('"expected \"<end_date>" to be a valid ISO 8601 date"')

    2. рік повинен $end_date може бути наступним роком після 'start_date' якщо повний період договору не перевищує 1 року.

    3. $end_date повинна бути більше або рівнятися $start_date

      1. в разі помилки згенерувати код 422 ('The end_date should be greater or equal than the start_date')

    4. різниця між $end_date та $start_date повинна бути не більше ніж 1 рік (365 або 366 днів)значення глобального параметру reimbursement(capitation)_contract_max_period_dayglobal param

      1. в разі помилки згенерувати код 422 ('The difference between end_date and start_date is more than one year<reimbursement(capitation)_contract_max_period_day> days')

  6. Валідація contractor_owner_id

    1. Перевірити employees.employee_id=contractor_owner_id та client_id=employee.legal_entity_id та employee_type в ('OWNER', 'ADMIN') та status='APPROVED' та is_active=true

      1. в разі помилки згенерувати код 422 Error ('Contractor owner must be an active OWNER or ADMIN and within current legal entity in contract request')

  7. Якщо в напиті було надіслано contract_number:

    1. перевірити структуру номеру договору XXXX-1234-5678-C , де:

      1. XXXX - порядок: номер + літери з переліку (A, E, H, K, M, P, T, X)

      2. 1234-5678 - рандомного згенерований номер та літери A, E, H, K, M, P, T, X.

    2. перевірити, що договір з даним contract_number 

      1. в разі помилки згенерувати код 422 ('Contract with such contract number does not exist')

    3. перевірити, що договір не в статусі 'TERMINATED'

      1. в разі помилки згенерувати код 409 ('Can not update terminated contract')

    4. employee_divisions, start_date, end_date не можуть бути оновлені. Якщо є активний договіп з таким contract_number зкопіювати start_date, end_date та contractor_legal_entity_id з уже діючого договору. Це не можливо зробити через запит.

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

    5. перевірити підтверджений contract_type такий же, що і в діючому договорі з номером =contract_number

      1. в разі помилки згенерувати код 409 ('Submitted contract_type does not correspond to previously created content`)

    6. для запитів для договорів капітації та реімбурсації:

      1. якщо $contract_number та $end_date проходять перевірки в запиті:

        1. рік $end_date повинен бути більшим або рівним $start_date

          1. в разі помилки згенерувати код 422 ('The year of end_date should be one year greater or equal to start_date')

        2. $end_date повинна бути рівна або більша ніж сьогодні і менша або дорвінювати даті ($end_date попереднього договору плюс 3 місяці)

          1. в разі помилки згенерувати код 422 ('The end_date may be equal or greater than today and less than or equal to three month from end_date the previous contract')

      2. якщо $contract_number w/o $end_date проходять перевірки в запиті:

        1. $end_date береться з попереднього договору.

    7. для договору реімбурсації:

      1. перевірити id_form такий же

        1. в разі помилки повернути 409 ('Submitted id_form does not correspond to previously created content`)

      2. якщо medical_programs відповідає - перевірити згідно опису в п.13 нижче

  8. Валідація contractor_payment_details:

    1. якщо payer_account не дорівнює ^UA[0-9]{22}$ або ^UA[0-9]{27}$ -> MFO повинен запитуваись

  9. Валідація id_from з довідника CONTRACT_TYPE (для договору капітації) та REIMBURSEMENT_CONTRACT_TYPE (для договору реімбурсації) :

    1. в разі помилки згенерувати код 422 ('value is not allowed in enum')

  10.  Валідація - відсутні інші активні (VERIFIED) договори, створені даним legal_entity_id за даний period(contract_request.start_date <= contract.end_date and contract_request.end_date => contract.start_date) тим самим contract_type та id_form (для договору реімбурсації)

    1. в разі помилки згенерувати код 422 ('Active contract is found. Contract number must be sent in request')

  11. Для договору капітації: Валідація external_contractors

    1. Перевірити external_contractors.divisions.id наявна для contractor_divisions.id

      1. в разі помилки згенерувати код 422 $divisions ('The division is not belong to contractor_divisions')

    2. Перевірити external_contractors.contract.expires_at>start_date

      1. в разі помилки згенерувати код 422 $contract.expires_at ('Expires date must be greater than contract start_date')

    3. Встановити external_contractors.legal_entity_id='client_id'

    4. division_id з external_contractors блоку повинна бути належна до юридичної особи яка включається до договору капітації. В external_contractors.legal_entity_id необхідно вказати юридичну особу counter-party для даного division_id.

  12. Для договору капітації: Валідація external_contractor_flag:

    1. якщо external_contractors не null тоді external_contractor_flag повинен бути true

    2. якщо external_contractors не null тоді external_contractor_flag повинен бути false 

      1. в разі помилки згенерувати код 422 $external_contractor_flag ('Invalid external_contractor_flag')

    3. якщо external_contractors не був відправлений в запиті тоді встановити external_contractor_flag до false.

  13. Для договору реімбурсації: Валідація medical_programs:

    1. Перевірити, що всі medical_programs з submitted ids існують

      1. в разі помилки згенерувати код 422 переглянути $medical_programs[...] ('Reimbursement program with such id does not exist')

    2. Перевірити, що medical_programs з підтвердженим id це активна програма

      1. в разі помилки згенерувати код 422 переглянути $medical_programs[...] ('Reimbursement program is not active')

    3. Перевірити, що всі медичні програми з вказаним MEDICATION type:

      1. в разі помилки згенерувати код 422 переглянути $medical_programs[...] (‘Program with such id is not a reimbursement program')

    4. Перевірити, що medical_programs з підтвердженим id відповідає до id_form згідно наведеного переліку:

  • в разі помилки повернути код помилки 422 $medical_programs[...] ('Medical program is not allowed for this action')
    Примітка. Для id_form=INSULIN_1 та PSYCHIATRY дві програми повинні бути вказані.

    1. в разі помилки повернути код 409 $medical_programs ('The composition of medical programs does not correspond to the allowed composition')

  • Перевірити список медичних програм в масиві на відсутність дублів id:

    1. в разі помилки повернути код 409 $medical_programs (‘The list of medical programs contains duplicates')

id_form

medical_programs

PMD_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_DOSTUPNI_LIKY

INSULIN_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_INSULIN_Z_DOPLATOYU REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_INSULIN_BEZ_DOPLATY

ND_1

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_ID_NETSUKROVYY_DIABET

PSYCHIATRY

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_IDS_PSYCHIATRY

GENERAL

REIMBURSEMENT_CONTRACT_REQUEST_MEDICAL_PROGRAM_IDS_GENERAL

  1. Примітка. Для GENERAL id_form користувач може вказати будь-яку кількість програм (але хоча б одну) зі списку в конфігурації. Також користувач може оновити список медичних програм, використовуючи логіку з розділ.7

Визначити первісний договір (опціонально)

...

  1. Отримати url для завантаженого договору.

Parameter

Source

timestamp

:TIMESTAMP

resource_name

:INITIAL_CONTRACT_REQUEST

resource_id

:CONTRACT_REQUEST_ID

action

'GET'

bucket

'CONTRACT_REQUEST'

  1. Завантажити підписаний договір до сховища.

...