Структура модуля "Управление обращениями"
========================================================================


.. contents:: Содержание
   :depth: 3
 
   
Основные сущности  
------------------------------------

Все объекты конфигурации модуля "Управления обращениями" для удобства поиска и навигации сгруппированы в следущие директории:


*  **Routes_templates** - Шаблоны маршрутов
*  **VMK** - Пользовательские компоненты (кастомизированные объекты интерфейса)
*  **blocking_processes** - Блокирующие процессы
*  **dict_incident** - Справочники
*  Формы: Обращение, Форма завершения обращения, Наряд, Сервисная команда, Внешний поставщик
*  Реестры: Обращения, Внешние поставщики, Наряды, Сервисные командаы, 

.. figure:: _static/Incident_structure_configurator_main.png

        Рис. 
        

Обращения
------------------------------------

Код: ``itsm_form_incident``

.. warning::

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

Структура Формы обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Все поля на форме обращения сгруппированы в следующие разделы:

1. Статус и группа полей статусов
2. Основная информация
3. Описание обращения
4. Описание решения
5. Контактная информация
6. Затронутая инфраструктура
7. Связанные сущности
8. История основных статусов

Подробнее о каждом из разделов:

1. Статус и группа полей статусов

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

Поле статус ссылается на справочник с кодом ``itsm_dict_incidentstatus``. Изменение/добавление нового статуса необходимо производить предварительно ознакомившись с разделом :ref:`incident_status` .


Поля расположенные ниже условно обозначены как Группа полей статуса. Продробнее об этом также читайте в разделе :ref:`incident_status` .


.. figure:: _static/Incident_form_status.png

        Рис. 



        
2. Основная информация

Ключевыми полями в этом разделе являются:

* Идентификатор ``itsm_form_incident_id``
* Дата регистрации ``itsm_form_incident_regdate``
* Автор ``itsm_form_incident_author``
* Оператор ``itsm_form_incident_responsiblemanager``
* Подразделение исполнителя ``itsm_form_incident_responsibleDepartment``
* Исполнитель ``itsm_form_incident_responsible``


.. figure:: _static/Incident_form_common.png

        Рис. 
        



3. Описание обращения

Ключевыми полями в этом разделе являются:

* Тема ``itsm_form_incident_theme`` - 
*При получении обращения через почту это поле заполняется значением - тема письма*

* Описание ``itsm_form_incident_description`` - 
*При получении обращения через почту это поле заполняется значением - тело письма*

* Дополнительная информация - динамическая таблица ``itsm_form_incident_addinfo`` с текстовым полем ``text`` - 
*При получении ответа на Запрос дополнительной информации по электронной почте, в этой таблице создается новая строка и в поле заполняется тело письма*

* Вложениия  - динамическая таблица ``itsm_form_incident_files`` с полем "Добавит файл" ``file`` - 
*При получении обращения и ответа на запрос доп.инфо через почту в эту дин.таблицу сохраняются все вложения электронных писем*

.. figure:: _static/Incident_form_description.png

        Рис. 
        
4. Описание решения

.. note::

    Поля в этом блоке заполняются автоматически копированием данных их файла формы завершении (при выборе статуса: Ожидает оценки пользователя). За копирование данных отвечает блокирующий процесс `event.blocking.interpreter.completion` 


* Код решения ``itsm_form_incident_decisiontype`` - выпадающий список со справочником ``itsm_dict_incidentdecision``

* Описание ``itsm_form_incident_decisiondescription`` - 

* Причина возникновения  ``itsm_form_incident_cause`` - выпадающий список со справочником ``itsm_dict_cause``

* Категория сбоя  ``itsm_form_incident_failCategory`` - выпадающий список со справочником ``itsm_dict_failCategory``

* Тип сбоя ``itsm_form_incident_failType`` - выпадающий список со справочником ``itsm_dict_failType``

* "Создавать запись в Базе Знаний" - Выбор вариантов ``itsm_form_incident_makenew_knowledge`` - 

*От наличия в этом поле включенного чекбокса зависит будет ли добавлена запись в Базу знаний*

* Файлы решения - динамическая таблица ``itsm_form_incident_decision_files`` с полем "Добавить файл" ``Файл``



.. figure:: _static/Incident_form_decision.png

        Рис. 
        
5. Контактная информация

Поле Контакт ``itsm_form_incident_contact`` - ссылка на реестр Контакты заполняется:

* вручную, при регистрации через интерфейс Synergy
* заполняется автоматически при регистрации через портал или почту.

Поля ``crm_form_contact_phone_phone`` динамической таблицы ``crm_form_contact_phone`` и ``crm_form_contact_email_email`` динамической таблицы ``crm_form_contact_email`` заполняются:

* механизмом сопоставления в скриптах соответсвюущих компонентов, при регистрации через интерфейс Synergy
* блок.процессом ``event.blocking.interpreter.email``, при регистрации через портал или почту.

.. note::

    Наличие значения в поле  ``crm_form_contact_email_email`` в первой строке динамической таблицы ``сrm_form_contact_email`` является ключевым для процесса отправки уведомлений пользователю.


.. warning::

    Реестр "Контакты" в версии Synergy Itsm 1.0 является рудиментом предыдущих версий и будет исключен в последующих версиях.
    
    
.. figure:: _static/Incident_form_conacts.png

        Рис. 
        
6. Затронутая инфраструктура


Поле "Затронутый сервис" ``itsm_form_incident_servicelink`` является ключевым - по нему, а также по полям 

*  ``itsm_form_incident_author`` (группа пользователя, являющиегося автором обращения) 
*  ``itsm_form_incident_priority`` (приоритет)

осуществляется связь обращения с SLA, получение длительности и расчет сроков исполнения обращения с указанными параметрами.


.. figure:: _static/Incident_form_service.png

        Рис. 
  


7. Связанные сущности

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

.. figure:: _static/Incident_form_problems.png

        Рис. 
        
8. История основных статусов

В этом разделе отображается основная информация по клюечвым статусам (На очереди, В работу, Ожидает оценки исполнителя).
Эти поля вынесены на форму для возможности получения отчетности путем стандартной выугрузке данных реестра в xls.

.. figure:: _static/Incident_form_history.png

        Рис. 
        



Структура Маршрута обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

* Основной условный переход
* Условный переход при завершении

.. _incident_status:

Что такое статус обращения?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

В терминологии продука Synergy ITSM статус - это набор следующий объектов и настроек:

* Значение справочника статусов
* Шаблон маршрута
* Переход в условном переходе маршрут реестра
* При необходимости: дополнительные поля ФЗ и логика их копирования в процессе event.blocking.interpreter.completion



Диаграмма состояний обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

.. figure:: _static/Incident_statechart.png

        Рис. 


Изменение переходов между статусами
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


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

1. В Конфигураторе открыть *Форму завершения инцидента*, скрипт ``itsm_form_incident_wcf_status.js``
2. В блоке ``switch (responseCode.code) { ... }`` изменить блок, соответствующий нужному статусу-источнику - указать статусы, которые будут доступны из данного статуса при выборе на форме завершения - коды статусов указаны в самом начале скрипта ``itsm_form_incident_wcf_status.js``.

Например, чтобы из статуса **Информация предоставлена** (код соответствующей работы в маршруте ``incident_info``)  были достуны статусы **Ожидание ответа пользователя, Ожидание оценки пользователя и Ожидание проблемы**, нужно изменить код следующим образом:


``// Статус 10 информация предоставлена
case 'incident_info':
newValueList([
WAITING_USER,
WAITING_USER_RATE,
WAITING_PROBLEM
]);
break;``

Список блокирующих процессов
------------------------------------

event.blocking.interpreter.counter.reopen
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется для получения данных о том, сколько раз обращение было направлено повторно от пользователя при оценке решения обращения. Он увеличивает значение поля ``itsm_form_incident_count_reopen`` на 1 единицу, если статус обращения является "Направлено повторно". 


event.blocking.interpreter.counter.wrongway
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для получения данных о том, сколько раз обращение было неверно направлено на очередь операторами первой линии. Он увеличивает значение поля ``itsm_form_incident_count_wrongway`` на 1 единицу, если статус обращения является "Неверно направлено". 

event.blocking.interpreter.incident.auto_assignment
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данное БП используется для автоматического назначения обращения исполнителям для услуг, у которых в карточке включена опция "Автоматическое назначение". Список исполнителей при этом берется из карточки сервиса из поля "Группа, ответственная за поддержку услуги". БП устанавливает статус обращения "На очереди" и направляет обращение в работу ответственным исполнителям.  Если у сервиса по обращения не включена опция "Автоматического назначения", то обращение идет дальше по маршруту на первую линию. 

event.blocking.interpreter.incident.durationOfWork
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для подсчета времени нахождения на первой линии (в т.ч. времени реакции), на второй линии (в т.ч. времени реакции), у внешних поставщиков. Он заполняет поля в скрытой таблице на обращении, а точнее следующие поля:
* Первая линия:
    *   Время реакции в минутах в абсолютном времени
    *   Время решения в минутах
    *   Время решения в часах
    *   Просрочено ли?
* Вторая линия:
    *   Время реакции в минутах в рабочем времени
    *   Время решения в часах
    *   Просрочено ли?
* Внешние поставщики:
    *   Время решения в часах
    *   Просрочено ли?
* Суммарное время решения в часах

