Squashed 'SpiffWorkflow/' changes from 450ef3bcd..98c6294f1

98c6294f1 Merge pull request #287 from sartography/feature/workflow_data_exceptions
d40a1da59 Workflow Data Exceptions were broken in the previous error refactor.  This assures we are getting good messages from these errors.
a156378e1 Merge pull request #286 from sartography/feature/inclusive-gateway-support
7f6e398c2 bypass unnecessary checks in gateway joins
ade21a894 revert a few things
e1cf75202 Merge branch 'main' into feature/inclusive-gateway-support
15a0a4414 revert change to MultiChoice and handle no defaults in BPMN specs
e1469e6bb add support for diverging inclusive gateways
71fd86386 really prevent non-default flows without conditions
924759d9b clean up join specs
7378639d3 Merge pull request #284 from sartography/feature/improved-timer-events
dc8d139d2 remove useless method
530f23697 Merge branch 'main' into feature/improved-timer-events
307cca9c5 partially clean up existing gateways
0a344285e clean up task parsers
2cef997d1 add waiting_events method to bpmn workflow
48091c407 serializer migration script and miscellaneous fixes to serialization
61316854b store internal timer data as string/float
389c14c4c add some tests for parsing durations
582bc9482 convert timers to iso 8601
6dfd7ebe9 remove extraneous calls to update
6bd429529 clean up tests
d56e9912f remove useless method

git-subtree-dir: SpiffWorkflow
git-subtree-split: 98c6294f1240aee599cd98bcee58d121cb57b331
This commit is contained in:
Dan 2023-01-26 18:17:35 -05:00
parent eedac61165
commit ba67d7ad34
62 changed files with 3511 additions and 2665 deletions

View File

@ -1,16 +1,14 @@
from SpiffWorkflow.exceptions import WorkflowException
from SpiffWorkflow.exceptions import WorkflowTaskException
class WorkflowDataException(WorkflowException):
class WorkflowDataException(WorkflowTaskException):
def __init__(self, task, data_input=None, data_output=None, message=None):
def __init__(self, message, task, data_input=None, data_output=None):
"""
:param task: the task that generated the error
:param data_input: the spec of the input variable (if a data input)
:param data_output: the spec of the output variable (if a data output)
"""
super().__init__(task.task_spec, message or 'data object error')
self.task = task
super().__init__(message, task)
self.data_input = data_input
self.data_output = data_output
self.task_trace = self.get_task_trace(task)

View File

@ -43,13 +43,23 @@ from ..specs.UserTask import UserTask
from .ProcessParser import ProcessParser
from .node_parser import DEFAULT_NSMAP
from .util import full_tag, xpath_eval, first
from .task_parsers import (UserTaskParser, NoneTaskParser, ManualTaskParser,
ExclusiveGatewayParser, ParallelGatewayParser, InclusiveGatewayParser,
CallActivityParser, ScriptTaskParser, SubWorkflowParser,
ServiceTaskParser)
from .event_parsers import (EventBasedGatewayParser, StartEventParser, EndEventParser, BoundaryEventParser,
IntermediateCatchEventParser, IntermediateThrowEventParser,
SendTaskParser, ReceiveTaskParser)
from .TaskParser import TaskParser
from .task_parsers import (
GatewayParser,
ConditionalGatewayParser,
CallActivityParser,
ScriptTaskParser,
SubWorkflowParser,
)
from .event_parsers import (
EventBasedGatewayParser,
StartEventParser, EndEventParser,
BoundaryEventParser,
IntermediateCatchEventParser,
IntermediateThrowEventParser,
SendTaskParser,
ReceiveTaskParser
)
XSD_PATH = os.path.join(os.path.dirname(__file__), 'schema', 'BPMN20.xsd')
@ -94,17 +104,17 @@ class BpmnParser(object):
PARSER_CLASSES = {
full_tag('startEvent'): (StartEventParser, StartEvent),
full_tag('endEvent'): (EndEventParser, EndEvent),
full_tag('userTask'): (UserTaskParser, UserTask),
full_tag('task'): (NoneTaskParser, NoneTask),
full_tag('userTask'): (TaskParser, UserTask),
full_tag('task'): (TaskParser, NoneTask),
full_tag('subProcess'): (SubWorkflowParser, CallActivity),
full_tag('manualTask'): (ManualTaskParser, ManualTask),
full_tag('exclusiveGateway'): (ExclusiveGatewayParser, ExclusiveGateway),
full_tag('parallelGateway'): (ParallelGatewayParser, ParallelGateway),
full_tag('inclusiveGateway'): (InclusiveGatewayParser, InclusiveGateway),
full_tag('manualTask'): (TaskParser, ManualTask),
full_tag('exclusiveGateway'): (ConditionalGatewayParser, ExclusiveGateway),
full_tag('parallelGateway'): (GatewayParser, ParallelGateway),
full_tag('inclusiveGateway'): (ConditionalGatewayParser, InclusiveGateway),
full_tag('callActivity'): (CallActivityParser, CallActivity),
full_tag('transaction'): (SubWorkflowParser, TransactionSubprocess),
full_tag('scriptTask'): (ScriptTaskParser, ScriptTask),
full_tag('serviceTask'): (ServiceTaskParser, ServiceTask),
full_tag('serviceTask'): (TaskParser, ServiceTask),
full_tag('intermediateCatchEvent'): (IntermediateCatchEventParser, IntermediateCatchEvent),
full_tag('intermediateThrowEvent'): (IntermediateThrowEventParser, IntermediateThrowEvent),
full_tag('boundaryEvent'): (BoundaryEventParser, BoundaryEvent),

View File

@ -28,6 +28,7 @@ from ..specs.events.event_definitions import CancelEventDefinition
from ..specs.MultiInstanceTask import getDynamicMIClass
from ..specs.SubWorkflowTask import CallActivity, TransactionSubprocess, SubWorkflowTask
from ..specs.ExclusiveGateway import ExclusiveGateway
from ..specs.InclusiveGateway import InclusiveGateway
from ...dmn.specs.BusinessRuleTask import BusinessRuleTask
from ...operators import Attrib, PathAttrib
from .util import one, first
@ -188,9 +189,9 @@ class TaskParser(NodeParser):
children = sorted(children, key=lambda tup: float(tup[0]["y"]))
default_outgoing = self.node.get('default')
if not default_outgoing:
if len(children) == 1 or not isinstance(self.task, ExclusiveGateway):
(position, c, target_node, sequence_flow) = children[0]
if len(children) == 1 and isinstance(self.task, (ExclusiveGateway, InclusiveGateway)):
(position, c, target_node, sequence_flow) = children[0]
if self.parse_condition(sequence_flow) is None:
default_outgoing = sequence_flow.get('id')
for (position, c, target_node, sequence_flow) in children:

View File

@ -5,11 +5,19 @@ from SpiffWorkflow.bpmn.specs.events.event_definitions import CorrelationPropert
from .ValidationException import ValidationException
from .TaskParser import TaskParser
from .util import first, one
from ..specs.events.event_definitions import (MultipleEventDefinition, TimerEventDefinition, MessageEventDefinition,
ErrorEventDefinition, EscalationEventDefinition,
SignalEventDefinition,
CancelEventDefinition, CycleTimerEventDefinition,
TerminateEventDefinition, NoneEventDefinition)
from ..specs.events.event_definitions import (
MultipleEventDefinition,
TimeDateEventDefinition,
DurationTimerEventDefinition,
CycleTimerEventDefinition,
MessageEventDefinition,
ErrorEventDefinition,
EscalationEventDefinition,
SignalEventDefinition,
CancelEventDefinition,
TerminateEventDefinition,
NoneEventDefinition
)
CAMUNDA_MODEL_NS = 'http://camunda.org/schema/1.0/bpmn'
@ -81,18 +89,16 @@ class EventDefinitionParser(TaskParser):
"""Parse the timerEventDefinition node and return an instance of TimerEventDefinition."""
try:
label = self.node.get('name', self.node.get('id'))
name = self.node.get('name', self.node.get('id'))
time_date = first(self.xpath('.//bpmn:timeDate'))
if time_date is not None:
return TimerEventDefinition(label, time_date.text)
return TimeDateEventDefinition(name, time_date.text)
time_duration = first(self.xpath('.//bpmn:timeDuration'))
if time_duration is not None:
return TimerEventDefinition(label, time_duration.text)
return DurationTimerEventDefinition(name, time_duration.text)
time_cycle = first(self.xpath('.//bpmn:timeCycle'))
if time_cycle is not None:
return CycleTimerEventDefinition(label, time_cycle.text)
return CycleTimerEventDefinition(name, time_cycle.text)
raise ValidationException("Unknown Time Specification", node=self.node, file_name=self.filename)
except Exception as e:
raise ValidationException("Time Specification Error. " + str(e), node=self.node, file_name=self.filename)
@ -170,9 +176,6 @@ class StartEventParser(EventDefinitionParser):
event_definition = self.get_event_definition([MESSAGE_EVENT_XPATH, SIGNAL_EVENT_XPATH, TIMER_EVENT_XPATH])
task = self._create_task(event_definition)
self.spec.start.connect(task)
if isinstance(event_definition, CycleTimerEventDefinition):
# We are misusing cycle timers, so this is a hack whereby we will revisit ourselves if we fire.
task.connect(task)
return task
def handles_multiple_outgoing(self):

View File

@ -25,41 +25,19 @@ from .util import one, DEFAULT_NSMAP
CAMUNDA_MODEL_NS = 'http://camunda.org/schema/1.0/bpmn'
class UserTaskParser(TaskParser):
"""
Base class for parsing User Tasks
"""
pass
class GatewayParser(TaskParser):
def handles_multiple_outgoing(self):
return True
class ManualTaskParser(UserTaskParser):
"""
Base class for parsing Manual Tasks. Currently assumes that Manual Tasks
should be treated the same way as User Tasks.
"""
pass
class NoneTaskParser(UserTaskParser):
"""
Base class for parsing unspecified Tasks. Currently assumes that such Tasks
should be treated the same way as User Tasks.
"""
pass
class ExclusiveGatewayParser(TaskParser):
class ConditionalGatewayParser(GatewayParser):
"""
Parses an Exclusive Gateway, setting up the outgoing conditions
appropriately.
"""
def connect_outgoing(self, outgoing_task, sequence_flow_node, is_default):
if is_default:
super(ExclusiveGatewayParser, self).connect_outgoing(outgoing_task, sequence_flow_node, is_default)
super().connect_outgoing(outgoing_task, sequence_flow_node, is_default)
else:
cond = self.parse_condition(sequence_flow_node)
if cond is None:
@ -69,33 +47,6 @@ class ExclusiveGatewayParser(TaskParser):
self.filename)
self.task.connect_outgoing_if(cond, outgoing_task)
def handles_multiple_outgoing(self):
return True
class ParallelGatewayParser(TaskParser):
"""
Parses a Parallel Gateway.
"""
def handles_multiple_outgoing(self):
return True
class InclusiveGatewayParser(TaskParser):
"""
Parses an Inclusive Gateway.
"""
def handles_multiple_outgoing(self):
"""
At the moment I haven't implemented support for diverging inclusive
gateways
"""
return False
class SubprocessParser:
@ -200,11 +151,3 @@ class ScriptTaskParser(TaskParser):
f"Invalid Script Task. No Script Provided. " + str(ae),
node=self.node, file_name=self.filename)
class ServiceTaskParser(TaskParser):
"""
Parses a ServiceTask node.
"""
pass

View File

