<?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:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" id="Definitions_CaseStep" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:collaboration id="Collaboration_CaseStep">
    <bpmn:participant id="Participant_Platform" name="Case 與 Step｜既有相依及結果語意" processRef="Process_CaseStep" />
    <bpmn:participant id="Participant_Target" name="受測系統／測試資料庫（黑箱）" />
    <bpmn:messageFlow id="Flow_ExecuteToTarget" name="依型別發出操作" sourceRef="Activity_Execute" targetRef="Participant_Target" />
    <bpmn:messageFlow id="Flow_TargetToExecute" name="回應或查詢結果" sourceRef="Participant_Target" targetRef="Activity_Execute" />
  </bpmn:collaboration>
  <bpmn:process id="Process_CaseStep" name="Case 與 Step｜既有相依及結果語意" isExecutable="false">
    <bpmn:laneSet id="LaneSet_CaseStep">
      <bpmn:lane id="Lane_Run" name="Northstar＋Sentry 執行核心">
        <bpmn:flowNodeRef>Event_Start</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Depends</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_Depends</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Sort</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_Next</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Execute</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Clean</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_End</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_StepError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_MergeClean</bpmn:flowNodeRef>
      </bpmn:lane>
      <bpmn:lane id="Lane_Crystal" name="Crystal 結果保存">
        <bpmn:flowNodeRef>Activity_Create</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Skip</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_CreateStep</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_SaveStep</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_StepError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_CaseError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_CaseResult</bpmn:flowNodeRef>
      </bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="Event_Start" name="一個 Case 已選定">
      <bpmn:outgoing>Flow_StartToCreate</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_StartToCreate" sourceRef="Event_Start" targetRef="Activity_Create" />
    <bpmn:serviceTask id="Activity_Create" name="建立執行中案例紀錄">
      <bpmn:incoming>Flow_StartToCreate</bpmn:incoming>
      <bpmn:outgoing>Flow_CreateToDepends</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CreateToDepends" sourceRef="Activity_Create" targetRef="Activity_Depends" />
    <bpmn:serviceTask id="Activity_Depends" name="取得相依案例結果">
      <bpmn:incoming>Flow_CreateToDepends</bpmn:incoming>
      <bpmn:outgoing>Flow_DependsToDepends</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_DependsToDepends" sourceRef="Activity_Depends" targetRef="Gateway_Depends" />
    <bpmn:exclusiveGateway id="Gateway_Depends" name="查得相依 FAILED?" default="Flow_DependsToSort">
      <bpmn:incoming>Flow_DependsToDepends</bpmn:incoming>
      <bpmn:outgoing>Flow_DependsToSkip</bpmn:outgoing>
      <bpmn:outgoing>Flow_DependsToSort</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_DependsToSkip" name="相依為 FAILED" sourceRef="Gateway_Depends" targetRef="Activity_Skip">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">dependentFailed</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_DependsToSort" name="未查得 FAILED" sourceRef="Gateway_Depends" targetRef="Activity_Sort" />
    <bpmn:serviceTask id="Activity_Skip" name="記錄相依失敗略過">
      <bpmn:incoming>Flow_DependsToSkip</bpmn:incoming>
      <bpmn:outgoing>Flow_SkipToMergeClean</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_SkipToMergeClean" sourceRef="Activity_Skip" targetRef="Gateway_MergeClean" />
    <bpmn:serviceTask id="Activity_Sort" name="依 stepOrder 排列步驟">
      <bpmn:incoming>Flow_DependsToSort</bpmn:incoming>
      <bpmn:outgoing>Flow_SortToNext</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_SortToNext" sourceRef="Activity_Sort" targetRef="Gateway_Next" />
    <bpmn:exclusiveGateway id="Gateway_Next" name="尚有下一個 Step?" default="Flow_NextToCaseResult">
      <bpmn:incoming>Flow_SortToNext</bpmn:incoming>
      <bpmn:incoming>Flow_SaveStepToNext</bpmn:incoming>
      <bpmn:outgoing>Flow_NextToCreateStep</bpmn:outgoing>
      <bpmn:outgoing>Flow_NextToCaseResult</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_NextToCreateStep" name="有" sourceRef="Gateway_Next" targetRef="Activity_CreateStep">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">hasNextStep</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_NextToCaseResult" name="無" sourceRef="Gateway_Next" targetRef="Activity_CaseResult" />
    <bpmn:serviceTask id="Activity_CreateStep" name="建立 RunStep 紀錄">
      <bpmn:incoming>Flow_NextToCreateStep</bpmn:incoming>
      <bpmn:outgoing>Flow_CreateStepToExecute</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CreateStepToExecute" sourceRef="Activity_CreateStep" targetRef="Activity_Execute" />
    <bpmn:serviceTask id="Activity_Execute" name="執行操作與已配置斷言">
      <bpmn:incoming>Flow_CreateStepToExecute</bpmn:incoming>
      <bpmn:outgoing>Flow_ExecuteToSaveStep</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_ExecuteToSaveStep" sourceRef="Activity_Execute" targetRef="Activity_SaveStep" />
    <bpmn:boundaryEvent id="Event_StepError" name="一般例外向外拋出" attachedToRef="Activity_Execute">
      <bpmn:outgoing>Flow_StepErrorToStepError</bpmn:outgoing>
      <bpmn:errorEventDefinition errorRef="Error_SQL" />
    </bpmn:boundaryEvent>
    <bpmn:sequenceFlow id="Flow_StepErrorToStepError" sourceRef="Event_StepError" targetRef="Activity_StepError" />
    <bpmn:serviceTask id="Activity_SaveStep" name="保存 Step 結果並累計">
      <bpmn:incoming>Flow_ExecuteToSaveStep</bpmn:incoming>
      <bpmn:outgoing>Flow_SaveStepToNext</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_SaveStepToNext" sourceRef="Activity_SaveStep" targetRef="Gateway_Next" />
    <bpmn:serviceTask id="Activity_StepError" name="保存步驟錯誤並拋出">
      <bpmn:incoming>Flow_StepErrorToStepError</bpmn:incoming>
      <bpmn:outgoing>Flow_StepErrorToCaseError</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_StepErrorToCaseError" sourceRef="Activity_StepError" targetRef="Activity_CaseError" />
    <bpmn:serviceTask id="Activity_CaseError" name="保存案例錯誤">
      <bpmn:incoming>Flow_StepErrorToCaseError</bpmn:incoming>
      <bpmn:outgoing>Flow_CaseErrorToMergeClean</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CaseErrorToMergeClean" sourceRef="Activity_CaseError" targetRef="Gateway_MergeClean" />
    <bpmn:serviceTask id="Activity_CaseResult" name="依未通過數寫 Case 結果">
      <bpmn:incoming>Flow_NextToCaseResult</bpmn:incoming>
      <bpmn:outgoing>Flow_CaseResultToMergeClean</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CaseResultToMergeClean" sourceRef="Activity_CaseResult" targetRef="Gateway_MergeClean" />
    <bpmn:serviceTask id="Activity_Clean" name="清除 CASE 範圍變數">
      <bpmn:incoming>Flow_MergeCleanToClean</bpmn:incoming>
      <bpmn:outgoing>Flow_CleanToEnd</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CleanToEnd" sourceRef="Activity_Clean" targetRef="Event_End" />
    <bpmn:endEvent id="Event_End" name="返回群組執行流程">
      <bpmn:incoming>Flow_CleanToEnd</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:exclusiveGateway id="Gateway_MergeClean">
      <bpmn:incoming>Flow_SkipToMergeClean</bpmn:incoming>
      <bpmn:incoming>Flow_CaseErrorToMergeClean</bpmn:incoming>
      <bpmn:incoming>Flow_CaseResultToMergeClean</bpmn:incoming>
      <bpmn:outgoing>Flow_MergeCleanToClean</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_MergeCleanToClean" sourceRef="Gateway_MergeClean" targetRef="Activity_Clean" />
  </bpmn:process>
  <bpmn:error id="Error_SQL" name="非 SQL 比對例外" />
  <bpmndi:BPMNDiagram id="BPMNDiagram_Collaboration_CaseStep">
    <bpmndi:BPMNPlane id="BPMNPlane_Collaboration_CaseStep" bpmnElement="Collaboration_CaseStep">
      <bpmndi:BPMNShape id="BPMNShape_Participant_Platform" bpmnElement="Participant_Platform" isHorizontal="true">
        <dc:Bounds x="80" y="80" width="1916" height="860" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Lane_Run" bpmnElement="Lane_Run" isHorizontal="true">
        <dc:Bounds x="110" y="80" width="1886" height="300" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Lane_Crystal" bpmnElement="Lane_Crystal" isHorizontal="true">
        <dc:Bounds x="110" y="380" width="1886" height="560" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_Start" bpmnElement="Event_Start">
        <dc:Bounds x="170" y="132" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="144" y="112" width="89" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Create" bpmnElement="Activity_Create">
        <dc:Bounds x="266" y="410" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Depends" bpmnElement="Activity_Depends">
        <dc:Bounds x="426" y="110" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_Depends" bpmnElement="Gateway_Depends" isMarkerVisible="true">
        <dc:Bounds x="586" y="125" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="581" y="91" width="61" height="28" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Skip" bpmnElement="Activity_Skip">
        <dc:Bounds x="734" y="410" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Sort" bpmnElement="Activity_Sort">
        <dc:Bounds x="734" y="110" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_Next" bpmnElement="Gateway_Next" isMarkerVisible="true">
        <dc:Bounds x="894" y="125" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="855" y="95" width="47" height="28" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_CreateStep" bpmnElement="Activity_CreateStep">
        <dc:Bounds x="1004" y="550" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Execute" bpmnElement="Activity_Execute">
        <dc:Bounds x="1164" y="251" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_StepError" bpmnElement="Event_StepError">
        <dc:Bounds x="1221" y="313" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1261" y="333" width="68" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_SaveStep" bpmnElement="Activity_SaveStep">
        <dc:Bounds x="1324" y="550" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_StepError" bpmnElement="Activity_StepError">
        <dc:Bounds x="1324" y="690" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_CaseError" bpmnElement="Activity_CaseError">
        <dc:Bounds x="1484" y="690" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_CaseResult" bpmnElement="Activity_CaseResult">
        <dc:Bounds x="1004" y="830" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Clean" bpmnElement="Activity_Clean">
        <dc:Bounds x="1754" y="110" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_End" bpmnElement="Event_End">
        <dc:Bounds x="1914" y="132" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1898" y="174" width="68" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_MergeClean" bpmnElement="Gateway_MergeClean" isMarkerVisible="true">
        <dc:Bounds x="1644" y="125" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_StartToCreate" bpmnElement="Flow_StartToCreate">
        <di:waypoint x="188" y="168" />
        <di:waypoint x="188" y="450" />
        <di:waypoint x="266" y="450" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CreateToDepends" bpmnElement="Flow_CreateToDepends">
        <di:waypoint x="366" y="450" />
        <di:waypoint x="476" y="450" />
        <di:waypoint x="476" y="190" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_DependsToDepends" bpmnElement="Flow_DependsToDepends">
        <di:waypoint x="526" y="150" />
        <di:waypoint x="586" y="150" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_DependsToSkip" bpmnElement="Flow_DependsToSkip">
        <di:waypoint x="611" y="175" />
        <di:waypoint x="611" y="450" />
        <di:waypoint x="734" y="450" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="619" y="432" width="82" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_DependsToSort" bpmnElement="Flow_DependsToSort">
        <di:waypoint x="636" y="150" />
        <di:waypoint x="734" y="150" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="644" y="132" width="82" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_SkipToMergeClean" bpmnElement="Flow_SkipToMergeClean">
        <di:waypoint x="834" y="450" />
        <di:waypoint x="1669" y="450" />
        <di:waypoint x="1669" y="175" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_SortToNext" bpmnElement="Flow_SortToNext">
        <di:waypoint x="834" y="150" />
        <di:waypoint x="894" y="150" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_NextToCreateStep" bpmnElement="Flow_NextToCreateStep">
        <di:waypoint x="919" y="175" />
        <di:waypoint x="919" y="590" />
        <di:waypoint x="1004" y="590" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="927" y="572" width="20" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_NextToCaseResult" bpmnElement="Flow_NextToCaseResult">
        <di:waypoint x="919" y="175" />
        <di:waypoint x="919" y="870" />
        <di:waypoint x="1004" y="870" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="927" y="852" width="20" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CreateStepToExecute" bpmnElement="Flow_CreateStepToExecute">
        <di:waypoint x="1104" y="590" />
        <di:waypoint x="1172" y="590" />
        <di:waypoint x="1172" y="331" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_ExecuteToSaveStep" bpmnElement="Flow_ExecuteToSaveStep">
        <di:waypoint x="1184" y="331" />
        <di:waypoint x="1184" y="590" />
        <di:waypoint x="1324" y="590" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_StepErrorToStepError" bpmnElement="Flow_StepErrorToStepError">
        <di:waypoint x="1239" y="349" />
        <di:waypoint x="1239" y="730" />
        <di:waypoint x="1324" y="730" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_SaveStepToNext" bpmnElement="Flow_SaveStepToNext">
        <di:waypoint x="1374" y="550" />
        <di:waypoint x="1374" y="95" />
        <di:waypoint x="919" y="95" />
        <di:waypoint x="919" y="125" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_StepErrorToCaseError" bpmnElement="Flow_StepErrorToCaseError">
        <di:waypoint x="1424" y="730" />
        <di:waypoint x="1484" y="730" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CaseErrorToMergeClean" bpmnElement="Flow_CaseErrorToMergeClean">
        <di:waypoint x="1584" y="730" />
        <di:waypoint x="1669" y="730" />
        <di:waypoint x="1669" y="175" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CaseResultToMergeClean" bpmnElement="Flow_CaseResultToMergeClean">
        <di:waypoint x="1104" y="870" />
        <di:waypoint x="1669" y="870" />
        <di:waypoint x="1669" y="175" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CleanToEnd" bpmnElement="Flow_CleanToEnd">
        <di:waypoint x="1854" y="150" />
        <di:waypoint x="1914" y="150" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_MergeCleanToClean" bpmnElement="Flow_MergeCleanToClean">
        <di:waypoint x="1694" y="150" />
        <di:waypoint x="1754" y="150" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNShape id="BPMNShape_Participant_Target" bpmnElement="Participant_Target" isHorizontal="true">
        <dc:Bounds x="80" y="1020" width="1916" height="60" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_ExecuteToTarget" bpmnElement="Flow_ExecuteToTarget">
        <di:waypoint x="1214" y="331" />
        <di:waypoint x="1214" y="1020" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1220" y="973" width="53" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_TargetToExecute" bpmnElement="Flow_TargetToExecute">
        <di:waypoint x="1038" y="1020" />
        <di:waypoint x="1038" y="965" />
        <di:waypoint x="1134" y="965" />
        <di:waypoint x="1134" y="236" />
        <di:waypoint x="1279" y="236" />
        <di:waypoint x="1279" y="291" />
        <di:waypoint x="1264" y="291" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1046" y="947" width="61" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>
