Перевірка цілісності запита на внесення змін до регламенту реєстру
1. Загальний опис
Складові Цифрового регламенту реєстру мають внутрішні зв’язки між собою, які в поточній реалізації перевіряються частково. В рамках впровадження перевірки цілісності запит необхідно розширити правила валідації регламенту реєстру на перевірку такого роду зв’язків при внесенні змін.
2. Концепти
- 
Цілісний запит на внесення змін - запит на зміни, після якого складові регламенту реєстру будуть мати валідні зв’язки між собою 
| Наприклад, при використанні делегату в бізнес-процесі на створення сутності можна виконати перевірку на існування відповідної таблиці в дата-моделі. Якщо такої таблиці не існує, то запит на внесення змін вважається не цілісним і не може бути внесений | 
3. Функціональні сценарії
- 
Моделювання бізнес-процесів з використанням делегатів 
- 
Моделювання форм з використанням критеріїв пошуку 
- 
Налаштування правил доступу до бізнес-процесів 
- 
Групування бізнес-процесів 
- 
Виставлення бізнес-процесів через Трембіту 
- 
Моделювання звітів 
4. Ролі користувачів
- 
Розробник регламенту 
5. Загальні принципи та положення
- 
Перевірка цілісності запиту проходить за загальними принципами валідації регламенту реєстру на Пайплайні публікації регламенту та Пайплайні перевірки регламенту 
- 
Перевірка цілісності запиту повинна виконуватися за допомогою утиліти registry-regulations-validator-cli 
- 
При наявності помилок перевірки цілісності запиту, Пайплайн перевірки регламенту повинен викидати помилку з повідомленням, яке є достатнім для розуміння помилки 
- 
Для опису правил внутрішніх зв’язків в делегатах бізнес-процесів розширюється стандарний механізм element templates 
- 
При використанні експрешенів як вхідних параметрів в делегаті, які повинні пройти перевірку на існування відповідних ресурсів, пайплайн перевірки повинен мати статус WARNING з повідомленням про те, що перевірка не може бути виконана для відповідного делегату у відповідного бізнес-процесу 
- 
Перевірка цілісності в рамках data-model модуля проходить на етапі збірки дата-моделі (існуюча поведінка) 
- 
При перевірці залежностей на складові дата-моделі враховується наявність тегів, які можуть видаляти сутність (drop search condition) 
6. Високорівневий дизайн рішення
6.1. Попередній аналіз
| Module | Dependency | Entity.Property | Notes | 
|---|---|---|---|
| bp-auth | roles | role.name | |
| bp-auth | bpmn | process.id | Implemented | 
| bp-grouping | bpmn | process.id | |
| bp-trembita | bpmn | process.id | |
| forms | data-model | search-condition.rest-api-name | |
| reports | roles | role.name | |
| reports | data-model | analytic-view.name | Out of scope | 
| Валідація виконується стандартним механізмом і розширюється додатковими правилами в утіліті registry-regulations-validator-cli | 
| Delegate | Dependency | Entity.Property | Notes | 
|---|---|---|---|
| Add role to keycloak user | roles | role.name | |
| Batch creation of entities in data factory | data-model | table.rest-api-name | |
| Batch creation of entities in data factory v2 | data-model | table.rest-api-name | |
| Batch read entities from data factory | data-model | table.rest-api-name | |
| Create entity in data factory | data-model | table.rest-api-name | |
| Delete entity in data factory | data-model | table.rest-api-name | |
| Create nested entities in data factory | data-model | composite-entity.rest-api-name | |
| Update entity in data factory | data-model | table.rest-api-name | |
| Update entity in data factory partially | data-model | partial-update.rest-api-name | |
| Read entity from data factory | data-model | table.rest-api-name | |
| Search for entities in data factory | data-model | search-condition.rest-api-name | |
| Generate excerpt | excerpts | excerpt.name | |
| Connect to external system | bp-trembita | external-system.name, external-system.operation.name | |
| Get users by role from keycloak | roles | role.name | |
| Remove role from keycloak user | roles | role.name | |
| Send User Notification V2 | notification | notification.template.name | |
| Citizen Sign Task | forms | form.name | |
| Officer Sign Task | forms | form.name | |
| User form | forms | form.name | |
| Call Activity | bpmn | process.id | |
| Business rule task | dmn | decision.reference | Out of scope | 
| Delegate | Dependency | Entity.Property | 
|---|---|---|
| completer(String taskDefinitionKey) | bpmn | process.user-task.id | 
| message_payload(String bpmnElementId) | bpmn | process.element.id | 
| sign_submission(String bpmnElementId) | bpmn | process.sign-task.id | 
| submission(String bpmnElementId) | bpmn | process.sign-task.id | 
6.2. Високорівневий дизайн рішення
6.2.1. Перевірка цілісності при використанні делегатів бізнес-процесів
Для можливості перевірки шаблонних елементів бізнес-процесів необхідно розширити стандартний механізм element templates для вказання типу поля який в собі буде містить залежність на інший складовий регламенту реєстру.
{
  "name": "Create entity in data factory",
  "properties": [
    {
      "label": "Resource",
      "description": "Resource type",
      "type": "String",
      "binding": {
        "type": "camunda:inputParameter",
        "name": "resource"
      },
      "constraints": {
        "notEmpty": true,
        "type": "table.rest-api-name"
      }
    }
...
}    <bpmn:serviceTask id="Activity_0ng025n" camunda:modelerTemplate="dataFactoryConnectorCreateDelegate" camunda:delegateExpression="${dataFactoryConnectorCreateDelegate}">
      <bpmn:extensionElements>
        <camunda:inputOutput>
          <camunda:inputParameter name="x_digital_signature_ceph_key" />
          <camunda:inputParameter name="x_digital_signature_derived_ceph_key" />
          <camunda:inputParameter name="resource">vip-resource</camunda:inputParameter> // Should be validated
          <camunda:inputParameter name="payload">${some}</camunda:inputParameter>
          <camunda:inputParameter name="x_access_token">${seom}</camunda:inputParameter>
          <camunda:outputParameter name="response">${ response }</camunda:outputParameter>
        </camunda:inputOutput>
      </bpmn:extensionElements>
    </bpmn:serviceTask>В рамках роботи утіліти registry-regulations-validator-cli буде проходити перевірка відповідного поля в сервісній задачі на наявність відповідної залежного ресурсу в регламенті реєстру
| Зчитування element-templates в рамках валідації в утіліті registry-regulations-validator-cli реалізовано в рамках епіку Валідація на перевірку пустих обов’язкових полів на рівні шаблонів елементів в бізнес-процесі | 
6.2.2. Перевірка цілісності при моделюванні форм з критеріями пошуку
6.2.3. Перевірка цілісності при використанні juel функцій в бізнес-процесах
- 
Визначення juel функцій відбувається повнотекстовим пошуком по всьому bpmn файлу 
- 
Якщо в juel функцію передане строкове значення, то проходить перевірка на наявність відповідного ідентифікатора 
- 
При передачі в juel функцію змінної, валідація не відбувається, папйлайн помічається статусом WARNING з описом можливої проблеми 
6.3. Поза скоупом
- 
Перевірка зв’язків при інтеграції з зовнішніми реєстрами (існування відповідного бізнес-процесу, сутності тощо) 
- 
Перевірка на цілісність при налаштуванні сервісів емуляції 
7. Обмеження рішення
- 
При наявності в тексті bpmn файлу слів, які повністю співпадають з назвою juel функції може відбуватися зайва перевірка. Наприклад, закоментована частина коду, яка містить слово "completer('sss')" буде помічена як juel функція, хоча це не так.