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

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

« Previous Version 2 Current »

Ціль

Даний сервіс (WS) призначений для створення взаємозв'язку реорганізованої юридичної особи співробітником НСЗУ з використанням цифрового підпису (DS).

Основні положення

  1. Це метод на graphQl використовується тільки в панелі адміністрування НСЗУ.

  2. Тільки автентифіковані та авторизовані співробітники НСЗУ з відповідним скоупом може реорганізувати юридичну особу.

  3. Запит повинен бути підписаний цифровим підписом (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“)

Перевірити запит

  1. Перевірити, що вхідні дані містять всі необхідні поля

    1. в разі помилки - повернути 422 ('Required property <field_name> was not present')

  2. Перевірити значення type наявний в довіднику LEGAL_ENTITY_REORGANIZATION_TYPES.

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

  3. Перевірити, що значення reason_date є частиною merged_from для юридичної особи inserted_at по дані та current_date (не раніше ніж merged_from дата реєстрації юридичної особи та не пізніше ніж дата процесу реорганізації).

    1. в разі помилки - повернути помилку 422 ('Reorganization reason date can’t be earlier than legal entity registration date and later than reorganization date')

  4. Перевірити 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):

    1. в разі помилки - повернути 409 ('Reorganized and successor legal entities must not be in the process of reorganization')

  5. Перевірити merged_from legal_entity

    1. Перевірити, що merged_from присутній для юридичної особи

      1. в разі помилки - повернути 404 ('Reorganized legal entity was not found')

    2. Перевірити, що сутність merged_from для юридичної особи в статусі ='active' або 'suspended'

      1. в разі помилки - повернути 409 ('Reorganized legal entity must be active or suspended')

    3. Перевірити, що merged_from_legal_entity.name з запиту=legal_entites.name

      1. в разі помилки - повернути 422 ('Invalid reorganized legal entity name')

    4. Перевірити, що merged_from_legal_entity.edrpou з запиту=legal_entites.edrpou

      1. в разі помилки - повернути 422 ('Invalid reorganized legal entity edrpou')

    5. Перевірити, що merged_from_legal_entity.id<>merged_to_legal_entity.id

      1. в разі помилки - повернути 422 ('Reorganized and successor legal entities must be different')

  6. (Допустимо для типів реорганізації ACCESSION, MERGING, DIVIDING, SEPARATING)
    Перевірити merged_to legal_entity (кожний об'єкт в масиві).

    1. Перевірити, що кожна сутність merged_to для юридичної особи вказана та унікальна в масиві

      1. в разі помилки - повернути 422 ('Successor legal entities must be different and exist')

    2. Перевірити, що кожна сутність merged_to legal entity в статусі='active

      1. в разі помилки - повернути 409 ('Successor legal entity must be active')

    3. Перевірити merged_to_legal_entity.name з запиту=legal_entites.name

      1. в разі помилки - повернути 422 ('Invalid successor legal entity name')

    4. Перевірити merged_to_legal_entity.edrpou з запиту=legal_entites.edrpou

      1. в разі помилки - повернути 422 ('Invalid successor legal entity edrpou')

  7. (Допустимо для типів реорганізації TRANSFORMATION)
    Перевірити merged_from.legal_entity_type. Допустимі значення: MSP, PRIMARY_CARE, EMERGENCY, OUTPATIENT.

    1. в разі помилки - повернути 422 ('Invalid legal entity type')

  8. (Допустимо для типів реорганізації ACCESSION, MERGING, DIVIDING, SEPARATING)
    Перевірити merged_to.legal_entity_type and merged_from.legal_entity_type. Допустимі значення переміщень дивитися в таблиці нижче.

    1. в разі помилки - повернути 422 ('Invalid legal entity type')

Допустимі значення переміщень для юридичної особи

merged_from

merged_to

MSP, PRIMARY_CARE

MSP, PRIMARY_CARE

Сервісна логіка

Сервісна логіка залежить від типу реорганізації:

Типи реорганізації Приєднання, Злиття, Поділ

Створити та запустити асинхронні джоби.з типом reorganize_legal_entities

Джоба повинна містити метадані зі значеннями з вхідних параметрів.

Джоба повинна виконувати наступні кроки:

  1. Оновити для юридичної особи merged_from активних співробітників (окрім OWNER) до статусу ‘APPROVED’, оновити статус в таблиці співробітників (PRM DB):

    1. встановити статус = ‘REORGANIZED’

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  2. Оновити для юридичної особи merged_from, що реорганізована, декларації співробітників, оновити дату закінчення строку дії в таблиці декларацій (OPS DB):

    1. встановити end_date = now() + значення конфігураційного параметру LEGAL_ENTITY_REORGANIZATION_TRANSITION_PERIOD

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  3. Оновити тип користувача для юридичної особи merged_from в таблиці користувачів (MITHRIL DB):

    1. встановити client_type_id = $MSP_LIMITED_ID(3770c4b3-05cd-42d9-8e15-233b193aee86)

    2. встановити updated_at = now()

  4. Відмінити всі погодження (approvals) для юридичної особи merged_from в таблиці додатку (MITHRIL DB)

  5. Зробити всі токени для юридичної особи merged_from як такі, для яких закінчився строк дії (MITHRIL DB):

    1. встановити expires_at=now(unix time)

    2. встановити updated_at = now()

  6. Встановити для юридичної особи merged_from legal сутності договору як такі, що потребують перевірки в таблиці (PRM DB):

    1. встановити is_suspended = true

    2. встановити status_reason = ‘DEFAULT’

    3. встановити reason = ‘Реорганізація СГуСОЗ’

    4. встановити updated_at = now()

    5. встановити updated_by = $user_id

  7. Для кожної пари юридичних осіб merged_from та merged_to створитти окрему задачу.
    Задача повинна містити метадані з значенням merged_to_legal_entity з вхідних даних.
    Кожна задача повинна містити наступні кроки

    1. Встановити взаємозв'язок юридичних осіб як запис в related_legal_entities table (PRM DB) у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/16898293829/Legal+Entities+Reorganization+data+model_EN

    2. Зберегти підписний контент до сховища даних для кожного запису related_legal_entities

  8. Після того, як всі задачі виконані успішно, оновити статус юридичної особи merged_from в таблиці legal_entities (PRM DB):

    1. встановити status = 'REORGANIZED'

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

Тип реорганізації Виділ

Створити та запустити асинхронну задачу з типомreorganize_legal_entities

Задача повинна містити метадані зі значеннями з вхідних параметрів.

Джоба повинна виконувати наступні кроки:

  1. Оновити для юридичної особи merged_from співробітників з типом ‘DOCTOR’, встановити статус ‘APPROVED’ та party_id для юридичної особи правонаступника, оновити статус в таблиці співробітників (PRM DB):

    1. встановити status = ‘REORGANIZED’

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  2. Оновити для реорганізованої юридичної особи merged_from декларації співробітників, оновити дату закінчення для декларацій в таблиці (OPS DB):

    1. встановити end_date = now() + value of LEGAL_ENTITY_REORGANIZATION_TRANSITION_PERIOD config

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  3. Оновити ролі для співробітників юридичної особи merged_from та встановити статус ‘reorganized’ для user_roles таблиця (MITHRIL DB):

    1. встановити role_id = $DOCTOR_LIMITED_ID(c61f8475-6474-4314-a99a-e0eb193f2996)

    2. встановити updated_at = now()

  4. Перемістити всі значення для співробітників юридичної особи merged_from в статус ‘reorganized’ в таблиці (MITHRIL DB)

  5. Зробити всі токени для юридичної особи merged_from в статусі ‘reorganized’ як такі, для яких закінчився строк дії (MITHRIL DB):

    1. встановити expires_at=now(unix time)

    2. встановити updated_at = now()

  6. Встановити для юридичної особи merged_from legal сутності договору як такі, що потребують перевірки в таблиці (PRM DB):

    1. встановити is_suspended = true

    2. встановити status_reason = ‘DEFAULT’

    3. встановити reason = ‘Реорганізація СГуСОЗ’

    4. встановити updated_at = now()

    5. встановити updated_by = $user_id

  7. Для кожної пари юридичних осіб merged_from legal entity та merged_to створити окрему задачу.
    Задача повинна містити метадані зі значеннями merged_to_legal_entity з вхідних параметрів.
    Кожна задача повинна виконувати наступні кроки:

    1. Додати запис по взаємозв'язку до таблиці related_legal_entities (PRM DB) у відповідності доhttps://e-health-ua.atlassian.net/wiki/spaces/EH/pages/16898293829/Legal+Entities+Reorganization+data+model_EN

    2. Зберегти підписаний контент до сховища даних для кожного запису сутності related_legal_entities.

Тип реорганізації Перетворення

Створити та запустити асинхронну джобу з типом reorganize_legal_entities

Джоба повинна містити метадані зі значеннями з вхідних параметрів.

Джоба повинна виконувати наступні кроки:

  1. Оновити даними по ЄДР для сутності merged_from дані в полях таблиці legal_entities (PRM DB):

    1. встановити edr_data_id = null

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  2. Виконати процес upsert_edr_data, який використовується для оновлення або збереження даних з ЄДР для юридичної особи:

    1. Оновити або додати дані edr_data для юридичної особи merged_from по ЄДРПОУ на основі даних по ЄДР у відповіді в таблиці edr_data (PRM DB)

    2. Оновити дані юридичної особи merged_from по ЄДР на основі отриманих даних ЄДР у відповіді в таблиці legal_entities (PRM DB)

    3. Оновити edr_data_id для юридичної особи merged_from в таблиці legal_entities (PRM DB)

  3. Встановити статус договору з юридичною особою merged_from як той, що потребує перевірки в таблиці (PRM DB):

    1. встановити is_suspended = true

    2. встановити status_reason = ‘DEFAULT’

    3. встановити reason = ‘Реорганізація СГуСОЗ’

    4. встановити updated_at = now()

    5. встановити updated_by = $user_id

  4. Оновити статус юридичної особи merged_from legal в таблиці legal_entities (PRM DB):

    1. встановити status = 'SUSPENDED'

    2. встановити updated_at = now()

    3. встановити updated_by = $user_id

  5. Додати запис по взаємозв'язку з merged_from та merged_to data реорганізованої юридичної особи в таблиці related_legal_entities (PRM DB) у відповідності до https://e-health-ua.atlassian.net/wiki/spaces/EH/pages/16898293829/Legal+Entities+Reorganization+data+model_EN
    В разі, якщо запис вже існує (юридична особа була реорганізована з типом TRANSFORMATION раніше), отримати id запису related_legal_entities.

  6. Зберегти підписаний контент до сховища даних з наступною назвою: MEDIA_STORAGE_MERGED_LEGAL_ENTITIES_RESOURCE_NAME_<REORGANIZATION_DATE_IN_UNIX_TIME>

  • No labels