ЕСОЗ - публічна документація
Reorganize Legal Entities_UA
Ціль
Даний сервіс (WS) призначений для створення взаємозв'язку реорганізованої юридичної особи співробітником НСЗУ з використанням цифрового підпису (DS).
Основні положення
Це метод на graphQl використовується тільки в панелі адміністрування НСЗУ.
Тільки автентифіковані та авторизовані співробітники НСЗУ з відповідним скоупом може реорганізувати юридичну особу.
Запит повинен бути підписаний цифровим підписом (DS).
Специфікація
"""
Input for `reorganizeLegalEntity` mutation.
"""
input ReorganizeLegalEntityInput {
"Input for Signed Content"
signedContent: SignedContent!
}
"""
Return type for `reorganizeLegalEntity` mutation.
"""
type ReorganizeLegalEntityPayload {
"payload LegalEntityReorganizationJob."
legalEntityReorganizationJob: LegalEntityReorganizationJob
}
Вхідні параметри
Вхідними параметрами являються підписані дані в форматі PKCS7. Дані повинні бути розпаковані та верифіковані за допомогою схеми Json.
На основі типу реорганізації, підписані дані (signedData) повинні містити наступні поля:
типи реорганізації ACCESSION
, MERGING
, DIVIDING
, SEPARATING
Поля для підпису:
Поле |
| Тип | Ліміт | Обов'язкове/Опціональне |
---|---|---|---|---|
merged_from_legal_entity (object) | id | uuid |
| обов'язкове |
| name | string |
| обов'язкове |
| edrpou | string |
| обов'язкове |
merged_to_legal_entity (array of objects) | id | id |
| обов'язкове |
| name | string |
| обов'язкове |
| edrpou | string |
| обов'язкове |
type |
| string |
| обов'язкове |
reason |
| string | 255 characters | обов'язкове |
reason_date |
| date |
| обов'язкове |
Тип реорганізації TRANSFORMATION
Поля для підпису:
Поле |
| Тип | Ліміт | Обов'язкове/Опціональне |
---|---|---|---|---|
merged_from_legal_entity (object) | id | uuid |
| обов'язкове |
| name | string |
| обов'язкове |
| edrpou | string |
| обов'язкове |
type |
| string |
| обов'язкове |
reason |
| string | 255 символів | обов'язкове |
reason_date |
| date |
| обов'язкове |
Валідації
Авторизація
Перевірити валідність токену доступу(існує)
в разі помилки - повернути 401 (“Invalid access token”)
Перевірити, що токен дійсний(expires_at => now())
в разі помилки - повернути 401 (“Invalid access token”)
Перевірити скоупи користувача на можливість виконання даної дії (scope = 'legal_entity:merge')
в разі невалідних скоупів - повернути 403 (“Your scope does not allow to access this resource. Missing allowances: legal_entity:merge”)
Перевірити цифровий підпис
Перевірити, що декодовані вхідні дані підписані
в разі помилки - повернути 422 (“document must be signed by 1 signer but contains 0 signatures”)
Перевірити, що цифровий підпис (DS) валідний та дійсний
Перевірити, що цифровий підпис (DS) належить користувачу
Перевірити, що ЄДРПОУ з цифрового підпису (DS) та legal_entities.edrpou співпадають
в разі помилки - повернути 409 (“Signer EDRPOU doesn’t match with requester edrpou”)
Перевірити, що ДРФО з цифрового підпису та party.tax_id співпадають
в разі помилки - повернути 409 (“Signer DRFO doesn't match with requester tax_id“)
Перевірити запит
Перевірити, що вхідні дані містять всі необхідні поля
в разі помилки - повернути 422 ('Required property <field_name> was not present')
Перевірити значення type наявний в довіднику
LEGAL_ENTITY_REORGANIZATION_TYPES
.в разі помилки - повернути 422 error ('Value is not allowed in enum')
Перевірити, що значення reason_date є частиною merged_from для юридичної особи inserted_at по дані та current_date (не раніше ніж merged_from дата реєстрації юридичної особи та не пізніше ніж дата процесу реорганізації).
в разі помилки - повернути помилку 422 ('Reorganization reason date can’t be earlier than legal entity registration date and later than reorganization date')
Перевірити merged_from та merged_to для юридичної особи не в рамках процесу реорганізації (запит: select * from related_legal_entities where merged_from_id in ($merged_from_id, $merged_to_id) and is_active=true and type in ('ACCESSION', ‘MERGING’, ‘DIVIDING’); returns empty result):
в разі помилки - повернути 409 ('Reorganized and successor legal entities must not be in the process of reorganization')
Перевірити merged_from legal_entity
Перевірити, що merged_from присутній для юридичної особи
в разі помилки - повернути 404 ('Reorganized legal entity was not found')
Перевірити, що сутність merged_from для юридичної особи в статусі ='active' або 'suspended'
в разі помилки - повернути 409 ('Reorganized legal entity must be active or suspended')
Перевірити, що merged_from_legal_entity.name з запиту=legal_entites.name
в разі помилки - повернути 422 ('Invalid reorganized legal entity name')
Перевірити, що merged_from_legal_entity.edrpou з запиту=legal_entites.edrpou
в разі помилки - повернути 422 ('Invalid reorganized legal entity edrpou')
Перевірити, що merged_from_legal_entity.id<>merged_to_legal_entity.id
в разі помилки - повернути 422 ('Reorganized and successor legal entities must be different')
(Допустимо для типів реорганізації
ACCESSION
,MERGING
,DIVIDING
,SEPARATING
)
Перевірити merged_to legal_entity (кожний об'єкт в масиві).Перевірити, що кожна сутність merged_to для юридичної особи вказана та унікальна в масиві
в разі помилки - повернути 422 ('Successor legal entities must be different and exist')
Перевірити, що кожна сутність merged_to legal entity в статусі='active'
в разі помилки - повернути 409 ('Successor legal entity must be active')
Перевірити merged_to_legal_entity.name з запиту=legal_entites.name
в разі помилки - повернути 422 ('Invalid successor legal entity name')
Перевірити merged_to_legal_entity.edrpou з запиту=legal_entites.edrpou
в разі помилки - повернути 422 ('Invalid successor legal entity edrpou')
(Допустимо для типів реорганізації
TRANSFORMATION
)
Перевірити merged_from.legal_entity_type. Допустимі значення: MSP, PRIMARY_CARE, EMERGENCY, OUTPATIENT.в разі помилки - повернути 422 ('Invalid legal entity type')
(Допустимо для типів реорганізації
ACCESSION
,MERGING
,DIVIDING
,SEPARATING
)
Перевірити merged_to.legal_entity_type and merged_from.legal_entity_type. Допустимі значення переміщень дивитися в таблиці нижче.в разі помилки - повернути 422 ('Invalid legal entity type')
Допустимі значення переміщень для юридичної особи
merged_from | merged_to |
---|---|
MSP, PRIMARY_CARE | MSP, PRIMARY_CARE |
Сервісна логіка
Сервісна логіка залежить від типу реорганізації:
Типи реорганізації Приєднання, Злиття, Поділ
Створити та запустити асинхронні джоби.з типом reorganize_legal_entities
Джоба повинна містити метадані зі значеннями з вхідних параметрів.
Джоба повинна виконувати наступні кроки:
Оновити для юридичної особи merged_from активних співробітників (окрім OWNER) до статусу ‘APPROVED’, оновити статус в таблиці співробітників (PRM DB):
встановити статус = ‘REORGANIZED’
встановити updated_at = now()
встановити updated_by = $user_id
Оновити для юридичної особи merged_from, що реорганізована, декларації співробітників, оновити дату закінчення строку дії в таблиці декларацій (OPS DB):
встановити end_date = now() + значення конфігураційного параметру LEGAL_ENTITY_REORGANIZATION_TRANSITION_PERIOD
встановити updated_at = now()
встановити updated_by = $user_id
Оновити тип користувача для юридичної особи merged_from в таблиці користувачів (MITHRIL DB):
встановити client_type_id = $MSP_LIMITED_ID(3770c4b3-05cd-42d9-8e15-233b193aee86)
встановити updated_at = now()
Відмінити всі погодження (approvals) для юридичної особи merged_from в таблиці додатку (MITHRIL DB)
Зробити всі токени для юридичної особи merged_from як такі, для яких закінчився строк дії (MITHRIL DB):
встановити expires_at=now(unix time)
встановити updated_at = now()
Встановити для юридичної особи merged_from legal сутності договору як такі, що потребують перевірки в таблиці (PRM DB):
встановити is_suspended = true
встановити status_reason = ‘DEFAULT’
встановити reason = ‘Реорганізація СГуСОЗ’
встановити updated_at = now()
встановити updated_by = $user_id
Для кожної пари юридичних осіб merged_from та merged_to створитти окрему задачу.
Задача повинна містити метадані з значеннямmerged_to_legal_entity
з вхідних даних.
Кожна задача повинна містити наступні крокиВстановити взаємозв'язок юридичних осіб як запис в related_legal_entities table (PRM DB) у відповідності до Legal Entities Reorganization data model_EN
Зберегти підписний контент до сховища даних для кожного запису related_legal_entities
Після того, як всі задачі виконані успішно, оновити статус юридичної особи merged_from в таблиці legal_entities (PRM DB):
встановити status = 'REORGANIZED'
встановити updated_at = now()
встановити updated_by = $user_id
Тип реорганізації Виділ
Створити та запустити асинхронну задачу з типомreorganize_legal_entities
Задача повинна містити метадані зі значеннями з вхідних параметрів.
Джоба повинна виконувати наступні кроки:
Оновити для юридичної особи merged_from співробітників з типом ‘DOCTOR’, встановити статус ‘APPROVED’ та party_id для юридичної особи правонаступника, оновити статус в таблиці співробітників (PRM DB):
встановити status = ‘REORGANIZED’
встановити updated_at = now()
встановити updated_by = $user_id
Оновити для реорганізованої юридичної особи merged_from декларації співробітників, оновити дату закінчення для декларацій в таблиці (OPS DB):
встановити end_date = now() + value of LEGAL_ENTITY_REORGANIZATION_TRANSITION_PERIOD config
встановити updated_at = now()
встановити updated_by = $user_id
Оновити ролі для співробітників юридичної особи merged_from та встановити статус ‘reorganized’ для user_roles таблиця (MITHRIL DB):
встановити role_id = $DOCTOR_LIMITED_ID(c61f8475-6474-4314-a99a-e0eb193f2996)
встановити updated_at = now()
Перемістити всі значення для співробітників юридичної особи merged_from в статус ‘reorganized’ в таблиці (MITHRIL DB)
Зробити всі токени для юридичної особи merged_from в статусі ‘reorganized’ як такі, для яких закінчився строк дії (MITHRIL DB):
встановити expires_at=now(unix time)
встановити updated_at = now()
Встановити для юридичної особи merged_from legal сутності договору як такі, що потребують перевірки в таблиці (PRM DB):
встановити is_suspended = true
встановити status_reason = ‘DEFAULT’
встановити reason = ‘Реорганізація СГуСОЗ’
встановити updated_at = now()
встановити updated_by = $user_id
Для кожної пари юридичних осіб merged_from legal entity та merged_to створити окрему задачу.
Задача повинна містити метадані зі значеннямиmerged_to_legal_entity
з вхідних параметрів.
Кожна задача повинна виконувати наступні кроки:Додати запис по взаємозв'язку до таблиці related_legal_entities (PRM DB) у відповідності доLegal Entities Reorganization data model_EN
Зберегти підписаний контент до сховища даних для кожного запису сутності related_legal_entities.
Тип реорганізації Перетворення
Створити та запустити асинхронну джобу з типом reorganize_legal_entities
Джоба повинна містити метадані зі значеннями з вхідних параметрів.
Джоба повинна виконувати наступні кроки:
Оновити даними по ЄДР для сутності merged_from дані в полях таблиці legal_entities (PRM DB):
встановити edr_data_id = null
встановити updated_at = now()
встановити updated_by = $user_id
Виконати процес
upsert_edr_data
, який використовується для оновлення або збереження даних з ЄДР для юридичної особи:Оновити або додати дані edr_data для юридичної особи merged_from по ЄДРПОУ на основі даних по ЄДР у відповіді в таблиці edr_data (PRM DB)
Оновити дані юридичної особи merged_from по ЄДР на основі отриманих даних ЄДР у відповіді в таблиці legal_entities (PRM DB)
Оновити edr_data_id для юридичної особи merged_from в таблиці legal_entities (PRM DB)
Встановити статус договору з юридичною особою merged_from як той, що потребує перевірки в таблиці (PRM DB):
встановити is_suspended = true
встановити status_reason = ‘DEFAULT’
встановити reason = ‘Реорганізація СГуСОЗ’
встановити updated_at = now()
встановити updated_by = $user_id
Оновити статус юридичної особи merged_from legal в таблиці legal_entities (PRM DB):
встановити status = 'SUSPENDED'
встановити updated_at = now()
встановити updated_by = $user_id
Додати запис по взаємозв'язку з merged_from та merged_to data реорганізованої юридичної особи в таблиці related_legal_entities (PRM DB) у відповідності до Legal Entities Reorganization data model_EN
В разі, якщо запис вже існує (юридична особа була реорганізована з типомTRANSFORMATION
раніше), отримати id запису related_legal_entities.Зберегти підписаний контент до сховища даних з наступною назвою:
MEDIA_STORAGE_MERGED_LEGAL_ENTITIES_RESOURCE_NAME_<REORGANIZATION_DATE_IN_UNIX_TIME>
ЕСОЗ - публічна документація