@ -7,10 +7,21 @@ from SpiffWorkflow.bpmn.specs.BpmnProcessSpec import BpmnDataSpecification
from .dictionary import DictionaryConverter
from ..specs.events.event_definitions import MultipleEventDefinition, SignalEventDefinition, MessageEventDefinition, NoneEventDefinition
from ..specs.events.event_definitions import TimerEventDefinition, CycleTimerEventDefinition, TerminateEventDefinition
from ..specs.events.event_definitions import ErrorEventDefinition, EscalationEventDefinition, CancelEventDefinition
from ..specs.events.event_definitions import CorrelationProperty, NamedEventDefinition
from ..specs.events.event_definitions import (
NoneEventDefinition,
MultipleEventDefinition,
SignalEventDefinition,
MessageEventDefinition,
CorrelationProperty,
TimeDateEventDefinition,
DurationTimerEventDefinition,
CycleTimerEventDefinition,
ErrorEventDefinition,
EscalationEventDefinition,
CancelEventDefinition,
TerminateEventDefinition,
NamedEventDefinition
)
from ..specs.BpmnSpecMixin import BpmnSpecMixin
from ...operators import Attrib, PathAttrib
@ -89,9 +100,19 @@ class BpmnTaskSpecConverter(DictionaryConverter):
self.data_converter = data_converter
self.typename = typename if typename is not None else spec_class.__name__
event_definitions = [ NoneEventDefinition, CancelEventDefinition, TerminateEventDefinition,
SignalEventDefinition, MessageEventDefinition, ErrorEventDefinition, EscalationEventDefinition,
TimerEventDefinition, CycleTimerEventDefinition , MultipleEventDefinition]
event_definitions = [
NoneEventDefinition,
CancelEventDefinition,
TerminateEventDefinition,
SignalEventDefinition,
MessageEventDefinition,
ErrorEventDefinition,
EscalationEventDefinition,
TimeDateEventDefinition,
DurationTimerEventDefinition,
CycleTimerEventDefinition,
MultipleEventDefinition
]
for event_definition in event_definitions:
self.register(
@ -238,12 +259,9 @@ class BpmnTaskSpecConverter(DictionaryConverter):
dct['name'] = event_definition.name
if isinstance(event_definition, MessageEventDefinition):
dct['correlation_properties'] = [prop.__dict__ for prop in event_definition.correlation_properties]
if isinstance(event_definition, TimerEventDefinition):
dct['label'] = event_definition.label
dct['dateTime'] = event_definition.dateTime
if isinstance(event_definition, CycleTimerEventDefinition):
dct['label'] = event_definition.label
dct['cycle_definition'] = event_definition.cycle_definition
if isinstance(event_definition, (TimeDateEventDefinition, DurationTimerEventDefinition, CycleTimerEventDefinition)):
dct['name'] = event_definition.name
dct['expression'] = event_definition.expression
if isinstance(event_definition, ErrorEventDefinition):
dct['error_code'] = event_definition.error_code
if isinstance(event_definition, EscalationEventDefinition):

View File

@ -176,51 +176,54 @@ class TransactionSubprocessTaskConverter(BpmnTaskSpecConverter):
return self.task_spec_from_dict(dct)
class ExclusiveGatewayConverter(BpmnTaskSpecConverter):
def __init__(self, data_converter=None, typename=None):
super().__init__(ExclusiveGateway, data_converter, typename)
class ConditionalGatewayConverter(BpmnTaskSpecConverter):
def to_dict(self, spec):
dct = self.get_default_attributes(spec)
dct.update(self.get_bpmn_attributes(spec))
dct['default_task_spec'] = spec.default_task_spec
dct['cond_task_specs'] = [ self.bpmn_condition_to_dict(cond) for cond in spec.cond_task_specs ]
dct['choice'] = spec.choice
return dct
def from_dict(self, dct):
conditions = dct.pop('cond_task_specs')
default_task_spec = dct.pop('default_task_spec')
spec = self.task_spec_from_dict(dct)
spec.cond_task_specs = [ self.bpmn_condition_from_dict(cond) for cond in conditions ]
spec.default_task_spec = default_task_spec
return spec
def bpmn_condition_from_dict(self, dct):
return (_BpmnCondition(dct['condition']), dct['task_spec'])
return (_BpmnCondition(dct['condition']) if dct['condition'] is not None else None, dct['task_spec'])
def bpmn_condition_to_dict(self, condition):
expr, task_spec = condition
return {
'condition': expr.args[0],
'condition': expr.args[0] if expr is not None else None,
'task_spec': task_spec
}
class InclusiveGatewayConverter(BpmnTaskSpecConverter):
class ExclusiveGatewayConverter(ConditionalGatewayConverter):
def __init__(self, data_converter=None, typename=None):
super().__init__(InclusiveGateway, data_converter, typename)
super().__init__(ExclusiveGateway, data_converter, typename)
def to_dict(self, spec):
dct = self.get_default_attributes(spec)
dct.update(self.get_bpmn_attributes(spec))
dct.update(self.get_join_attributes(spec))
dct = super().to_dict(spec)
dct['default_task_spec'] = spec.default_task_spec
return dct
def from_dict(self, dct):
return self.task_spec_from_dict(dct)
default_task_spec = dct.pop('default_task_spec')
spec = super().from_dict(dct)
spec.default_task_spec = default_task_spec
return spec
class InclusiveGatewayConverter(ConditionalGatewayConverter):
def __init__(self, data_converter=None, typename=None):
super().__init__(InclusiveGateway, data_converter, typename)
class ParallelGatewayConverter(BpmnTaskSpecConverter):

View File

@ -1,4 +1,95 @@
from copy import deepcopy
from datetime import datetime, timedelta
from SpiffWorkflow.exceptions import WorkflowException
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.specs.events.event_definitions import LOCALTZ
class VersionMigrationError(WorkflowException):
pass
def version_1_1_to_1_2(old):
"""
Upgrade v1.1 serialization to v1.2.
Expressions in timer event definitions have been converted from python expressions to
ISO 8601 expressions.
Cycle timers no longer connect back to themselves. New children are created from a single
tasks rather than reusing previously executed tasks.
All conditions (including the default) are included in the conditions for gateways.
"""
new = deepcopy(old)
def td_to_iso(td):
total = td.total_seconds()
v1, seconds = total // 60, total % 60
v2, minutes = v1 // 60, v1 % 60
days, hours = v2 // 24, v2 % 60
return f"P{days:.0f}DT{hours:.0f}H{minutes:.0f}M{seconds}S"
message = "Unable to convert time specifications for {spec}. This most likely because the values are set during workflow execution."
has_timer = lambda ts: 'event_definition' in ts and ts['event_definition']['typename'] in [ 'CycleTimerEventDefinition', 'TimerEventDefinition']
for spec in [ ts for ts in new['spec']['task_specs'].values() if has_timer(ts) ]:
spec['event_definition']['name'] = spec['event_definition'].pop('label')
if spec['event_definition']['typename'] == 'TimerEventDefinition':
expr = spec['event_definition'].pop('dateTime')
try:
dt = eval(expr)
if isinstance(dt, datetime):
spec['event_definition']['expression'] = f"'{dt.isoformat()}'"
spec['event_definition']['typename'] = 'TimeDateEventDefinition'
elif isinstance(dt, timedelta):
spec['event_definition']['expression'] = f"'{td_to_iso(dt)}'"
spec['event_definition']['typename'] = 'DurationTimerEventDefinition'
except:
raise VersionMigrationError(message.format(spec=spec['name']))
if spec['event_definition']['typename'] == 'CycleTimerEventDefinition':
tasks = [ t for t in new['tasks'].values() if t['task_spec'] == spec['name'] ]
task = tasks[0] if len(tasks) > 0 else None
expr = spec['event_definition'].pop('cycle_definition')
try:
repeat, duration = eval(expr)
spec['event_definition']['expression'] = f"'R{repeat}/{td_to_iso(duration)}'"
if task is not None:
cycles_complete = task['data'].pop('repeat_count', 0)
start_time = task['internal_data'].pop('start_time', None)
if start_time is not None:
dt = datetime.fromisoformat(start_time)
task['internal_data']['event_value'] = {
'cycles': repeat - cycles_complete,
'next': datetime.combine(dt.date(), dt.time(), LOCALTZ).isoformat(),
'duration': duration.total_seconds(),
}
except:
raise VersionMigrationError(message.format(spec=spec['name']))
if spec['typename'] == 'StartEvent':
spec['outputs'].remove(spec['name'])
if task is not None:
children = [ new['tasks'][c] for c in task['children'] ]
# Formerly cycles were handled by looping back and reusing the tasks so this removes the extra tasks
remove = [ c for c in children if c['task_spec'] == task['task_spec']][0]
for task_id in remove['children']:
child = new['tasks'][task_id]
if child['task_spec'].startswith('return') or child['state'] != TaskState.COMPLETED:
new['tasks'].pop(task_id)
else:
task['children'].append(task_id)
task['children'].remove(remove['id'])
new['tasks'].pop(remove['id'])
for spec in [ts for ts in new['spec']['task_specs'].values() if ts['typename'] == 'ExclusiveGateway']:
if (None, spec['default_task_spec']) not in spec['cond_task_specs']:
spec['cond_task_specs'].append((None, spec['default_task_spec']))
new['VERSION'] = "1.2"
return new
def version_1_0_to_1_1(old):
"""
@ -47,8 +138,11 @@ def version_1_0_to_1_1(old):
task['children'] = [ c for c in task['children'] if c in sp['tasks'] ]
new['subprocesses'] = subprocesses
return new
new['VERSION'] = "1.1"
return version_1_1_to_1_2(new)
MIGRATIONS = {
'1.0': version_1_0_to_1_1,
'1.1': version_1_1_to_1_2,
}

View File

@ -64,7 +64,7 @@ class BpmnWorkflowSerializer:
# This is the default version set on the workflow, it can be overwritten
# using the configure_workflow_spec_converter.
VERSION = "1.1"
VERSION = "1.2"
VERSION_KEY = "serializer_version"
DEFAULT_JSON_ENCODER_CLS = None
DEFAULT_JSON_DECODER_CLS = None

View File

@ -72,15 +72,17 @@ class BpmnDataSpecification:
def get(self, my_task):
"""Copy a value form the workflow data to the task data."""
if self.name not in my_task.workflow.data:
message = f"Workflow variable {self.name} not found"
raise WorkflowDataException(my_task, data_input=self, message=message)
message = f"Data object '{self.name}' " \
f"does not exist and can not be read."
raise WorkflowDataException(message, my_task, data_input=self)
my_task.data[self.name] = deepcopy(my_task.workflow.data[self.name])
def set(self, my_task):
"""Copy a value from the task data to the workflow data"""
if self.name not in my_task.data:
message = f"Task variable {self.name} not found"
raise WorkflowDataException(my_task, data_output=self, message=message)
message = f"A Data Object '{self.name}' " \
f"could not be set, it does not exist in the task data"
raise WorkflowDataException(message, my_task, data_output=self)
my_task.workflow.data[self.name] = deepcopy(my_task.data[self.name])
del my_task.data[self.name]
data_log.info(f'Set workflow variable {self.name}', extra=my_task.log_info())
@ -88,12 +90,12 @@ class BpmnDataSpecification:
def copy(self, source, destination, data_input=False, data_output=False):
"""Copy a value from one task to another."""
if self.name not in source.data:
message = f"Unable to copy {self.name}"
message = f"'{self.name}' was not found in the task data"
raise WorkflowDataException(
source,
message,
source,
data_input=self if data_input else None,
data_output=self if data_output else None,
message=message
)
destination.data[self.name] = deepcopy(source.data[self.name])

View File

@ -32,7 +32,6 @@ class _BpmnCondition(Operator):
return task.workflow.script_engine.evaluate(task, self.args[0])
class BpmnSpecMixin(TaskSpec):
"""
All BPMN spec classes should mix this superclass in. It adds a number of
@ -70,7 +69,10 @@ class BpmnSpecMixin(TaskSpec):
evaluates to true. This should only be called if the task has a
connect_if method (e.g. ExclusiveGateway).
"""
self.connect_if(_BpmnCondition(condition), taskspec)
if condition is None:
self.connect(taskspec)
else:
self.connect_if(_BpmnCondition(condition), taskspec)
def _on_ready_hook(self, my_task):
super()._on_ready_hook(my_task)

View File

@ -16,38 +16,20 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
from ...exceptions import WorkflowException
from .BpmnSpecMixin import BpmnSpecMixin
from ...specs.base import TaskSpec
from ...specs.ExclusiveChoice import ExclusiveChoice
from ...specs.MultiChoice import MultiChoice
class ExclusiveGateway(ExclusiveChoice, BpmnSpecMixin):
"""
Task Spec for a bpmn:exclusiveGateway node.
"""
def test(self):
"""
Checks whether all required attributes are set. Throws an exception
if an error was detected.
"""
# This has been overridden to allow a single default flow out (without a
# condition) - useful for the converging type
TaskSpec.test(self)
# if len(self.cond_task_specs) < 1:
# raise WorkflowException(self, 'At least one output required.')
for condition, name in self.cond_task_specs:
if name is None:
raise WorkflowException('Condition with no task spec.', task_spec=self)
task_spec = self._wf_spec.get_task_spec_from_name(name)
if task_spec is None:
msg = 'Condition leads to non-existent task ' + repr(name)
raise WorkflowException(msg, task_spec=self)
if condition is None:
continue
# Bypass the check for no default output -- this is not required in BPMN
MultiChoice.test(self)
@property
def spec_type(self):

View File

@ -16,13 +16,14 @@
# License along with this library; if not, write to the Free Software
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
from collections import deque
from SpiffWorkflow.exceptions import WorkflowTaskException
from ...task import TaskState
from .UnstructuredJoin import UnstructuredJoin
from ...specs.MultiChoice import MultiChoice
class InclusiveGateway(UnstructuredJoin):
class InclusiveGateway(MultiChoice, UnstructuredJoin):
"""
Task Spec for a bpmn:parallelGateway node. From the specification of BPMN
(http://www.omg.org/spec/BPMN/2.0/PDF - document number:formal/2011-01-03):
@ -62,58 +63,59 @@ class InclusiveGateway(UnstructuredJoin):
specified, the Inclusive Gateway throws an exception.
"""
@property
def spec_type(self):
return 'Inclusive Gateway'
def test(self):
MultiChoice.test(self)
UnstructuredJoin.test(self)
def _check_threshold_unstructured(self, my_task, force=False):
# Look at the tree to find all ready and waiting tasks (excluding ones
# that are our completed inputs).
tasks = []
for task in my_task.workflow.get_tasks(TaskState.READY | TaskState.WAITING):
if task.thread_id != my_task.thread_id:
continue
if task.workflow != my_task.workflow:
continue
if task.task_spec == my_task.task_spec:
continue
tasks.append(task)
completed_inputs, waiting_tasks = self._get_inputs_with_tokens(my_task)
uncompleted_inputs = [i for i in self.inputs if i not in completed_inputs]
inputs_with_tokens, waiting_tasks = self._get_inputs_with_tokens(
my_task)
inputs_without_tokens = [
i for i in self.inputs if i not in inputs_with_tokens]
# We only have to complete a task once for it to count, even if's on multiple paths
for task in waiting_tasks:
if task.task_spec in completed_inputs:
waiting_tasks.remove(task)
waiting_tasks = []
for task in tasks:
if (self._has_directed_path_to(
task, self,
without_using_sequence_flow_from=inputs_with_tokens) and
not self._has_directed_path_to(
task, self,
without_using_sequence_flow_from=inputs_without_tokens)):
waiting_tasks.append(task)
if force:
# If force is true, complete the task
complete = True
elif len(waiting_tasks) > 0:
# If we have waiting tasks, we're obviously not done
complete = False
else:
# Handle the case where there are paths from active tasks that must go through uncompleted inputs
tasks = my_task.workflow.get_tasks(TaskState.READY | TaskState.WAITING, workflow=my_task.workflow)
sources = [t.task_spec for t in tasks]
return force or len(waiting_tasks) == 0, waiting_tasks
# This will go back through a task spec's ancestors and return the source, if applicable
def check(spec):
for parent in spec.inputs:
return parent if parent in sources else check(parent)
def _has_directed_path_to(self, task, task_spec,
without_using_sequence_flow_from=None):
q = deque()
done = set()
# If we can get to a completed input from this task, we don't have to wait for it
for spec in completed_inputs:
source = check(spec)
if source is not None:
sources.remove(source)
without_using_sequence_flow_from = set(
without_using_sequence_flow_from or [])
# Now check the rest of the uncompleted inputs and see if they can be reached from any of the remaining tasks
unfinished_paths = []
for spec in uncompleted_inputs:
if check(spec) is not None:
unfinished_paths.append(spec)
break
q.append(task.task_spec)
while q:
n = q.popleft()
if n == task_spec:
return True
for child in n.outputs:
if child not in done and not (
n in without_using_sequence_flow_from and
child == task_spec):
done.add(child)
q.append(child)
return False
complete = len(unfinished_paths) == 0
return complete, waiting_tasks
def _on_complete_hook(self, my_task):
outputs = self._get_matching_outputs(my_task)
if len(outputs) == 0:
raise WorkflowTaskException(f'No conditions satisfied on gateway', task=my_task)
my_task._sync_children(outputs, TaskState.FUTURE)
@property
def spec_type(self):
return 'Inclusive Gateway'

View File

@ -42,10 +42,7 @@ class ParallelGateway(UnstructuredJoin):
def _check_threshold_unstructured(self, my_task, force=False):
completed_inputs, waiting_tasks = self._get_inputs_with_tokens(my_task)
# If the threshold was reached, get ready to fire.
return (force or len(completed_inputs) >= len(self.inputs),
waiting_tasks)
return force or len(completed_inputs) >= len(self.inputs), waiting_tasks
@property
def spec_type(self):

View File

@ -3,6 +3,7 @@ from copy import deepcopy
from SpiffWorkflow.task import TaskState
from .BpmnSpecMixin import BpmnSpecMixin
from ..exceptions import WorkflowDataException
from ...specs.base import TaskSpec
@ -51,7 +52,11 @@ class SubWorkflowTask(BpmnSpecMixin):
end = subworkflow.get_tasks_from_spec_name('End', workflow=subworkflow)
# Otherwise only copy data with the specified names
for var in subworkflow.spec.data_outputs:
var.copy(end[0], my_task, data_output=True)
try:
var.copy(end[0], my_task, data_output=True)
except WorkflowDataException as wde:
wde.add_note("A Data Output was not provided as promised.")
raise wde
my_task._set_state(TaskState.READY)
@ -83,8 +88,11 @@ class SubWorkflowTask(BpmnSpecMixin):
else:
# Otherwise copy only task data with the specified names
for var in subworkflow.spec.data_inputs:
var.copy(my_task, start[0], data_input=True)
try:
var.copy(my_task, start[0], data_input=True)
except WorkflowDataException as wde:
wde.add_note("You are missing a required Data Input for a call activity.")
raise wde
for child in subworkflow.task_tree.children:
child.task_spec._update(child)

View File

@ -17,75 +17,34 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
from ...exceptions import WorkflowException
from ...task import TaskState
from .BpmnSpecMixin import BpmnSpecMixin
from ...specs.Join import Join
class UnstructuredJoin(Join, BpmnSpecMixin):
"""
A helper subclass of Join that makes it work in a slightly friendlier way
for the BPMN style threading
"""
def _check_threshold_unstructured(self, my_task, force=False):
raise NotImplementedError("Please implement this in the subclass")
def _get_inputs_with_tokens(self, my_task):
# Look at the tree to find all places where this task is used.
tasks = []
for task in my_task.workflow.task_tree:
if task.thread_id != my_task.thread_id:
continue
if task.workflow != my_task.workflow:
continue
if task.task_spec != self:
continue
if task._is_finished():
continue
tasks.append(task)
tasks = [ t for t in my_task.workflow.get_tasks_from_spec_name(self.name) if t.workflow == my_task.workflow ]
# Look up which tasks have parent's completed.
# Look up which tasks have parents completed.
waiting_tasks = []
completed_inputs = set()
for task in tasks:
if task.parent._has_state(TaskState.COMPLETED) and (
task._has_state(TaskState.WAITING) or task == my_task):
if task.parent.task_spec in completed_inputs:
raise(WorkflowException
("Unsupported looping behaviour: two threads waiting"
" on the same sequence flow.", task_spec=self))
if task.parent.state == TaskState.COMPLETED:
completed_inputs.add(task.parent.task_spec)
else:
# Ignore predicted tasks; we don't care about anything not definite
elif task.parent._has_state(TaskState.READY | TaskState.FUTURE | TaskState.WAITING):
waiting_tasks.append(task.parent)
return completed_inputs, waiting_tasks
def _do_join(self, my_task):
# Copied from Join parent class
# This has some minor changes
# One Join spec may have multiple corresponding Task objects::
#
# - Due to the MultiInstance pattern.
# - Due to the ThreadSplit pattern.
#
# When using the MultiInstance pattern, we want to join across
# the resulting task instances. When using the ThreadSplit
# pattern, we only join within the same thread. (Both patterns
# may also be mixed.)
#
# We are looking for all task instances that must be joined.
# We limit our search by starting at the split point.
if self.split_task:
split_task = my_task.workflow.get_task_spec_from_name(
self.split_task)
split_task = my_task._find_ancestor(split_task)
else:
split_task = my_task.workflow.task_tree
split_task = self._get_split_task(my_task)
# Identify all corresponding task instances within the thread.
# Also remember which of those instances was most recently changed,
@ -98,35 +57,25 @@ class UnstructuredJoin(Join, BpmnSpecMixin):
# Ignore tasks from other threads.
if task.thread_id != my_task.thread_id:
continue
# Ignore tasks from other subprocesses:
if task.workflow != my_task.workflow:
continue
# Ignore my outgoing branches.
if task._is_descendant_of(my_task):
if self.split_task and task._is_descendant_of(my_task):
continue
# Ignore completed tasks (this is for loop handling)
if task._is_finished():
continue
# For an inclusive join, this can happen - it's a future join
if not task.parent._is_finished():
continue
# We have found a matching instance.
thread_tasks.append(task)
# Check whether the state of the instance was recently
# changed.
# Check whether the state of the instance was recently changed.
changed = task.parent.last_state_change
if last_changed is None\
or changed > last_changed.parent.last_state_change:
if last_changed is None or changed > last_changed.parent.last_state_change:
last_changed = task
# Update data from all the same thread tasks.
thread_tasks.sort(key=lambda t: t.parent.last_state_change)
collected_data = {}
for task in thread_tasks:
self.data.update(task.data)
collected_data.update(task.data)
# Mark the identified task instances as COMPLETED. The exception
# is the most recently changed task, for which we assume READY.
@ -135,26 +84,13 @@ class UnstructuredJoin(Join, BpmnSpecMixin):
# (re)built underneath the node.
for task in thread_tasks:
if task == last_changed:
task.data.update(self.data)
task.data.update(collected_data)
self.entered_event.emit(my_task.workflow, my_task)
task._ready()
else:
task._set_state(TaskState.COMPLETED)
task._drop_children()
def _update_hook(self, my_task):
if not my_task.parent._is_finished():
return
target_state = getattr(my_task, '_bpmn_load_target_state', None)
if target_state == TaskState.WAITING:
my_task._set_state(TaskState.WAITING)
return
super(UnstructuredJoin, self)._update_hook(my_task)
def task_should_set_children_future(self, my_task):
return True

View File

@ -74,12 +74,10 @@ class _BoundaryEventParent(Simple, BpmnSpecMixin):
for child in my_task.children:
if isinstance(child.task_spec, BoundaryEvent):
child.task_spec.event_definition.reset(child)
child._set_state(TaskState.WAITING)
def _child_complete_hook(self, child_task):
# If the main child completes, or a cancelling event occurs, cancel any
# unfinished children
# If the main child completes, or a cancelling event occurs, cancel any unfinished children
if child_task.task_spec == self.main_child_task_spec or child_task.task_spec.cancel_activity:
for sibling in child_task.parent.children:
if sibling == child_task:
@ -89,11 +87,6 @@ class _BoundaryEventParent(Simple, BpmnSpecMixin):
for t in child_task.workflow._get_waiting_tasks():
t.task_spec._update(t)
# If our event is a cycle timer, we need to set it back to waiting so it can fire again
elif isinstance(child_task.task_spec.event_definition, CycleTimerEventDefinition):
child_task._set_state(TaskState.WAITING)
child_task.task_spec._update_hook(child_task)
def _predict_hook(self, my_task):
# Events attached to the main task might occur
@ -105,7 +98,6 @@ class _BoundaryEventParent(Simple, BpmnSpecMixin):
child._set_state(state)
class BoundaryEvent(CatchingEvent):
"""Task Spec for a bpmn:boundaryEvent node."""

View File

@ -40,3 +40,4 @@ class StartEvent(CatchingEvent):
my_task._set_state(TaskState.WAITING)
super(StartEvent, self).catch(my_task, event_definition)

View File

@ -17,11 +17,17 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
import datetime
import re
from datetime import datetime, timedelta, timezone
from calendar import monthrange
from time import timezone as tzoffset
from copy import deepcopy
from SpiffWorkflow.task import TaskState
LOCALTZ = timezone(timedelta(seconds=-1 * tzoffset))
class EventDefinition(object):
"""
This is the base class for Event Definitions. It implements the default throw/catch
@ -34,10 +40,6 @@ class EventDefinition(object):
and external flags.
Default catch behavior is to set the event to fired
"""
# Format to use for specifying dates for time based events
TIME_FORMAT = '%Y-%m-%d %H:%M:%S.%f'
def __init__(self):
# Ideally I'd mke these parameters, but I don't want to them to be parameters
# for any subclasses (as they are based on event type, not user choice) and
@ -251,129 +253,218 @@ class TerminateEventDefinition(EventDefinition):
def event_type(self):
return 'Terminate'
class TimerEventDefinition(EventDefinition):
"""
The TimerEventDefinition is the implementation of event definition used for
Catching Timer Events (Timer events aren't thrown).
"""
def __init__(self, label, dateTime):
class TimerEventDefinition(EventDefinition):
def __init__(self, name, expression):
"""
Constructor.
:param label: The label of the event. Used for the description.
:param name: The description of the timer.
:param dateTime: The dateTime expression for the expiry time. This is
passed to the Script Engine and must evaluate to a datetime (in the case of
a time-date event) or a timedelta (in the case of a duration event).
:param expression: An ISO 8601 datetime or interval expression.
"""
super(TimerEventDefinition, self).__init__()
self.label = label
self.dateTime = dateTime
super().__init__()
self.name = name
self.expression = expression
@staticmethod
def get_datetime(expression):
dt = datetime.fromisoformat(expression)
if dt.tzinfo is None:
dt = datetime.combine(dt.date(), dt.time(), LOCALTZ)
return dt.astimezone(timezone.utc)
@staticmethod
def get_timedelta_from_start(parsed_duration, start=None):
start = start or datetime.now(timezone.utc)
years, months, days = parsed_duration.pop('years', 0), parsed_duration.pop('months', 0), parsed_duration.pop('days', 0)
months += years * 12
for idx in range(int(months)):
year, month = start.year + idx // 12, start.month + idx % 12
days += monthrange(year, month)[1]
year, month = start.year + months // 12, start.month + months % 12
days += (months - int(months)) * monthrange(year, month)[1]
parsed_duration['days'] = days
return timedelta(**parsed_duration)
@staticmethod
def get_timedelta_from_end(parsed_duration, end):
years, months, days = parsed_duration.pop('years', 0), parsed_duration.pop('months', 0), parsed_duration.pop('days', 0)
months += years * 12
for idx in range(1, int(months) + 1):
year = end.year - (1 + (idx - end.month) // 12)
month = 1 + (end.month - idx - 1) % 12
days += monthrange(year, month)[1]
days += (months - int(months)) * monthrange(
end.year - (1 + (int(months)- end.month) // 12),
1 + (end.month - months - 1) % 12)[1]
parsed_duration['days'] = days
return timedelta(**parsed_duration)
@staticmethod
def parse_iso_duration(expression):
# Based on https://en.wikipedia.org/wiki/ISO_8601#Time_intervals
parsed, expr_t, current = {}, False, expression.lower().strip('p').replace(',', '.')
for designator in ['years', 'months', 'weeks', 'days', 't', 'hours', 'minutes', 'seconds']:
value = current.split(designator[0], 1)
if len(value) == 2:
duration, remainder = value
if duration.isdigit():
parsed[designator] = int(duration)
elif duration.replace('.', '').isdigit() and not remainder:
parsed[designator] = float(duration)
if designator in parsed or designator == 't':
current = remainder
if designator == 't':
expr_t = True
date_specs, time_specs = ['years', 'months', 'days'], ['hours', 'minutes', 'seconds']
parsed_t = len([d for d in parsed if d in time_specs]) > 0
if len(current) or parsed_t != expr_t or ('weeks' in parsed and any(v for v in parsed if v in date_specs)):
raise Exception('Invalid duration')
# The actual timedelta will have to be computed based on a start or end date, to account for
# months lengths, leap days, etc. This returns a dict of the parsed elements
return parsed
@staticmethod
def parse_iso_week(expression):
# https://en.wikipedia.org/wiki/ISO_8601#Week_dates
m = re.match('(\d{4})W(\d{2})(\d)(T.+)?', expression.upper().replace('-', ''))
year, month, day, ts = m.groups()
ds = datetime.fromisocalendar(int(year), int(month), int(day)).strftime('%Y-%m-%d')
return TimerEventDefinition.get_datetime(ds + (ts or ''))
@staticmethod
def parse_time_or_duration(expression):
if expression.upper().startswith('P'):
return TimerEventDefinition.parse_iso_duration(expression)
elif 'W' in expression.upper():
return TimerEventDefinition.parse_iso_week(expression)
else:
return TimerEventDefinition.get_datetime(expression)
@staticmethod
def parse_iso_recurring_interval(expression):
components = expression.upper().replace('--', '/').strip('R').split('/')
cycles = int(components[0]) if components[0] else -1
start_or_duration = TimerEventDefinition.parse_time_or_duration(components[1])
if len(components) == 3:
end_or_duration = TimerEventDefinition.parse_time_or_duration(components[2])
else:
end_or_duration = None
if isinstance(start_or_duration, datetime):
# Start time + interval duration
start = start_or_duration
duration = TimerEventDefinition.get_timedelta_from_start(end_or_duration, start_or_duration)
elif isinstance(end_or_duration, datetime):
# End time + interval duration
duration = TimerEventDefinition.get_timedelta_from_end(start_or_duration, end_or_duration)
start = end_or_duration - duration
elif end_or_duration is None:
# Just an interval duration, assume a start time of now
start = datetime.now(timezone.utc)
duration = TimeDateEventDefinition.get_timedelta_from_start(start_or_duration, start)
else:
raise Exception("Invalid recurring interval")
return cycles, start, duration
def __eq__(self, other):
return self.__class__.__name__ == other.__class__.__name__ and self.name == other.name
class TimeDateEventDefinition(TimerEventDefinition):
"""A Timer event represented by a specific date/time."""
@property
def event_type(self):
return 'Timer'
return 'Time Date Timer'
def has_fired(self, my_task):
"""
The Timer is considered to have fired if the evaluated dateTime
expression is before datetime.datetime.now()
"""
event_value = my_task._get_internal_data('event_value')
if event_value is None:
event_value = my_task.workflow.script_engine.evaluate(my_task, self.expression)
my_task._set_internal_data(event_value=event_value)
if TimerEventDefinition.parse_time_or_duration(event_value) < datetime.now(timezone.utc):
my_task._set_internal_data(event_fired=True)
return my_task._get_internal_data('event_fired', False)
if my_task.internal_data.get('event_fired'):
# If we manually send this event, this will be set
return True
dt = my_task.workflow.script_engine.evaluate(my_task, self.dateTime)
if isinstance(dt,datetime.timedelta):
if my_task._get_internal_data('start_time',None) is not None:
start_time = datetime.datetime.strptime(my_task._get_internal_data('start_time',None), self.TIME_FORMAT)
elapsed = datetime.datetime.now() - start_time
return elapsed > dt
else:
my_task.internal_data['start_time'] = datetime.datetime.now().strftime(self.TIME_FORMAT)
return False
if dt is None:
return False
if isinstance(dt, datetime.datetime):
if dt.tzinfo:
tz = dt.tzinfo
now = tz.fromutc(datetime.datetime.utcnow().replace(tzinfo=tz))
else:
now = datetime.datetime.now()
else:
# assume type is a date, not datetime
now = datetime.date.today()
return now > dt
def __eq__(self, other):
return self.__class__.__name__ == other.__class__.__name__ and self.label == other.label
def timer_value(self, my_task):
return my_task._get_internal_data('event_value')
class CycleTimerEventDefinition(EventDefinition):
"""
The TimerEventDefinition is the implementation of event definition used for
Catching Timer Events (Timer events aren't thrown).
class DurationTimerEventDefinition(TimerEventDefinition):
"""A timer event represented by a duration"""
The cycle definition should evaluate to a tuple of
(n repetitions, repetition duration)
"""
def __init__(self, label, cycle_definition):
@property
def event_type(self):
return 'Duration Timer'
super(CycleTimerEventDefinition, self).__init__()
self.label = label
# The way we're using cycle timers doesn't really align with how the BPMN spec
# describes is (the example of "every monday at 9am")
# I am not sure why this isn't a subprocess with a repeat count that starts
# with a duration timer
self.cycle_definition = cycle_definition
def has_fired(self, my_task):
event_value = my_task._get_internal_data("event_value")
if event_value is None:
expression = my_task.workflow.script_engine.evaluate(my_task, self.expression)
parsed_duration = TimerEventDefinition.parse_iso_duration(expression)
event_value = (datetime.now(timezone.utc) + TimerEventDefinition.get_timedelta_from_start(parsed_duration)).isoformat()
my_task._set_internal_data(event_value=event_value)
if TimerEventDefinition.get_datetime(event_value) < datetime.now(timezone.utc):
my_task._set_internal_data(event_fired=True)
return my_task._get_internal_data('event_fired', False)
def timer_value(self, my_task):
return my_task._get_internal_data("event_value")
class CycleTimerEventDefinition(TimerEventDefinition):
@property
def event_type(self):
return 'Cycle Timer'
def has_fired(self, my_task):
# We will fire this timer whenever a cycle completes
# The task itself will manage counting how many times it fires
if my_task.internal_data.get('event_fired'):
# If we manually send this event, this will be set
if not my_task._get_internal_data('event_fired'):
# Only check for the next cycle when the event has not fired to prevent cycles from being skipped.
event_value = my_task._get_internal_data('event_value')
if event_value is None:
expression = my_task.workflow.script_engine.evaluate(my_task, self.expression)
cycles, start, duration = TimerEventDefinition.parse_iso_recurring_interval(expression)
event_value = {'cycles': cycles, 'next': start.isoformat(), 'duration': duration.total_seconds()}
if event_value['cycles'] > 0:
next_event = datetime.fromisoformat(event_value['next'])
if next_event < datetime.now(timezone.utc):
my_task._set_internal_data(event_fired=True)
event_value['next'] = (next_event + timedelta(seconds=event_value['duration'])).isoformat()
my_task._set_internal_data(event_value=event_value)
return my_task._get_internal_data('event_fired', False)
def timer_value(self, my_task):
event_value = my_task._get_internal_data('event_value')
if event_value is not None and event_value['cycles'] > 0:
return event_value['next']
def complete(self, my_task):
event_value = my_task._get_internal_data('event_value')
if event_value is not None and event_value['cycles'] == 0:
my_task.internal_data.pop('event_value')
return True
repeat, delta = my_task.workflow.script_engine.evaluate(my_task, self.cycle_definition)
# This is the first time we've entered this event
if my_task.internal_data.get('repeat') is None:
my_task.internal_data['repeat'] = repeat
if my_task.get_data('repeat_count') is None:
# This is now a looping task, and if we use internal data, the repeat count won't persist
my_task.set_data(repeat_count=0)
now = datetime.datetime.now()
if my_task._get_internal_data('start_time') is None:
start_time = now
my_task.internal_data['start_time'] = now.strftime(self.TIME_FORMAT)
else:
start_time = datetime.datetime.strptime(my_task._get_internal_data('start_time'),self.TIME_FORMAT)
if my_task.get_data('repeat_count') >= repeat or (now - start_time) < delta:
return False
return True
def reset(self, my_task):
repeat_count = my_task.get_data('repeat_count')
if repeat_count is None:
# If this is a boundary event, then repeat count will not have been set
my_task.set_data(repeat_count=0)
else:
my_task.set_data(repeat_count=repeat_count + 1)
my_task.internal_data['start_time'] = None
super(CycleTimerEventDefinition, self).reset(my_task)
def __eq__(self, other):
return self.__class__.__name__ == other.__class__.__name__ and self.label == other.label
def complete_cycle(self, my_task):
# Only increment when the task completes
if my_task._get_internal_data('event_value') is not None:
my_task.internal_data['event_value']['cycles'] -= 1
class MultipleEventDefinition(EventDefinition):

View File

@ -17,7 +17,7 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
from .event_definitions import MessageEventDefinition, NoneEventDefinition
from .event_definitions import MessageEventDefinition, NoneEventDefinition, CycleTimerEventDefinition
from ..BpmnSpecMixin import BpmnSpecMixin
from ....specs.Simple import Simple
from ....task import TaskState
@ -69,6 +69,12 @@ class CatchingEvent(Simple, BpmnSpecMixin):
if isinstance(self.event_definition, MessageEventDefinition):
self.event_definition.update_task_data(my_task)
elif isinstance(self.event_definition, CycleTimerEventDefinition):
self.event_definition.complete_cycle(my_task)
if not self.event_definition.complete(my_task):
for output in self.outputs:
my_task._add_child(output)
my_task._set_state(TaskState.WAITING)
self.event_definition.reset(my_task)
super(CatchingEvent, self)._on_complete_hook(my_task)

View File

@ -16,7 +16,12 @@
# Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
# 02110-1301 USA
from SpiffWorkflow.bpmn.specs.events.event_definitions import MessageEventDefinition, MultipleEventDefinition
from SpiffWorkflow.bpmn.specs.events.event_definitions import (
MessageEventDefinition,
MultipleEventDefinition,
NamedEventDefinition,
TimerEventDefinition,
)
from .PythonScriptEngine import PythonScriptEngine
from .specs.events.event_types import CatchingEvent
from .specs.events.StartEvent import StartEvent
@ -155,9 +160,21 @@ class BpmnWorkflow(Workflow):
event_definition.payload = payload
self.catch(event_definition, correlations=correlations)
def do_engine_steps(self, exit_at = None,
will_complete_task=None,
did_complete_task=None):
def waiting_events(self):
# Ultimately I'd like to add an event class so that EventDefinitions would not so double duty as both specs
# and instantiations, and this method would return that. However, I think that's beyond the scope of the
# current request.
events = []
for task in [t for t in self.get_waiting_tasks() if isinstance(t.task_spec, CatchingEvent)]:
event_definition = task.task_spec.event_definition
events.append({
'event_type': event_definition.event_type,
'name': event_definition.name if isinstance(event_definition, NamedEventDefinition) else None,
'value': event_definition.timer_value(task) if isinstance(event_definition, TimerEventDefinition) else None,
})
return events
def do_engine_steps(self, exit_at = None, will_complete_task=None, did_complete_task=None):
"""
Execute any READY tasks that are engine specific (for example, gateways
or script tasks). This is done in a loop, so it will keep completing
@ -168,9 +185,7 @@ class BpmnWorkflow(Workflow):
:param will_complete_task: Callback that will be called prior to completing a task
:param did_complete_task: Callback that will be called after completing a task
"""
engine_steps = list(
[t for t in self.get_tasks(TaskState.READY)
if self._is_engine_task(t.task_spec)])
engine_steps = list([t for t in self.get_tasks(TaskState.READY) if self._is_engine_task(t.task_spec)])
while engine_steps:
for task in engine_steps:
if will_complete_task is not None:
@ -180,9 +195,7 @@ class BpmnWorkflow(Workflow):
did_complete_task(task)
if task.task_spec.name == exit_at:
return task
engine_steps = list(
[t for t in self.get_tasks(TaskState.READY)
if self._is_engine_task(t.task_spec)])
engine_steps = list([t for t in self.get_tasks(TaskState.READY) if self._is_engine_task(t.task_spec)])
def refresh_waiting_tasks(self,
will_refresh_task=None,
@ -255,6 +268,3 @@ class BpmnWorkflow(Workflow):
def _is_engine_task(self, task_spec):
return (not hasattr(task_spec, 'is_engine_task') or task_spec.is_engine_task())
def _task_completed_notify(self, task):
super(BpmnWorkflow, self)._task_completed_notify(task)

View File

@ -53,16 +53,11 @@ class ExclusiveChoice(MultiChoice):
:param task_spec: The following task spec.
"""
assert self.default_task_spec is None
self.outputs.append(task_spec)
self.default_task_spec = task_spec.name
task_spec._connect_notify(self)
super().connect(task_spec)
def test(self):
"""
Checks whether all required attributes are set. Throws an exception
if an error was detected.
"""
MultiChoice.test(self)
super().test()
if self.default_task_spec is None:
raise WorkflowException('A default output is required.', task_spec=self)
@ -76,10 +71,10 @@ class ExclusiveChoice(MultiChoice):
my_task._set_likely_task(spec)
def _on_complete_hook(self, my_task):
# Find the first matching condition.
output = self._wf_spec.get_task_spec_from_name(self.default_task_spec)
for condition, spec_name in self.cond_task_specs:
if condition is None or condition._matches(my_task):
if condition is not None and condition._matches(my_task):
output = self._wf_spec.get_task_spec_from_name(spec_name)
break

View File

@ -125,6 +125,26 @@ class Join(TaskSpec):
return True
return False
def _get_split_task(self, my_task):
# One Join spec may have multiple corresponding Task objects::
#
# - Due to the MultiInstance pattern.
# - Due to the ThreadSplit pattern.
#
# When using the MultiInstance pattern, we want to join across
# the resulting task instances. When using the ThreadSplit
# pattern, we only join within the same thread. (Both patterns
# may also be mixed.)
#
# We are looking for all task instances that must be joined.
# We limit our search by starting at the split point.
if self.split_task:
task_spec = my_task.workflow.get_task_spec_from_name(self.split_task)
split_task = my_task._find_ancestor(task_spec)
else:
split_task = my_task.workflow.task_tree
return split_task
def _check_threshold_unstructured(self, my_task, force=False):
# The default threshold is the number of inputs.
threshold = valueof(my_task, self.threshold)
@ -168,7 +188,6 @@ class Join(TaskSpec):
for task in tasks:
# Refresh path prediction.
task.task_spec._predict(task)
if not self._branch_may_merge_at(task):
completed += 1
elif self._branch_is_complete(task):
@ -219,24 +238,8 @@ class Join(TaskSpec):
self._do_join(my_task)
def _do_join(self, my_task):
# One Join spec may have multiple corresponding Task objects::
#
# - Due to the MultiInstance pattern.
# - Due to the ThreadSplit pattern.
#
# When using the MultiInstance pattern, we want to join across
# the resulting task instances. When using the ThreadSplit
# pattern, we only join within the same thread. (Both patterns
# may also be mixed.)
#
# We are looking for all task instances that must be joined.
# We limit our search by starting at the split point.
if self.split_task:
split_task = my_task.workflow.get_task_spec_from_name(
self.split_task)
split_task = my_task._find_ancestor(split_task)
else:
split_task = my_task.workflow.task_tree
split_task = self._get_split_task(my_task)
# Identify all corresponding task instances within the thread.
# Also remember which of those instances was most recently changed,
@ -259,8 +262,7 @@ class Join(TaskSpec):
# Check whether the state of the instance was recently
# changed.
changed = task.parent.last_state_change
if last_changed is None \
or changed > last_changed.parent.last_state_change:
if last_changed is None or changed > last_changed.parent.last_state_change:
last_changed = task
# Mark the identified task instances as COMPLETED. The exception
@ -276,8 +278,6 @@ class Join(TaskSpec):
task._set_state(TaskState.COMPLETED)
task._drop_children()
def _on_trigger(self, my_task):
"""
May be called to fire the Join before the incoming branches are

View File

@ -116,24 +116,21 @@ class MultiChoice(TaskSpec):
if child.task_spec in outputs:
child._set_state(best_state)
def _get_matching_outputs(self, my_task):
outputs = []
for condition, output in self.cond_task_specs:
if self.choice is not None and output not in self.choice:
continue
if condition is None or condition._matches(my_task):
outputs.append(self._wf_spec.get_task_spec_from_name(output))
return outputs
def _on_complete_hook(self, my_task):
"""
Runs the task. Should not be called directly.
Returns True if completed, False otherwise.
"""
# Find all matching conditions.
outputs = []
for condition, output in self.cond_task_specs:
if self.choice is not None and output not in self.choice:
continue
if condition is None:
outputs.append(self._wf_spec.get_task_spec_from_name(output))
continue
if not condition._matches(my_task):
continue
outputs.append(self._wf_spec.get_task_spec_from_name(output))
my_task._sync_children(outputs, TaskState.FUTURE)
my_task._sync_children(self._get_matching_outputs(my_task), TaskState.FUTURE)
def serialize(self, serializer):
return serializer.serialize_multi_choice(self)

View File

@ -3,7 +3,8 @@
from SpiffWorkflow.bpmn.specs.ExclusiveGateway import ExclusiveGateway
from SpiffWorkflow.bpmn.specs.UserTask import UserTask
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnParser
from SpiffWorkflow.bpmn.parser.task_parsers import ExclusiveGatewayParser, UserTaskParser
from SpiffWorkflow.bpmn.parser.TaskParser import TaskParser
from SpiffWorkflow.bpmn.parser.task_parsers import ConditionalGatewayParser
from SpiffWorkflow.bpmn.parser.util import full_tag
from SpiffWorkflow.bpmn.serializer.bpmn_converters import BpmnTaskSpecConverter
@ -38,7 +39,7 @@ class TestUserTask(UserTask):
def deserialize(self, serializer, wf_spec, s_state):
return serializer.deserialize_generic(wf_spec, s_state, TestUserTask)
class TestExclusiveGatewayParser(ExclusiveGatewayParser):
class TestExclusiveGatewayParser(ConditionalGatewayParser):
def parse_condition(self, sequence_flow_node):
cond = super().parse_condition(sequence_flow_node)
@ -62,7 +63,7 @@ class TestUserTaskConverter(BpmnTaskSpecConverter):
class TestBpmnParser(BpmnParser):
OVERRIDE_PARSER_CLASSES = {
full_tag('userTask'): (UserTaskParser, TestUserTask),
full_tag('userTask'): (TaskParser, TestUserTask),
full_tag('exclusiveGateway'): (TestExclusiveGatewayParser, ExclusiveGateway),
full_tag('callActivity'): (CallActivityParser, CallActivity)
}

View File

@ -18,14 +18,17 @@ class CallActivityDataTest(BpmnWorkflowTestCase):
self.actual_test(True)
def testCallActivityMissingInput(self):
self.workflow = BpmnWorkflow(self.spec, self.subprocesses)
set_data = self.workflow.spec.task_specs['Activity_0haob58']
set_data.script = """in_1, unused = 1, True"""
with self.assertRaises(WorkflowDataException) as exc:
self.advance_to_subprocess()
self.assertEqual(exc.var.name,'in_2')
self.assertEqual("'in_2' was not found in the task data. "
"You are missing a required Data Input for a call activity.",
str(exc.exception))
self.assertEqual(exc.exception.data_input.name,'in_2')
def testCallActivityMissingOutput(self):
@ -40,7 +43,10 @@ class CallActivityDataTest(BpmnWorkflowTestCase):
with self.assertRaises(WorkflowDataException) as exc:
self.complete_subprocess()
self.assertEqual(exc.var.name,'out_2')
self.assertEqual("'out_2' was not found in the task data. A Data Output was not provided as promised.",
str(exc.exception))
self.assertEqual(exc.exception.data_output.name,'out_2')
def actual_test(self, save_restore=False):
@ -85,4 +91,4 @@ class CallActivityDataTest(BpmnWorkflowTestCase):
while len(waiting) > 0:
next_task = self.workflow.get_tasks(TaskState.READY)[0]
next_task.complete()
waiting = self.workflow.get_tasks(TaskState.WAITING)
waiting = self.workflow.get_tasks(TaskState.WAITING)

View File

@ -0,0 +1,39 @@
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.exceptions import WorkflowTaskException
from .BpmnWorkflowTestCase import BpmnWorkflowTestCase
class InclusiveGatewayTest(BpmnWorkflowTestCase):
def setUp(self):
spec, subprocess = self.load_workflow_spec('inclusive_gateway.bpmn', 'main')
self.workflow = BpmnWorkflow(spec)
self.workflow.do_engine_steps()
def testDefaultConditionOnly(self):
self.set_data({'v': -1, 'u': -1, 'w': -1})
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
self.assertDictEqual(self.workflow.data, {'v': 0, 'u': -1, 'w': -1})
def testDefaultConditionOnlySaveRestore(self):
self.set_data({'v': -1, 'u': -1, 'w': -1})
self.save_restore()
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
self.assertDictEqual(self.workflow.data, {'v': 0, 'u': -1, 'w': -1})
def testNoPathFromSecondGateway(self):
self.set_data({'v': 0, 'u': -1, 'w': -1})
self.assertRaises(WorkflowTaskException, self.workflow.do_engine_steps)
def testParallelCondition(self):
self.set_data({'v': 0, 'u': 1, 'w': 1})
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
self.assertDictEqual(self.workflow.data, {'v': 0, 'u': 1, 'w': 1})
def set_data(self, value):
task = self.workflow.get_ready_user_tasks()[0]
task.data = value
task.complete()

View File

@ -5,7 +5,6 @@ import datetime
import time
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
__author__ = 'kellym'
@ -16,9 +15,8 @@ class NITimerDurationTest(BpmnWorkflowTestCase):
Non-Interrupting Timer boundary test
"""
def setUp(self):
self.script_engine = PythonScriptEngine(default_globals={"timedelta": datetime.timedelta})
spec, subprocesses = self.load_workflow_spec('timer-non-interrupt-boundary.bpmn', 'NonInterruptTimer')
self.workflow = BpmnWorkflow(spec, subprocesses, script_engine=self.script_engine)
self.workflow = BpmnWorkflow(spec, subprocesses)
def load_spec(self):
return
@ -31,57 +29,44 @@ class NITimerDurationTest(BpmnWorkflowTestCase):
def actual_test(self,save_restore = False):
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
ready_tasks[0].data['work_done'] = 'No'
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
event = self.workflow.get_tasks_from_spec_name('Event_0jyy8ao')[0]
self.assertEqual(event.state, TaskState.WAITING)
loopcount = 0
# test bpmn has a timeout of .25s
# we should terminate loop before that.
starttime = datetime.datetime.now()
while loopcount < 10:
ready_tasks = self.workflow.get_tasks(TaskState.READY)
if len(ready_tasks) > 1:
break
# test bpmn has a timeout of .2s; we should terminate loop before that.
# The subprocess will also wait
while len(self.workflow.get_waiting_tasks()) == 2 and loopcount < 10:
if save_restore:
self.save_restore()
self.workflow.script_engine = self.script_engine
#self.assertEqual(1, len(self.workflow.get_tasks(Task.WAITING)))
time.sleep(0.1)
self.workflow.complete_task_from_id(ready_tasks[0].id)
ready_tasks = self.workflow.get_tasks(TaskState.READY)
# There should be one ready task until the boundary event fires
self.assertEqual(len(self.workflow.get_ready_user_tasks()), 1)
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
loopcount = loopcount +1
loopcount += 1
endtime = datetime.datetime.now()
duration = endtime-starttime
# appropriate time here is .5 seconds
# due to the .3 seconds that we loop and then
# the two conditions that we complete after the timer completes.
self.assertEqual(duration<datetime.timedelta(seconds=.5),True)
self.assertEqual(duration>datetime.timedelta(seconds=.2),True)
duration = endtime - starttime
# appropriate time here is .5 seconds due to the .3 seconds that we loop and then
self.assertEqual(duration < datetime.timedelta(seconds=.5), True)
self.assertEqual(duration > datetime.timedelta(seconds=.2), True)
ready_tasks = self.workflow.get_ready_user_tasks()
# Now there should be two.
self.assertEqual(len(ready_tasks), 2)
for task in ready_tasks:
if task.task_spec == 'GetReason':
if task.task_spec.name == 'GetReason':
task.data['delay_reason'] = 'Just Because'
else:
elif task.task_spec.name == 'Activity_Work':
task.data['work_done'] = 'Yes'
self.workflow.complete_task_from_id(task.id)
task.complete()
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
ready_tasks[0].data['experience'] = 'Great!'
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
self.assertEqual(self.workflow.is_completed(),True)
self.assertEqual(self.workflow.last_task.data,{'work_done': 'Yes', 'experience': 'Great!'})
print (self.workflow.last_task.data)
print(duration)
self.assertEqual(self.workflow.last_task.data, {'work_done': 'Yes', 'delay_reason': 'Just Because'})
def suite():

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_17fwemw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" id="Definitions_17fwemw" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="MultiInstance" isExecutable="true">
<bpmn:startEvent id="StartEvent_1" name="StartEvent_1">
<bpmn:outgoing>Flow_0t6p1sb</bpmn:outgoing>
@ -40,7 +40,7 @@
<bpmn:incoming>Flow_1dah8xt</bpmn:incoming>
<bpmn:outgoing>Flow_0io0g18</bpmn:outgoing>
</bpmn:manualTask>
<bpmn:exclusiveGateway id="Gateway_1cn7vsp">
<bpmn:exclusiveGateway id="Gateway_1cn7vsp" default="Flow_1sx7n9u">
<bpmn:incoming>Flow_0io0g18</bpmn:incoming>
<bpmn:incoming>Flow_0i1bv5g</bpmn:incoming>
<bpmn:outgoing>Flow_1sx7n9u</bpmn:outgoing>
@ -52,85 +52,6 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="MultiInstance">
<bpmndi:BPMNEdge id="Flow_0ugjw69_di" bpmnElement="Flow_0ugjw69">
<di:waypoint x="810" y="117" />
<di:waypoint x="912" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0t6p1sb_di" bpmnElement="Flow_0t6p1sb">
<di:waypoint x="208" y="117" />
<di:waypoint x="230" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_1g0pmib_di" bpmnElement="Event_End">
<dc:Bounds x="912" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="903" y="75" width="54" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="172" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="159" y="142" width="64" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1iyilui_di" bpmnElement="Activity_Loop">
<dc:Bounds x="710" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_088tnzu_di" bpmnElement="Activity_088tnzu">
<dc:Bounds x="230" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0ds4mp0_di" bpmnElement="Flow_0ds4mp0">
<di:waypoint x="330" y="117" />
<di:waypoint x="345" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_07go3pk_di" bpmnElement="Gateway_07go3pk" isMarkerVisible="true">
<dc:Bounds x="615" y="92" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="602" y="62" width="78" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1oo4mpj_di" bpmnElement="Flow_1oo4mpj">
<di:waypoint x="640" y="142" />
<di:waypoint x="640" y="330" />
<di:waypoint x="930" y="330" />
<di:waypoint x="930" y="135" />
<bpmndi:BPMNLabel>
<dc:Bounds x="745" y="312" width="80" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0u92n7b_di" bpmnElement="Flow_0u92n7b">
<di:waypoint x="665" y="117" />
<di:waypoint x="710" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="670" y="99" width="35" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0io0g18_di" bpmnElement="Flow_0io0g18">
<di:waypoint x="530" y="117" />
<di:waypoint x="535" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_08wnx3s_di" bpmnElement="Gateway_08wnx3s" isMarkerVisible="true">
<dc:Bounds x="345" y="92" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="341" y="62" width="58" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1dah8xt_di" bpmnElement="Flow_1dah8xt">
<di:waypoint x="395" y="117" />
<di:waypoint x="430" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="395" y="99" width="35" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_0ow7pu7_di" bpmnElement="Activity_0flre28">
<dc:Bounds x="430" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1cn7vsp_di" bpmnElement="Gateway_1cn7vsp" isMarkerVisible="true">
<dc:Bounds x="535" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1sx7n9u_di" bpmnElement="Flow_1sx7n9u">
<di:waypoint x="585" y="117" />
<di:waypoint x="615" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0i1bv5g_di" bpmnElement="Flow_0i1bv5g">
<di:waypoint x="370" y="142" />
<di:waypoint x="370" y="280" />
@ -140,6 +61,85 @@
<dc:Bounds x="448" y="262" width="34" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1sx7n9u_di" bpmnElement="Flow_1sx7n9u">
<di:waypoint x="585" y="117" />
<di:waypoint x="615" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1dah8xt_di" bpmnElement="Flow_1dah8xt">
<di:waypoint x="395" y="117" />
<di:waypoint x="430" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="395" y="99" width="35" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0io0g18_di" bpmnElement="Flow_0io0g18">
<di:waypoint x="530" y="117" />
<di:waypoint x="535" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0u92n7b_di" bpmnElement="Flow_0u92n7b">
<di:waypoint x="665" y="117" />
<di:waypoint x="710" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="670" y="99" width="35" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1oo4mpj_di" bpmnElement="Flow_1oo4mpj">
<di:waypoint x="640" y="142" />
<di:waypoint x="640" y="330" />
<di:waypoint x="930" y="330" />
<di:waypoint x="930" y="135" />
<bpmndi:BPMNLabel>
<dc:Bounds x="745" y="312" width="80" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ds4mp0_di" bpmnElement="Flow_0ds4mp0">
<di:waypoint x="330" y="117" />
<di:waypoint x="345" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ugjw69_di" bpmnElement="Flow_0ugjw69">
<di:waypoint x="810" y="117" />
<di:waypoint x="912" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0t6p1sb_di" bpmnElement="Flow_0t6p1sb">
<di:waypoint x="208" y="117" />
<di:waypoint x="230" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="172" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="159" y="142" width="64" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1g0pmib_di" bpmnElement="Event_End">
<dc:Bounds x="912" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="903" y="75" width="54" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1iyilui_di" bpmnElement="Activity_Loop">
<dc:Bounds x="710" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_088tnzu_di" bpmnElement="Activity_088tnzu">
<dc:Bounds x="230" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_07go3pk_di" bpmnElement="Gateway_07go3pk" isMarkerVisible="true">
<dc:Bounds x="615" y="92" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="602" y="62" width="78" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_08wnx3s_di" bpmnElement="Gateway_08wnx3s" isMarkerVisible="true">
<dc:Bounds x="345" y="92" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="341" y="62" width="58" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0ow7pu7_di" bpmnElement="Activity_0flre28">
<dc:Bounds x="430" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1cn7vsp_di" bpmnElement="Gateway_1cn7vsp" isMarkerVisible="true">
<dc:Bounds x="535" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,192 +1,196 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:signavio="http://www.signavio.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="Signavio Process Editor, http://www.signavio.com" exporterVersion="" expressionLanguage="http://www.w3.org/1999/XPath" id="sid-e768d5da-695e-4e7f-9056-00d2c55ebc7a" targetNamespace="http://www.signavio.com/bpmn20" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-0f17acc3-6084-4563-9deb-bdcad51f2d07">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel One Path Ends" processRef="sid-33b2dda8-ca46-47ca-9f08-43de73abde9e">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
</participant>
</collaboration>
<process id="sid-33b2dda8-ca46-47ca-9f08-43de73abde9e" isClosed="false" isExecutable="false" name="Parallel One Path Ends" processType="None">
<laneSet id="sid-a3c82d8b-0ff3-4d32-822a-c4867d4b03ec">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84</flowNodeRef>
<flowNodeRef>sid-40294A27-262C-4805-94A0-36AC9DFEA55A</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway gatewayDirection="Diverging" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task completionQuantity="1" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" isForCompensation="false" name="Parallel Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task completionQuantity="1" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" isForCompensation="false" name="Choice 1" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway gatewayDirection="Diverging" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
</exclusiveGateway>
<task completionQuantity="1" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" isForCompensation="false" name="Yes Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task completionQuantity="1" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" isForCompensation="false" name="Done" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<endEvent id="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
</endEvent>
<inclusiveGateway gatewayDirection="Converging" id="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<outgoing>sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778"/>
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86"/>
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3"/>
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7"/>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5"/>
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A"/>
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB"/>
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84"/>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A"/>
<sequenceFlow id="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A" name="" sourceRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0"/>
</process>
<bpmndi:BPMNDiagram id="sid-45a74cc8-83cd-41da-8041-dd8449ea4c0f">
<bpmndi:BPMNPlane bpmnElement="sid-0f17acc3-6084-4563-9deb-bdcad51f2d07" id="sid-8979dc6d-9b90-4b0d-8bab-1999dec21a52">
<bpmndi:BPMNShape bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="776.0" x="120.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="746.0" x="150.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui">
<omgdc:Bounds height="30.0" width="30.0" x="190.0" y="122.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui">
<omgdc:Bounds height="40.0" width="40.0" x="315.0" y="117.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui">
<omgdc:Bounds height="80.0" width="100.0" x="469.0" y="97.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="214.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" isMarkerVisible="true">
<omgdc:Bounds height="40.0" width="40.0" x="261.0" y="339.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui">
<omgdc:Bounds height="80.0" width="100.0" x="371.0" y="319.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui">
<omgdc:Bounds height="80.0" width="100.0" x="678.0" y="328.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui">
<omgdc:Bounds height="28.0" width="28.0" x="714.0" y="448.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84" id="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84_gui">
<omgdc:Bounds height="28.0" width="28.0" x="267.0" y="448.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" id="sid-40294A27-262C-4805-94A0-36AC9DFEA55A_gui">
<omgdc:Bounds height="40.0" width="40.0" x="600.0" y="339.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF" id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui">
<omgdi:waypoint x="301.0" y="359.0"/>
<omgdi:waypoint x="371.0" y="359.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui">
<omgdi:waypoint x="355.0" y="137.0"/>
<omgdi:waypoint x="469.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui">
<omgdi:waypoint x="281.0" y="294.0"/>
<omgdi:waypoint x="281.0" y="339.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A" id="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A_gui">
<omgdi:waypoint x="640.0" y="360.0"/>
<omgdi:waypoint x="678.0" y="364.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui">
<omgdi:waypoint x="728.0" y="408.0"/>
<omgdi:waypoint x="728.0" y="448.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui">
<omgdi:waypoint x="220.0" y="137.0"/>
<omgdi:waypoint x="315.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09" id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui">
<omgdi:waypoint x="471.0" y="359.0"/>
<omgdi:waypoint x="600.0" y="359.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui">
<omgdi:waypoint x="335.0" y="157.0"/>
<omgdi:waypoint x="335.5" y="185.5"/>
<omgdi:waypoint x="281.0" y="185.5"/>
<omgdi:waypoint x="281.0" y="214.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui">
<omgdi:waypoint x="281.0" y="379.0"/>
<omgdi:waypoint x="281.0" y="448.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820" id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui">
<omgdi:waypoint x="569.0" y="137.0"/>
<omgdi:waypoint x="620.5" y="137.0"/>
<omgdi:waypoint x="620.0" y="339.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:signavio="http://www.signavio.com" id="sid-e768d5da-695e-4e7f-9056-00d2c55ebc7a" targetNamespace="http://www.signavio.com/bpmn20" exporter="Camunda Modeler" exporterVersion="4.11.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-0f17acc3-6084-4563-9deb-bdcad51f2d07">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel One Path Ends" processRef="sid-33b2dda8-ca46-47ca-9f08-43de73abde9e">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
</participant>
</collaboration>
<process id="sid-33b2dda8-ca46-47ca-9f08-43de73abde9e" name="Parallel One Path Ends" processType="None" isClosed="false" isExecutable="false">
<laneSet id="sid-a3c82d8b-0ff3-4d32-822a-c4867d4b03ec">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="" />
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84</flowNodeRef>
<flowNodeRef>sid-40294A27-262C-4805-94A0-36AC9DFEA55A</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" name="Parallel Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" name="Choice 1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
</exclusiveGateway>
<task id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" name="Yes Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<endEvent id="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
</endEvent>
<inclusiveGateway id="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" name="" gatewayDirection="Converging" default="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<outgoing>sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" />
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" />
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" />
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" />
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<conditionExpression xsi:type="tFormalExpression">choice == 'Yes'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" />
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" />
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84">
<conditionExpression xsi:type="tFormalExpression">choice == 'No'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" />
<sequenceFlow id="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A" name="" sourceRef="sid-40294A27-262C-4805-94A0-36AC9DFEA55A" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" />
<task id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" name="Done">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
</process>
<bpmndi:BPMNDiagram id="sid-45a74cc8-83cd-41da-8041-dd8449ea4c0f">
<bpmndi:BPMNPlane id="sid-8979dc6d-9b90-4b0d-8bab-1999dec21a52" bpmnElement="sid-0f17acc3-6084-4563-9deb-bdcad51f2d07">
<bpmndi:BPMNShape id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" isHorizontal="true">
<omgdc:Bounds x="120" y="90" width="776" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" isHorizontal="true">
<omgdc:Bounds x="150" y="90" width="746" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A_gui" bpmnElement="sid-8B2BFD35-F1B2-4C77-AC51-F15960D8791A">
<omgdi:waypoint x="640" y="360" />
<omgdi:waypoint x="678" y="364" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui" bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820">
<omgdi:waypoint x="569" y="137" />
<omgdi:waypoint x="620.5" y="137" />
<omgdi:waypoint x="620" y="339" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui" bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42">
<omgdi:waypoint x="281" y="379" />
<omgdi:waypoint x="281" y="448" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui" bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF">
<omgdi:waypoint x="728" y="408" />
<omgdi:waypoint x="728" y="448" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui" bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09">
<omgdi:waypoint x="471" y="359" />
<omgdi:waypoint x="600" y="359" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui" bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF">
<omgdi:waypoint x="301" y="359" />
<omgdi:waypoint x="371" y="359" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui" bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140">
<omgdi:waypoint x="281" y="294" />
<omgdi:waypoint x="281" y="339" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui" bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C">
<omgdi:waypoint x="335" y="157" />
<omgdi:waypoint x="335.5" y="185.5" />
<omgdi:waypoint x="281" y="185.5" />
<omgdi:waypoint x="281" y="214" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui" bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94">
<omgdi:waypoint x="355" y="137" />
<omgdi:waypoint x="469" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui" bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612">
<omgdi:waypoint x="220" y="137" />
<omgdi:waypoint x="315" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui" bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE">
<omgdc:Bounds x="190" y="122" width="30" height="30" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui" bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778">
<omgdc:Bounds x="315" y="117" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui" bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86">
<omgdc:Bounds x="469" y="97" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui" bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3">
<omgdc:Bounds x="231" y="214" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" isMarkerVisible="true">
<omgdc:Bounds x="261" y="339" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui" bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<omgdc:Bounds x="371" y="319" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui" bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0">
<omgdc:Bounds x="678" y="328" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui" bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB">
<omgdc:Bounds x="714" y="448" width="28" height="28" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84_gui" bpmnElement="sid-8FFE9D52-DC83-46A8-BB36-98BA94E5FE84">
<omgdc:Bounds x="267" y="448" width="28" height="28" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-40294A27-262C-4805-94A0-36AC9DFEA55A_gui" bpmnElement="sid-40294A27-262C-4805-94A0-36AC9DFEA55A">
<omgdc:Bounds x="600" y="339" width="40" height="40" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -1,219 +1,223 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:signavio="http://www.signavio.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="Signavio Process Editor, http://www.signavio.com" exporterVersion="" expressionLanguage="http://www.w3.org/1999/XPath" id="sid-30c405f0-d9e2-4a64-bee9-991f9cdd29ca" targetNamespace="http://www.signavio.com/bpmn20" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-5a474cce-f38e-40ef-8177-46451f1c0008">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Then Exclusive No Inclusive" processRef="sid-900d26c9-beab-47a4-8092-4284bfb39927">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
</participant>
</collaboration>
<process id="sid-900d26c9-beab-47a4-8092-4284bfb39927" isClosed="false" isExecutable="false" name="Parallel Then Exclusive No Inclusive" processType="None">
<laneSet id="sid-6ee2dc30-d14c-4d0c-9e3c-dab157e066ae">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2</flowNodeRef>
<flowNodeRef>sid-D856C519-562B-46A3-B32C-9587F394BD0F</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway gatewayDirection="Diverging" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task completionQuantity="1" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" isForCompensation="false" name="Parallel Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task completionQuantity="1" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" isForCompensation="false" name="Choice 1" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway gatewayDirection="Diverging" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task completionQuantity="1" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" isForCompensation="false" name="Yes Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task completionQuantity="1" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" isForCompensation="false" name="No Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task completionQuantity="1" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" isForCompensation="false" name="Done" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<exclusiveGateway gatewayDirection="Converging" id="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-3B450653-1657-4247-B96E-6E3E6262BB97</outgoing>
</exclusiveGateway>
<parallelGateway gatewayDirection="Converging" id="sid-D856C519-562B-46A3-B32C-9587F394BD0F" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-3B450653-1657-4247-B96E-6E3E6262BB97</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</parallelGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778"/>
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86"/>
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3"/>
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7"/>
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3"/>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5"/>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F"/>
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2"/>
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0"/>
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB"/>
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2"/>
<sequenceFlow id="sid-3B450653-1657-4247-B96E-6E3E6262BB97" name="" sourceRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" targetRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F"/>
</process>
<bpmndi:BPMNDiagram id="sid-8e452264-f261-4e0f-bb04-953b98a69997">
<bpmndi:BPMNPlane bpmnElement="sid-5a474cce-f38e-40ef-8177-46451f1c0008" id="sid-2831b2c4-9485-4174-9ccc-4942ec15b903">
<bpmndi:BPMNShape bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="776.0" x="120.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="746.0" x="150.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui">
<omgdc:Bounds height="30.0" width="30.0" x="190.0" y="122.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui">
<omgdc:Bounds height="40.0" width="40.0" x="315.0" y="117.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui">
<omgdc:Bounds height="80.0" width="100.0" x="469.0" y="97.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="214.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" isMarkerVisible="true">
<omgdc:Bounds height="40.0" width="40.0" x="261.0" y="339.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui">
<omgdc:Bounds height="80.0" width="100.0" x="371.0" y="319.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="437.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui">
<omgdc:Bounds height="80.0" width="100.0" x="678.0" y="328.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui">
<omgdc:Bounds height="28.0" width="28.0" x="714.0" y="448.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" id="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2_gui" isMarkerVisible="true">
<omgdc:Bounds height="40.0" width="40.0" x="503.0" y="390.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-D856C519-562B-46A3-B32C-9587F394BD0F" id="sid-D856C519-562B-46A3-B32C-9587F394BD0F_gui">
<omgdc:Bounds height="40.0" width="40.0" x="600.0" y="348.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui">
<omgdi:waypoint x="355.0" y="137.0"/>
<omgdi:waypoint x="469.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui">
<omgdi:waypoint x="331.0" y="477.0"/>
<omgdi:waypoint x="523.5" y="477.0"/>
<omgdi:waypoint x="523.0" y="430.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui">
<omgdi:waypoint x="728.0" y="408.0"/>
<omgdi:waypoint x="728.0" y="448.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui">
<omgdi:waypoint x="220.0" y="137.0"/>
<omgdi:waypoint x="315.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui">
<omgdi:waypoint x="335.0" y="157.0"/>
<omgdi:waypoint x="335.5" y="185.5"/>
<omgdi:waypoint x="281.0" y="185.5"/>
<omgdi:waypoint x="281.0" y="214.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820" id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui">
<omgdi:waypoint x="569.0" y="137.0"/>
<omgdi:waypoint x="630.0" y="137.0"/>
<omgdi:waypoint x="620.0" y="348.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF" id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui">
<omgdi:waypoint x="301.0" y="359.0"/>
<omgdi:waypoint x="371.0" y="359.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui">
<omgdi:waypoint x="281.0" y="294.0"/>
<omgdi:waypoint x="281.0" y="339.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09" id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui">
<omgdi:waypoint x="471.0" y="359.0"/>
<omgdi:waypoint x="523.5" y="359.0"/>
<omgdi:waypoint x="523.0" y="390.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-3B450653-1657-4247-B96E-6E3E6262BB97" id="sid-3B450653-1657-4247-B96E-6E3E6262BB97_gui">
<omgdi:waypoint x="543.0" y="410.0"/>
<omgdi:waypoint x="568.5" y="410.5"/>
<omgdi:waypoint x="568.5" y="368.0"/>
<omgdi:waypoint x="600.0" y="368.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui">
<omgdi:waypoint x="281.0" y="379.0"/>
<omgdi:waypoint x="281.0" y="437.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui">
<omgdi:waypoint x="640.0" y="368.0"/>
<omgdi:waypoint x="678.0" y="368.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:signavio="http://www.signavio.com" id="sid-30c405f0-d9e2-4a64-bee9-991f9cdd29ca" targetNamespace="http://www.signavio.com/bpmn20" exporter="Camunda Modeler" exporterVersion="4.11.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-5a474cce-f38e-40ef-8177-46451f1c0008">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Then Exclusive No Inclusive" processRef="sid-900d26c9-beab-47a4-8092-4284bfb39927">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
</participant>
</collaboration>
<process id="sid-900d26c9-beab-47a4-8092-4284bfb39927" name="Parallel Then Exclusive No Inclusive" processType="None" isClosed="false" isExecutable="false">
<laneSet id="sid-6ee2dc30-d14c-4d0c-9e3c-dab157e066ae">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="" />
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2</flowNodeRef>
<flowNodeRef>sid-D856C519-562B-46A3-B32C-9587F394BD0F</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" name="Parallel Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" name="Choice 1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" name="Yes Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" name="No Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" name="Done">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<exclusiveGateway id="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" name="" gatewayDirection="Converging" default="sid-3B450653-1657-4247-B96E-6E3E6262BB97">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-3B450653-1657-4247-B96E-6E3E6262BB97</outgoing>
</exclusiveGateway>
<parallelGateway id="sid-D856C519-562B-46A3-B32C-9587F394BD0F" name="" gatewayDirection="Converging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-3B450653-1657-4247-B96E-6E3E6262BB97</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</parallelGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" />
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" />
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" />
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" />
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<conditionExpression xsi:type="tFormalExpression">choice == 'No'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<conditionExpression xsi:type="tFormalExpression">choice == 'Yes'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F" />
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" />
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" />
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" />
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" />
<sequenceFlow id="sid-3B450653-1657-4247-B96E-6E3E6262BB97" name="" sourceRef="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" targetRef="sid-D856C519-562B-46A3-B32C-9587F394BD0F" />
</process>
<bpmndi:BPMNDiagram id="sid-8e452264-f261-4e0f-bb04-953b98a69997">
<bpmndi:BPMNPlane id="sid-2831b2c4-9485-4174-9ccc-4942ec15b903" bpmnElement="sid-5a474cce-f38e-40ef-8177-46451f1c0008">
<bpmndi:BPMNShape id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" isHorizontal="true">
<omgdc:Bounds x="120" y="90" width="776" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" isHorizontal="true">
<omgdc:Bounds x="150" y="90" width="746" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="sid-3B450653-1657-4247-B96E-6E3E6262BB97_gui" bpmnElement="sid-3B450653-1657-4247-B96E-6E3E6262BB97">
<omgdi:waypoint x="543" y="410" />
<omgdi:waypoint x="568.5" y="410.5" />
<omgdi:waypoint x="568.5" y="368" />
<omgdi:waypoint x="600" y="368" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui" bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09">
<omgdi:waypoint x="471" y="359" />
<omgdi:waypoint x="523.5" y="359" />
<omgdi:waypoint x="523" y="390" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui" bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF">
<omgdi:waypoint x="728" y="408" />
<omgdi:waypoint x="728" y="448" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui" bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740">
<omgdi:waypoint x="640" y="368" />
<omgdi:waypoint x="678" y="368" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui" bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE">
<omgdi:waypoint x="331" y="477" />
<omgdi:waypoint x="523.5" y="477" />
<omgdi:waypoint x="523" y="430" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui" bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820">
<omgdi:waypoint x="569" y="137" />
<omgdi:waypoint x="630" y="137" />
<omgdi:waypoint x="620" y="348" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui" bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF">
<omgdi:waypoint x="301" y="359" />
<omgdi:waypoint x="371" y="359" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui" bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42">
<omgdi:waypoint x="281" y="379" />
<omgdi:waypoint x="281" y="437" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui" bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140">
<omgdi:waypoint x="281" y="294" />
<omgdi:waypoint x="281" y="339" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui" bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C">
<omgdi:waypoint x="335" y="157" />
<omgdi:waypoint x="335.5" y="185.5" />
<omgdi:waypoint x="281" y="185.5" />
<omgdi:waypoint x="281" y="214" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui" bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94">
<omgdi:waypoint x="355" y="137" />
<omgdi:waypoint x="469" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui" bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612">
<omgdi:waypoint x="220" y="137" />
<omgdi:waypoint x="315" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui" bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE">
<omgdc:Bounds x="190" y="122" width="30" height="30" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui" bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778">
<omgdc:Bounds x="315" y="117" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui" bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86">
<omgdc:Bounds x="469" y="97" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui" bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3">
<omgdc:Bounds x="231" y="214" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" isMarkerVisible="true">
<omgdc:Bounds x="261" y="339" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui" bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<omgdc:Bounds x="371" y="319" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui" bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<omgdc:Bounds x="231" y="437" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui" bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0">
<omgdc:Bounds x="678" y="328" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui" bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB">
<omgdc:Bounds x="714" y="448" width="28" height="28" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2_gui" bpmnElement="sid-040FCBAD-0550-4251-B799-74FCDB0DC3E2" isMarkerVisible="true">
<omgdc:Bounds x="503" y="390" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-D856C519-562B-46A3-B32C-9587F394BD0F_gui" bpmnElement="sid-D856C519-562B-46A3-B32C-9587F394BD0F">
<omgdc:Bounds x="600" y="348" width="40" height="40" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -1,202 +1,206 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:signavio="http://www.signavio.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="Signavio Process Editor, http://www.signavio.com" exporterVersion="" expressionLanguage="http://www.w3.org/1999/XPath" id="sid-2ed227c3-91bf-49c2-983f-0712464fa6d4" targetNamespace="http://www.signavio.com/bpmn20" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-6b109fe2-498a-4dd3-a372-4ad57a3e03b8">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Then Exclusive" processRef="sid-bb9ea2d5-58b6-43c7-8e77-6e28f71106f0">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
</participant>
</collaboration>
<process id="sid-bb9ea2d5-58b6-43c7-8e77-6e28f71106f0" isClosed="false" isExecutable="false" name="Parallel Then Exclusive" processType="None">
<laneSet id="sid-97ba594c-117d-496d-bcbf-0287c7af58d8">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway gatewayDirection="Diverging" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task completionQuantity="1" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" isForCompensation="false" name="Parallel Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task completionQuantity="1" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" isForCompensation="false" name="Choice 1" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway gatewayDirection="Diverging" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task completionQuantity="1" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" isForCompensation="false" name="Yes Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task completionQuantity="1" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" isForCompensation="false" name="No Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task completionQuantity="1" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" isForCompensation="false" name="Done" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<inclusiveGateway gatewayDirection="Converging" id="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778"/>
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86"/>
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3"/>
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7"/>
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3"/>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5"/>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5"/>
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5"/>
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0"/>
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB"/>
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5"/>
</process>
<bpmndi:BPMNDiagram id="sid-70742719-bbc1-49e7-aa4e-ad7ae1df57a8">
<bpmndi:BPMNPlane bpmnElement="sid-6b109fe2-498a-4dd3-a372-4ad57a3e03b8" id="sid-17cf042c-b181-4b41-ac37-d9559cd9c89f">
<bpmndi:BPMNShape bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="776.0" x="120.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="746.0" x="150.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui">
<omgdc:Bounds height="30.0" width="30.0" x="190.0" y="122.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui">
<omgdc:Bounds height="40.0" width="40.0" x="315.0" y="117.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui">
<omgdc:Bounds height="80.0" width="100.0" x="469.0" y="97.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="214.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" isMarkerVisible="true">
<omgdc:Bounds height="40.0" width="40.0" x="261.0" y="339.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui">
<omgdc:Bounds height="80.0" width="100.0" x="371.0" y="319.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="437.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui">
<omgdc:Bounds height="80.0" width="100.0" x="678.0" y="328.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui">
<omgdc:Bounds height="28.0" width="28.0" x="714.0" y="448.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" id="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5_gui">
<omgdc:Bounds height="40.0" width="40.0" x="600.0" y="348.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF" id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui">
<omgdi:waypoint x="301.0" y="359.0"/>
<omgdi:waypoint x="371.0" y="359.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui">
<omgdi:waypoint x="355.0" y="137.0"/>
<omgdi:waypoint x="469.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui">
<omgdi:waypoint x="281.0" y="294.0"/>
<omgdi:waypoint x="281.0" y="339.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui">
<omgdi:waypoint x="331.0" y="477.0"/>
<omgdi:waypoint x="630.0" y="477.0"/>
<omgdi:waypoint x="621.0" y="388.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui">
<omgdi:waypoint x="728.0" y="408.0"/>
<omgdi:waypoint x="728.0" y="448.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui">
<omgdi:waypoint x="220.0" y="137.0"/>
<omgdi:waypoint x="315.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09" id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui">
<omgdi:waypoint x="471.0" y="359.0"/>
<omgdi:waypoint x="535.5" y="359.0"/>
<omgdi:waypoint x="535.5" y="368.5"/>
<omgdi:waypoint x="600.0" y="368.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui">
<omgdi:waypoint x="335.0" y="157.0"/>
<omgdi:waypoint x="335.5" y="185.5"/>
<omgdi:waypoint x="281.0" y="185.5"/>
<omgdi:waypoint x="281.0" y="214.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui">
<omgdi:waypoint x="640.0" y="368.0"/>
<omgdi:waypoint x="678.0" y="368.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui">
<omgdi:waypoint x="281.0" y="379.0"/>
<omgdi:waypoint x="281.0" y="437.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820" id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui">
<omgdi:waypoint x="569.0" y="137.0"/>
<omgdi:waypoint x="630.0" y="137.0"/>
<omgdi:waypoint x="620.0" y="348.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:signavio="http://www.signavio.com" id="sid-2ed227c3-91bf-49c2-983f-0712464fa6d4" targetNamespace="http://www.signavio.com/bpmn20" exporter="Camunda Modeler" exporterVersion="4.11.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-6b109fe2-498a-4dd3-a372-4ad57a3e03b8">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Then Exclusive" processRef="sid-bb9ea2d5-58b6-43c7-8e77-6e28f71106f0">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
</participant>
</collaboration>
<process id="sid-bb9ea2d5-58b6-43c7-8e77-6e28f71106f0" name="Parallel Then Exclusive" processType="None" isClosed="false" isExecutable="false">
<laneSet id="sid-97ba594c-117d-496d-bcbf-0287c7af58d8">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="" />
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" name="Parallel Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" name="Choice 1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" name="Yes Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" name="No Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" name="Done">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<inclusiveGateway id="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" name="" gatewayDirection="Converging" default="sid-0895E09C-077C-4D12-8C11-31F28CBC7740">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" />
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" />
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" />
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" />
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<conditionExpression xsi:type="tFormalExpression">choice == 'No'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<conditionExpression xsi:type="tFormalExpression">choice == 'Yes'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" />
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" />
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" />
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" />
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5" />
</process>
<bpmndi:BPMNDiagram id="sid-70742719-bbc1-49e7-aa4e-ad7ae1df57a8">
<bpmndi:BPMNPlane id="sid-17cf042c-b181-4b41-ac37-d9559cd9c89f" bpmnElement="sid-6b109fe2-498a-4dd3-a372-4ad57a3e03b8">
<bpmndi:BPMNShape id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" isHorizontal="true">
<omgdc:Bounds x="120" y="90" width="776" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" isHorizontal="true">
<omgdc:Bounds x="150" y="90" width="746" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui" bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09">
<omgdi:waypoint x="471" y="359" />
<omgdi:waypoint x="535.5" y="359" />
<omgdi:waypoint x="535.5" y="368.5" />
<omgdi:waypoint x="600" y="368" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui" bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF">
<omgdi:waypoint x="728" y="408" />
<omgdi:waypoint x="728" y="448" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui" bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740">
<omgdi:waypoint x="640" y="368" />
<omgdi:waypoint x="678" y="368" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui" bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE">
<omgdi:waypoint x="331" y="477" />
<omgdi:waypoint x="630" y="477" />
<omgdi:waypoint x="621" y="388" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui" bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820">
<omgdi:waypoint x="569" y="137" />
<omgdi:waypoint x="630" y="137" />
<omgdi:waypoint x="620" y="348" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui" bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF">
<omgdi:waypoint x="301" y="359" />
<omgdi:waypoint x="371" y="359" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui" bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42">
<omgdi:waypoint x="281" y="379" />
<omgdi:waypoint x="281" y="437" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui" bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140">
<omgdi:waypoint x="281" y="294" />
<omgdi:waypoint x="281" y="339" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui" bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C">
<omgdi:waypoint x="335" y="157" />
<omgdi:waypoint x="335.5" y="185.5" />
<omgdi:waypoint x="281" y="185.5" />
<omgdi:waypoint x="281" y="214" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui" bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94">
<omgdi:waypoint x="355" y="137" />
<omgdi:waypoint x="469" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui" bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612">
<omgdi:waypoint x="220" y="137" />
<omgdi:waypoint x="315" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui" bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE">
<omgdc:Bounds x="190" y="122" width="30" height="30" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui" bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778">
<omgdc:Bounds x="315" y="117" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui" bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86">
<omgdc:Bounds x="469" y="97" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui" bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3">
<omgdc:Bounds x="231" y="214" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" isMarkerVisible="true">
<omgdc:Bounds x="261" y="339" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui" bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<omgdc:Bounds x="371" y="319" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui" bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<omgdc:Bounds x="231" y="437" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui" bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0">
<omgdc:Bounds x="678" y="328" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui" bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB">
<omgdc:Bounds x="714" y="448" width="28" height="28" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5_gui" bpmnElement="sid-EBB511F3-5AD5-4307-9B9B-85C17F8889D5">
<omgdc:Bounds x="600" y="348" width="40" height="40" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -1,201 +1,205 @@
<?xml version="1.0" encoding="UTF-8"?>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:signavio="http://www.signavio.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" exporter="Signavio Process Editor, http://www.signavio.com" exporterVersion="" expressionLanguage="http://www.w3.org/1999/XPath" id="sid-787944f5-462c-48b5-bce6-9f81a33c0310" targetNamespace="http://www.signavio.com/bpmn20" typeLanguage="http://www.w3.org/2001/XMLSchema" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-e3b04a04-0860-4643-ad2d-bfe79c257bd9">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Through Same Task" processRef="sid-57c563e3-fb68-4961-ae34-b6201e0c09e8">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
</participant>
</collaboration>
<process id="sid-57c563e3-fb68-4961-ae34-b6201e0c09e8" isClosed="false" isExecutable="false" name="Parallel Through Same Task" processType="None">
<laneSet id="sid-d79fd2d7-1cb4-4e41-9b4a-8daac27581a1">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue=""/>
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-AF897BE2-CC07-4236-902B-DD6E1AB31842</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway gatewayDirection="Diverging" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task completionQuantity="1" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" isForCompensation="false" name="Repeated Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task completionQuantity="1" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" isForCompensation="false" name="Choice 1" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway gatewayDirection="Diverging" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task completionQuantity="1" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" isForCompensation="false" name="Yes Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task completionQuantity="1" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" isForCompensation="false" name="No Task" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task completionQuantity="1" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" isForCompensation="false" name="Done" startQuantity="1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc"/>
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<inclusiveGateway gatewayDirection="Converging" id="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff"/>
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778"/>
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86"/>
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3"/>
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7"/>
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3"/>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5"/>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842"/>
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86"/>
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB"/>
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842"/>
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0"/>
</process>
<bpmndi:BPMNDiagram id="sid-d0820a7d-420b-432a-8e44-8a26b4f82fda">
<bpmndi:BPMNPlane bpmnElement="sid-e3b04a04-0860-4643-ad2d-bfe79c257bd9" id="sid-0548e295-5887-423f-b623-7cdeb4dacdf1">
<bpmndi:BPMNShape bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="776.0" x="120.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" isHorizontal="true">
<omgdc:Bounds height="479.0" width="746.0" x="150.0" y="90.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui">
<omgdc:Bounds height="30.0" width="30.0" x="190.0" y="122.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui">
<omgdc:Bounds height="40.0" width="40.0" x="315.0" y="117.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86" id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui">
<omgdc:Bounds height="80.0" width="100.0" x="469.0" y="97.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="214.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" isMarkerVisible="true">
<omgdc:Bounds height="40.0" width="40.0" x="261.0" y="339.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui">
<omgdc:Bounds height="80.0" width="100.0" x="371.0" y="319.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui">
<omgdc:Bounds height="80.0" width="100.0" x="231.0" y="437.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui">
<omgdc:Bounds height="80.0" width="100.0" x="678.0" y="328.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui">
<omgdc:Bounds height="28.0" width="28.0" x="714.0" y="448.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape bpmnElement="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" id="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842_gui">
<omgdc:Bounds height="40.0" width="40.0" x="585.0" y="348.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF" id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui">
<omgdi:waypoint x="301.0" y="359.0"/>
<omgdi:waypoint x="371.0" y="359.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui">
<omgdi:waypoint x="355.0" y="137.0"/>
<omgdi:waypoint x="469.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui">
<omgdi:waypoint x="281.0" y="294.0"/>
<omgdi:waypoint x="281.0" y="339.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui">
<omgdi:waypoint x="331.0" y="477.0"/>
<omgdi:waypoint x="605.5" y="477.0"/>
<omgdi:waypoint x="605.0" y="388.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui">
<omgdi:waypoint x="728.0" y="408.0"/>
<omgdi:waypoint x="728.0" y="448.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui">
<omgdi:waypoint x="220.0" y="137.0"/>
<omgdi:waypoint x="315.0" y="137.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09" id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui">
<omgdi:waypoint x="471.0" y="359.0"/>
<omgdi:waypoint x="525.12109375" y="359.0"/>
<omgdi:waypoint x="525.0" y="177.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui">
<omgdi:waypoint x="335.0" y="157.0"/>
<omgdi:waypoint x="335.5" y="185.5"/>
<omgdi:waypoint x="281.0" y="185.5"/>
<omgdi:waypoint x="281.0" y="214.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui">
<omgdi:waypoint x="625.0" y="368.0"/>
<omgdi:waypoint x="678.0" y="368.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui">
<omgdi:waypoint x="281.0" y="379.0"/>
<omgdi:waypoint x="281.0" y="437.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820" id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui">
<omgdi:waypoint x="569.0" y="137.0"/>
<omgdi:waypoint x="605.5" y="137.0"/>
<omgdi:waypoint x="605.0" y="348.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
<definitions xmlns="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:omgdc="http://www.omg.org/spec/DD/20100524/DC" xmlns:omgdi="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:signavio="http://www.signavio.com" id="sid-787944f5-462c-48b5-bce6-9f81a33c0310" targetNamespace="http://www.signavio.com/bpmn20" exporter="Camunda Modeler" exporterVersion="4.11.1" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL http://www.omg.org/spec/BPMN/2.0/20100501/BPMN20.xsd">
<collaboration id="sid-e3b04a04-0860-4643-ad2d-bfe79c257bd9">
<participant id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" name="Parallel Through Same Task" processRef="sid-57c563e3-fb68-4961-ae34-b6201e0c09e8">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
</participant>
</collaboration>
<process id="sid-57c563e3-fb68-4961-ae34-b6201e0c09e8" name="Parallel Through Same Task" processType="None" isClosed="false" isExecutable="false">
<laneSet id="sid-d79fd2d7-1cb4-4e41-9b4a-8daac27581a1">
<lane id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" name="Tester">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="" />
</extensionElements>
<flowNodeRef>sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE</flowNodeRef>
<flowNodeRef>sid-349F8C0C-45EA-489C-84DD-1D944F48D778</flowNodeRef>
<flowNodeRef>sid-57463471-693A-42A2-9EC6-6460BEDECA86</flowNodeRef>
<flowNodeRef>sid-CA089240-802A-4C32-9130-FB1A33DDCCC3</flowNodeRef>
<flowNodeRef>sid-E2054FDD-0C20-4939-938D-2169B317FEE7</flowNodeRef>
<flowNodeRef>sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5</flowNodeRef>
<flowNodeRef>sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3</flowNodeRef>
<flowNodeRef>sid-F3A979E3-F586-4807-8223-1FAB5A5647B0</flowNodeRef>
<flowNodeRef>sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB</flowNodeRef>
<flowNodeRef>sid-AF897BE2-CC07-4236-902B-DD6E1AB31842</flowNodeRef>
</lane>
</laneSet>
<startEvent id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<outgoing>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</outgoing>
</startEvent>
<parallelGateway id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-F3994F51-FE54-4910-A1F4-E5895AA1A612</incoming>
<outgoing>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</outgoing>
<outgoing>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</outgoing>
</parallelGateway>
<task id="sid-57463471-693A-42A2-9EC6-6460BEDECA86" name="Repeated Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-7E15C71B-DE9E-4788-B140-A647C99FDC94</incoming>
<incoming>sid-A6DA25CE-636A-46B7-8005-759577956F09</incoming>
<outgoing>sid-E3493781-6466-4AED-BAD2-63D115E14820</outgoing>
</task>
<task id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" name="Choice 1">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-B6E22A74-A691-453A-A789-B9F8AF787D7C</incoming>
<outgoing>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</outgoing>
</task>
<exclusiveGateway id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" name="" gatewayDirection="Diverging">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-CAEAD081-6E73-4C98-8656-C67DA18F5140</incoming>
<outgoing>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</outgoing>
<outgoing>sid-9C753C3D-F964-45B0-AF57-234F910529EF</outgoing>
</exclusiveGateway>
<task id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" name="Yes Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-9C753C3D-F964-45B0-AF57-234F910529EF</incoming>
<outgoing>sid-A6DA25CE-636A-46B7-8005-759577956F09</outgoing>
</task>
<task id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" name="No Task">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-3742C960-71D0-4342-8064-AF1BB9EECB42</incoming>
<outgoing>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</outgoing>
</task>
<task id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" name="Done">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffcc" />
</extensionElements>
<incoming>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</incoming>
<outgoing>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</outgoing>
</task>
<endEvent id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" name="">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-40496205-24D7-494C-AB6B-CD42B8D606EF</incoming>
</endEvent>
<inclusiveGateway id="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" name="" gatewayDirection="Converging" default="sid-0895E09C-077C-4D12-8C11-31F28CBC7740">
<extensionElements>
<signavio:signavioMetaData metaKey="bgcolor" metaValue="#ffffff" />
</extensionElements>
<incoming>sid-E3493781-6466-4AED-BAD2-63D115E14820</incoming>
<incoming>sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE</incoming>
<outgoing>sid-0895E09C-077C-4D12-8C11-31F28CBC7740</outgoing>
</inclusiveGateway>
<sequenceFlow id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612" name="" sourceRef="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE" targetRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" />
<sequenceFlow id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" />
<sequenceFlow id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C" name="" sourceRef="sid-349F8C0C-45EA-489C-84DD-1D944F48D778" targetRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" />
<sequenceFlow id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140" name="" sourceRef="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3" targetRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" />
<sequenceFlow id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42" name="No" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<conditionExpression xsi:type="tFormalExpression">choice == 'No'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-9C753C3D-F964-45B0-AF57-234F910529EF" name="Yes" sourceRef="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" targetRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<conditionExpression xsi:type="tFormalExpression">choice == 'Yes'</conditionExpression>
</sequenceFlow>
<sequenceFlow id="sid-E3493781-6466-4AED-BAD2-63D115E14820" name="" sourceRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" targetRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" />
<sequenceFlow id="sid-A6DA25CE-636A-46B7-8005-759577956F09" name="" sourceRef="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5" targetRef="sid-57463471-693A-42A2-9EC6-6460BEDECA86" />
<sequenceFlow id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF" name="" sourceRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" targetRef="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB" />
<sequenceFlow id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE" name="" sourceRef="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3" targetRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" />
<sequenceFlow id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740" name="" sourceRef="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842" targetRef="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0" />
</process>
<bpmndi:BPMNDiagram id="sid-d0820a7d-420b-432a-8e44-8a26b4f82fda">
<bpmndi:BPMNPlane id="sid-0548e295-5887-423f-b623-7cdeb4dacdf1" bpmnElement="sid-e3b04a04-0860-4643-ad2d-bfe79c257bd9">
<bpmndi:BPMNShape id="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00_gui" bpmnElement="sid-B2E5AD50-035A-4CE8-B8A3-B175A6767B00" isHorizontal="true">
<omgdc:Bounds x="120" y="90" width="776" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142_gui" bpmnElement="sid-72009BCE-46B4-4B4B-AEAE-1E7199522142" isHorizontal="true">
<omgdc:Bounds x="150" y="90" width="746" height="479" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="sid-0895E09C-077C-4D12-8C11-31F28CBC7740_gui" bpmnElement="sid-0895E09C-077C-4D12-8C11-31F28CBC7740">
<omgdi:waypoint x="625" y="368" />
<omgdi:waypoint x="678" y="368" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE_gui" bpmnElement="sid-12F60C82-D18F-4747-B5B5-34FD40F2C8DE">
<omgdi:waypoint x="331" y="477" />
<omgdi:waypoint x="605.5" y="477" />
<omgdi:waypoint x="605" y="388" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-40496205-24D7-494C-AB6B-CD42B8D606EF_gui" bpmnElement="sid-40496205-24D7-494C-AB6B-CD42B8D606EF">
<omgdi:waypoint x="728" y="408" />
<omgdi:waypoint x="728" y="448" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-A6DA25CE-636A-46B7-8005-759577956F09_gui" bpmnElement="sid-A6DA25CE-636A-46B7-8005-759577956F09">
<omgdi:waypoint x="471" y="359" />
<omgdi:waypoint x="525.12109375" y="359" />
<omgdi:waypoint x="525" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-E3493781-6466-4AED-BAD2-63D115E14820_gui" bpmnElement="sid-E3493781-6466-4AED-BAD2-63D115E14820">
<omgdi:waypoint x="569" y="137" />
<omgdi:waypoint x="605.5" y="137" />
<omgdi:waypoint x="605" y="348" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-9C753C3D-F964-45B0-AF57-234F910529EF_gui" bpmnElement="sid-9C753C3D-F964-45B0-AF57-234F910529EF">
<omgdi:waypoint x="301" y="359" />
<omgdi:waypoint x="371" y="359" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-3742C960-71D0-4342-8064-AF1BB9EECB42_gui" bpmnElement="sid-3742C960-71D0-4342-8064-AF1BB9EECB42">
<omgdi:waypoint x="281" y="379" />
<omgdi:waypoint x="281" y="437" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140_gui" bpmnElement="sid-CAEAD081-6E73-4C98-8656-C67DA18F5140">
<omgdi:waypoint x="281" y="294" />
<omgdi:waypoint x="281" y="339" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C_gui" bpmnElement="sid-B6E22A74-A691-453A-A789-B9F8AF787D7C">
<omgdi:waypoint x="335" y="157" />
<omgdi:waypoint x="335.5" y="185.5" />
<omgdi:waypoint x="281" y="185.5" />
<omgdi:waypoint x="281" y="214" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94_gui" bpmnElement="sid-7E15C71B-DE9E-4788-B140-A647C99FDC94">
<omgdi:waypoint x="355" y="137" />
<omgdi:waypoint x="469" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612_gui" bpmnElement="sid-F3994F51-FE54-4910-A1F4-E5895AA1A612">
<omgdi:waypoint x="220" y="137" />
<omgdi:waypoint x="315" y="137" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE_gui" bpmnElement="sid-B33EE043-AB93-4343-A1D4-7B267E2DAFBE">
<omgdc:Bounds x="190" y="122" width="30" height="30" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-349F8C0C-45EA-489C-84DD-1D944F48D778_gui" bpmnElement="sid-349F8C0C-45EA-489C-84DD-1D944F48D778">
<omgdc:Bounds x="315" y="117" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-57463471-693A-42A2-9EC6-6460BEDECA86_gui" bpmnElement="sid-57463471-693A-42A2-9EC6-6460BEDECA86">
<omgdc:Bounds x="469" y="97" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3_gui" bpmnElement="sid-CA089240-802A-4C32-9130-FB1A33DDCCC3">
<omgdc:Bounds x="231" y="214" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-E2054FDD-0C20-4939-938D-2169B317FEE7_gui" bpmnElement="sid-E2054FDD-0C20-4939-938D-2169B317FEE7" isMarkerVisible="true">
<omgdc:Bounds x="261" y="339" width="40" height="40" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5_gui" bpmnElement="sid-34AD79D9-BE0C-4F97-AC23-7A97D238A6E5">
<omgdc:Bounds x="371" y="319" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3_gui" bpmnElement="sid-2A302E91-F89F-4913-8F55-5C3AC5FAE4D3">
<omgdc:Bounds x="231" y="437" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0_gui" bpmnElement="sid-F3A979E3-F586-4807-8223-1FAB5A5647B0">
<omgdc:Bounds x="678" y="328" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB_gui" bpmnElement="sid-51816945-79BF-47F9-BA3C-E95ABAE3D1DB">
<omgdc:Bounds x="714" y="448" width="28" height="28" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842_gui" bpmnElement="sid-AF897BE2-CC07-4236-902B-DD6E1AB31842">
<omgdc:Bounds x="585" y="348" width="40" height="40" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</definitions>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_10tix8p" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_10tix8p" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="boundary_event" name="&#10;&#10;" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1pbxbk9</bpmn:outgoing>
@ -65,77 +65,46 @@
<bpmn:boundaryEvent id="Event_0iiih8g" name="FedUp" attachedToRef="Subworkflow">
<bpmn:outgoing>Flow_0yzqey7</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0irxg9m">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">PT0.03S</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.03S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="boundary_event">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="162" y="211" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0zzr7a4_di" bpmnElement="Subworkflow" isExpanded="true">
<dc:Bounds x="370" y="77" width="690" height="303" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0jwaisd_di" bpmnElement="Event_0jwaisd">
<dc:Bounds x="410" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0ytsuvr_di" bpmnElement="Activity_1ya1db2">
<dc:Bounds x="910" y="470" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_11rkn53_di" bpmnElement="Activity_Pester_Dad">
<dc:Bounds x="570" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0yzqey7_di" bpmnElement="Flow_0yzqey7">
<di:waypoint x="950" y="398" />
<di:waypoint x="950" y="444" />
<di:waypoint x="960" y="444" />
<di:waypoint x="960" y="470" />
<bpmndi:BPMNEdge id="Flow_1jnwt7c_di" bpmnElement="Flow_1jnwt7c">
<di:waypoint x="320" y="229" />
<di:waypoint x="370" y="229" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0vmzw8v_di" bpmnElement="Flow_0vmzw8v">
<di:waypoint x="446" y="177" />
<di:waypoint x="570" y="177" />
<bpmndi:BPMNEdge id="Flow_0jqkm6y_di" bpmnElement="Flow_0jqkm6y">
<di:waypoint x="1280" y="220" />
<di:waypoint x="1402" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0lasqgj_di" bpmnElement="Event_0lasqgj">
<dc:Bounds x="952" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1pbxbk9_di" bpmnElement="Flow_1pbxbk9">
<di:waypoint x="198" y="229" />
<di:waypoint x="220" y="229" />
<bpmndi:BPMNEdge id="Flow_1v53za5_di" bpmnElement="Flow_1v53za5">
<di:waypoint x="1000" y="510" />
<di:waypoint x="1230" y="510" />
<di:waypoint x="1230" y="260" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0f0f7wg_di" bpmnElement="Flow_0f0f7wg">
<di:waypoint x="1060" y="220" />
<di:waypoint x="1180" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1v53za5_di" bpmnElement="Flow_1v53za5">
<di:waypoint x="1010" y="510" />
<di:waypoint x="1230" y="510" />
<di:waypoint x="1230" y="260" />
<bpmndi:BPMNEdge id="Flow_1pbxbk9_di" bpmnElement="Flow_1pbxbk9">
<di:waypoint x="198" y="229" />
<di:waypoint x="220" y="229" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_000aj7r_di" bpmnElement="Event_000aj7r">
<dc:Bounds x="1402" y="202" width="36" height="36" />
<bpmndi:BPMNEdge id="Flow_0yzqey7_di" bpmnElement="Flow_0yzqey7">
<di:waypoint x="950" y="398" />
<di:waypoint x="950" y="470" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="162" y="211" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0jqkm6y_di" bpmnElement="Flow_0jqkm6y">
<di:waypoint x="1280" y="220" />
<di:waypoint x="1402" y="220" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1vjvfhi_di" bpmnElement="StopCar">
<dc:Bounds x="1180" y="180" width="100" height="80" />
<bpmndi:BPMNShape id="Activity_0ytsuvr_di" bpmnElement="Activity_1ya1db2">
<dc:Bounds x="900" y="470" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_17zgs3c_di" bpmnElement="Gateway_17zgs3c" isMarkerVisible="true">
<dc:Bounds x="725" y="152" width="50" height="50" />
<bpmndi:BPMNShape id="Activity_0zzr7a4_di" bpmnElement="Subworkflow" isExpanded="true">
<dc:Bounds x="370" y="77" width="690" height="303" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0axldsu_di" bpmnElement="Flow_0axldsu">
<di:waypoint x="670" y="177" />
<di:waypoint x="725" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0q65w45_di" bpmnElement="Flow_0q65w45">
<di:waypoint x="775" y="177" />
<di:waypoint x="952" y="177" />
<bpmndi:BPMNLabel>
<dc:Bounds x="855" y="159" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0hkqchr_di" bpmnElement="Flow_0hkqchr">
<di:waypoint x="750" y="202" />
<di:waypoint x="750" y="320" />
@ -145,10 +114,39 @@
<dc:Bounds x="678" y="302" width="15" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1jnwt7c_di" bpmnElement="Flow_1jnwt7c">
<di:waypoint x="320" y="229" />
<di:waypoint x="370" y="229" />
<bpmndi:BPMNEdge id="Flow_0q65w45_di" bpmnElement="Flow_0q65w45">
<di:waypoint x="775" y="177" />
<di:waypoint x="952" y="177" />
<bpmndi:BPMNLabel>
<dc:Bounds x="855" y="159" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0axldsu_di" bpmnElement="Flow_0axldsu">
<di:waypoint x="670" y="177" />
<di:waypoint x="725" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0vmzw8v_di" bpmnElement="Flow_0vmzw8v">
<di:waypoint x="446" y="177" />
<di:waypoint x="570" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0jwaisd_di" bpmnElement="Event_0jwaisd">
<dc:Bounds x="410" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_11rkn53_di" bpmnElement="Activity_Pester_Dad">
<dc:Bounds x="570" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0lasqgj_di" bpmnElement="Event_0lasqgj">
<dc:Bounds x="952" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_17zgs3c_di" bpmnElement="Gateway_17zgs3c" isMarkerVisible="true">
<dc:Bounds x="725" y="152" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_000aj7r_di" bpmnElement="Event_000aj7r">
<dc:Bounds x="1402" y="202" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1vjvfhi_di" bpmnElement="StopCar">
<dc:Bounds x="1180" y="180" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0q76z8e_di" bpmnElement="Activity_09c27ms">
<dc:Bounds x="220" y="189" width="100" height="80" />
</bpmndi:BPMNShape>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1l7iuxt" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.10.0" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1l7iuxt" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
<bpmn:process id="test_timer" name="test_timer" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_164sojd</bpmn:outgoing>
@ -8,7 +8,7 @@
<bpmn:boundaryEvent id="Event_0y4hbl0" cancelActivity="false" attachedToRef="user_task">
<bpmn:outgoing>Flow_0ac4lx5</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_1w16uhl">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(milliseconds=2)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.002S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
<bpmn:sequenceFlow id="Flow_0ac4lx5" sourceRef="Event_0y4hbl0" targetRef="set_variable" />
@ -34,32 +34,23 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="test_timer">
<bpmndi:BPMNEdge id="Flow_164sojd_di" bpmnElement="Flow_164sojd">
<di:waypoint x="188" y="117" />
<di:waypoint x="220" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ac4lx5_di" bpmnElement="Flow_0ac4lx5">
<di:waypoint x="420" y="175" />
<di:waypoint x="420" y="240" />
<di:waypoint x="490" y="240" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_04tuv5z_di" bpmnElement="Flow_04tuv5z">
<di:waypoint x="460" y="117" />
<di:waypoint x="542" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1m2vq4v_di" bpmnElement="Flow_1m2vq4v">
<di:waypoint x="320" y="117" />
<di:waypoint x="360" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1oduoqz_di" bpmnElement="set_variable">
<dc:Bounds x="490" y="200" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0olfqht_di" bpmnElement="final_end_event">
<dc:Bounds x="542" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="527" y="142" width="69" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_04tuv5z_di" bpmnElement="Flow_04tuv5z">
<di:waypoint x="460" y="117" />
<di:waypoint x="682" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ac4lx5_di" bpmnElement="Flow_0ac4lx5">
<di:waypoint x="420" y="175" />
<di:waypoint x="420" y="240" />
<di:waypoint x="460" y="240" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_164sojd_di" bpmnElement="Flow_164sojd">
<di:waypoint x="188" y="117" />
<di:waypoint x="220" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
@ -69,6 +60,15 @@
<bpmndi:BPMNShape id="Activity_0hx9z9f_di" bpmnElement="user_task">
<dc:Bounds x="360" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0olfqht_di" bpmnElement="final_end_event">
<dc:Bounds x="682" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="667" y="142" width="69" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1oduoqz_di" bpmnElement="set_variable">
<dc:Bounds x="460" y="200" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0w4k4ro_di" bpmnElement="Event_0y4hbl0">
<dc:Bounds x="402" y="139" width="36" height="36" />
</bpmndi:BPMNShape>

View File

@ -27,7 +27,7 @@
<bpmn:incoming>Flow_1rfbrlf</bpmn:incoming>
<bpmn:outgoing>Flow_0mppjk9</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0reo0gl">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(seconds=1)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT1S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:sequenceFlow id="Flow_1rfbrlf" sourceRef="Gateway_1434v9l" targetRef="timer_event" />

View File

@ -0,0 +1,131 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:modeler="http://camunda.org/schema/modeler/1.0" id="Definitions_1cze19k" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1" modeler:executionPlatform="Camunda Platform" modeler:executionPlatformVersion="7.15.0">
<bpmn:process id="main" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1g5ma8d</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:sequenceFlow id="Flow_1g5ma8d" sourceRef="StartEvent_1" targetRef="set_data" />
<bpmn:sequenceFlow id="Flow_1g7lmw3" sourceRef="set_data" targetRef="first" />
<bpmn:inclusiveGateway id="first" default="default">
<bpmn:incoming>Flow_1g7lmw3</bpmn:incoming>
<bpmn:outgoing>default</bpmn:outgoing>
<bpmn:outgoing>u_positive</bpmn:outgoing>
<bpmn:outgoing>w_positive</bpmn:outgoing>
</bpmn:inclusiveGateway>
<bpmn:sequenceFlow id="default" sourceRef="first" targetRef="increment_v" />
<bpmn:sequenceFlow id="u_positive" name="u positive&#10;&#10;" sourceRef="first" targetRef="u_plus_v">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">u &gt; 0</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="w_positive" name="w positive" sourceRef="first" targetRef="w_plus_v">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">w &gt; 0</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:sequenceFlow id="Flow_0byxq9y" sourceRef="u_plus_v" targetRef="second" />
<bpmn:inclusiveGateway id="second">
<bpmn:incoming>Flow_0byxq9y</bpmn:incoming>
<bpmn:incoming>Flow_0hatxr4</bpmn:incoming>
<bpmn:incoming>Flow_17jgshs</bpmn:incoming>
<bpmn:outgoing>check_v</bpmn:outgoing>
</bpmn:inclusiveGateway>
<bpmn:sequenceFlow id="Flow_0hatxr4" sourceRef="w_plus_v" targetRef="second" />
<bpmn:sequenceFlow id="Flow_17jgshs" sourceRef="increment_v" targetRef="second" />
<bpmn:endEvent id="Event_05yg5je">
<bpmn:incoming>check_v</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="check_v" sourceRef="second" targetRef="Event_05yg5je">
<bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">v == 0</bpmn:conditionExpression>
</bpmn:sequenceFlow>
<bpmn:userTask id="set_data" name="Set Data">
<bpmn:incoming>Flow_1g5ma8d</bpmn:incoming>
<bpmn:outgoing>Flow_1g7lmw3</bpmn:outgoing>
</bpmn:userTask>
<bpmn:scriptTask id="increment_v" name="v += 1">
<bpmn:incoming>default</bpmn:incoming>
<bpmn:outgoing>Flow_17jgshs</bpmn:outgoing>
<bpmn:script>v += 1</bpmn:script>
</bpmn:scriptTask>
<bpmn:scriptTask id="u_plus_v" name="u += v">
<bpmn:incoming>u_positive</bpmn:incoming>
<bpmn:outgoing>Flow_0byxq9y</bpmn:outgoing>
<bpmn:script>u += v</bpmn:script>
</bpmn:scriptTask>
<bpmn:scriptTask id="w_plus_v" name="w += v">
<bpmn:incoming>w_positive</bpmn:incoming>
<bpmn:outgoing>Flow_0hatxr4</bpmn:outgoing>
<bpmn:script>w += v</bpmn:script>
</bpmn:scriptTask>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="main">
<bpmndi:BPMNEdge id="Flow_0axvo8d_di" bpmnElement="check_v">
<di:waypoint x="735" y="117" />
<di:waypoint x="792" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_17jgshs_di" bpmnElement="Flow_17jgshs">
<di:waypoint x="630" y="117" />
<di:waypoint x="685" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0hatxr4_di" bpmnElement="Flow_0hatxr4">
<di:waypoint x="630" y="340" />
<di:waypoint x="710" y="340" />
<di:waypoint x="710" y="142" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0byxq9y_di" bpmnElement="Flow_0byxq9y">
<di:waypoint x="630" y="230" />
<di:waypoint x="710" y="230" />
<di:waypoint x="710" y="142" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_13u1611_di" bpmnElement="w_positive">
<di:waypoint x="450" y="142" />
<di:waypoint x="450" y="340" />
<di:waypoint x="530" y="340" />
<bpmndi:BPMNLabel>
<dc:Bounds x="458" y="323" width="48" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0qf291b_di" bpmnElement="u_positive">
<di:waypoint x="450" y="142" />
<di:waypoint x="450" y="230" />
<di:waypoint x="530" y="230" />
<bpmndi:BPMNLabel>
<dc:Bounds x="457" y="210" width="47" height="40" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_070yjdf_di" bpmnElement="default">
<di:waypoint x="475" y="117" />
<di:waypoint x="530" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1g7lmw3_di" bpmnElement="Flow_1g7lmw3">
<di:waypoint x="370" y="117" />
<di:waypoint x="425" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1g5ma8d_di" bpmnElement="Flow_1g5ma8d">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0ym4oxy_di" bpmnElement="first">
<dc:Bounds x="425" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0taxy2e_di" bpmnElement="second">
<dc:Bounds x="685" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_05yg5je_di" bpmnElement="Event_05yg5je">
<dc:Bounds x="792" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1mqdr3e_di" bpmnElement="set_data">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0kkbcp1_di" bpmnElement="increment_v">
<dc:Bounds x="530" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0ttkifo_di" bpmnElement="u_plus_v">
<dc:Bounds x="530" y="190" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0h6sdsx_di" bpmnElement="w_plus_v">
<dc:Bounds x="530" y="300" width="100" height="80" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -0,0 +1,590 @@
{
"serializer_version": "1.1",
"data": {},
"last_task": "6bd75ef7-d765-4d0b-83ba-1158d2e9ed0a",
"success": true,
"tasks": {
"ccca8dcf-e833-494a-9281-ec133223ab75": {
"id": "ccca8dcf-e833-494a-9281-ec133223ab75",
"parent": null,
"children": [
"6bd75ef7-d765-4d0b-83ba-1158d2e9ed0a"
],
"last_state_change": 1673895963.536834,
"state": 32,
"task_spec": "Root",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"6bd75ef7-d765-4d0b-83ba-1158d2e9ed0a": {
"id": "6bd75ef7-d765-4d0b-83ba-1158d2e9ed0a",
"parent": "ccca8dcf-e833-494a-9281-ec133223ab75",
"children": [
"34a70bb5-88f7-4a71-9dea-da6893437633"
],
"last_state_change": 1673896001.8471706,
"state": 32,
"task_spec": "Start",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"34a70bb5-88f7-4a71-9dea-da6893437633": {
"id": "34a70bb5-88f7-4a71-9dea-da6893437633",
"parent": "6bd75ef7-d765-4d0b-83ba-1158d2e9ed0a",
"children": [
"28d6b82b-64e9-41ad-9620-cc00497c859f",
"deb1eb94-6537-4cb8-a7e6-ea28c4983732"
],
"last_state_change": 1673896001.8511543,
"state": 8,
"task_spec": "StartEvent_1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {
"repeat": 2,
"start_time": "2023-01-16 14:06:41.847524"
},
"data": {
"repeat_count": 0
}
},
"28d6b82b-64e9-41ad-9620-cc00497c859f": {
"id": "28d6b82b-64e9-41ad-9620-cc00497c859f",
"parent": "34a70bb5-88f7-4a71-9dea-da6893437633",
"children": [
"a07abe4c-8122-494f-8b43-b3c44d3f7e34",
"975c49d4-dceb-4137-829c-64c657894701"
],
"last_state_change": 1673895963.5375524,
"state": 4,
"task_spec": "StartEvent_1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"a07abe4c-8122-494f-8b43-b3c44d3f7e34": {
"id": "a07abe4c-8122-494f-8b43-b3c44d3f7e34",
"parent": "28d6b82b-64e9-41ad-9620-cc00497c859f",
"children": [],
"last_state_change": 1673895963.5380332,
"state": 4,
"task_spec": "return_to_StartEvent_1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"975c49d4-dceb-4137-829c-64c657894701": {
"id": "975c49d4-dceb-4137-829c-64c657894701",
"parent": "28d6b82b-64e9-41ad-9620-cc00497c859f",
"children": [
"e937e37e-04a7-45b6-b6a4-7615876ae19f"
],
"last_state_change": 1673895963.5380924,
"state": 4,
"task_spec": "task_1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"e937e37e-04a7-45b6-b6a4-7615876ae19f": {
"id": "e937e37e-04a7-45b6-b6a4-7615876ae19f",
"parent": "975c49d4-dceb-4137-829c-64c657894701",
"children": [
"42036b41-f934-457a-86e7-cc3b65882073"
],
"last_state_change": 1673895963.5384276,
"state": 4,
"task_spec": "Event_1uhhxu1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"42036b41-f934-457a-86e7-cc3b65882073": {
"id": "42036b41-f934-457a-86e7-cc3b65882073",
"parent": "e937e37e-04a7-45b6-b6a4-7615876ae19f",
"children": [
"583f99df-db90-4237-8718-c1cf638c4391",
"24f73965-e218-4f94-8ca9-5267cbf635ad"
],
"last_state_change": 1673895963.5386448,
"state": 4,
"task_spec": "task_2.BoundaryEventParent",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"583f99df-db90-4237-8718-c1cf638c4391": {
"id": "583f99df-db90-4237-8718-c1cf638c4391",
"parent": "42036b41-f934-457a-86e7-cc3b65882073",
"children": [
"825b0a7b-b33e-4692-a11c-9c0fb49e20c0"
],
"last_state_change": 1673895963.5391376,
"state": 4,
"task_spec": "task_2",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"825b0a7b-b33e-4692-a11c-9c0fb49e20c0": {
"id": "825b0a7b-b33e-4692-a11c-9c0fb49e20c0",
"parent": "583f99df-db90-4237-8718-c1cf638c4391",
"children": [
"e5b6e43e-2ba9-42a2-90c0-25202f096273"
],
"last_state_change": 1673895963.5393665,
"state": 4,
"task_spec": "Event_1vzwq7p",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"e5b6e43e-2ba9-42a2-90c0-25202f096273": {
"id": "e5b6e43e-2ba9-42a2-90c0-25202f096273",
"parent": "825b0a7b-b33e-4692-a11c-9c0fb49e20c0",
"children": [
"0a5fbc15-2807-463d-9762-b7b724835a40"
],
"last_state_change": 1673895963.5396175,
"state": 4,
"task_spec": "migration_test.EndJoin",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"0a5fbc15-2807-463d-9762-b7b724835a40": {
"id": "0a5fbc15-2807-463d-9762-b7b724835a40",
"parent": "e5b6e43e-2ba9-42a2-90c0-25202f096273",
"children": [],
"last_state_change": 1673895963.5398767,
"state": 4,
"task_spec": "End",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"24f73965-e218-4f94-8ca9-5267cbf635ad": {
"id": "24f73965-e218-4f94-8ca9-5267cbf635ad",
"parent": "42036b41-f934-457a-86e7-cc3b65882073",
"children": [],
"last_state_change": 1673895963.5390024,
"state": 1,
"task_spec": "Event_1bkh7yi",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"deb1eb94-6537-4cb8-a7e6-ea28c4983732": {
"id": "deb1eb94-6537-4cb8-a7e6-ea28c4983732",
"parent": "34a70bb5-88f7-4a71-9dea-da6893437633",
"children": [
"56045c5b-9400-4fea-ae82-b357268672f8"
],
"last_state_change": 1673895963.5376105,
"state": 4,
"task_spec": "task_1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"56045c5b-9400-4fea-ae82-b357268672f8": {
"id": "56045c5b-9400-4fea-ae82-b357268672f8",
"parent": "deb1eb94-6537-4cb8-a7e6-ea28c4983732",
"children": [
"fd71446e-d8b4-42dd-980b-624a82848853"
],
"last_state_change": 1673895963.540343,
"state": 4,
"task_spec": "Event_1uhhxu1",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"fd71446e-d8b4-42dd-980b-624a82848853": {
"id": "fd71446e-d8b4-42dd-980b-624a82848853",
"parent": "56045c5b-9400-4fea-ae82-b357268672f8",
"children": [
"8960300d-28c1-463d-b7a1-29e872c02d98",
"a6bca2b5-7064-49c9-a172-18c1435d173d"
],
"last_state_change": 1673895963.5405483,
"state": 4,
"task_spec": "task_2.BoundaryEventParent",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"8960300d-28c1-463d-b7a1-29e872c02d98": {
"id": "8960300d-28c1-463d-b7a1-29e872c02d98",
"parent": "fd71446e-d8b4-42dd-980b-624a82848853",
"children": [
"6b33df30-07fd-4572-abfd-f29eb9906f0b"
],
"last_state_change": 1673895963.540891,
"state": 4,
"task_spec": "task_2",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"6b33df30-07fd-4572-abfd-f29eb9906f0b": {
"id": "6b33df30-07fd-4572-abfd-f29eb9906f0b",
"parent": "8960300d-28c1-463d-b7a1-29e872c02d98",
"children": [
"0d571ca2-ffb1-4d8b-9dda-4e8cbd8b8ae1"
],
"last_state_change": 1673895963.5411036,
"state": 4,
"task_spec": "Event_1vzwq7p",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"0d571ca2-ffb1-4d8b-9dda-4e8cbd8b8ae1": {
"id": "0d571ca2-ffb1-4d8b-9dda-4e8cbd8b8ae1",
"parent": "6b33df30-07fd-4572-abfd-f29eb9906f0b",
"children": [
"1e8fc80a-1968-4411-a10b-16cb4261f3b8"
],
"last_state_change": 1673895963.5413618,
"state": 4,
"task_spec": "migration_test.EndJoin",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"1e8fc80a-1968-4411-a10b-16cb4261f3b8": {
"id": "1e8fc80a-1968-4411-a10b-16cb4261f3b8",
"parent": "0d571ca2-ffb1-4d8b-9dda-4e8cbd8b8ae1",
"children": [],
"last_state_change": 1673895963.541654,
"state": 4,
"task_spec": "End",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
},
"a6bca2b5-7064-49c9-a172-18c1435d173d": {
"id": "a6bca2b5-7064-49c9-a172-18c1435d173d",
"parent": "fd71446e-d8b4-42dd-980b-624a82848853",
"children": [],
"last_state_change": 1673895963.5408392,
"state": 1,
"task_spec": "Event_1bkh7yi",
"triggered": false,
"workflow_name": "migration_test",
"internal_data": {},
"data": {}
}
},
"root": "ccca8dcf-e833-494a-9281-ec133223ab75",
"spec": {
"name": "migration_test",
"description": "migration_test",
"file": "/home/essweine/work/sartography/code/SpiffWorkflow/tests/SpiffWorkflow/bpmn/data/serialization/v1-1.bpmn",
"task_specs": {
"Start": {
"id": "migration_test_1",
"name": "Start",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [],
"outputs": [
"StartEvent_1"
],
"typename": "StartTask"
},
"migration_test.EndJoin": {
"id": "migration_test_2",
"name": "migration_test.EndJoin",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"Event_1vzwq7p"
],
"outputs": [
"End"
],
"typename": "_EndJoin"
},
"End": {
"id": "migration_test_3",
"name": "End",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"migration_test.EndJoin"
],
"outputs": [],
"typename": "Simple"
},
"StartEvent_1": {
"id": "migration_test_4",
"name": "StartEvent_1",
"description": null,
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"Start",
"StartEvent_1"
],
"outputs": [
"StartEvent_1",
"task_1"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 179.0,
"y": 79.0
},
"data_input_associations": [],
"data_output_associations": [],
"event_definition": {
"internal": true,
"external": true,
"label": "StartEvent_1",
"cycle_definition": "(2,timedelta(seconds=0.1))",
"typename": "CycleTimerEventDefinition"
},
"typename": "StartEvent",
"extensions": {}
},
"task_1": {
"id": "migration_test_5",
"name": "task_1",
"description": "Task 1",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"StartEvent_1"
],
"outputs": [
"Event_1uhhxu1"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 290.0,
"y": 57.0
},
"data_input_associations": [],
"data_output_associations": [],
"script": "pass",
"typename": "ScriptTask",
"extensions": {}
},
"Event_1uhhxu1": {
"id": "migration_test_6",
"name": "Event_1uhhxu1",
"description": null,
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"task_1"
],
"outputs": [
"task_2.BoundaryEventParent"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 452.0,
"y": 79.0
},
"data_input_associations": [],
"data_output_associations": [],
"event_definition": {
"internal": true,
"external": true,
"label": "Event_1uhhxu1",
"dateTime": "datetime(2023, 1, 1)",
"typename": "TimerEventDefinition"
},
"typename": "IntermediateCatchEvent",
"extensions": {}
},
"task_2": {
"id": "migration_test_7",
"name": "task_2",
"description": "Task 2",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"task_2.BoundaryEventParent"
],
"outputs": [
"Event_1vzwq7p"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 560.0,
"y": 57.0
},
"data_input_associations": [],
"data_output_associations": [],
"script": "time.sleep(0.5)",
"typename": "ScriptTask",
"extensions": {}
},
"task_2.BoundaryEventParent": {
"id": "migration_test_8",
"name": "task_2.BoundaryEventParent",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"Event_1uhhxu1"
],
"outputs": [
"task_2",
"Event_1bkh7yi"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 0,
"y": 0
},
"data_input_associations": [],
"data_output_associations": [],
"main_child_task_spec": "task_2",
"typename": "_BoundaryEventParent"
},
"Event_1bkh7yi": {
"id": "migration_test_9",
"name": "Event_1bkh7yi",
"description": null,
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"task_2.BoundaryEventParent"
],
"outputs": [],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 592.0,
"y": 119.0
},
"data_input_associations": [],
"data_output_associations": [],
"event_definition": {
"internal": true,
"external": true,
"label": "Event_1bkh7yi",
"dateTime": "timedelta(seconds=0.1)",
"typename": "TimerEventDefinition"
},
"cancel_activity": true,
"typename": "BoundaryEvent",
"extensions": {}
},
"Event_1vzwq7p": {
"id": "migration_test_10",
"name": "Event_1vzwq7p",
"description": null,
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"task_2"
],
"outputs": [
"migration_test.EndJoin"
],
"lane": null,
"documentation": null,
"loopTask": false,
"position": {
"x": 742.0,
"y": 79.0
},
"data_input_associations": [],
"data_output_associations": [],
"event_definition": {
"internal": false,
"external": false,
"typename": "NoneEventDefinition"
},
"typename": "EndEvent",
"extensions": {}
},
"Root": {
"id": "migration_test_11",
"name": "Root",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [],
"outputs": [],
"typename": "Simple"
},
"return_to_StartEvent_1": {
"id": "migration_test_12",
"name": "return_to_StartEvent_1",
"description": "",
"manual": false,
"internal": false,
"lookahead": 2,
"inputs": [
"Start",
"StartEvent_1"
],
"outputs": [],
"destination_id": "34a70bb5-88f7-4a71-9dea-da6893437633",
"destination_spec_name": "StartEvent_1",
"typename": "LoopResetTask"
}
},
"data_inputs": [],
"data_outputs": [],
"data_objects": {},
"correlation_keys": {},
"typename": "BpmnProcessSpec"
},
"subprocess_specs": {},
"subprocesses": {},
"bpmn_messages": []
}

View File

@ -22,7 +22,7 @@
<bpmn:startEvent id="CycleStart">
<bpmn:outgoing>Flow_0jtfzsk</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0za5f2h">
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">(2,timedelta(seconds=0.1))</bpmn:timeCycle>
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">"R2/PT0.1S"</bpmn:timeCycle>
</bpmn:timerEventDefinition>
</bpmn:startEvent>
<bpmn:scriptTask id="Refill_Coffee" name="Refill Coffee">
@ -37,7 +37,7 @@
<bpmn:incoming>Flow_1pahvlr</bpmn:incoming>
<bpmn:outgoing>Flow_05ejbm4</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0o35ug0">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(seconds=0.5)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.5S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:endEvent id="EndItAll">

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="timer" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1pahvlr</bpmn:outgoing>
@ -32,12 +32,32 @@
<bpmn:boundaryEvent id="CatchMessage" cancelActivity="false" attachedToRef="Get_Coffee">
<bpmn:outgoing>Flow_1pzc4jz</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_180fybf">
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">(2,timedelta(seconds=0.01))</bpmn:timeCycle>
<bpmn:timeCycle xsi:type="bpmn:tFormalExpression">"R2/PT0.1S"</bpmn:timeCycle>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="timer">
<bpmndi:BPMNEdge id="Flow_09d7dp2_di" bpmnElement="Flow_09d7dp2">
<di:waypoint x="320" y="117" />
<di:waypoint x="370" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pzc4jz_di" bpmnElement="Flow_1pzc4jz">
<di:waypoint x="440" y="175" />
<di:waypoint x="440" y="210" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pahvlr_di" bpmnElement="Flow_1pahvlr">
<di:waypoint x="188" y="117" />
<di:waypoint x="220" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pvkgnu_di" bpmnElement="Flow_1pvkgnu">
<di:waypoint x="470" y="117" />
<di:waypoint x="500" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ekgt3x_di" bpmnElement="Flow_1ekgt3x">
<di:waypoint x="600" y="117" />
<di:waypoint x="632" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
@ -50,29 +70,9 @@
<bpmndi:BPMNShape id="Event_03w65sk_di" bpmnElement="Event_03w65sk">
<dc:Bounds x="632" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1ekgt3x_di" bpmnElement="Flow_1ekgt3x">
<di:waypoint x="600" y="117" />
<di:waypoint x="632" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pvkgnu_di" bpmnElement="Flow_1pvkgnu">
<di:waypoint x="470" y="117" />
<di:waypoint x="500" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pahvlr_di" bpmnElement="Flow_1pahvlr">
<di:waypoint x="188" y="117" />
<di:waypoint x="220" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pzc4jz_di" bpmnElement="Flow_1pzc4jz">
<di:waypoint x="440" y="175" />
<di:waypoint x="440" y="210" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_0xk1ts7_di" bpmnElement="Refill_Coffee">
<dc:Bounds x="390" y="210" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_09d7dp2_di" bpmnElement="Flow_09d7dp2">
<di:waypoint x="320" y="117" />
<di:waypoint x="370" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1tk82xi_di" bpmnElement="Activity_1swqq74">
<dc:Bounds x="220" y="77" width="100" height="80" />
</bpmndi:BPMNShape>

View File

@ -1,17 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="date_timer" isExecutable="false">
<bpmn:startEvent id="Event_0u1rmur">
<bpmn:outgoing>Flow_1i73q45</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:scriptTask id="Activity_1q1wged" name="Set Future Date">
<bpmn:incoming>Flow_1i73q45</bpmn:incoming>
<bpmn:outgoing>Flow_00e79cz</bpmn:outgoing>
<bpmn:script>futuredate = datetime.now() + timedelta(0, 1) - timedelta(seconds=.95)
futuredate2 = datetime.strptime('2021-09-01 10:00','%Y-%m-%d %H:%M')</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="Flow_1i73q45" sourceRef="Event_0u1rmur" targetRef="Activity_1q1wged" />
<bpmn:sequenceFlow id="Flow_00e79cz" sourceRef="Activity_1q1wged" targetRef="Event_0eb0w95" />
<bpmn:intermediateCatchEvent id="Event_0eb0w95" name="Wait till date">
<bpmn:incoming>Flow_00e79cz</bpmn:incoming>
<bpmn:outgoing>Flow_1bdrcxy</bpmn:outgoing>
@ -19,54 +12,46 @@ futuredate2 = datetime.strptime('2021-09-01 10:00','%Y-%m-%d %H:%M')</bpmn:scrip
<bpmn:timeDate xsi:type="bpmn:tFormalExpression">futuredate</bpmn:timeDate>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:sequenceFlow id="Flow_1bdrcxy" sourceRef="Event_0eb0w95" targetRef="Activity_0pbdlyu" />
<bpmn:scriptTask id="Activity_0pbdlyu" name="Do something">
<bpmn:incoming>Flow_1bdrcxy</bpmn:incoming>
<bpmn:outgoing>Flow_0bjksyv</bpmn:outgoing>
<bpmn:script>print('yay!')
completed = True</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="Flow_1bdrcxy" sourceRef="Event_0eb0w95" targetRef="Event_19cfzir" />
<bpmn:endEvent id="Event_19cfzir">
<bpmn:incoming>Flow_0bjksyv</bpmn:incoming>
<bpmn:incoming>Flow_1bdrcxy</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0bjksyv" sourceRef="Activity_0pbdlyu" targetRef="Event_19cfzir" />
<bpmn:scriptTask id="Activity_1q1wged" name="Set Future Date">
<bpmn:incoming>Flow_1i73q45</bpmn:incoming>
<bpmn:outgoing>Flow_00e79cz</bpmn:outgoing>
<bpmn:script>futuredate = (datetime.now() + timedelta(seconds=0.05)).isoformat()</bpmn:script>
</bpmn:scriptTask>
<bpmn:sequenceFlow id="Flow_00e79cz" sourceRef="Activity_1q1wged" targetRef="Event_0eb0w95" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="date_timer">
<bpmndi:BPMNEdge id="Flow_1bdrcxy_di" bpmnElement="Flow_1bdrcxy">
<di:waypoint x="408" y="120" />
<di:waypoint x="492" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_00e79cz_di" bpmnElement="Flow_00e79cz">
<di:waypoint x="320" y="120" />
<di:waypoint x="372" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1i73q45_di" bpmnElement="Flow_1i73q45">
<di:waypoint x="168" y="120" />
<di:waypoint x="220" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0u1rmur_di" bpmnElement="Event_0u1rmur">
<dc:Bounds x="132" y="102" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0dxzed7_di" bpmnElement="Activity_1q1wged">
<dc:Bounds x="220" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1i73q45_di" bpmnElement="Flow_1i73q45">
<di:waypoint x="168" y="120" />
<di:waypoint x="220" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_00e79cz_di" bpmnElement="Flow_00e79cz">
<di:waypoint x="320" y="120" />
<di:waypoint x="372" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0et6lvm_di" bpmnElement="Event_0eb0w95">
<dc:Bounds x="372" y="102" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="361" y="145" width="60" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1bdrcxy_di" bpmnElement="Flow_1bdrcxy">
<di:waypoint x="408" y="120" />
<di:waypoint x="460" y="120" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1g6jb6j_di" bpmnElement="Activity_0pbdlyu">
<dc:Bounds x="460" y="80" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_19cfzir_di" bpmnElement="Event_19cfzir">
<dc:Bounds x="612" y="102" width="36" height="36" />
<dc:Bounds x="492" y="102" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0bjksyv_di" bpmnElement="Flow_0bjksyv">
<di:waypoint x="560" y="120" />
<di:waypoint x="612" y="120" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0wc03ht" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0wc03ht" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="NonInterruptTimer" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1hyztad</bpmn:outgoing>
@ -38,7 +38,7 @@
<bpmn:boundaryEvent id="Event_0jyy8ao" name="BenchmarkTime" cancelActivity="false" attachedToRef="Activity_0e5qk4z">
<bpmn:outgoing>Flow_03e1mfr</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_15a4lk2">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(seconds=.2)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.2S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:boundaryEvent>
<bpmn:userTask id="GetReason" name="Delay Reason" camunda:formKey="DelayForm">
@ -59,74 +59,46 @@
<bpmn:incoming>Flow_0tlkkap</bpmn:incoming>
<bpmn:outgoing>Flow_0vper9q</bpmn:outgoing>
</bpmn:parallelGateway>
<bpmn:sequenceFlow id="Flow_0vper9q" sourceRef="Gateway_19fdoel" targetRef="Experience" />
<bpmn:sequenceFlow id="Flow_0vper9q" sourceRef="Gateway_19fdoel" targetRef="Event_17ly1lc" />
<bpmn:endEvent id="Event_17ly1lc">
<bpmn:incoming>Flow_0or6odg</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_0or6odg" sourceRef="Experience" targetRef="Event_17ly1lc" />
<bpmn:userTask id="Experience" name="What was your work Experience?" camunda:formKey="ExpForm">
<bpmn:extensionElements>
<camunda:formData>
<camunda:formField id="experience" label="What was your Work Experience?" type="string" />
</camunda:formData>
</bpmn:extensionElements>
<bpmn:incoming>Flow_0vper9q</bpmn:incoming>
<bpmn:outgoing>Flow_0or6odg</bpmn:outgoing>
</bpmn:userTask>
</bpmn:endEvent>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="NonInterruptTimer">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="112" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0e5qk4z_di" bpmnElement="Activity_0e5qk4z" isExpanded="true">
<dc:Bounds x="210" y="77" width="530" height="200" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0rpm2hw_di" bpmnElement="Event_0rpm2hw">
<dc:Bounds x="242" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0neqjqa_di" bpmnElement="Event_0jyy8ao">
<dc:Bounds x="572" y="259" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="551" y="302" width="80" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_09w3ybl_di" bpmnElement="GetReason">
<dc:Bounds x="540" y="350" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1hyztad_di" bpmnElement="Flow_1hyztad">
<di:waypoint x="148" y="177" />
<di:waypoint x="210" y="177" />
<bpmndi:BPMNEdge id="Flow_0vper9q_di" bpmnElement="Flow_0vper9q">
<di:waypoint x="835" y="177" />
<di:waypoint x="992" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_07l1pau_di" bpmnElement="Flow_07l1pau">
<di:waypoint x="740" y="177" />
<di:waypoint x="785" y="177" />
<bpmndi:BPMNEdge id="Flow_03e1mfr_di" bpmnElement="Flow_03e1mfr">
<di:waypoint x="590" y="295" />
<di:waypoint x="590" y="350" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0tlkkap_di" bpmnElement="Flow_0tlkkap">
<di:waypoint x="640" y="390" />
<di:waypoint x="810" y="390" />
<di:waypoint x="810" y="202" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_03e1mfr_di" bpmnElement="Flow_03e1mfr">
<di:waypoint x="590" y="295" />
<di:waypoint x="590" y="350" />
<bpmndi:BPMNEdge id="Flow_07l1pau_di" bpmnElement="Flow_07l1pau">
<di:waypoint x="740" y="177" />
<di:waypoint x="785" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ls93l9_di" bpmnElement="Flow_1ls93l9">
<di:waypoint x="278" y="177" />
<di:waypoint x="320" y="177" />
<bpmndi:BPMNEdge id="Flow_1hyztad_di" bpmnElement="Flow_1hyztad">
<di:waypoint x="148" y="177" />
<di:waypoint x="210" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_1qxx57d_di" bpmnElement="Gateway_WorkDone" isMarkerVisible="true">
<dc:Bounds x="495" y="152" width="50" height="50" />
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="112" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0e5qk4z_di" bpmnElement="Activity_0e5qk4z" isExpanded="true">
<dc:Bounds x="210" y="77" width="530" height="200" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_10bimyk_di" bpmnElement="Flow_10bimyk">
<di:waypoint x="545" y="177" />
<di:waypoint x="602" y="177" />
<bpmndi:BPMNLabel>
<dc:Bounds x="495" y="122" width="51" height="14" />
<dc:Bounds x="564" y="159" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_12d9rs0_di" bpmnElement="Gateway_19fdoel">
<dc:Bounds x="785" y="152" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1ku6me6_di" bpmnElement="Flow_1ku6me6">
<di:waypoint x="420" y="177" />
<di:waypoint x="495" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_06jd2h7_di" bpmnElement="Flow_06jd2h7">
<di:waypoint x="520" y="202" />
@ -137,32 +109,43 @@
<dc:Bounds x="438" y="232" width="15" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ku6me6_di" bpmnElement="Flow_1ku6me6">
<di:waypoint x="420" y="177" />
<di:waypoint x="495" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ls93l9_di" bpmnElement="Flow_1ls93l9">
<di:waypoint x="278" y="177" />
<di:waypoint x="320" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0rpm2hw_di" bpmnElement="Event_0rpm2hw">
<dc:Bounds x="242" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1qxx57d_di" bpmnElement="Gateway_WorkDone" isMarkerVisible="true">
<dc:Bounds x="495" y="152" width="50" height="50" />
<bpmndi:BPMNLabel>
<dc:Bounds x="495" y="122" width="51" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1sxw3jz_di" bpmnElement="Event_1sxw3jz">
<dc:Bounds x="602" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_10bimyk_di" bpmnElement="Flow_10bimyk">
<di:waypoint x="545" y="177" />
<di:waypoint x="602" y="177" />
<bpmndi:BPMNLabel>
<dc:Bounds x="564" y="159" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1ax46dw_di" bpmnElement="Activity_Work">
<dc:Bounds x="320" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0vper9q_di" bpmnElement="Flow_0vper9q">
<di:waypoint x="835" y="177" />
<di:waypoint x="860" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_09w3ybl_di" bpmnElement="GetReason">
<dc:Bounds x="540" y="350" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_12d9rs0_di" bpmnElement="Gateway_19fdoel">
<dc:Bounds x="785" y="152" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_17ly1lc_di" bpmnElement="Event_17ly1lc">
<dc:Bounds x="992" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0or6odg_di" bpmnElement="Flow_0or6odg">
<di:waypoint x="960" y="177" />
<di:waypoint x="992" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_130382b_di" bpmnElement="Experience">
<dc:Bounds x="860" y="137" width="100" height="80" />
<bpmndi:BPMNShape id="Event_0neqjqa_di" bpmnElement="Event_0jyy8ao">
<dc:Bounds x="572" y="259" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="551" y="302" width="80" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>

View File

@ -1,68 +1,44 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ilr8m3" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="timer" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1pahvlr</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:manualTask id="Activity_1ybpou3" name="Get Coffee">
<bpmn:incoming>Flow_1pahvlr</bpmn:incoming>
<bpmn:outgoing>Flow_1pvkgnu</bpmn:outgoing>
</bpmn:manualTask>
<bpmn:intermediateCatchEvent id="Event_0bxivgz" name="Take 5">
<bpmn:incoming>Flow_1pvkgnu</bpmn:incoming>
<bpmn:incoming>Flow_1pahvlr</bpmn:incoming>
<bpmn:outgoing>Flow_1elbn9u</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_1jrn73k">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(seconds=.25)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.25S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:manualTask id="Activity_1rbj8j1" name="Get Back To Work">
<bpmn:incoming>Flow_1elbn9u</bpmn:incoming>
<bpmn:outgoing>Flow_1ekgt3x</bpmn:outgoing>
</bpmn:manualTask>
<bpmn:endEvent id="Event_03w65sk">
<bpmn:incoming>Flow_1ekgt3x</bpmn:incoming>
<bpmn:incoming>Flow_1elbn9u</bpmn:incoming>
</bpmn:endEvent>
<bpmn:sequenceFlow id="Flow_1ekgt3x" sourceRef="Activity_1rbj8j1" targetRef="Event_03w65sk" />
<bpmn:sequenceFlow id="Flow_1elbn9u" sourceRef="Event_0bxivgz" targetRef="Activity_1rbj8j1" />
<bpmn:sequenceFlow id="Flow_1pvkgnu" sourceRef="Activity_1ybpou3" targetRef="Event_0bxivgz" />
<bpmn:sequenceFlow id="Flow_1pahvlr" sourceRef="StartEvent_1" targetRef="Activity_1ybpou3" />
<bpmn:sequenceFlow id="Flow_1elbn9u" sourceRef="Event_0bxivgz" targetRef="Event_03w65sk" />
<bpmn:sequenceFlow id="Flow_1pahvlr" sourceRef="StartEvent_1" targetRef="Event_0bxivgz" />
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="timer">
<bpmndi:BPMNEdge id="Flow_1pahvlr_di" bpmnElement="Flow_1pahvlr">
<di:waypoint x="215" y="117" />
<di:waypoint x="262" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1elbn9u_di" bpmnElement="Flow_1elbn9u">
<di:waypoint x="298" y="117" />
<di:waypoint x="342" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0tjl9dd_di" bpmnElement="Activity_1ybpou3">
<dc:Bounds x="260" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0bljn9v_di" bpmnElement="Event_0bxivgz">
<dc:Bounds x="412" y="99" width="36" height="36" />
<dc:Bounds x="262" y="99" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="414" y="142" width="33" height="14" />
<dc:Bounds x="264" y="142" width="33" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_15zi5m4_di" bpmnElement="Activity_1rbj8j1">
<dc:Bounds x="530" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_03w65sk_di" bpmnElement="Event_03w65sk">
<dc:Bounds x="682" y="99" width="36" height="36" />
<dc:Bounds x="342" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1ekgt3x_di" bpmnElement="Flow_1ekgt3x">
<di:waypoint x="630" y="117" />
<di:waypoint x="682" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1elbn9u_di" bpmnElement="Flow_1elbn9u">
<di:waypoint x="448" y="117" />
<di:waypoint x="530" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pvkgnu_di" bpmnElement="Flow_1pvkgnu">
<di:waypoint x="360" y="117" />
<di:waypoint x="412" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1pahvlr_di" bpmnElement="Flow_1pahvlr">
<di:waypoint x="215" y="117" />
<di:waypoint x="260" y="117" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_d4f3442" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.10.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_d4f3442" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="loops" isExecutable="true">
<bpmn:scriptTask id="increment_counter" name="increment counter">
<bpmn:incoming>Flow_1gb8wca</bpmn:incoming>
@ -25,7 +25,7 @@ Days elapsed: {{days_delta }}</bpmn:documentation>
<bpmn:incoming>Flow_0op1a19</bpmn:incoming>
<bpmn:outgoing>Flow_1gb8wca</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0x6divu">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(milliseconds=10)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT.01S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:exclusiveGateway id="Gateway_over_20" name="is &#62; 20">
@ -57,6 +57,14 @@ Days elapsed: {{days_delta }}</bpmn:documentation>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="loops">
<bpmndi:BPMNEdge id="Flow_0q7fkb7_di" bpmnElement="Flow_0q7fkb7">
<di:waypoint x="188" y="177" />
<di:waypoint x="250" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0mxlkif_di" bpmnElement="Flow_0mxlkif">
<di:waypoint x="720" y="177" />
<di:waypoint x="755" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_15jw6a4_di" bpmnElement="Flow_15jw6a4">
<di:waypoint x="350" y="177" />
<di:waypoint x="412" y="177" />
@ -85,16 +93,8 @@ Days elapsed: {{days_delta }}</bpmn:documentation>
<di:waypoint x="580" y="177" />
<di:waypoint x="620" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0q7fkb7_di" bpmnElement="Flow_0q7fkb7">
<di:waypoint x="188" y="177" />
<di:waypoint x="250" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0mxlkif_di" bpmnElement="Flow_0mxlkif">
<di:waypoint x="720" y="177" />
<di:waypoint x="755" y="177" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="159" width="36" height="36" />
<bpmndi:BPMNShape id="Activity_1fgfg5d_di" bpmnElement="increment_counter">
<dc:Bounds x="480" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_1tseamj_di" bpmnElement="end_event5">
<dc:Bounds x="932" y="159" width="36" height="36" />
@ -114,12 +114,12 @@ Days elapsed: {{days_delta }}</bpmn:documentation>
<bpmndi:BPMNShape id="Activity_0whalo9_di" bpmnElement="initialize">
<dc:Bounds x="250" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1fgfg5d_di" bpmnElement="increment_counter">
<dc:Bounds x="480" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0mmgsiw_di" bpmnElement="Activity_0w5u4k4">
<dc:Bounds x="620" y="137" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="159" width="36" height="36" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_d4f3442" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.10.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_d4f3442" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="loops_sub" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_0q7fkb7</bpmn:outgoing>
@ -29,7 +29,7 @@ Days elapsed: {{days_delta }}</bpmn:documentation>
<bpmn:incoming>Flow_1ivr6d7</bpmn:incoming>
<bpmn:outgoing>Flow_1gb8wca</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0x6divu">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(milliseconds=10)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.01S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:exclusiveGateway id="Gateway_over_20" name="is &#62; 20">

View File

@ -15,7 +15,7 @@ class ActionManagementTest(BpmnWorkflowTestCase):
FINISH_TIME_DELTA=0.10
def now_plus_seconds(self, seconds):
return datetime.datetime.now() + datetime.timedelta(seconds=seconds)
return (datetime.datetime.now() + datetime.timedelta(seconds=seconds)).isoformat()
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('Test-Workflows/Action-Management.bpmn20.xml', 'Action Management')

View File

@ -0,0 +1,60 @@
import unittest
from datetime import datetime
from SpiffWorkflow.bpmn.specs.events.event_definitions import TimerEventDefinition
class TimeDurationParseTest(unittest.TestCase):
"Non-exhaustive ISO durations, but hopefully covers basic support"
def test_parse_duration(self):
valid = [
("P1Y6M1DT1H1M1S", {'years': 1, 'months': 6, 'days': 1, 'hours': 1, 'minutes': 1, 'seconds': 1 }), # everything
("P1Y6M1DT1H1M1.5S", {'years': 1, 'months': 6, 'days': 1, 'hours': 1, 'minutes': 1, 'seconds': 1.5 }), # fractional seconds
("P1YT1H1M1S", {'years': 1, 'hours': 1, 'minutes': 1, 'seconds': 1 }), # minutes but no month
("P1MT1H", {'months': 1, 'hours':1}), # months but no minutes
("P4W", {'weeks': 4}), # weeks
("P1Y6M1D", {'years': 1, 'months': 6, 'days': 1}), # no time
("PT1H1M1S", {'hours': 1,'minutes': 1,'seconds': 1}), # time only
("PT1.5H", {'hours': 1.5}), # alt fractional
("T1,5H", {'hours': 1.5}), # fractional with comma
("PDT1H1M1S", {'hours': 1, 'minutes': 1, 'seconds': 1}), # empty spec
("PYMDT1H1M1S", {'hours': 1, 'minutes': 1, 'seconds': 1}), # multiple empty
]
for duration, parsed_duration in valid:
result = TimerEventDefinition.parse_iso_duration(duration)
self.assertDictEqual(result, parsed_duration)
invalid = [
"PT1.5H30S", # fractional duration with subsequent non-fractional
"PT1,5H30S", # with comma
"P1H1M1S", # missing 't'
"P1DT", # 't' without time spec
"P1W1D", # conflicting day specs
"PT1H1M1", # trailing values
]
for duration in invalid:
self.assertRaises(Exception, TimerEventDefinition.parse_iso_duration, duration)
def test_calculate_timedelta_from_start(self):
start, one_day = datetime.fromisoformat("2023-01-01"), 24 * 3600
# Leap years
self.assertEqual(TimerEventDefinition.get_timedelta_from_start({'years': 1}, start).total_seconds(), 365 * one_day)
self.assertEqual(TimerEventDefinition.get_timedelta_from_start({'years': 2}, start).total_seconds(), (365 + 366) * one_day)
# Increment by month does not change day
for month in range(1, 13):
dt = start + TimerEventDefinition.get_timedelta_from_start({'months': month}, start)
self.assertEqual(dt.day, 1)
def test_calculate_timedelta_from_end(self):
end, one_day = datetime.fromisoformat("2025-01-01"), 24 * 3600
# Leap years
self.assertEqual(TimerEventDefinition.get_timedelta_from_end({'years': 1}, end).total_seconds(), 366 * one_day)
self.assertEqual(TimerEventDefinition.get_timedelta_from_end({'years': 2}, end).total_seconds(), (365 + 366) * one_day)
dt = end - TimerEventDefinition.get_timedelta_from_end({'months': 11}, end)
# Decrement by month does not change day
for month in range(1, 13):
dt = end - TimerEventDefinition.get_timedelta_from_end({'months': month}, end)
self.assertEqual(dt.day, 1)

View File

@ -5,12 +5,14 @@ import unittest
import time
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
__author__ = 'kellym'
# the data doesn't really propagate to the end as in a 'normal' workflow, so I call a
# custom function that records the number of times this got called so that
# we can keep track of how many times the triggered item gets called.
counter = 0
def my_custom_function():
global counter
@ -41,31 +43,24 @@ class TimerCycleStartTest(BpmnWorkflowTestCase):
def testThroughSaveRestore(self):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
global counter
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks)) # Start Event
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
# the data doesn't really propagate to the end as in a 'normal' workflow, so I call a
# custom function that records the number of times this got called so that
# we can keep track of how many times the triggered item gets called.
counter = 0
# We have a loop so we can continue to execute waiting tasks when
# timers expire. The test workflow has a wait timer that pauses long enough to
# allow the cycle to complete twice -- otherwise the first iteration through the
# cycle process causes the remaining tasks to be cancelled.
for loopcount in range(5):
# allow the cycle to complete three times before being cancelled by the terminate
# event (the timer should only run twice, we want to make sure it doesn't keep
# executing)
for loopcount in range(6):
self.workflow.do_engine_steps()
if save_restore:
self.save_restore()
self.workflow.script_engine = CustomScriptEngine()
time.sleep(0.1)
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
self.assertEqual(counter, 2)
self.assertTrue(self.workflow.is_completed())
def suite():

View File

@ -30,7 +30,7 @@ class CustomScriptEngine(PythonScriptEngine):
class TimerDurationTest(BpmnWorkflowTestCase):
class TimerCycleTest(BpmnWorkflowTestCase):
def setUp(self):
self.spec, self.subprocesses = self.load_workflow_spec('timer-cycle.bpmn', 'timer')
@ -42,31 +42,34 @@ class TimerDurationTest(BpmnWorkflowTestCase):
def testThroughSaveRestore(self):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
global counter
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks)) # Start Event
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks)) # GetCoffee
# See comments in timer cycle test for more context
counter = 0
# See comments in timer cycle test start for more context
for loopcount in range(5):
self.workflow.do_engine_steps()
if save_restore:
self.save_restore()
self.workflow.script_engine = CustomScriptEngine()
time.sleep(0.01)
time.sleep(0.05)
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
pass
#self.assertEqual(counter, 2)
events = self.workflow.waiting_events()
if loopcount == 0:
# Wait time is 0.1s, so the first time through, there should still be a waiting event
self.assertEqual(len(events), 1)
else:
# By the second iteration, both should be complete
self.assertEqual(len(events), 0)
# Get coffee still ready
coffee = self.workflow.get_tasks_from_spec_name('Get_Coffee')[0]
self.assertEqual(coffee.state, TaskState.READY)
# Timer completed
timer = self.workflow.get_tasks_from_spec_name('CatchMessage')[0]
self.assertEqual(timer.state, TaskState.COMPLETED)
self.assertEqual(counter, 2)
def suite():
return unittest.TestLoader().loadTestsFromTestCase(TimerDurationTest)
return unittest.TestLoader().loadTestsFromTestCase(TimerCycleTest)
if __name__ == '__main__':
unittest.TextTestRunner(verbosity=2).run(suite())

