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


.. 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

        Рис. 
  
Поле Приоритет ``itsm_form_incident_priority`` не доступно пользователю на редактирование и вычисляется исходя из значений 
полей Срочность ``itsm_form_incident_urgency`` и Воздействие ``itsm_form_incident_influence`` в основном скрипте scipt.js формы обращения:

:: 

    //  вычисление приоритета
    (function calculatePriority() {
    var CRITICAL_INCIDENT = 1;

    var itsm_form_incident_urgency = "itsm_form_incident_urgency";
    var itsm_form_incident_influence = "itsm_form_incident_influence";
    var itsm_form_incident_major = "itsm_form_incident_major";
    var itsm_form_incident_status = "itsm_form_incident_status";
    var itsm_form_incident_priority = "itsm_form_incident_priority";

    var urgencyModel = playerModel.getModelWithId(itsm_form_incident_urgency);
    var influenceModel = playerModel.getModelWithId(itsm_form_incident_influence);
    var majorModel = playerModel.getModelWithId(itsm_form_incident_major);
    var priorityModel = playerModel.getModelWithId(itsm_form_incident_priority);

    function calcPriority(){
        var urgencyValue = parseInt(urgencyModel.getValue()[0]);
        var influenceValue = parseInt(influenceModel.getValue()[0]);
        var isMajor = majorModel.getValue() !== null && majorModel.getValue().length > 0 && majorModel.getValue()[0] == '1';

        var priorityValue = urgencyValue + influenceValue - 1;

        if(isMajor) {
            priorityValue = CRITICAL_INCIDENT;
        }
        priorityModel.setValue(priorityValue+"");
    }

    on(urgencyModel, "valueChange", "calcPriority", calcPriority);

    on(influenceModel, "valueChange", "calcPriority", calcPriority);

    on(majorModel, "valueChange", "calcPriority", calcPriority);
    }());




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

        Рис. 


Маршрут обращения
------------------------------------


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


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

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

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

event.blocking.interpreter.email
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

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

event.blocking.interpreter.current.date
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

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

1. Сохраняет значение текущей даты (на момент запуска данного БП) на форму обращения

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


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

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

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

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

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


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

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

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

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

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


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


Общие настройки
------------------------------------


Настройки интеграции с почтой
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


Настройки уведломлений
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~