Skip to content

Latest commit

 

History

13 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

itilflow — этапы маршрута обработки заявок для GLPI 11

English · Русский

Плагин для GLPI 11, который заставляет заявку идти по регламенту: этап за этапом, в заданном порядке, через нужные подразделения — и не даёт закрыть её, пока регламент не пройден.


Зачем это нужно

В GLPI есть задачи, дочерние заявки и согласования. Чего в ней нет — это порядка. Ничто не мешает технику закрыть заявку, минуя согласование ИБ; ничто не подскажет, что перед выдачей ноутбука сотрудника надо оформить в кадрах; и никакой штатный отчёт не ответит на вопрос «на каком этапе у нас застревают заявки и на сколько».

Типичный пример — выдача рабочего места новому сотруднику. Процесс проходит через пять отделов:

согласование бюджета → наличие на складе → оформление в кадрах
    → согласование доступов в СБ → настройка и установка ПО → выдача под акт

Без маршрута это либо одна заявка, в которой все шаги перечислены в описании и половина забывается, либо шесть отдельных заявок, которые никто не связывает между собой. С маршрутом это одна заявка, которая сама создаёт нужный объект в нужном отделе в нужный момент — и физически не даёт перескочить шаг.

Маршрут по подразделениям

Восемь этапов, пять подразделений. Колонки показывают, как одна заявка семь раз пересекает организационные границы. Пунктирный контур — необязательный этап, красная линия — единственный обратный переход.

Что делает плагин

Добавляет ровно одно, чего нет в штатной системе: управляемый переход между этапами и запрет действий вне текущего этапа.

Сроки, права, уведомления и отчётность остаются за GLPI. Собственных статусов заявки, собственных часов и собственной системы прав плагин не заводит — иначе сломались бы штатная отчётность и настройка жизненного цикла в профилях.

Ядро GLPI не правится, используются только штатные точки расширения.

Ключевой механизм

Объект этапа — задача, дочерняя заявка или запрос на согласование — создаётся в момент входа в этап, а не все сразу при старте маршрута. Поэтому будущие этапы физически не существуют, и отметить их выполненными нечем. Это и есть основной способ соблюдения порядка, а не проверка в интерфейсе, которую можно обойти через API.

Как это выглядит

Маршрут и его этапы настраиваются в отдельном разделе администрирования. Таблица этапов показывает весь регламент одним экраном: порядок, режим исполнения, ответственных, организационную единицу, обязательность отчёта и реакцию на отказ согласующего.

Список этапов маршрута

На заявке появляется вкладка «Маршрут этапов»: состояние каждого этапа, созданный объект, кнопки управления и счётчик пройденных этапов в заголовке вкладки.

Вкладка маршрута на заявке

Установка

# распаковать в каталог плагинов GLPI
tar -xzf itilflow-1.6.0.tar.gz -C /var/www/glpi/plugins/
chown -R www-data:www-data /var/www/glpi/plugins/itilflow

# установить и включить
php /var/www/glpi/bin/console plugin:install itilflow --username=glpi
php /var/www/glpi/bin/console plugin:activate itilflow

То же можно сделать через интерфейс: Настройки → Плагины.

После установки появляются пять таблиц, два права в профилях и штатное автоматическое действие «Контроль сроков этапов». Проверить: Настройки → Автоматические действия — задача должна быть в списке со статусом «Запланировано».

Требования: GLPI 11.0.0 — 11.99.99. Проверено на 11.0.8. Ничего кроме самой GLPI не требуется — ни composer, ни npm, ни внешних сервисов.

Три режима исполнения этапа

Один режим на все случаи не работает: этап внутри отдела и этап, уходящий в другую организационную единицу, — принципиально разные вещи, потому что видимость заявки в GLPI даёт участие в ней, а не наличие задачи.

Режим Что создаётся Когда применять Как закрывается
Задача в заявке задача с группой-исполнителем внутри той же заявки маршрут целиком внутри одного отдела; самый дешёвый режим исполнитель нажимает «Завершить этап»
Дочерняя заявка отдельная заявка в целевой сущности со связью «дочерняя» этап уходит в другой отдел; даёт этапу свой SLA и своё разграничение видимости автоматически, когда дочернюю переводят в «Решена»
Согласование штатный запрос на согласование GLPI со ступенью и порогом утверждение руководителем, ИБ, владельцем системы, бюджетом автоматически, по решению согласующего

Статус заявки по ходу маршрута

У этапа есть поле «Статус объекта на этапе»: когда этап берётся в работу, заявка получает выбранный статус. Без него заявка висит в исходном статусе всю дорогу, и по списку заявок не понять, на какой стадии процесс — согласование это, ожидание ответа или уже работа.

Список статусов берётся у типа объекта маршрута, поэтому для заявки, изменения и проблемы он свой. Завершающих статусов в списке нет: закрытие — дело всего маршрута, за него отвечает «Запрещать решение до прохождения маршрута».

Смена пишется в ленту строкой «Статус: Новая → Ожидание». По умолчанию стоит «Не менять» — маршруты, настроенные до 1.6.0, ведут себя как прежде.

