Table of Contents |
---|
Специфікація
...
Table of Contents |
---|
Специфікація
Цілі
Цей WS призначений для створення контракту від юридичної особи власником або адміністратором. Перед створенням запиту документи повинні бути завантажені. Тоді запит може бути схвалений або відхилений стороною НСЗУ. Після цього, МІС повинен схвалити запит від їх сторони (актуально лише для договору капітації). Якщо запит було схвалено з обох сторін, його можна підписати. Використовуючи цей сервіс, можна створити договір реімбурсації, а також договір капітації. Різниця між цими двома типами контрактів описана в Моделі даних договору реімбурсації (див відповідний розділ на публічній сторінці Confluence).
...
Перевірити валідність доступу токену:
в разі помилки 401 ('Invalid access token')
в разі помилки 401 ('Invalid access token')
Перевірити набір даних contract_request:create перед виконанням дії
в разі помилки 401 у відповіді ('Invalid access token')
Якщо BLOCK_UNVERIFIED_PARTY_USERS є true, тоді перевірити дані співробітника на свіпадіння наступним умовам: verification_status != NOT_VERIFIED або (verification_status = NOT_VERIFIED та updated_at <= current_date - UNVERIFIED_PARTY_PERIOD_DAYS_ALLOWED):
в разі неспівпадіння - повернути 403 ("Access denied. Party is not verified")
Перевірити набір даних contract_request:create перед виконанням дії
в разі помилки 401 у відповіді ('Invalid access token':
Цифровий підпис
Розшифруйте вміст, зашифрований електронним цифровим підписом. Використовуйте цифровий підпис WS. Метод перевіряє цифровий підпис і повертає результат.
...
Валідація contract_type:
юридична особа з типом в (MSP,PRIMARY_CARE) може створити тілько договір капітації, юридична особа з типом в (PHARMACY) може створити тілько договір реімбурсації
в разі помилки 409 - "Contract type "{contract_type}" is not allowed for legal_entity with type "{legal_entity_type}" "
Валідація previous_request_id
вибрати id from contract_request де id=$.previous_request_id
якщо дані не знайдено згенерувати помилку 422 ("previous_request does not exist")
Перевірити previous_request status не рівно ('SIGNED')
в разі помилки згенерувати код 422 ('In case contract exists new contract request should be created')
Перевір contractor_legal_entity_id попереднього запиту рівний до contractor_legal_entity_id поточного запиту
в разі помилки згенерувати код 422 ('Previous request doesn't belong to legal entity')
Для договоду реімбурсації: Перевірити що id_form з $.previous_request_id рівний до id_form для запиту
в разі помилки згенерувати код 422 ('Id_form from previous request is not equal to id_form from request')
Валідація contractor_divisions
Превірити, що підрозділ належить до legal_entity та divisions.status='active'
в разі помилки згенерувати код 422 переглянути $divisions ('Division must be active and within current legal_entity')
Перевірити, що підрозділ в масиві зустрічається тілько один раз
в разі помилки згенерувати код 422 переглянути $divisions ('Division duplicates')
Валідація start_date
перевірити формат 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])))?)?$)
в разі помилки згенерувати код 422 error $start_date ('"expected \"<start_date>" to be a valid ISO 8601 date"')
рік в start_date повинен співпадати з поточним або наступним роком (current+1).
в разі помилки згенерувати код 422 error $start_date ('Start date must be within this or next year')
Валідація end_date (Примітка. Дані валідації дійсні для випадків, коли contract_number не проходить перевірки в запиті. Якщо contract_number перевірено, проводяться валідації з 10.п)
перевірити формат 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])))?)?$)
в разі помилки згенерувати код 422 error $end_date ('"expected \"<end_date>" to be a valid ISO 8601 date"')
рік повинен $end_date може бути наступним роком після 'start_date' якщо повний період договору не перевищує 1 року.$end_date повинна бути більше або рівнятися $start_date
в разі помилки згенерувати код 422 ('The end_date should be greater or equal than the start_date')
різниця між $end_date та $start_date повинна бути не більше ніж 1 рік (365 або 366 днів)значення глобального параметру reimbursement(capitation)_contract_max_period_dayglobal param
в разі помилки згенерувати код 422 ('The difference between end_date and start_date is more than one yearbetween end_date and start_date is more than <reimbursement(capitation)_contract_max_period_day> days')
Валідація contractor_owner_id
Перевірити employees.employee_id=contractor_owner_id та client_id=employee.legal_entity_id та employee_type в ('OWNER', 'ADMIN') та status='APPROVED' та is_active=true
в разі помилки згенерувати код 422 Error ('Contractor owner must be an active OWNER or ADMIN and within current legal entity in contract request')
Якщо в напиті було надіслано contract_number:
перевірити структуру номеру договору XXXX-1234-5678-C , де:
XXXX - порядок: номер + літери з переліку (A, E, H, K, M, P, T, X)
1234-5678 - рандомного згенерований номер та літери A, E, H, K, M, P, T, X.
перевірити, що договір з даним contract_number
в разі помилки згенерувати код 422 ('Contract with such contract number does not exist')
перевірити, що договір не в статусі 'TERMINATED'
в разі помилки згенерувати код 409 ('Can not update terminated contract')
employee_divisions, start_date, end_date не можуть бути оновлені. Якщо є активний договіп з таким contract_number зкопіювати start_date, end_date та contractor_legal_entity_id з уже діючого договору. Це не можливо зробити через запит.
в разі помилки згенерувати код 422
перевірити підтверджений contract_type такий же, що і в діючому договорі з номером =contract_number
в разі помилки згенерувати код 409 ('Submitted contract_type does not correspond to previously created content`)
для запитів для договорів капітації та реімбурсації:
якщо $contract_number та $end_date проходять перевірки в запиті:
рік $end_dateповиннаповинен бутибільшебільшим аборівнарівним $start_dateв разі помилки згенерувати код 422 ('The year of end_date should be one year greater or equal to start_date')
$end_date повинна бути меньше $endрівна або більша ніж сьогодні і менша або дорвінювати даті ($end_date попереднього договору та меньше або дорівнювати даті плюс 3 місяці)
в разі помилки згенерувати код 422 ('The end_date should may be equal or greater than of the previous contract today and less than or equal to three monthsmonth from end_date the previous contract')
якщо $contract_number w/o $end_date проходять перевірки в запиті:
$end_date береться з попереднього договору.
для договору реімбурсації:
перевірити id_form такий же
в разі помилки повернути 409 ('Submitted id_form does not correspond to previously created content`)
якщо medical_programs відповідає - перевірити згідно опису в п.13 нижче
Валідація contractor_payment_details:
якщо payer_account не дорівнює ^UA[0-9]{22}$ або ^UA[0-9]{27}$ -> MFO повинен запитуваись
Валідація id_from з довідника CONTRACT_TYPE (для договору капітації) та REIMBURSEMENT_CONTRACT_TYPE (для договору реімбурсації) :
в разі помилки згенерувати код 422 ('value is not allowed in enum')
Валідація - відсутні інші активні (VERIFIED) договори, створені даним legal_entity_id за даний period(contract_request.start_date <= contract.end_date and contract_request.end_date => contract.start_date) тим самим contract_type та id_form (для договору реімбурсації)
в разі помилки згенерувати код 422 ('Active contract is found. Contract number must be sent in request')
Для договору капітації: Валідація external_contractors
Перевірити external_contractors.divisions.id наявна для contractor_divisions.id
в разі помилки згенерувати код 422 $divisions ('The division is not belong to contractor_divisions')
Перевірити external_contractors.contract.expires_at>start_date
в разі помилки згенерувати код 422 $contract.expires_at ('Expires date must be greater than contract start_date')
Встановити external_contractors.legal_entity_id='client_id'
division_id з external_contractors блоку повинна бути належна до юридичної особи яка включається до договору капітації. В external_contractors.legal_entity_id необхідно вказати юридичну особу counter-party для даного division_id.
Для договору капітації: Валідація external_contractor_flag:
якщо external_contractors не null тоді external_contractor_flag повинен бути
true
якщо external_contractors не null тоді external_contractor_flag повинен бути false
в разі помилки згенерувати код 422 $external_contractor_flag ('Invalid external_contractor_flag')
якщо external_contractors не був відправлений в запиті тоді встановити external_contractor_flag до false.
Для договору реімбурсації: Валідація medical_programs:
Перевірити, що всі medical_programs з submitted ids існують
в разі помилки згенерувати код 422 переглянути $medical_programs[...] ('Reimbursement program with such id does not exist')
Перевірити, що medical_programs з підтвердженим id це активна програма
в разі помилки згенерувати код 422 переглянути $medical_programs[...] ('Reimbursement program is not active')
Перевірити, що всі медичні програми з вказаним MEDICATION type:
в разі помилки згенерувати код 422 переглянути $medical_programs[...] (‘Program with such id is not a reimbursement program')
Перевірити, що medical_programs з підтвердженим id відповідає до id_form згідно наведеного переліку:
в разі помилки повернути код помилки 422 $medical_programs[...] ('Medical program is not allowed for this action')
Примітка. Для id_form=INSULIN_1 та PSYCHIATRY дві програми повинні бути вказані.в разі помилки повернути код 409 $medical_programs ('The composition of medical programs does not correspond to the allowed composition')
Перевірити список медичних програм в масиві на відсутність дублів id:
в разі помилки повернути код 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 |
Примітка. Для GENERAL id_form користувач може вказати будь-яку кількість програм (але хоча б одну) зі списку в конфігурації. Також користувач може оновити список медичних програм, використовуючи логіку з розділ.7
Визначити первісний договір (опціонально)
...
Отримати url для завантаженого договору.
Parameter | Source |
---|---|
timestamp | :TIMESTAMP |
resource_name | :INITIAL_CONTRACT_REQUEST |
resource_id | :CONTRACT_REQUEST_ID |
action | 'GET' |
bucket | 'CONTRACT_REQUEST' |
Завантажити підписаний договір до сховища.
...