В дальнейшем эти данные используются для отчетов, дашбордов, для ведения статистики. 


event.blocking.interpreter.responsible.duration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП используется для получения данных о продолжительности работы по обращению для исполнителя. Он по сервису обращения находит карточку данного сервиса и в таблице данных по SLA находит к какой группе относится автор обращения. По приоритету обращения БП получает продолжительность времени разрешения запроса для данного пользователя и заполняет его в поле Продолжительность ``itsm_form_incident_responsible_duration`` для исполнителя.

event.blocking.interpreter.timer.date
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП к текущей дате добавляет 16 рабочих часов (число можно поменять в БП) по рабочему календарю и полученную дату заполняет поле  "Дата таймера" ``itsm_form_incident_timerDate``. Эта дата в дальнейшем при отправлении обращения на оценку инициатору используется как дата запуска таймера. Данный таймер запускает маршрут, который завершает работу инициатора по оценке и переводит обращение в статус "Закрыто". 

event.blocking.interpreter.incident.relations.ci
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется для копирования данных о массовом обращении в затрагиваемые конфигурационные единицы. Если обращение является массовым, БП получает все затронутые конфигурационные единицы и в карточку каждой КЕ в таблицу "Массовые инциденты" в разделе "Связанные сущности" добавляет ссылку на данное обращение.

event.blocking.interpreter.incident.close_child
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данные БП переводит все дочерние обращения в статусе "Ожидает закрытия массового инцидента" массового инцидента в статус "Закрыто" и заполняет данные по решению обращения.

event.blocking.interpreter.mass_incident
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП записывает ссылку текущего обращения в поле ``itsm_form_incident_child`` в карточку массового инцидента, закрытия которого он ожидает для решения обращения. В дальнейшем при закрытии обращения по массовому инциденту, все обращения в поле ``itsm_form_incident_child`` будут автоматически закрыты.

event.blocking.interpreter.incident.supplier.duration
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

event.blocking.interpreter.notification.supplier
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП отправляет внешнему поставщику на указанный на обращении почтовый адрес уведомление  о назначении обращения в работу. Шаблон уведомления настраивается в реестре "Настройки уведомлений".

event.blocking.interpreter.incident.add_to_problem
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Данный БП используется при направлении обращения в статус "Ожидает закрытия проблемы". При этом указывается проблема, решение которой необходимо для данного обращения. БП записывает обращение в поле "Инциденты" на карточке проблемы.

event.blocking.interpreter.incident.index.tagcloud
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Данный БП добавляет в индекс для визуализации "Облако тегов" слова из темы и описания обращения, при этом убирая слова-исключения и заменяя на слова-синонимы. Список слов-исключений и слов-синонимов берется из реестра синонимов и реестра исключений.


event.blocking.interpreter.completion
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает ход выполнения по обращению
2. Определяет последнюю завершенную работу
3. Определяет файл по форме завершения в папке Прочие для этой работы
4. Копирует данные с найденного файла формы завершения на форму обращения (меняет статус и записывает значения группы полей статуса)

event.blocking.interpreter.email (не актуален)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает id записи реестра Контакты, выбранного в поле  Автор
2. Копирует данные с найденной записи реестра Контакты на форму обращения


event.blocking.itsm.send.rate
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает email с формы обращения (таблица контактов автора)
2. Получает формат уведомления для статуса Ожидает оценки пользователя
3. Отправляет на найденный email уведомление о необходимости подтвердить завершение решения с двумя ссылками "Отправлен повторно", "Завершение подтверждено"
*Прим. После отправки процесс разблокируется. По нажатию на ссылку завершится текущая на тот момент работа "Ожидание оценки". Подробнее - в разделе статуса)*

event.blocking.incident.calc.status.1
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Получает из формы SLA время решения и время реакции по параметрам данного обращения
2. Записывает их на форму обращения
3. Рассчитывает плановую дату завершения с учетом рабочего календаря
4. Записывает плановые даты завершения на форму обращения


event.blocking.interpreter.incident.escalation
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Ищет просроченные обращения в открытых статусах, группирует их по подразделению исполнителя
2. Отправляет на почту руководителю подразделения исполнителя уведомление со списком просроченных обращений и исполнителями
3. Увеличивает счетчик "уровня эскалации" на единицу.
4. Для обращений с уровнем эскалации более или равным 1 - уведомления также направляются вышестоящим руководителям (если уровень эскалации 1 - начальнику руководителя подразделения исполнителя, если 2 - добавляется уведомление начальнику начальника и т.д.)


event.blocking.interpreter.incident.status_history
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

**Что делает процесс?**

1. Блокирующий процесс срабатывает после смены статуса (после БП event.blocking.interpreter.completion) и записывает данные (статус, время начала статуса, исполнителя, подразделение исполнителя, приоритет, услугу, плановое время завершения) по смене статуса в динамическую таблицу ``itsm_form_incident_table_exec``.
2. Рассчитывает время нахождения в предыдущем статусе (в рабочих часах).


Дополнительные механизмы
------------------------------------

Переназначение обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Получает ход выполнения по обращению
2. Завершает текущую работу по обращению
3. Создает новую работу по обращению для указанного пользователя со статусом "В процессе"

*Прим. Функция переназначения работ позволяет оператору завершить работу, в которой он не является ни исполнителем, ни автором*

Для отображения кнопки у пользователя, данного пользователя необходимо добавить в группу *itsm_group_reassign_access*. Кнопка "Переназначить" доступна для статусов обращений: "На очереди", "В процессе", "Информация предоставлена". При необходимости в ВМК ``button_reassign_access`` можно добавить требующиеся статусы.

Операции над фильтрами
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Для всех обращений в указанном преднастроенном фильтре:

1. Для всех записей в указанном фильтре (фильтр указывается через id) совершает одно из действий с маршрутом - прервать, запустить, завершить, ничего не делать -  с присвоением всем записям в фильтре значений выбранных полей статуса, решения и т.д.


Операции над выборкой
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Реестр "Операции над выборкой" доступен из клиентской части Synergy в Хранилище -> Реестры. На АРМ для вызова записи реестра необходимо на основной таблице выбрать несколько обращений, отметив галочкой в начале строки, и в меню "Действия" над таблицей выбрать нужный статус. Для всех обращений произвольной выборки завершается текущая работа с формой завершения с заполненными полями указанного статуса и группы полей статуса.


Смена приоритета
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Меняет приоритет обращения
2. Пересчитывает потраченное в текущем статусе время и записывает в системные поля
3. Прерывает и запускает маршрут - чтобы время по SLA пересчиталось для нового приоритета

Для отображения кнопки у пользователя, данного пользователя необходимо добавить в группу *itsm_group_priority_change*. Кнопка "Сменить приоритет" доступна для статусов обращений: "На очереди", "В процессе", "Направлен повторно". При необходимости в скрипте можно добавить требующиеся статусы.



Универсальные уведомления
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

1. Скрипт запускается ежедневно - создаёт и запускает запись реестра "Универсальные уведомления".
2. В блок-процессе происходит рассчет и групировка просроченных обращений по подразделениям.
3. Происходит рассылка уведомлений руководителям подразделений, в которых просрочены обращения. Если обращение просрочено не первый раз, происходит эскалация, - уведомление отправляется руководителю вышестоящего подразделения.

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

При необходимости можно создать и запустить пересчет вручную - в служебном реестре "Универсальные уведомления".


Создание проблемы из обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Для создания проблемы из обращения отображается кнопка "В проблему". По нажатию на нее создается запись реестра "Проблемы" и поле "Источник" заполняется ссылкой на обращение. Также дополнительно копируются данные из обращения в проблему.

Данная кнопка становится доступной только после активации записи реестра обращения и для определенных статусов. Список статусов, при которых отображается данная кнопка на АРМ, настраивается в записи реестра "Настройки АРМ". 


.. figure:: _static/armSettings.png

        Рис. Настройки АРМ

Отображение кнопки в клиентской части Synergy настраивается в скрипте на статусе обращения (``itsm_form_incident_status``). Текст скрипта:  


::
    
    if(window.location.href.indexOf('Synergy') !== -1) {
        let buttonProblem = $(`[document_id="${getDocID()}"]`).closest('tbody').find('[data-button="APPROVE"]:contains("В проблему")').closest('tr');
        if([3].indexOf(Number(val)) === -1) {
            buttonProblem.hide();
          } else {
            buttonProblem.show();
      }      
    }   

При необходимости указания дополнительных статусов кроме статуса "В процессе", в массив через запятую нужно добавить порядковые номера других статусов из справочника "Статусы инцидента". Например: if([3, 7, 6].indexOf(Number(val)) === -1). 

По умолчанию, кнопка "В проблему" доступна для статуса "В процессе".

Создание запроса на изменение из обращения
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Доступна возможность создания запросов на изменение из обращений. Для этого отображается кнопка "Запрос на изменение", по нажатию на которую создается запрос на изменение на основе обращения и поле "Ссылка на обращение" заполняется ссылкой на документ, в поле "Источник" указывается "Обращение". Также дополнительно копируются данные из обращения в запрос на изменение. 

Данная кнопка доступна для пользователей группы ``itsm_group_button_rfc`` на статусах обращений "Зарегистрировано", "Информация предоставлена", "На очереди", "В процессе". При необходимости в скрипте можно добавить или убрать нужные статусы, а также данные копируемые из обращения в запрос на изменение.


   