Согласование не изобретается заново: в GLPI уже есть замещающие согласующие, коллективное согласование с порогом процентов, уведомления и отчёты. Плагин только создаёт запрос и ждёт результата.

Когда согласующий заранее неизвестен

У этапа-согласования есть поле «Кто согласует». По умолчанию согласующий задаётся при настройке этапа. Второе значение — «указывается при прохождении»: этап открывается и ждёт, пока исполнитель заявки или администратор процессов укажет конкретного человека и основание выбора.

Это нужно там, где согласующий определяется по обстоятельствам обращения и по источнику вне GLPI. Пример, из которого возможность и выросла: доступ к сетевой папке согласует её владелец, а реестр владельцев ресурсов ведётся отдельно от системы. Диспетчер смотрит реестр и указывает владельца — а система сохраняет, кто выбрал, кого и почему.

Маршрут при ожидании не считается остановленным. В ленте заявки появляется запись об ожидании, а после указания — запись с основанием. Лист согласования показывает и выбор, и обоснование: документ остаётся пригодным для аудита. Подменить согласующего после создания запроса нельзя.

Согласующих можно указать несколько, и каждый согласует отдельно: своим запросом, своим решением. Так собирается регламент вида «виза руководителя заявителя плюс виза владельца ресурса» — одним этапом, а не двумя. Итог этапа считается по его же полю «Порог согласования»: при 100% нужны все визы (после первой в ленте появляется «Ожидаем ещё N»), при 50% достаточно половины. Отказ отклоняет этап сразу, как только порог становится недостижим.

Контроль порядка

GLPI проверяет права и меняет данные на двух разных уровнях, и плагин перехватывает оба. Это не дублирование: проверка прав не вызывается при программном изменении объекта, поэтому одного уровня недостаточно.

Уровень Что делает Что закрывает
Проверка прав отзывает право на объекты чужого или неактивного этапа форма заявки, Kanban, массовые действия, REST API — кнопка просто не показывается
Изменение объекта отменяет операцию целиком всё перечисленное плюс любые программные изменения; обойти нечем — внутри метода сохранения GLPI

Три режима внедрения

Включать запрет сразу на живом потоке нельзя: получите поток жалоб и не поймёте, где регламент расходится с практикой. Режим переключается на каждом маршруте отдельно.

Режим Поведение Когда
Журнал всё разрешено, нарушения записываются молча первый месяц: соберёте реальную статистику отклонений
Предупреждение действие проходит, фиксируется, исполнитель видит предупреждение переходный период, пока команда привыкает
Запрет операция отменяется с объяснением когда процесс устоялся и все с ним согласны

Отдельное право «Обход маршрута» снимает контроль для конкретного профиля — для дежурного диспетчера, который должен уметь разрулить затор. Действие всё равно попадает в журнал нарушений.

Как маршрут запускается

Маршрут запускается действием штатного бизнес-правила, а не отдельным механизмом плагина. Администратор настраивает старт теми же критериями, что и всё остальное в GLPI, и второго языка условий в системе не появляется.

  • Условие: категория заявки равна вашей.
  • Действие: «Запустить маршрут этапов» → назначить → ваш маршрут.

Если добавить форму каталога услуг и жёстко задать в её настройках категорию, инициатор не сможет ошибиться с выбором — цепочка замкнётся сама:

Запуск маршрута

Маршрут можно запустить и вручную: на заявке вкладка «Маршрут этапов» → выбрать маршрут → «Запустить маршрут». Нужно право «Маршруты этапов».

Организационные единицы

Заявка в GLPI принадлежит ровно одной организационной единице. Поэтому межотдельный процесс — это не одна заявка, а дерево: родительская там, где инициатор, и по дочерней на каждый этап, уходящий в другую единицу.

Три стратегии выбора единицы для этапа:

  • Сущность родительской — этап остаётся там же. Весь процесс внутри филиала.
  • Заданная сущность — всегда в указанной. Централизованная служба: одна служба ИБ на весь холдинг.
  • Сущность группы — вычисляется от группы-исполнителя. Исполнитель определяется правилом, а не жёстко.

Ловушка, о которой GLPI не предупреждает. Модель данных не запрещает назначить исполнителем группу чужой организационной единицы — такая запись создаётся без единой ошибки, фильтрует только выпадающий список в интерфейсе. В результате появляется заявка, назначенная на группу, которая её не видит, и она зависает навсегда. Плагин проверяет это сам: при несовпадении маршрут останавливается с понятным сообщением, а не создаёт «мёртвую» заявку.

Сроки

Собственных часов плагин не заводит. У задачи в GLPI нет и не может быть своего SLA — это ограничение модели данных. Поэтому срок этапа делается штатным SLA дочерней заявки: обратный отсчёт на форме, рабочий календарь, эскалации, штатные отчёты по нарушениям сроков.

