Автоматична валідація змін до регламенту
- 1. Загальний опис
- 2. Перевірка регістрів при налаштуванні зовнішніх ключів у моделі даних
- 3. Перевірка регістрів при налаштуванні ролей посадових осіб
- 4. Перевірка на дублювання та унікальність атрибутів у формах бізнес-процесів
- 5. Перевірка на унікальність значення ідентифікатора бізнес-процесу
- 6. Перевірка наявності бізнес-процесу в регламенті за значенням ідентифікатора
| 🌐 Цей документ доступний українською та англійською мовами. Використовуйте перемикач у правому верхньому куті, щоб змінити версію. | 
1. Загальний опис
Цей документ описує валідацію змін до регламенту на прикладі виникнення помилок при збірці pipeline MASTER-build-registry-regulations у реєстрах.
| Скористайтеся референтними прикладами моделювання регламенту у демо-реєстрі. Зверніться до адміністратора Платформи для розгортання такого реєстру, або отримайте доступ, якщо реєстр вже існує. Як розгорнути демо-реєстр та отримати приклади моделювання, описано на сторінці Розгортання демо-реєстру із референтними прикладами. | 
Відповідно до архітектури безпеки Платформи та реєстрів, що на ній розгортаються, регламент кожного реєстру має проходити процедуру перевірки коду (Code Review) перед внесенням змін до цільового репозиторію.
Така процедура є надійним фільтром для виявлення небажаних помилок при моделюванні елементів регламенту, і, за потреби, коригування змін. Однак там, де існує людський фактор, існує і ймовірність додаткових помилок. Прикладом таких помилок під час роботи з налаштуваннями файлів регламенту є неправильне використання регістру, внесення неунікальних значень та дублювання атрибутів тощо.
З метою уникнення подібних помилок, на Платформі реалізована додаткова автоматична валідація змін.
- Автоматична валідація змін до регламенту наразі передбачає:
- 
- 
Перевірку регістрів при налаштуванні зовнішніх ключів у моделі даних. 
- 
Перевірку регістрів при налаштуванні ролей посадових осіб. Значення параметрів необхідно вказувати у нижньому регістрі, тобто всі символи — з маленької літери. Механізм валідації для обох випадків є однаковим. 
- 
Перевірку на дублювання та унікальність атрибутів у формах бізнес-процесів. 
- 
Перевірку на унікальність значення ідентифікатора бізнес-процесу. 
- 
Перевірку наявності бізнес-процесу в регламенті за значенням ідентифікатора. 
 
- 
При внесенні змін до регламенту (див. Операції з регламентом в Gerrit), автоматично запускається процес збірки файлів регламенту, що має назву MASTER-build-registry-regulations.
| Якщо не дотримано критеріїв правильності внесення інформації до регламенту, у процесі складання коду станеться помилка. | 
2. Перевірка регістрів при налаштуванні зовнішніх ключів у моделі даних
У системі реалізовано регламентну валідацію для перевірки регістрів у значенні параметра foreignKeyName в рамках моделювання структур даних реєстру у каталозі data-model.
Якщо в одному з файлів на рівні Фабрики даних (наприклад, data-model/tablesSubjects.xml, що визначає структуру таблиць та зв’язків між ними) значення параметра зовнішнього ключа foreignKeyName
вказано у верхньому регістрі (наприклад, foreignKeyName="FK_suBject_subject_id"), то збірка не пройде валідацію та завершиться помилкою на кроці registry-regulations-validation.
Розглянемо приклад спрацьовування автоматичної валідації при внесенні змін до файлу data-model/tablesSubjects.xml.
- Виконаємо наступні кроки:
- 
- 
Відкрийте файл data-model/tablesSubjects.xml у середовищі розробки та моделювання регламенту. 
- 
В рамках моделювання структур даних, у тегу <constraints>, для атрибутаforeignKeyNameвведіть значення"Fk_subject_subject_id", використовуючи верхній регістр.
- 
Перенесіть локальні зміни до цільового репозиторію в Gerrit (див. Операції з регламентом в Gerrit). 
- 
Пройдіть процедуру перевірки коду в Gerrit.  
- 
Виконайте злиття змін ( git merge) доmaster-гілки репозиторію. За фактом злиття змін до master-гілки репозиторію в Gerrit, відбудеться автоматичний запуск процесу збірки внесених змін інструментом Jenkins.
- 
Перейдіть до інтерфейсу Jenkins за відповідним посиланням для перегляду процесу збірки.  Збірка завершиться помилкою на кроці registry-regulations-validation.
- 
Відкрийте деталі збірки, натиснувши її номер. Далі перейдіть до журналу подій у консолі (Console Output).   
- 
Ознайомтеся із причинами виникнення помилки. До консолі виводиться відповідне повідомлення та значення параметра, до якого застосовано валідацію: [ERROR] Наступні foreign keys містять символи у верхньому регістрі, що неприпустимо: [Fk_subject_subject_id]  
- 
Прокрутіть бігунок униз сторінки та знайдіть повідомлення про результат невдалої збірки: ERROR: Registry regulations files did not pass validation Finished: FAILURE  
 