View File

@ -4,7 +4,6 @@ import unittest
import datetime
import time
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
@ -28,37 +27,22 @@ class TimerDateTest(BpmnWorkflowTestCase):
def testThroughSaveRestore(self):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
global counter
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks)) # Start Event
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
self.assertEqual(len(self.workflow.waiting_events()), 1)
loopcount = 0
# test bpmn has a timeout of .05s
# we should terminate loop before that.
starttime = datetime.datetime.now()
counter = 0
while loopcount < 8:
if len(self.workflow.get_tasks(TaskState.READY)) >= 1:
break
# test bpmn has a timeout of .05s; we should terminate loop before that.
while len(self.workflow.get_waiting_tasks()) > 0 and loopcount < 8:
if save_restore:
self.save_restore()
self.workflow.script_engine = self.script_engine
waiting_tasks = self.workflow.get_tasks(TaskState.WAITING)
time.sleep(0.01)
self.workflow.refresh_waiting_tasks()
loopcount = loopcount +1
loopcount += 1
endtime = datetime.datetime.now()
self.workflow.do_engine_steps()
testdate = datetime.datetime.strptime('2021-09-01 10:00','%Y-%m-%d %H:%M')
self.assertEqual(self.workflow.last_task.data['futuredate2'],testdate)
self.assertTrue('completed' in self.workflow.last_task.data)
self.assertTrue(self.workflow.last_task.data['completed'])
self.assertTrue(self.workflow.is_completed())
self.assertTrue((endtime-starttime) > datetime.timedelta(seconds=.02))

View File

@ -1,12 +1,9 @@
# -*- coding: utf-8 -*-
import unittest
import datetime
import time
from datetime import timedelta
from SpiffWorkflow.bpmn.specs.events.EndEvent import EndEvent
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
@ -27,45 +24,23 @@ class TimerDurationTest(BpmnWorkflowTestCase):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
# In the normal flow of things, the final end event should be the last task
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
end_events = []
for task in self.workflow.get_tasks():
if isinstance(task.task_spec, EndEvent):
end_events.append(task)
self.assertEqual(1, len(end_events))
# In the event of a timer firing, the last task should STILL
# be the final end event.
starttime = datetime.datetime.now()
self.workflow = BpmnWorkflow(self.spec)
self.workflow.script_engine = self.script_engine
self.workflow.do_engine_steps()
if save_restore:
self.save_restore()
self.workflow.script_engine = self.script_engine
time.sleep(0.1)
time.sleep(1)
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
# Make sure the timer got called
self.assertEqual(self.workflow.last_task.data['timer_called'],True)
# Make sure the task can still be called.
task = self.workflow.get_ready_user_tasks()[0]
self.workflow.complete_task_from_id(task.id)
task.complete()
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
end_events = []
for task in self.workflow.get_tasks():
if isinstance(task.task_spec, EndEvent):
end_events.append(task)
self.assertEqual(1, len(end_events))
def suite():

View File

@ -3,7 +3,6 @@
import unittest
import time
from SpiffWorkflow.bpmn.FeelLikeScriptEngine import FeelLikeScriptEngine
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
@ -23,35 +22,31 @@ class TimerDurationTest(BpmnWorkflowTestCase):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
self.workflow.script_engine = FeelLikeScriptEngine()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
ready_tasks[0].data['answer']='No'
self.workflow.complete_task_from_id(ready_tasks[0].id)
ready_tasks[0].complete()
self.workflow.do_engine_steps()
loopcount = 0
# test bpmn has a timeout of .03s
# we should terminate loop before that.
while loopcount < 11:
ready_tasks = self.workflow.get_tasks(TaskState.READY)
if len(ready_tasks) < 1:
break
# test bpmn has a timeout of .03s; we should terminate loop before that.
while len(self.workflow.get_waiting_tasks()) == 2 and loopcount < 11:
if save_restore:
self.save_restore()
self.workflow.script_engine = FeelLikeScriptEngine()
#self.assertEqual(1, len(self.workflow.get_tasks(Task.WAITING)))
time.sleep(0.01)
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.assertEqual(len(self.workflow.get_tasks(TaskState.READY)), 1)
self.workflow.refresh_waiting_tasks()
self.workflow.do_engine_steps()
loopcount = loopcount +1
loopcount += 1
self.workflow.do_engine_steps()
subworkflow = self.workflow.get_tasks_from_spec_name('Subworkflow')[0]
self.assertEqual(subworkflow.state, TaskState.CANCELLED)
ready_tasks = self.workflow.get_ready_user_tasks()
while len(ready_tasks) > 0:
ready_tasks[0].complete()
ready_tasks = self.workflow.get_ready_user_tasks()
self.workflow.do_engine_steps()
self.assertTrue(self.workflow.is_completed())
# Assure that the loopcount is less than 10, and the timer interrupt fired, rather
# than allowing us to continue to loop the full 10 times.
self.assertTrue(loopcount < 10)

View File

@ -1,10 +1,8 @@
# -*- coding: utf-8 -*-
import unittest
import datetime
import time
from datetime import timedelta
from SpiffWorkflow.task import TaskState
from datetime import datetime, timedelta
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from tests.SpiffWorkflow.bpmn.BpmnWorkflowTestCase import BpmnWorkflowTestCase
@ -25,35 +23,25 @@ class TimerDurationTest(BpmnWorkflowTestCase):
def testThroughSaveRestore(self):
self.actual_test(save_restore=True)
def actual_test(self,save_restore = False):
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_tasks(TaskState.READY)
self.assertEqual(1, len(ready_tasks))
self.workflow.complete_task_from_id(ready_tasks[0].id)
self.workflow.do_engine_steps()
self.assertEqual(len(self.workflow.waiting_events()), 1)
loopcount = 0
# test bpmn has a timeout of .25s
# we should terminate loop before that.
starttime = datetime.datetime.now()
while loopcount < 10:
if len(self.workflow.get_tasks(TaskState.READY)) >= 1:
break
starttime = datetime.now()
# test bpmn has a timeout of .25s; we should terminate loop before that.
while len(self.workflow.get_waiting_tasks()) > 0 and loopcount < 10:
if save_restore:
self.save_restore()
self.workflow.script_engine = self.script_engine
self.assertEqual(1, len(self.workflow.get_tasks(TaskState.WAITING)))
time.sleep(0.1)
self.workflow.refresh_waiting_tasks()
loopcount = loopcount +1
endtime = datetime.datetime.now()
duration = endtime-starttime
self.assertEqual(duration<datetime.timedelta(seconds=.5),True)
self.assertEqual(duration>datetime.timedelta(seconds=.2),True)
loopcount += 1
endtime = datetime.now()
duration = endtime - starttime
self.assertEqual(duration < timedelta(seconds=.5), True)
self.assertEqual(duration > timedelta(seconds=.2), True)
self.assertEqual(len(self.workflow.waiting_events()), 0)
def suite():

View File

@ -18,7 +18,7 @@ class TimerIntermediateTest(BpmnWorkflowTestCase):
def testRunThroughHappy(self):
due_time = datetime.datetime.now() + datetime.timedelta(seconds=0.01)
due_time = (datetime.datetime.now() + datetime.timedelta(seconds=0.01)).isoformat()
self.assertEqual(1, len(self.workflow.get_tasks(TaskState.READY)))
self.workflow.get_tasks(TaskState.READY)[0].set_data(due_time=due_time)

View File

@ -0,0 +1,27 @@
import unittest
import os
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnParser
from SpiffWorkflow.bpmn.serializer.workflow import BpmnWorkflowSerializer
from tests.SpiffWorkflow.bpmn.BpmnLoaderForTests import TestUserTaskConverter
class BaseTestCase(unittest.TestCase):
SERIALIZER_VERSION = "100.1.ANY"
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data')
def load_workflow_spec(self, filename, process_name):
parser = BpmnParser()
parser.add_bpmn_files_by_glob(os.path.join(self.DATA_DIR, filename))
top_level_spec = parser.get_spec(process_name)
subprocesses = parser.get_subprocess_specs(process_name)
return top_level_spec, subprocesses
def setUp(self):
super(BaseTestCase, self).setUp()
wf_spec_converter = BpmnWorkflowSerializer.configure_workflow_spec_converter([TestUserTaskConverter])
self.serializer = BpmnWorkflowSerializer(wf_spec_converter, version=self.SERIALIZER_VERSION)
spec, subprocesses = self.load_workflow_spec('random_fact.bpmn', 'random_fact')
self.workflow = BpmnWorkflow(spec, subprocesses)

View File