Отдельно у этапа есть поле «срок этапа, минут» — это не трудоёмкость, а дедлайн для отметки просрочки. Отсчёт по рабочему календарю маршрута. Просрочку отслеживает автоматическое действие: помечает шаг, пишет личный комментарий на заявку, кладёт запись в журнал. Срабатывает один раз и работу не блокирует — просроченный этап нормально закрывается.

Независимо от режима плагин записывает фактическую длительность каждого шага. Это то, чего в GLPI нет вообще, и ради чего затевается вся конструкция: отчёт «на каком этапе стоит процесс» и «сколько на самом деле занимает согласование ИБ».

Прозрачность для инициатора

Каждый переход между этапами пишется публичным комментарием в ленту заявки — инициатор следит за ходом, не обращаясь в поддержку:

Этап 1. Проверка наличия на складе — выполнен. Исполнитель: Смирнов Сергей. Что сделано: Ноутбук Lenovo T14, инв. 004977, зарезервирован.

Этап 2. Определение состава ПО — в работе. Ответственный: Служба поддержки L1. Пройдено этапов: 1 из 5.

Плюс упрощённая таблица этапов на вкладке в интерфейсе самообслуживания. Оба канала отключаются флагами маршрута независимо друг от друга — для процессов, детали которых заявителю не показывают.

Эксплуатация

  • Передача этапа другому исполнителю с обязательной причиной. Задача переезжает вместе с этапом, прежний исполнитель теряет право её закрыть.
  • Отзыв заявки инициатором с обязательной причиной, если маршрут это разрешает.
  • Остановка и возобновление маршрута администратором процессов.
  • Лист согласования — печатная сводка прохождения для разбора и аудита.
  • Отчёт по узким местам — по этапам: прохождения, средняя, медиана, максимум, просрочки, возвраты, передачи.

Как читать отчёт: средняя длительность обманчива. Затор виден там, где максимум сильно больше медианы — большинство заявок проходит этап быстро, а часть застревает надолго, и разбирать надо именно эту часть. Много возвратов — плохо сформулированы требования к предыдущему этапу; много передач — неверно выбран ответственный.

Версионирование

Каждое сохранение маршрута увеличивает номер версии. Заявка запоминает версию на старте и доигрывает её до конца. Правьте регламент спокойно: заявки в работе не поменяют правила игры на ходу, а отчёты за прошлый квартал не перестанут сходиться.

Ограничения

Честный список того, чего плагин не делает.

  • Параллельных этапов нет. Маршрут строго линейный: один активный этап в каждый момент. Возвраты на предыдущие этапы есть, ветвлений нет.
  • Условных этапов нет. Пропустить этап можно вручную, если он помечен необязательным, но автоматического «пропустить, если сумма меньше N» нет.
  • Полосы этапов в панели свойств заявки нет. Точки расширения для этой области в GLPI 11.0.8 объявлены, но при отрисовке формы заявки не вызываются. Весь интерфейс маршрута собран на вкладке заявки.
  • Своих уведомлений плагин не шлёт. Работают штатные уведомления GLPI о задачах, дочерних заявках и согласованиях. О просрочке письмо не рассылается.
  • Дочерние заявки поддерживаются для типа «Заявка». Для изменений и проблем доступны режимы «Задача» и «Согласование».
  • Интерфейс только на русском языке. Строки вписаны в код, каталога переводов нет. Английской локализации на данный момент не существует.

Чего плагин не делает намеренно

Не заводит собственных статусов заявок, не считает своих часов вместо SLA и OLA, не строит свою систему прав вместо профилей и организационных единиц, не шлёт уведомления в обход штатных шаблонов и не прячет нарушения: всё, что заблокировано, видно в журнале и объяснено пользователю текстом, а не кодом ошибки.

Права в профилях

Администрирование → Профили → [профиль] → Настройки

Право Кому давать Что открывает
Маршруты этапов администратор процессов, руководитель поддержки создание и правка маршрутов и этапов, запуск вручную, прерывание и возобновление, журнал нарушений
Обход маршрута диспетчер, дежурный администратор — выдавать осознанно закрыть чужой этап и этап вне очереди в обход контроля

Про право «Согласовать запрос / инцидент». Отдельного права согласующему для работы маршрута не нужно. В GLPI 11 форма ответа на запрос гасится по CommonITILValidation::canAnswer(), а он смотрит только на то, назначен ли пользователь согласующим, и права профиля не учитывает. Само право фильтрует другое — кого предлагать в штатном выборе согласующего (dropdownValidator), а плагин назначает согласующего программно и этот выбор не использует.

Проверено на GLPI 11.0.8: пользователь со штатным профилем Technician, у которого флагов согласования нет, успешно ответил на запрос, и маршрут перешёл на следующий этап. До версии 1.3.2 плагин выдавал на такой настройке предупреждение — оно было ложным и удалено.

Документация

Лицензия

GNU General Public License версии 3 или более поздней. Полный текст — в файле LICENSE.

Copyright (C) 2026 itilflow contributors

Программа распространяется в надежде, что окажется полезной, но без каких-либо гарантий.

About

Этапные маршруты обработки заявок для GLPI 11 · Staged ticket routes for GLPI 11

Topics

Resources

Stars

3 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages