Plugin BPM
Plugin BPM – расширение (плагин) языка SMaLL для анализа бизнес-процессов и последовательностей.
При прохождении процессов выполняемые действия часто оставляют след в технических системах, которые его обслуживают. По таким следам можно составить цифровой след экземпляра процесса, который содержит последовательность действий процесса по этому экземпляру.
Совокупность цифровых следов одного процесса называется событийным логом процесса. Команды плагина “Plugin BPM” работают с событийными логами процессов и позволяют получать максимум информации о том, как на самом деле протекают процессы, в чем их основные особенности и узкие места.
Так как данный плагин является частью основного плагина SMaLL Core, согласно его идеологии для того, чтобы вызвать любую из команд плагина BPM, нужно использовать следующую конструкцию:
... | apply \<some_command>
Описание файла bpm.config
В данном файле находятся следующие конфигурационные параметры плагина (сам файл должен находиться в той же папке, что и плагин):
processSchemaPath = "/opt/otp/lookups/dataset.csv" - путь к файлу с эталонной схемой процесса (подробнее ниже в описании команды checkconformance)
CHECKCONFORMANCE
Команда реализует поиск временных и топологических отклонений в инстансах процесса от эталонной схемы процесса. Путь к эталонной схеме процесса указывается в конфигурационном файле плагина (bpm.conf) в переменной processSchemaPath. Эталонная схема процесса должна содержать поля node, relation. Ниже представлен пример эталонной схемы:
node | relation |
---|---|
start | Data Input |
Data Input | Data Processing |
Data Processing | Waiting for Approval |
Waiting for Approval | Contract Signing |
Contract Signing | Contract Check |
Contract Check | Loan Provided |
Loan Provided | finish |
Формат входных данных
Во входных данных должны присутствовать следующие поля:
-
caseId \<string> - идентификатор инстанса процесса;
-
trace \<array\<string>>- последовательность событий инстанса процесса;
Синтаксис команды
checkconformance [trace_field=\<string>, schema_file=\<string>]
Опциональные параметры:
-
trace_field - имя колонки, которая содержит последовательности событий инстансов процесса. Значение по умолчанию - _traces.
-
schema_file - путь к файлу с эталонной схемой процесса. Значение по умолчанию берется из конфигурационного файла
Результат работы команды
Результатом работы команды является таблица с количеством строк, равным количеству строк на входе и следующими полями:
-
Trace - идентификатор инстанса процесса
-
metric - числовая метрика соответствия инстанса процесса эталонной схеме. Метрика находится в диапазоне от 0 до 1. При этом 1 означает полное соответствие инстанса схеме, а 0 - абсолютное несоответствие.
-
recomm_sc - информация о топологических и временных отклонениях инстанса процесса от эталонной схемы.
-
not_in_dict - события, отсутствующие в эталонном процессе, но присутствующие в анализируемом процессе
Пример использования
Исходные данные:
caseId | trace |
---|---|
2d1a0711 | Data Input,Data Processing,Data Input,Data Processing,Waiting for Approval,Contract Signing,Contract Check,Loan Granted,Loan Provided |
Запрос:
... | apply checkconformance trace_field=trace
Результат:
trace | metric | recomm_sc | not_in_dict |
---|---|---|---|
2d1a0711 | 0.66 | Отклонение: после статуса [Data Processing] на позиции 1 выполнена лишняя цепочка действий [Data Input, Data Processing] ||| Отклонение: после статуса [Contract Check] на позиции 6 выполнено лишнее действие [Loan Granted]] |
CLUSTER
Команда реализует кластеризацию инстансов процесса. В качестве результата возвращает сценарии прохождения процесса с указанием процентного соотношения сценариев.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор).
-
timestamp - метка времени исполнения события.
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор).
Синтаксис команды
cluster [aggregate=\<boolean>]
Опциональные параметры:
- aggregate – при установке значения параметра в true результатом выполнения команды будет список обнаруженных кластеров с дополнительной информацией. При установке значения параметра в false номер кластера будет добавлен к исходным данным в поле cluster. Значение параметра по умолчанию - true.
Результат работы команды
В зависимости от параметра aggregate, в результате использования команды возвращается таблица либо с числом строк равным количеству кластеров (при значении aggregate=True) и следующими полями:
-
_cleanTrace - сценарий, по которому проходит процесс в данном кластере.
-
cluster - номер кластера.
-
_percent - процент инстансов процесса, которые попадают в данный кластер.
-
_count - абсолютное количество инстансов процесса, которые попадают в данный кластер.
Либо, если aggregate=False, возвращается исходная таблица с добавленной колонкой cluster, в которой отображается номер кластера.
Пример использования
Исходные данные:
caseId | timestamp | eventId |
---|---|---|
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
4c6ef22a | 1559727424 | Data Input |
4c6ef22a | 1559727976 | Data Processing |
4c6ef22a | 1559728066 | Data Input |
4c6ef22a | 1559728213 | Data Processing |
4c6ef22a | 1559728408 | Offer Signing |
4c6ef22a | 1559793293 | Contract Check |
4c6ef22a | 1559812480 | Underwriting Started |
4c6ef22a | 1559812482 | Task Created |
4c6ef22a | 1559812571 | Task Assigned |
4c6ef22a | 1559813567 | Task Started |
4c6ef22a | 1559813725 | Task Delayed |
4c6ef22a | 1559819253 | Task Started |
4c6ef22a | 1559819274 | Data Processing |
4c6ef22a | 1559819310 | Underwriting Started |
4c6ef22a | 1559819312 | Task Created |
4c6ef22a | 1559819530 | Task Assigned |
4c6ef22a | 1559834790 | Task Started |
4c6ef22a | 1559835226 | Data Processing |
4c6ef22a | 1559835262 | Loan Granted |
4c6ef22a | 1559835273 | Loan Provided |
52b31eb5 | 1556291469 | Data Input |
52b31eb5 | 1556292526 | Data Processing |
52b31eb5 | 1556293768 | Waiting for Approval |
52b31eb5 | 1556293838 | Contract Signing |
52b31eb5 | 1556294389 | Contract Check |
52b31eb5 | 1556294463 | Loan Granted |
52b31eb5 | 1556294478 | Loan Provided |
Запрос:
| apply cluster aggregate=true
Результат:
_cleanTrace | _count | _percent | cluster |
---|---|---|---|
Data Input,Data Processing,Waiting for Approval,Contract Signing,Contract Check,Loan Granted,Loan Provided | 2 | 66.67 | 1 |
Data Input,Data Processing,Offer Signing,Contract Check,Underwriting Started,Task Created,Task Assigned,Task Started,Task Delayed,Task Started,Data Processing,Underwriting Started,Task Created,Task Assigned,Task Started,Data Processing,Loan Granted,Loan Provided | 1 | 33.33 | 2 |
COLLECTRACES
Команда преобразует событийный лог процесса к последовательностям событий.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор)
-
timestamp - метка времени исполнения события
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор)
Синтаксис команды
collecttraces
Результат работы команды
В результате использования команды collecttraces возвращается таблица со следующими полями:
-
caseId - идентификатор инстанса процесса
-
_traces - последовательность действий данного инстанса
-
_timestamp - метка времени старта инстанса процесса
Пример использования
Исходные данные:
caseId | timestamp | eventId |
---|---|---|
4da7a83e | 1557842640 | Data Input |
4da7a83e | 1557843412 | Data Processing |
4da7a83e | 1557843571 | Commitment Input |
4da7a83e | 1557845413 | Data Processing |
4da7a83e | 1557845468 | Waiting for Approval |
4da7a83e | 1557845831 | Contract Signing |
4da7a83e | 1557846588 | Contract Check |
4da7a83e | 1557846707 | Loan Granted |
4da7a83e | 1557846731 | Loan Provided |
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385464 | Data Input |
2d1a0711 | 1561385822 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
Запрос:
... | apply collecttraces
Результат:
caseId | _traces | _timestamp |
---|---|---|
4da7a83e | Data Input,Data Processing, Commitment Input, Data Processing, Waiting for Approval, Contract Signing, Contract Signing, Contract Check, Loan Granted, Loan Provided | 1557842640 |
2d1a0711 | Data Input, Data Processing, Data Input, Data Processing, Waiting for Approval, Contract Signing, Contract Check, Loan Granted, Loan Provided | 1561383698 |
DROPCONSECUTIVE
Команда реализует удаление повторяющихся событий в инстансах процесса.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор)
-
timestamp - метка времени исполнения события
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор)
Синтаксис команды
dropconsecutive
Результат работы команды
В результате использования команды dropconsecutive возвращается исходная таблица, но меньшего размера, если в ней были найдены повторы.
Пример использования
Повторы в исходных данных выделены жирным шрифтом.
Исходные данные:
caseId | timestamp | eventId |
---|---|---|
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385464 | Data Input |
2d1a0711 | 1561385465 | Data Input |
2d1a0711 | 1561385822 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561385938 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386041 | Contract Signing |
2d1a0711 | 1561386103 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386684 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
Запрос:
... | apply dropconsecutive
Результат:
caseId | timestamp | eventId |
---|---|---|
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385464 | Data Input |
2d1a0711 | 1561385822 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
FINDCYCLES
Команда производит поиск цикличностей длины от 2 событий и более в инстансах процесса.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор)
-
timestamp - метка времени исполнения события
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор)
Синтаксис команды
findcycles [aggregate=\<boolean>]
Опциональные параметры:
- aggregate – при установке значения параметра в true результатом выполнения команды будет список обнаруженных цикличностей с дополнительной информацией. При установке параметра в значение false обнаруженная цикличность будет указана для каждого инстанса процесса. Значение параметра по умолчанию - true.
Результат работы команды
В результате работы команды при параметре aggregate=True возвращается таблица со следующими полями:
-
cycle - этапы, формирующие цикл
-
count - Количество инстансов процесса, в которых присутствует данная цикличность
-
occurrences - Процент инстансов процесса, в которых присутствует данная цикличность
В результате работы команды при параметре aggregate=False возвращается таблица со следующими полями:
-
caseId - идентификатор инстанса процесса
-
cycle - этапы, формирующие цикл
Пример использования
Исходные данные:
caseId | timestamp | eventId |
---|---|---|
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385464 | Data Input |
2d1a0711 | 1561385822 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
Запрос:
... | apply findcycles aggregate=true
Результат:
cycle | count | occurrences |
---|---|---|
Data Input, Data Processing | 1 | 100 |
Запрос:
... | apply findcycles
Результат:
caseId | cycle |
---|---|
2d1a0711 | Data Input, Data Processing |
GETPROCESS
Команда реализует алгоритм HeuristicMiner для реконструкции бизнес-процессов из логов событий.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор)
-
timestamp - метка времени исполнения события
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор)
Синтаксис команды
fit [dependency_threshold=\<float>] [l1_threshold=\<float>] [l2_threshold=\<float>] [and_threshold=\<float>] [all_connected=\<boolean>] [long_distance_dependency=\<boolean>]]
Опциональные параметры:
-
dependency_threshold – числовой порог от 0 до 1, определяющий, при каком минимальном значении метрики следования (causality) пары событий считать их следующими друг за другом в модели процесса. Значение по умолчанию - 0.7.
-
l1_threshold – числовой порог метрики causality для случая циклов единичной длины. Значение по умолчанию - 1.0.
-
l2_threshold – числовой порог метрики causality для случая циклов длины 2. Значение по умолчанию - 1.0.
-
and_threshold – числовой порог для метрики, выявляющей параллельное следование между парой событий. Порог указывается от 0 до 1. Значение по умолчанию 0.5.
-
all_connected – Указание алгоритму использовать адаптивный способ нахождения dependency_threshold. Значение параметра по умолчанию - false.
-
long_distance_dependency – Указание алгоритму рассматривать при подсчете метрики causality цепочки длиной более 2 событий. Значение параметра по умолчанию - true.
Результат работы команды
В результате использования команды getprocess создаются следующие поля:
-
Node - Идентификатор узла процесса, из которого исходит связь (ребро).
-
Relations - Идентификатор узла процесса, в который входит связь (ребро).
-
Node_visits - Количество прохождений через узел процесса
-
Arc_visits - Количество прохождений по связи (ребру)
-
Fitness - Метрика качества реконструкции процесса. Измеряется от 0 до 1. При этом 0 означает полное отсутствие доверия полученной модели процесса, 1 - абсолютно полную и корректную модель процесса.
Пример использования
Исходные данные:
caseId | timestamp | eventId |
---|---|---|
4c6ef22a | 1559727424 | Data Input |
4c6ef22a | 1559727976 | Data Processing |
4c6ef22a | 1559728066 | Data Input |
4c6ef22a | 1559728213 | Data Processing |
4c6ef22a | 1559728408 | Offer Signing |
4c6ef22a | 1559793293 | Contract Check |
4c6ef22a | 1559812480 | Underwriting Started |
4c6ef22a | 1559812482 | Task Created |
4c6ef22a | 1559812571 | Task Assigned |
4c6ef22a | 1559813567 | Task Started |
4c6ef22a | 1559813725 | Task Delayed |
4c6ef22a | 1559813883 | Task Started |
4c6ef22a | 1559814316 | Task Delayed |
4c6ef22a | 1559814318 | Task Started |
4c6ef22a | 1559814327 | Task Delayed |
4c6ef22a | 1559814328 | Task Started |
4c6ef22a | 1559814364 | Task Delayed |
4c6ef22a | 1559814402 | Task Started |
4c6ef22a | 1559815751 | Task Delayed |
4c6ef22a | 1559815886 | Task Started |
4c6ef22a | 1559815911 | Task Delayed |
4c6ef22a | 1559816106 | Task Started |
4c6ef22a | 1559816257 | Task Delayed |
4c6ef22a | 1559818658 | Task Started |
4c6ef22a | 1559818773 | Task Delayed |
4c6ef22a | 1559819253 | Task Started |
4c6ef22a | 1559819274 | Data Processing |
4c6ef22a | 1559819310 | Underwriting Started |
4c6ef22a | 1559819312 | Task Created |
4c6ef22a | 1559819530 | Task Assigned |
4c6ef22a | 1559834790 | Task Started |
4c6ef22a | 1559835226 | Data Processing |
4c6ef22a | 1559835262 | Loan Granted |
4c6ef22a | 1559835273 | Loan Provided |
2cfe1c8c | 1560652724 | Data Receiving |
2cfe1c8c | 1560652726 | Data Processing |
2cfe1c8c | 1560652825 | Data Input |
2cfe1c8c | 1560835243 | Data Processing |
2cfe1c8c | 1560835301 | Waiting for Refusal |
2cfe1c8c | 1560835365 | Bank Refusal |
ce8c2dae | 1561020640 | Data Input |
ce8c2dae | 1561021162 | Data Processing |
ce8c2dae | 1561021220 | Data Input |
ce8c2dae | 1561021846 | Data Processing |
ce8c2dae | 1561022003 | Offer Signing |
ce8c2dae | 1561022776 | Contract Check |
ce8c2dae | 1561027729 | Underwriting Started |
ce8c2dae | 1561027731 | Task Created |
ce8c2dae | 1561027954 | Task Assigned |
ce8c2dae | 1561027955 | Task Started |
ce8c2dae | 1561028268 | Task Delayed |
ce8c2dae | 1561034757 | Task Started |
ce8c2dae | 1561034984 | Data Processing |
ce8c2dae | 1561034993 | Loan Granted |
ce8c2dae | 1561035008 | Loan Provided |
4da7a83e | 1557842640 | Data Input |
4da7a83e | 1557843412 | Data Processing |
4da7a83e | 1557843571 | Commitment Input |
4da7a83e | 1557845413 | Data Processing |
4da7a83e | 1557845468 | Waiting for Approval |
4da7a83e | 1557845831 | Contract Signing |
4da7a83e | 1557846588 | Contract Check |
4da7a83e | 1557846707 | Loan Granted |
4da7a83e | 1557846731 | Loan Provided |
52b31eb5 | 1556291469 | Data Input |
52b31eb5 | 1556292526 | Data Processing |
52b31eb5 | 1556293768 | Waiting for Approval |
52b31eb5 | 1556293838 | Contract Signing |
52b31eb5 | 1556294389 | Contract Check |
52b31eb5 | 1556294463 | Loan Granted |
52b31eb5 | 1556294478 | Loan Provided |
2d1a0711 | 1561383698 | Data Input |
2d1a0711 | 1561385422 | Data Processing |
2d1a0711 | 1561385464 | Data Input |
2d1a0711 | 1561385822 | Data Processing |
2d1a0711 | 1561385936 | Waiting for Approval |
2d1a0711 | 1561386040 | Contract Signing |
2d1a0711 | 1561386683 | Contract Check |
2d1a0711 | 1561386729 | Loan Granted |
2d1a0711 | 1561386746 | Loan Provided |
Запрос:
... | apply getprocess
Результат:
node | relations | node_visits | arc_visits | fitness |
---|---|---|---|---|
Task Created | Task Assigned | 3 | 3 | 0.547 |
Contract Signing | Contract Check | 3 | 3 | 0.547 |
Commitment Input | Data Processing | 1 | 1 | 0.547 |
Contract Check | Loan Granted | 5 | 5 | 0.547 |
Task Started | Task Delayed | 15 | 12 | 0.547 |
Task Delayed | Task Started | 12 | 12 | 0.547 |
Task Started | Data Processing | 15 | 3 | 0.547 |
Underwriting Started | Task Created | 3 | 3 | 0.547 |
Loan Granted | Loan Provided | 5 | 5 | 0.547 |
Data Processing | Waiting for Approval | 14 | 3 | 0.547 |
start | Data Input | 0 | 0 | 0.547 |
Data Processing | Data Input | 14 | 4 | 0.547 |
Data Processing | Commitment Input | 14 | 1 | 0.547 |
Waiting for Approval | Contract Signing | 3 | 3 | 0.547 |
Task Assigned | Task Started | 3 | 3 | 0.547 |
Data Input | Data Processing | 9 | 9 | 0.547 |
GRAPHVIEW
Команда приводит исходные данные к виду направленного графа с дополнительной информацией для отображения. Для получения интерпретируемого визуального представления процесса после использования этой команды необходимо использовать компонент Граф в системе EVA.
Формат входных данных
Команда принимает на вход журнал событий процесса, который должен содержать обязательные поля:
-
caseId - идентификатор инстанса процесса (допускается как строковое название, так и числовой идентификатор)
-
timestamp - метка времени исполнения события
-
eventId - идентификатор события процесса (допускается как строковое название, так и числовой идентификатор)
Синтаксис команды
graphview [sort_column=\<string>]
Опциональные параметры:
- sort_column - имя колонки, по которой будет проводиться дополнительная сортировка событий в случае совпадения их временных меток. Значение по умолчанию - sort_column.
Результат работы команды
В результате использования команды graphview возвращается таблица, описывающая ребра графа в каждой строке:
-
node - вершина начала ребра
-
relation - вершина, в которую приходит ребро
-
edge_description, relation_description - сервисные поля, необходимые визуальному компоненту для построения графа
Пример использования
Исходные данные:
В примере будет представлена часть стандартного журнала событий
caseId | timestamp | eventId |
---|---|---|
4c6ef22a | 1559727424 | Data Input |
4c6ef22a | 1559727976 | Data Processing |
4c6ef22a | 1559728066 | Data Input |
4c6ef22a | 1559728213 | Data Processing |
4c6ef22a | 1559728408 | Offer Signing |
4c6ef22a | 1559793293 | Contract Check |
4c6ef22a | 1559812480 | Underwriting Started |
Запрос:
... | apply graphview sort_column=timestamp
Результат: