## subprocess.md ### Types Есть типы процессов: - процесс \ подпроцесс; это условность, т.к. подпроцесс - это тоже процесс (как и система \ подсистема). Любой Подпроцесс имеет тип отношения Nesting of Elements ([archimate](https://online.visual-paradigm.com/ru/diagrams/templates/archimate-diagram/application-process-view-nesting/) и т.п.) к верхнеуровневому (который не обязательно материнский) - подпроцесс: вложенный дочерний или вложенный внешний. Вложенный - в смысле "вложенный в верхнеуровневый процесс" (как родной или как чужой, но все равно вложенный - nesting). Все дочерние процессы мы ищем в ветке ниже материнского процесса в дереве процессов. В тоже время: внешний процесс - находится совсем в другой ветке дерева процессов. - дочерний \ (родительский - материнский), т.е. материнский процесс - всегда детализируемый (по определению). Если процесс имеет подпроцессы, то он "детализируемый", если не имеет подпроцессов - то он элементарный (атомарный, неделимый). В ARIS EPC - признак "детализированный процесс" - справа от иконки "function" пиктограмма [Lower-level \ detailed level](https://ariscommunity.com/system/files/cs-aris-epc-en-24.pdf) и соответсвенно сама иконка кликабельная (хотя мне куда больше нравится исходная шееровская легенда \ отрисовка иконок). - внешний процесс: приемный (чужой) или внучатый (связь через поколения), но все равно он не дочерний. mermaid ``` 1.2.1>Процесс 1.2.1] --> 1.2.2>Процесс 1.2.2] --> 1.2.1.1>Процесс 1.2.2.1]--> 3.3.3>Процесс 3.3.3] --> 1.2.2_>Процесс 1.2.1] ``` ``` mermaid flowchart LR 1.2(Заголовок схемы: Процесс 1.2) 1.2.1>Процесс 1.2.1] --> 1.2.2>Процесс 1.2.2] --> 1.2.1.1>Процесс 1.2.2.1]--> 3.3.3>Процесс 3.3.3] --> 1.2.2_>Процесс 1.2.1] ``` Рис. 1. Схема процесса 1.2 (его подпроцессы, последовательно выполняемые). [Online](https://mermaid.live/edit#pako:eNptUL1OwzAQfpXoJpDSyHaSknjoAiMssCEjZCVuUymxK-MIShQJFhYeoq_AAGt5BeeN6qQqFBTf4Lvvvu_-GshULoDCvFSPWcG18S6vmcQBObEbu7Wf9rt7sdvuzX51r87evb-A_fAc95RJzz3nBXhmN8eEPXjnTSazwSVjefKbx-MV-ho9JQyc_ScM4FGL-_EeTLoxmQQfFnqZAzW6Fj5UQle8D6Hpt2BgClEJBtS5uZjzujQMmGydbMXlrVLVQalVvSiAznn54KJ6lXMjLpZ8oXn1g_LaqJu1zA4akS-N0lf7mw-nd3WEzIU-V7U0QONpPDQC2sAT0CQNyBRFGEUIETSNz3xYA42igKAoTFOCEkTc3_rwPEyGggSjMA4JTmOUYhIl7Q5IMbPf) Процесс 1.2 имеет подпроцессы (детализацию), т.е. отношение типа "имеет вложения \ nesting" к подроцессам: 1.2.1, 1.2.2, 1.2.1.1, 3.3.3, 1.2.1 (они вложены в процесс 1.2) При этом: все пречисленные процессы {1.2.1, 1.2.2, 1.2.1.1, 3.3.3, 1.2.1} являются вложенными в процесс 1.2, т.е. его подпроцессами (подсистемами). Допустим, что только 1.2.1 имеет подпроцессы, например, 1.2.1.1, 1.2.1.2. Таким образом, 1.2.1 - детализируемый процесс, а все остальные перечисленные - элементарные (нет детализации). Определение: Подпроцесс считается дочерним (обратно - материнским), если он имеет одну степень потомства, в данном случае, отличется на 1 по иерархии. Примеры: 1.2 имеет дочерний 1.2.1, а 1.2.1 имеет дочерний 1.2.1.1. "По хорошему" - на диаграмме нужно каждый VAD-кораблик обозначать цветом, закрепленным за типом. Например, зеленый - элементарный дочерний процесс, ярко - зеленый - детализируемый дочерний, а внешний - синим. Всего три цвета определяют тип подпроцесса (в границах процесса). ### Tuple vs Set Есть понятие схемы процессов (читай кортежи) и дерево процессов (читай множество). Схема процесса позиционирует (присваивает идентификатор, при этом процессы 1.2.1 на схеме процесса 1.2 будут иметь разные идентификаторы). Дерево процессов - это множество, образующее дерево. Схема процесса - Кортеж (Tuple) - Упорядочен (элементы имеют индекс) и может содержать повторяющиеся элементы (1.2.1). Дерево процессов - Множество (Set) - порядок не важен и содержит только уникальные элементы. Что в дереве, что в схеме идет отсылка на главный элеиент, но в схеме это "nesting", а в дереве это "имеет родителя" (строгая иерархия). Собственно это было показано как [дерево процессов vs дерево схем процессов](https://github.com/bpmbpm/SemanticBPM/wiki/%D0%9C%D0%B5%D1%82%D0%B0%D0%BC%D0%BE%D0%B4%D0%B5%D0%BB%D1%8C-%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81%D0%BE%D0%B2) с цветовым обозначением VAD - кораблика (по типу), с отсылкой на схему деления и с формализацией в RDF (turtle). ### process call Понятие "вызвать процесс \ подпроцесс" - это просто передать ему на вход маркер (workflow input). Никакого отношения к отношению "имеет родителя" и "вложен в процесс" он (вызвать процесс) не имеет. На схеме VAD это отношение типа hasNext (имеет следующего), т.е. передача маркера слежующему в эстафете (процессе). Понятно, что если в детализируемый процесс попадает маркер (бегунок, фишка), то он передается на вход первого подпроцесса и далее бежит до конца процесса. Однако механика передачи маркера, что родному подпроцессу, что чужому (включая внучатого) - одинаковая. Все изложенное относится и к BPNM, но в VAD и EPC это более интуитивно понятно. Хорошо бы иметь общую (корневую, верхнеуровневую) "онтологию процесса" / "МетаМодель процесса" на коком либо формализме (в т.ч. DSL), которая бы четко формализовала "механику процесса" (и визуализировала), а ее уже потом тиражировать на VAD, EPC, BPMN, archimate и т.п. В идеале - через математический формализм (например, теорию множеств). ## miscellaneous ### mermaid - https://habr.com/ru/articles/652867/ - Ужас: >xxx] сделали, а нормальный VAD не додумали [xxx> ### EPC - https://habr.com/ru/articles/143273/