Исходный код вики VKPHT. Релиз нота R4 (24Q1)
Редактировал(а) Александра Баруткина 2024/06/27 13:20
Последние авторы
| author | version | line-number | content |
|---|---|---|---|
| 1 | {{toc/}} | ||
| 2 | |||
| 3 | = ADM. Управление правами доступа = | ||
| 4 | |||
| 5 | В этом релизе мы выпускаем модуль "Управление правами доступа" и на данном этапе мы умеем защищать представления, методы работы с таблицами реализованными через Hateoas (все справочники в Админ.Панели), исполняемые методы (вариант 2) - возможность их запустить или нет, и исполняемые методы с указанием допустимых значений (вариант 3). | ||
| 6 | |||
| 7 | Мы выпустили базовые роли на полный доступ в систему, сейчас каждый пользователь в системе на стенде DEV, состоит в этой групповой роли и получает доступы через коннектор "Управление правами доступа", а также начали настраивать роли для сервисов системы, реализовано на примере Оргструктуры. | ||
| 8 | |||
| 9 | Благодаря "Управление правами доступа" мы можем настроить множество ролей и групп, которые будут давать доступ разным пользователям согласно их полномочий. | ||
| 10 | |||
| 11 | Мы предоставляем, как полный доступ к представлениям и методам, так и даём разрешения для части объекта, при использовании разрезов доступа. | ||
| 12 | |||
| 13 | Разрез можем формировать по значению атрибута, непосредственно в системе, по значению ключевого слова в KeyCloack и по значению ключевого слова, которые собираются через настраиваемую job процедуру и содержит все доступные каждому пользователю значения доступа для заранее настроенного разреза. | ||
| 14 | |||
| 15 | Защита методов позволяет давать разрешения отдельно на чтение и отдельно на запись (создание/изменение/удаление). | ||
| 16 | |||
| 17 | Всё это позволяет максимально гибко настроить систему и через Административные панели системы выстраивать матрицу ролей и их полномочия. | ||
| 18 | |||
| 19 | (% class="table-bordered" %) | ||
| 20 | |(% style="width:476px" %)**Тема**|(% style="width:648px" %)**Описание ** | ||
| 21 | |(% style="width:476px" %)Реализация экранных форм с помощью административных панелей - "Управление правами доступа"|(% style="width:648px" %)((( | ||
| 22 | * Реализована модель данных | ||
| 23 | * Реализованы "Управление объектами доступа" | ||
| 24 | * Реализованы "Управление ключевыми словами" | ||
| 25 | * Реализованы "Управление наборами значений для атрибутов доступа" | ||
| 26 | * Реализованы "Управление полномочиями по ролям" | ||
| 27 | ))) | ||
| 28 | |(% style="width:476px" %)Перевод коннектора на работу через "Управление правами доступа"|(% style="width:648px" %)((( | ||
| 29 | * Реализованы доступы к объектам | ||
| 30 | * Реализованы типы сущностей: dataset | ||
| 31 | * Реализована защита доступов к представлениям | ||
| 32 | ))) | ||
| 33 | |(% style="width:476px" %)Реализована защита методов через "Управление правами доступа"|(% style="width:648px" %)((( | ||
| 34 | * Реализованы типы сущностей: business | ||
| 35 | * Реализована защита доступов к методам HATEOAS и к bff-методам | ||
| 36 | ))) | ||
| 37 | |(% style="width:476px" %)Выполнена настройка базовых ролей системы VKPHT|(% style="width:648px" %)((( | ||
| 38 | * Произведена первичная регистрация всех представлений | ||
| 39 | * Настроены первичные роли all_r и all_w | ||
| 40 | * Всем пользователям назначены проектные роли или предоставлены полные доступы в систему VKPHT | ||
| 41 | ))) | ||
| 42 | |(% style="width:476px" %)Реализация функции keywords, основанных на автоматической регистрации значений|(% style="width:648px" %)((( | ||
| 43 | * Реализованы keywords c типом token | ||
| 44 | * Реализованы keywords c типом value | ||
| 45 | ))) | ||
| 46 | |(% style="width:476px" %)Документация "ADM.Управление правами доступа"|(% style="width:648px" %)((( | ||
| 47 | * Выпущена первая версия эксплуатационной документации "ADM.Управление правами доступа" | ||
| 48 | ))) | ||
| 49 | |||
| 50 | = AWA. Управление нотификациями = | ||
| 51 | |||
| 52 | (% class="table-bordered" style="width:1109px" %) | ||
| 53 | |(% style="width:481px" %)**Тема**|(% style="width:626px" %)**Описание ** | ||
| 54 | |(% style="width:481px" %) |(% style="width:626px" %) | ||
| 55 | |(% style="width:481px" %)Отредактированы данные таблиц бд notification на стенде [[https:~~/~~/vkpht-dev.goodt.me>>url:https://vkpht-dev.goodt.me/editor/#/apps]] для миграции.|(% style="width:626px" %)Отредактированы данные таблиц бд notification на стенде [[https:~~/~~/vkpht-dev.goodt.me>>url:https://vkpht-dev.goodt.me/editor/#/apps]] для миграции: | ||
| 56 | удалены тестовые и закрытые записи, проставлены признаки у системных записей (is_system=true). | ||
| 57 | |(% style="width:481px" %)Добавление поля is_system|(% style="width:626px" %)Добавлено поле is_system c типом данных bool (true/false), со значением по умолчанию false в таблицы бд notification. | ||
| 58 | |(% style="width:481px" %)Добавление всплывающего сообщения при успешном создании события|(% style="width:626px" %)Добавили всплывающее сообщение при успешном создании события в реестрах "Уведомления о событиях" и "Ручные рассылки". | ||
| 59 | Текстовка: "Событие "Код события" "Название события" создано". | ||
| 60 | В сообщении присутствует гиперссылка, при нажатии на которую, происходит переход к созданному событию (автоматически устанавливается фильтр в код события): при нажатии на текст/кнопку записывается в хранилище переменная(которую слушают таблица и фильтр) и закрывается попап. | ||
| 61 | |(% style="width:481px" %)Добавление пагинации|(% style="width:626px" %)Добавлен на страницу выбора получателей инструмента управления количеством отображаемых записей - Пагинация. | ||
| 62 | |(% style="width:481px" %)Попап добавления получателей|(% style="width:626px" %)Вывели в табличном представлении (попап добавления получателей) табельный номер сотрудника. По атрибуту доступна фильтрация и поиск. | ||
| 63 | |(% style="width:481px" %)Добавление кнопки "Удалить всех"|(% style="width:626px" %)((( | ||
| 64 | В карточках "Добавить шаблон" и "Редактировать шаблон" реестров "Уведомления о событиях" и "Ручные рассылки" добавили кнопку "Удалить всех", при нажатии на которую удаляются все выбранные получатели. | ||
| 65 | ))) | ||
| 66 | |(% style="width:481px" %)Вывод полного списка получателей в отдельном попапе|(% style="width:626px" %)Реализован вывод полного списка получателей в отдельном попапе, а не в табличном представлении. Исправлено на странице Уведомления о событиях и Ручные рассылки. | ||
| 67 | |(% style="width:481px" %)Доработка виджета ElemCreateNitificationEvent|(% style="width:626px" %)((( | ||
| 68 | Доработка виджета ElemCreateNitificationEvent: кнопка "Отправить уведомления". Кнопка неактивна для событий, у которых не создан ни один шаблон уведомления. | ||
| 69 | ))) | ||
| 70 | |||
| 71 | = BPS. Управление фоновыми программам = | ||
| 72 | |||
| 73 | (% class="table-bordered" style="width:1109px" %) | ||
| 74 | |(% style="width:478px" %)**Тема**|(% style="width:629px" %)**Описание ** | ||
| 75 | |(% style="width:478px" %)Реализация фоновой программы TASKS_REASSIGNMENT.|(% style="width:629px" %)Реализация фоновой программы TASKS_REASSIGNMENT. Фоновая программа переноса задач, в случаях, когда у сотрудника появляется новое назначение и имеется закрытое старое назначение | ||
| 76 | |||
| 77 | = BPM. Управление конфигурацией бизнес-объектов = | ||
| 78 | |||
| 79 | (% class="table-bordered" %) | ||
| 80 | |**Тема**|**Описание ** | ||
| 81 | |Удаление добавленного статуса на экране Матрица статусных переходов|- Добавлена иконка корзины для удаления неиспользуемого в статусной модели статуса | ||
| 82 | |Исправление возможности использования различных сервисов при конфигурации справочников|- Проведен рефакторинг методов конфигурации севрисов, к которым возможно обращение для получения данных справочника | ||
| 83 | |Изменения в UX для справочников административной панели|- Проведены различные исправления и изменения в пользовательском пути при работе со справочниками административной панели | ||
| 84 | |Рефакторинг интерфейса заведения поля бизнес-объекта|((( | ||
| 85 | - Проведена группировка конфигурации поля бизнес-объекта | ||
| 86 | |||
| 87 | - Добавлены дополнительные возможности конфигурации | ||
| 88 | ))) | ||
| 89 | |Ведение нового типа владельца БО - employee |- Реализована механика и необходимые проверки для ведения бизнес-объектов с типом владельца - работник (employee) | ||
| 90 | |||
| 91 | = CFG. Управление конфигурацией = | ||
| 92 | |||
| 93 | (% class="table-bordered" %) | ||
| 94 | |(% style="width:484px" %)**Тема**|(% style="width:639px" %)**Описание ** | ||
| 95 | |(% style="width:484px" %)Доработка модели данных для учета системных записей и возможности управления их доступностью для редактирования при настройке системы на проекте.|(% style="width:639px" %)((( | ||
| 96 | * Структура таблиц обновлена с учетом признаков is_system и is_editable | ||
| 97 | * Изменения учтены в работе HATEOAS методов для таблиц | ||
| 98 | ))) | ||
| 99 | |||
| 100 | = INT. Управление интеграцией = | ||
| 101 | |||
| 102 | INT0 Общие требования | ||
| 103 | |||
| 104 | (% class="table-bordered" %) | ||
| 105 | |(% style="width:490px" %)**Тема**|(% style="width:633px" %)**Описание ** | ||
| 106 | |(% style="width:490px" %)Создание сервиса и БД интеграции | ||
| 107 | Создание структур данных|(% style="width:633px" %)((( | ||
| 108 | * Создан сервис и БД интеграции. | ||
| 109 | * Созданы структуры данных. | ||
| 110 | * Предзаполнены таблицы в БД. | ||
| 111 | * Развернут SFTP сервер. | ||
| 112 | |||
| 113 | |||
| 114 | ))) | ||
| 115 | |(% style="width:490px" %)Реализация метода разбора данных из файла в БД интеграции|(% style="width:633px" %)Реализован метод разбора xlsx файла **PutFileInBuffer **, проверка на структуру файла, на то что файл не пуст и забор его данных в БД интеграции. | ||
| 116 | |(% style="width:490px" %)((( | ||
| 117 | Регистрация модуля в метамодели и разработка базовых методов | ||
| 118 | )))|(% style="width:633px" %)((( | ||
| 119 | * Модуль интеграции зарегистрирован в метамодели. | ||
| 120 | * Реализован hateoas и представления бизнес-модели. | ||
| 121 | * Реализованы настройки работы с SFTP сервером. | ||
| 122 | * Реализованы методы: | ||
| 123 | ** **GetFileList **/api/import/buffer/file-list - Вызывается по кнопке "Создать поток" на странице правил обработки данных по шаблонам. Метод создает интеграционный поток и формирует список файлов соответствующие критериям (путь к сфтп, префикс, расширение). Регистрирует в системе записи интеграционных файлов (flow_file) | ||
| 124 | ** **GetFileData **/api/import/buffer/file-data - Вызывается по кнопке "Забрать данные в буффер" на странице правил обработки данных по шаблонам. Метод заполняет данные flow_file, вызывает метод **PutFileInBuffer**, вызывает метод **MoveFile **по результату забора данных | ||
| 125 | ** ** GetExecuteFlowFileListCheck **/api/integration/execution/check -Вызывается по нажатию "проверить без вставки" Метод проверяет данные в БД интеграции. | ||
| 126 | ** ** GetExecuteFlowFileListCheckInsert **/api/integration/execution/insert - Вызывается по нажатию "проверить и загрузить" Метод проверяет данные в БД интеграции и загружает в целевую систему. | ||
| 127 | ** **MoveFile - **забирает файл по указанному пути и перекладывает файл по указанному пути | ||
| 128 | * В рамках методов реализовано логирование ошибок. | ||
| 129 | * Доработана структура данных БД интеграции. | ||
| 130 | ))) | ||
| 131 | |(% style="width:490px" %)Разработка базовых интерфейсов для прохождения основного сценария|(% style="width:633px" %)((( | ||
| 132 | * Реализованы на UI основные таблицы: | ||
| 133 | ** Просмотр шаблонов. | ||
| 134 | ** Просмотр типов файла интеграционной платформы. | ||
| 135 | ** Просмотр состава данных шаблона интеграции. | ||
| 136 | ** Просмотр алгоритма проверки шаблонов интеграции. | ||
| 137 | ** Просмотр типов файлов для интеграции. | ||
| 138 | ** Просмотр реестра источников файлов для интеграции. | ||
| 139 | ** Просмотр правил обработки данных по шаблонам по интеграционным потокам. | ||
| 140 | ** Просмотр правил обработки данных по шаблонам. | ||
| 141 | ** Просмотр реестр интеграционных потоков. | ||
| 142 | ** Просмотр файлов интеграции. | ||
| 143 | ** Просмотр строк файлов интеграции. | ||
| 144 | ** Редактирование файлов интеграционного потока. | ||
| 145 | ** Редактирование карточки интеграционного потока. | ||
| 146 | ** Редактирование карточки правил обработки данных по шаблонам. | ||
| 147 | * Реализованы элементы на UI, которые обеспечивают вызов методов и прохождение всего сценария работы с интеграционным потоком на примере любого бизнес- объекта: | ||
| 148 | ** Создание потока через вызов метода. | ||
| 149 | ** Создание и обработки потока через вызов метода. | ||
| 150 | ** Забор данных в БД интеграции через вызов метода. | ||
| 151 | ** Проверка и загрузка через вызов метода. | ||
| 152 | ** Формирование и скачивание отчетности через вызов метода. | ||
| 153 | ** Скачивание пустого шаблона через вызов метода. | ||
| 154 | ))) | ||
| 155 | |(% style="width:490px" %)Разработка мастер методов для массового создания и обработки потоков |(% style="width:633px" %)((( | ||
| 156 | Реализованы мастер методы: | ||
| 157 | |||
| 158 | * **executeAllIntegrationSteps **/api/integration/template-flow/{id}/execute - Вызывается по кнопке "Создать и обработать поток" для определенного правила обработки. Мастер метод который вызывает внутри себя подряд все методы: | ||
| 159 | ** /api/import/buffer/file-list | ||
| 160 | ** /api/import/buffer/file-data | ||
| 161 | ** /api/integration/execution/check | ||
| 162 | ** /api/integration/execution/insert | ||
| 163 | * ((( | ||
| 164 | **ChainLaunch **/api/integration/template-flow/execute - Вызывается по кнопке "Создать и обработать все потоки поток" для определенного правила обработки. Мастер метод который вызывает внутри себя подряд все методы: | ||
| 165 | |||
| 166 | * /api/import/buffer/file-list | ||
| 167 | * /api/import/buffer/file-data | ||
| 168 | * /api/integration/execution/check | ||
| 169 | * /api/integration/execution/insert | ||
| 170 | ))) | ||
| 171 | ))) | ||
| 172 | |(% style="width:490px" %)Стабилизация интерфейса и работы системы|(% style="width:633px" %)((( | ||
| 173 | Свёрстаны все страницы интерфейса | ||
| 174 | |||
| 175 | Реализованы методы: | ||
| 176 | |||
| 177 | * **GetEmptyTemplate **api/integration/api/import/buffer/file/{id}/excel - Вызывается по кнопке "Скачать". Метод генерирует пустой шаблон для заполнения на основе данных БД. | ||
| 178 | * **ErrorLinesDownload **api/integration/api/template/{id}/generate - Вызывается по кнопке "Загрузить ошибочные строки". Метод генерирует файл сapi/integration/api/template/{id}/generate - Вызывается по кнопке "Загрузить о ошибочными строками, которые не загрузились в целевую систему. | ||
| 179 | |||
| 180 | |||
| 181 | ))) | ||
| 182 | |(% style="width:490px" %)Реализация методов загрузки и обработки шаблонов загрузки бизнес объектов, часть 1 |(% style="width:633px" %)((( | ||
| 183 | Для таблиц: | ||
| 184 | |||
| 185 | * Legal_entity | ||
| 186 | * Division | ||
| 187 | * Person | ||
| 188 | * Employee | ||
| 189 | * Position | ||
| 190 | * Role | ||
| 191 | * Division_team | ||
| 192 | |||
| 193 | Выполнено: | ||
| 194 | |||
| 195 | * Обновлена структура хранения данных в БД. | ||
| 196 | * Исправлены представления. | ||
| 197 | * Реализована обработка и вставка в целевую систему шаблонов. | ||
| 198 | * Подготовлены пустые xlsx шаблоны. | ||
| 199 | * Подготовлены заполненные xlsx шаблоны. | ||
| 200 | |||
| 201 | |||
| 202 | ))) | ||
| 203 | |(% style="width:490px" %)Реализация методов загрузки и обработки шаблонов загрузки бизнес объектов, часть 2|(% style="width:633px" %)((( | ||
| 204 | Для таблиц: | ||
| 205 | |||
| 206 | * Project | ||
| 207 | * Function | ||
| 208 | * Legal_entity_team | ||
| 209 | * Division_function | ||
| 210 | * Function_team | ||
| 211 | * Project_team | ||
| 212 | * Work_function | ||
| 213 | * Location | ||
| 214 | |||
| 215 | Выполнено: | ||
| 216 | |||
| 217 | * Обновлена структура хранения данных в БД. | ||
| 218 | * Исправлены представления. | ||
| 219 | * Реализована обработка и вставка в целевую систему шаблонов. | ||
| 220 | * Подготовлены пустые xlsx шаблоны. | ||
| 221 | * Подготовлены заполненные xlsx шаблоны. | ||
| 222 | |||
| 223 | |||
| 224 | ))) | ||
| 225 | |(% style="width:490px" %)Реализация методов загрузки и обработки шаблонов загрузки бизнес объектов, часть 3|(% style="width:633px" %)((( | ||
| 226 | Для таблиц: | ||
| 227 | |||
| 228 | * Structure | ||
| 229 | * Workplace | ||
| 230 | * Person_disability | ||
| 231 | * Person_privilege | ||
| 232 | * Personnel_document | ||
| 233 | * Employee_condition | ||
| 234 | * Placement | ||
| 235 | * employee_education | ||
| 236 | * work_experience | ||
| 237 | |||
| 238 | Выполнено: | ||
| 239 | |||
| 240 | * Обновлена структура хранения данных в БД. | ||
| 241 | * Исправлена представления. | ||
| 242 | * Реализована обработка и вставка в целевую систему шаблонов. | ||
| 243 | * Подготовлены пустые xlsx шаблоны. | ||
| 244 | * Подготовлены заполненные xlsx шаблоны. | ||
| 245 | |||
| 246 | |||
| 247 | ))) | ||
| 248 | |(% style="width:490px" %)Реализация методов загрузки и обработки шаблонов загрузки бизнес объектов, часть НМИ|(% style="width:633px" %)((( | ||
| 249 | Для таблиц: | ||
| 250 | |||
| 251 | * legal_entity_status | ||
| 252 | * legal_entity_type | ||
| 253 | * division_status | ||
| 254 | * division_group | ||
| 255 | * position_type | ||
| 256 | * position_status | ||
| 257 | * position_rank | ||
| 258 | * job_title | ||
| 259 | * position_category | ||
| 260 | * family_status | ||
| 261 | * system_role | ||
| 262 | * team_type | ||
| 263 | * team_status | ||
| 264 | * work_function_status | ||
| 265 | * project_type | ||
| 266 | * project_status | ||
| 267 | * function_status | ||
| 268 | * assignment_type | ||
| 269 | * assignment_status | ||
| 270 | * assignment_category | ||
| 271 | * job_title_cluster | ||
| 272 | * cost_center | ||
| 273 | * position_importance | ||
| 274 | * location_group | ||
| 275 | * project_team_status | ||
| 276 | * substitution_type | ||
| 277 | * citizenship | ||
| 278 | |||
| 279 | Выполнено: | ||
| 280 | |||
| 281 | * Обновлена структура хранения данных в БД | ||
| 282 | * Исправлена представления | ||
| 283 | * Реализована обработка и вставка в целевую систему шаблонов | ||
| 284 | * Подготовлены пустые xlsx шаблоны | ||
| 285 | * Подготовлены заполненные xlsx шаблоны | ||
| 286 | ))) | ||
| 287 | |||
| 288 | = ONB0 Общие требования = | ||
| 289 | |||
| 290 | (% class="table-bordered" %) | ||
| 291 | |=(% style="width: 490px;" %)((( | ||
| 292 | **Тема** | ||
| 293 | )))|=(% style="width: 634px;" %)((( | ||
| 294 | **Описание** | ||
| 295 | ))) | ||
| 296 | |(% colspan="1" style="width:490px" %)((( | ||
| 297 | Редактирование раздела "Полезные материалы" через административную панель | ||
| 298 | )))|(% colspan="1" style="width:634px" %)((( | ||
| 299 | У Администратора Системы появилась возможность редактировать состав раздела "Полезные материалы" процесса "Адаптация" через административную панель. Теперь состав раздела можно сконфигурировать: задать заголовок, описание и ссылку на материал из внешнего ресурса. | ||
| 300 | ))) | ||
| 301 | |(% style="width:490px" %)((( | ||
| 302 | Редактирование плана адаптации | ||
| 303 | )))|(% style="width:634px" %)((( | ||
| 304 | В рамках развития процесса "Адаптации" добавлена возможность через административную панель формировать состав задач и подзадач плана адаптации работников. | ||
| 305 | ))) | ||
| 306 | |(% style="width:490px" %)Настройка фоновой программы|(% style="width:634px" %)Реализована новая фоновая программа, которая формирует индивидуальный план адаптации нового работника исходя из настройки плана адаптации. Кроме этого, назначение опросов выведены в отдельный фоновый процесс, который при необходимости отключается. | ||
| 307 | |||
| 308 | = PLT0 Общие требования = | ||
| 309 | |||
| 310 | (% class="table-bordered" %) | ||
| 311 | |=(% style="width: 494px;" %)((( | ||
| 312 | **Тема** | ||
| 313 | )))|=(% style="width: 629px;" %)((( | ||
| 314 | **Описание** | ||
| 315 | ))) | ||
| 316 | |(% colspan="1" style="width:494px" %)Переход на RT-Core|(% colspan="1" style="width:629px" %)Переход на rt-core, включение TS2 в rt-core | ||
| 317 | |(% colspan="1" style="width:494px" %)Фоновая программа обработки переводов и тасков|(% colspan="1" style="width:629px" %)Новый функционал фоновой программы позволяет обрабатывать переводы работника и "переводить" на его новое назначение его исторические таски основных процессов | ||
| 318 | |||
| 319 | = PLT2 Оргструктура = | ||
| 320 | |||
| 321 | (% class="table-bordered" %) | ||
| 322 | |=(% style="width: 490px;" %)((( | ||
| 323 | **Тема** | ||
| 324 | )))|=(% style="width: 633px;" %)((( | ||
| 325 | **Описание** | ||
| 326 | ))) | ||
| 327 | |(% colspan="1" style="width:490px" %)((( | ||
| 328 | Новая структура для раздела "Образование" профиля работника | ||
| 329 | )))|(% colspan="1" style="width:633px" %)((( | ||
| 330 | В модель данных модуля добавлена новая структура для хранения данных образования работника | ||
| 331 | ))) | ||
| 332 | |(% colspan="1" style="width:490px" %)Органиграмма 2.0|(% colspan="1" style="width:633px" %)Обновление и изменение функционала визуализации Органиграммы | ||
| 333 | |||
| 334 | = Разворачивание системы = | ||
| 335 | |||
| 336 | (% class="table-bordered" %) | ||
| 337 | |**Сервис**|**Описание**|**Значения переменных**|**Примечания** | ||
| 338 | |rtl-core|Изменение или добавление|RTL_ROOT_URL: https:~/~/root_url| | ||
| 339 | |rtl-job|Изменение или добавление|((( | ||
| 340 | RTL_BACKEND_TASKSETTING_URL: [[__https:~~/~~/root_url/rtl-api/rt-core/old__>>url:https://root_url/rtl-api/rt-core/old]] | ||
| 341 | |||
| 342 | RTL_BACKEND_RTCORE_URL: [[__https:~~/~~/root_url/rtl-api/rt-core__>>url:https://root_url/rtl-api/rt-core]] | ||
| 343 | )))| | ||
| 344 | |hr-competence|Изменение или удаление| |Удален frontend сервис | ||
| 345 | |my-attestation|Изменение или удаление| |Удален frontend сервис | ||
| 346 | |vkph-admin|Изменение или добавление| |Добавлен frontend сервис |