- 
3. Перевірка регістрів при налаштуванні ролей посадових осіб
У системі реалізовано регламенту валідацію для перевірки регістрів для значень параметра name у файлі roles/officer.yml. Допускається лише нижній регістр.
Якщо у файлі roles/officer.yml, на рівні бізнес-процесів, значення параметра name, тобто назву ролі посадової особи, вказано у верхньому регістрі (наприклад, name: Officer), то збірка не пройде валідацію та завершиться помилкою на кроці registry-regulations-validation.
| Процес спрацьовування валідації дивіться на прикладі перевірки регістрів у каталозі data-model за посиланням. | 
4. Перевірка на дублювання та унікальність атрибутів у формах бізнес-процесів
У системі реалізовано регламентну валідацію для перевірки атрибутів name, display, title і type на унікальність у каталозі forms. Валідація призначена для того, щоб коректно генерувати назву, тип і шлях знаходження форми у порталах (Кабінетах).
Якщо значення параметрів не є унікальними та дублюються, то збірка регламенту не пройде валідацію та завершиться помилкою на кроці registry-regulations-validation.
- Виділять 2 основних критерії у цьому типі валідації:
- 
- 
Атрибути name,display,titleіtypeне повинні дублюватись у каталозіforms.Приклад 2. Приклад. Дублювання атрибута у формі{ "path": "add-lab-bp-add-lab", "path": "add-lab-bp-add-lab" }
 - 
Атрибути name,display,titleіtypeмають бути унікальними у каталозіformsпри розгортанні регламенту реєстру.Приклад 3. Приклад. Неунікальність атрибута у формі{ "title": "Додати інформацію про лабораторію", "title": "Додати інформацію про кота" }
 
- 
| Процес спрацьовування валідації дивіться на прикладі перевірки регістрів у каталозі data-model за посиланням. | 
5. Перевірка на унікальність значення ідентифікатора бізнес-процесу
У системі реалізовано регламентну валідацію для перевірки значення атрибута process_definition_id на унікальність у каталозі bp-auth. Валідація призначена для того, щоб коректно визначати ідентифікатор бізнес-процесу, до якого надається доступ користувачу.
Якщо значення атрибута process_definition_id в масиві process_definitions не є унікальним, то збірка не пройде валідацію та завершиться помилкою на кроці registry-regulations-validation, а в журналі виводитиметься опис помилки із текстом: "[Process_id] Process_id не унікальний".
process_definitions:
    - process_definition_id: 'add-lab'
    - process_definition_id: 'add-lab'| Процес спрацьовування валідації дивіться на прикладі перевірки регістрів у каталозі data-model за посиланням. | 
6. Перевірка наявності бізнес-процесу в регламенті за значенням ідентифікатора
У системі реалізовано регламенту перевірку наявності бізнес-процесу за значенням атрибута process_definition_id у каталозі bp-auth. Валідація призначена для того, щоб адміністратор регламенту міг внести значення лише наявного в системі бізнес-процесу, до якого необхідно призначити доступ.
Якщо значення атрибута process_definition_id в масиві process_definitions не збігається з ідентифікатором вже змодельованого бізнес-процесу, то збірка не пройде валідацію та завершиться помилкою на кроці registry-regulations-validation.
authorization:
    realm: 'officer'
    process_definitions:
        - process_definition_id: 'add-lab777777777777777'
        process_name: 'Створення лабораторії'
        process_description: 'Регламент для створення лабораторій'
        roles:
          - officer| Процес спрацьовування валідації дивіться на прикладі перевірки регістрів у каталозі data-model за посиланням. |