@ -1,33 +1,18 @@
import os
import unittest
import os
import json
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from SpiffWorkflow.bpmn.parser.BpmnParser import BpmnParser
from SpiffWorkflow.bpmn.serializer.workflow import BpmnWorkflowSerializer
from SpiffWorkflow.bpmn.workflow import BpmnWorkflow
from tests.SpiffWorkflow.bpmn.BpmnLoaderForTests import TestUserTaskConverter
from .BaseTestCase import BaseTestCase
class BpmnWorkflowSerializerTest(BaseTestCase):
class BpmnWorkflowSerializerTest(unittest.TestCase):
"""Please note that the BpmnSerializer is Deprecated."""
SERIALIZER_VERSION = "100.1.ANY"
def load_workflow_spec(self, filename, process_name):
f = os.path.join(os.path.dirname(__file__), 'data', filename)
parser = BpmnParser()
parser.add_bpmn_files_by_glob(f)
top_level_spec = parser.get_spec(process_name)
subprocesses = parser.get_subprocess_specs(process_name)
return top_level_spec, subprocesses
def setUp(self):
super(BpmnWorkflowSerializerTest, self).setUp()
wf_spec_converter = BpmnWorkflowSerializer.configure_workflow_spec_converter([TestUserTaskConverter])
self.serializer = BpmnWorkflowSerializer(wf_spec_converter, version=self.SERIALIZER_VERSION)
spec, subprocesses = self.load_workflow_spec('random_fact.bpmn', 'random_fact')
self.workflow = BpmnWorkflow(spec, subprocesses)
DATA_DIR = os.path.join(os.path.dirname(os.path.dirname(__file__)), 'data')
def testSerializeWorkflowSpec(self):
spec_serialized = self.serializer.serialize_json(self.workflow)
@ -102,12 +87,6 @@ class BpmnWorkflowSerializerTest(unittest.TestCase):
def testDeserializeWorkflow(self):
self._compare_with_deserialized_copy(self.workflow)
def testSerializeTask(self):
self.serializer.serialize_json(self.workflow)
def testDeserializeTask(self):
self._compare_with_deserialized_copy(self.workflow)
def testDeserializeActiveWorkflow(self):
self.workflow.do_engine_steps()
self._compare_with_deserialized_copy(self.workflow)
@ -161,17 +140,6 @@ class BpmnWorkflowSerializerTest(unittest.TestCase):
self.assertIsNotNone(wf2.last_task)
self._compare_workflows(self.workflow, wf2)
def test_convert_1_0_to_1_1(self):
# The serialization used here comes from NestedSubprocessTest saved at line 25 with version 1.0
fn = os.path.join(os.path.dirname(__file__), 'data', 'serialization', 'v1.0.json')
wf = self.serializer.deserialize_json(open(fn).read())
# We should be able to finish the workflow from this point
ready_tasks = wf.get_tasks(TaskState.READY)
self.assertEqual('Action3', ready_tasks[0].task_spec.description)
ready_tasks[0].complete()
wf.do_engine_steps()
self.assertEqual(True, wf.is_completed())
def test_serialize_workflow_where_script_task_includes_function(self):
self.workflow.do_engine_steps()
ready_tasks = self.workflow.get_ready_user_tasks()

View File

@ -0,0 +1,30 @@
import os
import time
from SpiffWorkflow.task import TaskState
from SpiffWorkflow.bpmn.PythonScriptEngine import PythonScriptEngine
from .BaseTestCase import BaseTestCase
class VersionMigrationTest(BaseTestCase):
SERIALIZER_VERSION = "1.2"
def test_convert_1_0_to_1_1(self):
# The serialization used here comes from NestedSubprocessTest saved at line 25 with version 1.0
fn = os.path.join(self.DATA_DIR, 'serialization', 'v1.0.json')
wf = self.serializer.deserialize_json(open(fn).read())
# We should be able to finish the workflow from this point
ready_tasks = wf.get_tasks(TaskState.READY)
self.assertEqual('Action3', ready_tasks[0].task_spec.description)
ready_tasks[0].complete()
wf.do_engine_steps()
self.assertEqual(True, wf.is_completed())
def test_convert_1_1_to_1_2(self):
fn = os.path.join(self.DATA_DIR, 'serialization', 'v1-1.json')
wf = self.serializer.deserialize_json(open(fn).read())
wf.script_engine = PythonScriptEngine(default_globals={"time": time})
wf.refresh_waiting_tasks()
wf.do_engine_steps()
self.assertTrue(wf.is_completed())

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ucc3vj" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_0ucc3vj" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:collaboration id="Collaboration_0fh00ao">
<bpmn:participant id="Participant_1p8gtyd" name="Sample Process&#10;" processRef="Process_1kjyavs" />
</bpmn:collaboration>
@ -78,7 +78,7 @@
<bpmn:incoming>Flow_11u0pgk</bpmn:incoming>
<bpmn:outgoing>Flow_1rqk2v9</bpmn:outgoing>
<bpmn:timerEventDefinition id="TimerEventDefinition_0bct7zl">
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">timedelta(seconds=.01)</bpmn:timeDuration>
<bpmn:timeDuration xsi:type="bpmn:tFormalExpression">"PT0.01S"</bpmn:timeDuration>
</bpmn:timerEventDefinition>
</bpmn:intermediateCatchEvent>
<bpmn:sequenceFlow id="Flow_1gs89vo" sourceRef="Event_0akpdke" targetRef="Activity_106f08z" />
@ -107,48 +107,29 @@
<bpmndi:BPMNShape id="Participant_1p8gtyd_di" bpmnElement="Participant_1p8gtyd" isHorizontal="true">
<dc:Bounds x="190" y="70" width="978" height="638" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_0rpib5y_di" bpmnElement="Lane_0rpib5y" isHorizontal="true">
<dc:Bounds x="220" y="70" width="948" height="202" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Lane_0gfw5kf_di" bpmnElement="Lane_0gfw5kf" isHorizontal="true">
<dc:Bounds x="220" y="272" width="948" height="436" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0d3xq5q_di" bpmnElement="Event_0d3xq5q">
<dc:Bounds x="292" y="152" width="36" height="36" />
<bpmndi:BPMNShape id="Lane_0rpib5y_di" bpmnElement="Lane_0rpib5y" isHorizontal="true">
<dc:Bounds x="220" y="70" width="948" height="202" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0bvln2b_di" bpmnElement="Flow_0bvln2b">
<di:waypoint x="328" y="170" />
<di:waypoint x="380" y="170" />
<bpmndi:BPMNEdge id="Flow_093roev_di" bpmnElement="Flow_093roev">
<di:waypoint x="645" y="360" />
<di:waypoint x="645" y="310" />
<di:waypoint x="1050" y="310" />
<di:waypoint x="1050" y="442" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1ugbw2a_di" bpmnElement="Activity_Interrupt">
<dc:Bounds x="380" y="130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0ncff13_di" bpmnElement="Gateway_0ncff13" isMarkerVisible="true">
<dc:Bounds x="535" y="145" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1ya6ran_di" bpmnElement="Flow_1ya6ran">
<di:waypoint x="480" y="170" />
<di:waypoint x="535" y="170" />
<bpmndi:BPMNEdge id="Flow_0o0l113_di" bpmnElement="Flow_0o0l113">
<di:waypoint x="797" y="578" />
<di:waypoint x="797" y="630" />
<di:waypoint x="1050" y="630" />
<di:waypoint x="1050" y="478" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0saykw5_di" bpmnElement="Flow_0saykw5">
<di:waypoint x="585" y="170" />
<di:waypoint x="642" y="170" />
<bpmndi:BPMNLabel>
<dc:Bounds x="604" y="152" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_15z0u0c_di" bpmnElement="Event_0g8w85g">
<dc:Bounds x="642" y="152" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="625" y="195" width="70" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0l8sadb_di" bpmnElement="Event_0l8sadb">
<dc:Bounds x="742" y="152" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0lekhj5_di" bpmnElement="Flow_0lekhj5">
<di:waypoint x="678" y="170" />
<di:waypoint x="742" y="170" />
<bpmndi:BPMNEdge id="Flow_1gd7a2h_di" bpmnElement="Flow_1gd7a2h">
<di:waypoint x="328" y="430" />
<di:waypoint x="339" y="430" />
<di:waypoint x="339" y="460" />
<di:waypoint x="350" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1t2ocwk_di" bpmnElement="Flow_1t2ocwk">
<di:waypoint x="560" y="195" />
@ -159,76 +140,52 @@
<dc:Bounds x="488" y="232" width="15" height="40" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0lekhj5_di" bpmnElement="Flow_0lekhj5">
<di:waypoint x="678" y="170" />
<di:waypoint x="742" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0saykw5_di" bpmnElement="Flow_0saykw5">
<di:waypoint x="585" y="170" />
<di:waypoint x="642" y="170" />
<bpmndi:BPMNLabel>
<dc:Bounds x="604" y="152" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1ya6ran_di" bpmnElement="Flow_1ya6ran">
<di:waypoint x="480" y="170" />
<di:waypoint x="535" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0bvln2b_di" bpmnElement="Flow_0bvln2b">
<di:waypoint x="328" y="170" />
<di:waypoint x="380" y="170" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0d3xq5q_di" bpmnElement="Event_0d3xq5q">
<dc:Bounds x="292" y="152" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1ugbw2a_di" bpmnElement="Activity_Interrupt">
<dc:Bounds x="380" y="130" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0ncff13_di" bpmnElement="Gateway_0ncff13" isMarkerVisible="true">
<dc:Bounds x="535" y="145" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_15z0u0c_di" bpmnElement="Event_0g8w85g">
<dc:Bounds x="642" y="152" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="625" y="195" width="70" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0l8sadb_di" bpmnElement="Event_0l8sadb">
<dc:Bounds x="742" y="152" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_12moz8m_di" bpmnElement="Event_12moz8m">
<dc:Bounds x="292" y="412" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1m4766l_di" bpmnElement="Activity_1m4766l" isExpanded="true">
<dc:Bounds x="350" y="360" width="590" height="200" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0akpdke_di" bpmnElement="Event_0akpdke">
<dc:Bounds x="390" y="442" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1gd7a2h_di" bpmnElement="Flow_1gd7a2h">
<di:waypoint x="328" y="430" />
<di:waypoint x="339" y="430" />
<di:waypoint x="339" y="460" />
<di:waypoint x="350" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0ib6pbh_di" bpmnElement="Event_InterruptBoundary">
<dc:Bounds x="779" y="542" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="782" y="585" width="32" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0j702hl_di" bpmnElement="Event_0j702hl">
<dc:Bounds x="1032" y="442" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_0o0l113_di" bpmnElement="Flow_0o0l113">
<di:waypoint x="797" y="578" />
<di:waypoint x="797" y="630" />
<di:waypoint x="1050" y="630" />
<di:waypoint x="1050" y="478" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_093roev_di" bpmnElement="Flow_093roev">
<di:waypoint x="645" y="360" />
<di:waypoint x="645" y="310" />
<di:waypoint x="1050" y="310" />
<di:waypoint x="1050" y="442" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Activity_1s4pw7g_di" bpmnElement="Activity_106f08z">
<dc:Bounds x="475" y="420" width="100" height="80" />
<bpmndi:BPMNShape id="Activity_1m4766l_di" bpmnElement="Activity_1m4766l" isExpanded="true">
<dc:Bounds x="350" y="360" width="590" height="200" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_11u0pgk_di" bpmnElement="Flow_11u0pgk">
<di:waypoint x="575" y="460" />
<di:waypoint x="627" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0ulu4mx_di" bpmnElement="Event_0aqmn5y">
<dc:Bounds x="627" y="442" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="618" y="412" width="56" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_1gs89vo_di" bpmnElement="Flow_1gs89vo">
<di:waypoint x="426" y="460" />
<di:waypoint x="475" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_0u34qof_di" bpmnElement="Gateway_0u34qof" isMarkerVisible="true">
<dc:Bounds x="695" y="435" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0pjkpp2_di" bpmnElement="Event_0pjkpp2">
<dc:Bounds x="802" y="442" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_18d90uu_di" bpmnElement="Flow_18d90uu">
<di:waypoint x="745" y="460" />
<di:waypoint x="802" y="460" />
<bpmndi:BPMNLabel>
<dc:Bounds x="750" y="442" width="49" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rqk2v9_di" bpmnElement="Flow_1rqk2v9">
<di:waypoint x="663" y="460" />
<di:waypoint x="695" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0wuxluk_di" bpmnElement="Flow_0wuxluk">
<di:waypoint x="720" y="485" />
<di:waypoint x="720" y="540" />
@ -238,6 +195,49 @@
<dc:Bounds x="580" y="522" width="85" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1rqk2v9_di" bpmnElement="Flow_1rqk2v9">
<di:waypoint x="663" y="460" />
<di:waypoint x="695" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_18d90uu_di" bpmnElement="Flow_18d90uu">
<di:waypoint x="745" y="460" />
<di:waypoint x="802" y="460" />
<bpmndi:BPMNLabel>
<dc:Bounds x="750" y="442" width="49" height="27" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1gs89vo_di" bpmnElement="Flow_1gs89vo">
<di:waypoint x="426" y="460" />
<di:waypoint x="475" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_11u0pgk_di" bpmnElement="Flow_11u0pgk">
<di:waypoint x="575" y="460" />
<di:waypoint x="627" y="460" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0akpdke_di" bpmnElement="Event_0akpdke">
<dc:Bounds x="390" y="442" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1s4pw7g_di" bpmnElement="Activity_106f08z">
<dc:Bounds x="475" y="420" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0ulu4mx_di" bpmnElement="Event_0aqmn5y">
<dc:Bounds x="627" y="442" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="618" y="412" width="56" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0u34qof_di" bpmnElement="Gateway_0u34qof" isMarkerVisible="true">
<dc:Bounds x="695" y="435" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0pjkpp2_di" bpmnElement="Event_0pjkpp2">
<dc:Bounds x="802" y="442" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Event_0ib6pbh_di" bpmnElement="Event_InterruptBoundary">
<dc:Bounds x="779" y="542" width="36" height="36" />
<bpmndi:BPMNLabel>
<dc:Bounds x="782" y="585" width="32" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1nsvcwb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1nsvcwb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="token" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_03vnrmv</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:exclusiveGateway id="Gateway_1w9u16f">
<bpmn:exclusiveGateway id="Gateway_1w9u16f" default="Flow_1qgke9w">
<bpmn:incoming>Flow_0g2wjhu</bpmn:incoming>
<bpmn:incoming>Flow_0ya87hl</bpmn:incoming>
<bpmn:outgoing>Flow_1qgke9w</bpmn:outgoing>
@ -75,28 +75,25 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="token">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1w9u16f_di" bpmnElement="Gateway_1w9u16f" isMarkerVisible="true">
<dc:Bounds x="1015" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1oyfku7_di" bpmnElement="First">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_13qpm6f_di" bpmnElement="Flow_13qpm6f">
<di:waypoint x="370" y="117" />
<di:waypoint x="465" y="117" />
<bpmndi:BPMNEdge id="Flow_039y4lk_di" bpmnElement="Flow_039y4lk">
<di:waypoint x="1240" y="117" />
<di:waypoint x="1322" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_0nr9vpb_di" bpmnElement="Gateway_0yirqzr" isMarkerVisible="true">
<dc:Bounds x="465" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_04bpvfu_di" bpmnElement="Flow_04bpvfu">
<di:waypoint x="515" y="117" />
<di:waypoint x="610" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="553" y="99" width="19" height="14" />
</bpmndi:BPMNLabel>
<bpmndi:BPMNEdge id="Flow_03vnrmv_di" bpmnElement="Flow_03vnrmv">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ahlz50_di" bpmnElement="Flow_0ahlz50">
<di:waypoint x="710" y="117" />
<di:waypoint x="840" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ya87hl_di" bpmnElement="Flow_0ya87hl">
<di:waypoint x="940" y="117" />
<di:waypoint x="1015" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1qgke9w_di" bpmnElement="Flow_1qgke9w">
<di:waypoint x="1065" y="117" />
<di:waypoint x="1140" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0g2wjhu_di" bpmnElement="Flow_0g2wjhu">
<di:waypoint x="490" y="142" />
@ -107,18 +104,29 @@
<dc:Bounds x="758" y="322" width="15" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1qgke9w_di" bpmnElement="Flow_1qgke9w">
<di:waypoint x="1065" y="117" />
<di:waypoint x="1140" y="117" />
<bpmndi:BPMNEdge id="Flow_04bpvfu_di" bpmnElement="Flow_04bpvfu">
<di:waypoint x="515" y="117" />
<di:waypoint x="610" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="553" y="99" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ya87hl_di" bpmnElement="Flow_0ya87hl">
<di:waypoint x="940" y="117" />
<di:waypoint x="1015" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ahlz50_di" bpmnElement="Flow_0ahlz50">
<di:waypoint x="710" y="117" />
<di:waypoint x="840" y="117" />
<bpmndi:BPMNEdge id="Flow_13qpm6f_di" bpmnElement="Flow_13qpm6f">
<di:waypoint x="370" y="117" />
<di:waypoint x="465" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1w9u16f_di" bpmnElement="Gateway_1w9u16f" isMarkerVisible="true">
<dc:Bounds x="1015" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1oyfku7_di" bpmnElement="First">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0nr9vpb_di" bpmnElement="Gateway_0yirqzr" isMarkerVisible="true">
<dc:Bounds x="465" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_18dz45e_di" bpmnElement="FormA">
<dc:Bounds x="610" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
@ -128,17 +136,9 @@
<bpmndi:BPMNShape id="Activity_1byzp7w_di" bpmnElement="FormC">
<dc:Bounds x="1140" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_03vnrmv_di" bpmnElement="Flow_03vnrmv">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0xfwzm8_di" bpmnElement="Event_0xfwzm8">
<dc:Bounds x="1322" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_039y4lk_di" bpmnElement="Flow_039y4lk">
<di:waypoint x="1240" y="117" />
<di:waypoint x="1322" y="117" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1nsvcwb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.0">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_1nsvcwb" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="token" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_03vnrmv</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:exclusiveGateway id="Gateway_1w9u16f">
<bpmn:exclusiveGateway id="Gateway_1w9u16f" default="Flow_1qgke9w">
<bpmn:incoming>Flow_0g2wjhu</bpmn:incoming>
<bpmn:incoming>Flow_0ya87hl</bpmn:incoming>
<bpmn:outgoing>Flow_1qgke9w</bpmn:outgoing>
@ -73,28 +73,25 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="token">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1w9u16f_di" bpmnElement="Gateway_1w9u16f" isMarkerVisible="true">
<dc:Bounds x="1015" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1oyfku7_di" bpmnElement="First">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_13qpm6f_di" bpmnElement="Flow_13qpm6f">
<di:waypoint x="370" y="117" />
<di:waypoint x="465" y="117" />
<bpmndi:BPMNEdge id="Flow_039y4lk_di" bpmnElement="Flow_039y4lk">
<di:waypoint x="1240" y="117" />
<di:waypoint x="1322" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Gateway_0nr9vpb_di" bpmnElement="Gateway_0yirqzr" isMarkerVisible="true">
<dc:Bounds x="465" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_04bpvfu_di" bpmnElement="Flow_04bpvfu">
<di:waypoint x="515" y="117" />
<di:waypoint x="610" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="553" y="99" width="19" height="14" />
</bpmndi:BPMNLabel>
<bpmndi:BPMNEdge id="Flow_03vnrmv_di" bpmnElement="Flow_03vnrmv">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ahlz50_di" bpmnElement="Flow_0ahlz50">
<di:waypoint x="710" y="117" />
<di:waypoint x="840" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ya87hl_di" bpmnElement="Flow_0ya87hl">
<di:waypoint x="940" y="117" />
<di:waypoint x="1015" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1qgke9w_di" bpmnElement="Flow_1qgke9w">
<di:waypoint x="1065" y="117" />
<di:waypoint x="1140" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0g2wjhu_di" bpmnElement="Flow_0g2wjhu">
<di:waypoint x="490" y="142" />
@ -105,18 +102,29 @@
<dc:Bounds x="758" y="322" width="15" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1qgke9w_di" bpmnElement="Flow_1qgke9w">
<di:waypoint x="1065" y="117" />
<di:waypoint x="1140" y="117" />
<bpmndi:BPMNEdge id="Flow_04bpvfu_di" bpmnElement="Flow_04bpvfu">
<di:waypoint x="515" y="117" />
<di:waypoint x="610" y="117" />
<bpmndi:BPMNLabel>
<dc:Bounds x="553" y="99" width="19" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ya87hl_di" bpmnElement="Flow_0ya87hl">
<di:waypoint x="940" y="117" />
<di:waypoint x="1015" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0ahlz50_di" bpmnElement="Flow_0ahlz50">
<di:waypoint x="710" y="117" />
<di:waypoint x="840" y="117" />
<bpmndi:BPMNEdge id="Flow_13qpm6f_di" bpmnElement="Flow_13qpm6f">
<di:waypoint x="370" y="117" />
<di:waypoint x="465" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="179" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_1w9u16f_di" bpmnElement="Gateway_1w9u16f" isMarkerVisible="true">
<dc:Bounds x="1015" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_1oyfku7_di" bpmnElement="First">
<dc:Bounds x="270" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Gateway_0nr9vpb_di" bpmnElement="Gateway_0yirqzr" isMarkerVisible="true">
<dc:Bounds x="465" y="92" width="50" height="50" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_18dz45e_di" bpmnElement="FormA">
<dc:Bounds x="610" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
@ -126,17 +134,9 @@
<bpmndi:BPMNShape id="Activity_1byzp7w_di" bpmnElement="FormC">
<dc:Bounds x="1140" y="77" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_03vnrmv_di" bpmnElement="Flow_03vnrmv">
<di:waypoint x="215" y="117" />
<di:waypoint x="270" y="117" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="Event_0xfwzm8_di" bpmnElement="Event_0xfwzm8">
<dc:Bounds x="1322" y="99" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="Flow_039y4lk_di" bpmnElement="Flow_039y4lk">
<di:waypoint x="1240" y="117" />
<di:waypoint x="1322" y="117" />
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1oogn9j" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="3.7.3">
<bpmn:definitions xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:camunda="http://camunda.org/schema/1.0/bpmn" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" id="Definitions_1oogn9j" targetNamespace="http://bpmn.io/schema/bpmn" exporter="Camunda Modeler" exporterVersion="4.11.1">
<bpmn:process id="token_trial_parallel_simple" isExecutable="true">
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1w2tcdp</bpmn:outgoing>
@ -100,7 +100,7 @@
<bpmn:sequenceFlow id="SequenceFlow_09c4dnr" sourceRef="UserTask_0fd3nql" targetRef="ExclusiveGateway_1knbrs3" />
<bpmn:sequenceFlow id="SequenceFlow_0rwnquq" sourceRef="UserTask_1k9gxsc" targetRef="ExclusiveGateway_1knbrs3" />
<bpmn:sequenceFlow id="SequenceFlow_00fpfhi" sourceRef="ExclusiveGateway_1knbrs3" targetRef="Gateway_191l7i1" />
<bpmn:exclusiveGateway id="Gateway_191l7i1">
<bpmn:exclusiveGateway id="Gateway_191l7i1" default="Flow_1vtdwmy">
<bpmn:incoming>SequenceFlow_00fpfhi</bpmn:incoming>
<bpmn:incoming>Flow_0wycgzo</bpmn:incoming>
<bpmn:outgoing>Flow_1vtdwmy</bpmn:outgoing>
@ -126,6 +126,18 @@
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="token_trial_parallel_simple">
<bpmndi:BPMNEdge id="Flow_1vtdwmy_di" bpmnElement="Flow_1vtdwmy">
<di:waypoint x="985" y="247" />
<di:waypoint x="1062" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_00zjlx7_di" bpmnElement="Flow_00zjlx7">
<di:waypoint x="360" y="247" />
<di:waypoint x="455" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w2tcdp_di" bpmnElement="Flow_1w2tcdp">
<di:waypoint x="188" y="247" />
<di:waypoint x="260" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_0wycgzo_di" bpmnElement="Flow_0wycgzo">
<di:waypoint x="480" y="222" />
<di:waypoint x="480" y="100" />
@ -166,18 +178,12 @@
<di:waypoint x="600" y="190" />
<di:waypoint x="680" y="190" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1w2tcdp_di" bpmnElement="Flow_1w2tcdp">
<di:waypoint x="188" y="247" />
<di:waypoint x="260" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_00zjlx7_di" bpmnElement="Flow_00zjlx7">
<di:waypoint x="360" y="247" />
<di:waypoint x="455" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="Flow_1vtdwmy_di" bpmnElement="Flow_1vtdwmy">
<di:waypoint x="985" y="247" />
<di:waypoint x="1062" y="247" />
</bpmndi:BPMNEdge>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="229" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_09wp7av_di" bpmnElement="EndEvent_09wp7av">
<dc:Bounds x="1062" y="229" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="UserTask_0fd3nql_di" bpmnElement="UserTask_0fd3nql">
<dc:Bounds x="680" y="150" width="100" height="80" />
</bpmndi:BPMNShape>
@ -202,15 +208,9 @@
<dc:Bounds x="451" y="279" width="60" height="14" />
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">
<dc:Bounds x="152" y="229" width="36" height="36" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="Activity_0n0v1lt_di" bpmnElement="Activity_1ghr6kd">
<dc:Bounds x="260" y="207" width="100" height="80" />
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="EndEvent_09wp7av_di" bpmnElement="EndEvent_09wp7av">
<dc:Bounds x="1062" y="229" width="36" height="36" />
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>