<?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_Run" targetNamespace="http://bpmn.io/schema/bpmn">
  <bpmn:collaboration id="Collaboration_TriggerRun">
    <bpmn:participant id="Participant_Platform" name="觸發與 Run｜既有程式主線" processRef="Process_TriggerRun" />
  </bpmn:collaboration>
  <bpmn:process id="Process_TriggerRun" name="觸發與 Run｜既有程式主線" isExecutable="false">
    <bpmn:laneSet id="LaneSet_TriggerRun">
      <bpmn:lane id="Lane_Crystal" name="Crystal 管理平台">
        <bpmn:flowNodeRef>Activity_Create</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Finish</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Interrupted</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_MergeInterrupted</bpmn:flowNodeRef>
      </bpmn:lane>
      <bpmn:lane id="Lane_Run" name="Northstar 宿主＋Sentry 核心">
        <bpmn:flowNodeRef>Event_Start</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Entry</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_Accept</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_NotRun</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Init</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Login</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Order</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Cases</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Report</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Activity_Clean</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_End</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_InitError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_LoginError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Event_RunError</bpmn:flowNodeRef>
        <bpmn:flowNodeRef>Gateway_MergeClean</bpmn:flowNodeRef>
      </bpmn:lane>
    </bpmn:laneSet>
    <bpmn:startEvent id="Event_Start" name="排程到期或人工觸發">
      <bpmn:outgoing>Flow_StartToEntry</bpmn:outgoing>
    </bpmn:startEvent>
    <bpmn:sequenceFlow id="Flow_StartToEntry" sourceRef="Event_Start" targetRef="Activity_Entry" />
    <bpmn:serviceTask id="Activity_Entry" name="依入口檢核與建立 context">
      <bpmn:incoming>Flow_StartToEntry</bpmn:incoming>
      <bpmn:outgoing>Flow_EntryToAccept</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_EntryToAccept" sourceRef="Activity_Entry" targetRef="Gateway_Accept" />
    <bpmn:exclusiveGateway id="Gateway_Accept" name="入口是否啟動執行?" default="Flow_AcceptToNotRun">
      <bpmn:incoming>Flow_EntryToAccept</bpmn:incoming>
      <bpmn:outgoing>Flow_AcceptToCreate</bpmn:outgoing>
      <bpmn:outgoing>Flow_AcceptToNotRun</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_AcceptToCreate" name="確實啟動" sourceRef="Gateway_Accept" targetRef="Activity_Create">
      <bpmn:conditionExpression xsi:type="bpmn:tFormalExpression">executionStarted</bpmn:conditionExpression>
    </bpmn:sequenceFlow>
    <bpmn:sequenceFlow id="Flow_AcceptToNotRun" name="未啟動" sourceRef="Gateway_Accept" targetRef="Event_NotRun" />
    <bpmn:endEvent id="Event_NotRun" name="略過或拒絕；未啟動">
      <bpmn:incoming>Flow_AcceptToNotRun</bpmn:incoming>
    </bpmn:endEvent>
    <bpmn:serviceTask id="Activity_Create" name="建立 RUNNING 執行紀錄">
      <bpmn:incoming>Flow_AcceptToCreate</bpmn:incoming>
      <bpmn:outgoing>Flow_CreateToInit</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_CreateToInit" sourceRef="Activity_Create" targetRef="Activity_Init" />
    <bpmn:serviceTask id="Activity_Init" name="依環境設定初始化資料">
      <bpmn:incoming>Flow_CreateToInit</bpmn:incoming>
      <bpmn:outgoing>Flow_InitToLogin</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_InitToLogin" sourceRef="Activity_Init" targetRef="Activity_Login" />
    <bpmn:boundaryEvent id="Event_InitError" name="向外傳遞初始化例外" attachedToRef="Activity_Init">
      <bpmn:outgoing>Flow_InitErrorToMergeInterrupted</bpmn:outgoing>
      <bpmn:errorEventDefinition errorRef="Error_Error" />
    </bpmn:boundaryEvent>
    <bpmn:sequenceFlow id="Flow_InitErrorToMergeInterrupted" sourceRef="Event_InitError" targetRef="Gateway_MergeInterrupted" />
    <bpmn:serviceTask id="Activity_Login" name="依設定登入並設定變數">
      <bpmn:incoming>Flow_InitToLogin</bpmn:incoming>
      <bpmn:outgoing>Flow_LoginToOrder</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_LoginToOrder" sourceRef="Activity_Login" targetRef="Activity_Order" />
    <bpmn:boundaryEvent id="Event_LoginError" name="登入例外" attachedToRef="Activity_Login">
      <bpmn:outgoing>Flow_LoginErrorToMergeInterrupted</bpmn:outgoing>
      <bpmn:errorEventDefinition errorRef="Error_Error_2" />
    </bpmn:boundaryEvent>
    <bpmn:sequenceFlow id="Flow_LoginErrorToMergeInterrupted" sourceRef="Event_LoginError" targetRef="Gateway_MergeInterrupted" />
    <bpmn:serviceTask id="Activity_Order" name="展開選案與群組 hooks 順序">
      <bpmn:incoming>Flow_LoginToOrder</bpmn:incoming>
      <bpmn:outgoing>Flow_OrderToCases</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_OrderToCases" sourceRef="Activity_Order" targetRef="Activity_Cases" />
    <bpmn:callActivity id="Activity_Cases" name="逐一執行 Case 與 Step" calledElement="Process_CaseStep">
      <bpmn:incoming>Flow_OrderToCases</bpmn:incoming>
      <bpmn:outgoing>Flow_CasesToFinish</bpmn:outgoing>
      <bpmn:multiInstanceLoopCharacteristics isSequential="true" />
    </bpmn:callActivity>
    <bpmn:sequenceFlow id="Flow_CasesToFinish" sourceRef="Activity_Cases" targetRef="Activity_Finish" />
    <bpmn:boundaryEvent id="Event_RunError" name="Run 層收到例外" attachedToRef="Activity_Cases">
      <bpmn:outgoing>Flow_RunErrorToMergeInterrupted</bpmn:outgoing>
      <bpmn:errorEventDefinition errorRef="Error_Run" />
    </bpmn:boundaryEvent>
    <bpmn:sequenceFlow id="Flow_RunErrorToMergeInterrupted" sourceRef="Event_RunError" targetRef="Gateway_MergeInterrupted" />
    <bpmn:serviceTask id="Activity_Finish" name="更新 Run 為 FINISHED">
      <bpmn:incoming>Flow_CasesToFinish</bpmn:incoming>
      <bpmn:outgoing>Flow_FinishToReport</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_FinishToReport" sourceRef="Activity_Finish" targetRef="Activity_Report" />
    <bpmn:callActivity id="Activity_Report" name="處理產物與選配報告" calledElement="Process_ResultsReport">
      <bpmn:incoming>Flow_FinishToReport</bpmn:incoming>
      <bpmn:outgoing>Flow_ReportToMergeClean</bpmn:outgoing>
    </bpmn:callActivity>
    <bpmn:sequenceFlow id="Flow_ReportToMergeClean" sourceRef="Activity_Report" targetRef="Gateway_MergeClean" />
    <bpmn:serviceTask id="Activity_Interrupted" name="記錄 INTERRUPTED 並拋錯">
      <bpmn:incoming>Flow_MergeInterruptedToInterrupted</bpmn:incoming>
      <bpmn:outgoing>Flow_InterruptedToMergeClean</bpmn:outgoing>
    </bpmn:serviceTask>
    <bpmn:sequenceFlow id="Flow_InterruptedToMergeClean" sourceRef="Activity_Interrupted" targetRef="Gateway_MergeClean" />
    <bpmn:serviceTask id="Activity_Clean" name="清除 context 與 Trigger cache">
      <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_ReportToMergeClean</bpmn:incoming>
      <bpmn:incoming>Flow_InterruptedToMergeClean</bpmn:incoming>
      <bpmn:outgoing>Flow_MergeCleanToClean</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_MergeCleanToClean" sourceRef="Gateway_MergeClean" targetRef="Activity_Clean" />
    <bpmn:exclusiveGateway id="Gateway_MergeInterrupted">
      <bpmn:incoming>Flow_InitErrorToMergeInterrupted</bpmn:incoming>
      <bpmn:incoming>Flow_LoginErrorToMergeInterrupted</bpmn:incoming>
      <bpmn:incoming>Flow_RunErrorToMergeInterrupted</bpmn:incoming>
      <bpmn:outgoing>Flow_MergeInterruptedToInterrupted</bpmn:outgoing>
    </bpmn:exclusiveGateway>
    <bpmn:sequenceFlow id="Flow_MergeInterruptedToInterrupted" sourceRef="Gateway_MergeInterrupted" targetRef="Activity_Interrupted" />
  </bpmn:process>
  <bpmn:error id="Error_Error" name="向外傳遞初始化例外" />
  <bpmn:error id="Error_Error_2" name="登入例外" />
  <bpmn:error id="Error_Run" name="Run 層收到例外" />
  <bpmndi:BPMNDiagram id="BPMNDiagram_Collaboration_TriggerRun">
    <bpmndi:BPMNPlane id="BPMNPlane_Collaboration_TriggerRun" bpmnElement="Collaboration_TriggerRun">
      <bpmndi:BPMNShape id="BPMNShape_Participant_Platform" bpmnElement="Participant_Platform" isHorizontal="true">
        <dc:Bounds x="80" y="80" width="1928" height="560" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Lane_Crystal" bpmnElement="Lane_Crystal" isHorizontal="true">
        <dc:Bounds x="110" y="80" width="1898" height="280" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Lane_Run" bpmnElement="Lane_Run" isHorizontal="true">
        <dc:Bounds x="110" y="360" width="1898" height="280" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_Start" bpmnElement="Event_Start">
        <dc:Bounds x="170" y="417" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="151" y="459" width="75" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Entry" bpmnElement="Activity_Entry">
        <dc:Bounds x="266" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_Accept" bpmnElement="Gateway_Accept" isMarkerVisible="true">
        <dc:Bounds x="426" y="410" width="50" height="50" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="414" y="390" width="75" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_NotRun" bpmnElement="Event_NotRun">
        <dc:Bounds x="568" y="554" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="549" y="596" width="75" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Create" bpmnElement="Activity_Create">
        <dc:Bounds x="536" y="110" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Init" bpmnElement="Activity_Init">
        <dc:Bounds x="696" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_InitError" bpmnElement="Event_InitError">
        <dc:Bounds x="753" y="457" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="793" y="477" width="75" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Login" bpmnElement="Activity_Login">
        <dc:Bounds x="856" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_LoginError" bpmnElement="Event_LoginError">
        <dc:Bounds x="913" y="457" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="953" y="477" width="40" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Order" bpmnElement="Activity_Order">
        <dc:Bounds x="1016" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Cases" bpmnElement="Activity_Cases">
        <dc:Bounds x="1176" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_RunError" bpmnElement="Event_RunError">
        <dc:Bounds x="1233" y="457" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1273" y="477" width="75" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Finish" bpmnElement="Activity_Finish">
        <dc:Bounds x="1336" y="110" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Report" bpmnElement="Activity_Report">
        <dc:Bounds x="1496" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Interrupted" bpmnElement="Activity_Interrupted">
        <dc:Bounds x="1496" y="250" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Activity_Clean" bpmnElement="Activity_Clean">
        <dc:Bounds x="1766" y="395" width="100" height="80" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Event_End" bpmnElement="Event_End">
        <dc:Bounds x="1926" y="417" width="36" height="36" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="1910" y="459" width="68" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_MergeClean" bpmnElement="Gateway_MergeClean" isMarkerVisible="true">
        <dc:Bounds x="1656" y="410" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNShape id="BPMNShape_Gateway_MergeInterrupted" bpmnElement="Gateway_MergeInterrupted" isMarkerVisible="true">
        <dc:Bounds x="1361" y="265" width="50" height="50" />
      </bpmndi:BPMNShape>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_StartToEntry" bpmnElement="Flow_StartToEntry">
        <di:waypoint x="206" y="435" />
        <di:waypoint x="266" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_EntryToAccept" bpmnElement="Flow_EntryToAccept">
        <di:waypoint x="366" y="435" />
        <di:waypoint x="426" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_AcceptToCreate" bpmnElement="Flow_AcceptToCreate">
        <di:waypoint x="476" y="435" />
        <di:waypoint x="561" y="435" />
        <di:waypoint x="561" y="190" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="484" y="417" width="40" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_AcceptToNotRun" bpmnElement="Flow_AcceptToNotRun">
        <di:waypoint x="451" y="460" />
        <di:waypoint x="451" y="572" />
        <di:waypoint x="568" y="572" />
        <bpmndi:BPMNLabel>
          <dc:Bounds x="459" y="554" width="33" height="14" />
        </bpmndi:BPMNLabel>
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CreateToInit" bpmnElement="Flow_CreateToInit">
        <di:waypoint x="586" y="190" />
        <di:waypoint x="586" y="435" />
        <di:waypoint x="696" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_InitToLogin" bpmnElement="Flow_InitToLogin">
        <di:waypoint x="796" y="435" />
        <di:waypoint x="856" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_InitErrorToMergeInterrupted" bpmnElement="Flow_InitErrorToMergeInterrupted">
        <di:waypoint x="771" y="493" />
        <di:waypoint x="771" y="538" />
        <di:waypoint x="1386" y="538" />
        <di:waypoint x="1386" y="315" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_LoginToOrder" bpmnElement="Flow_LoginToOrder">
        <di:waypoint x="956" y="435" />
        <di:waypoint x="1016" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_LoginErrorToMergeInterrupted" bpmnElement="Flow_LoginErrorToMergeInterrupted">
        <di:waypoint x="931" y="493" />
        <di:waypoint x="931" y="523" />
        <di:waypoint x="1386" y="523" />
        <di:waypoint x="1386" y="315" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_OrderToCases" bpmnElement="Flow_OrderToCases">
        <di:waypoint x="1116" y="435" />
        <di:waypoint x="1176" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CasesToFinish" bpmnElement="Flow_CasesToFinish">
        <di:waypoint x="1276" y="435" />
        <di:waypoint x="1361" y="435" />
        <di:waypoint x="1361" y="190" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_RunErrorToMergeInterrupted" bpmnElement="Flow_RunErrorToMergeInterrupted">
        <di:waypoint x="1251" y="493" />
        <di:waypoint x="1251" y="508" />
        <di:waypoint x="1386" y="508" />
        <di:waypoint x="1386" y="315" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_FinishToReport" bpmnElement="Flow_FinishToReport">
        <di:waypoint x="1436" y="150" />
        <di:waypoint x="1466" y="150" />
        <di:waypoint x="1466" y="435" />
        <di:waypoint x="1496" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_ReportToMergeClean" bpmnElement="Flow_ReportToMergeClean">
        <di:waypoint x="1596" y="435" />
        <di:waypoint x="1656" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_InterruptedToMergeClean" bpmnElement="Flow_InterruptedToMergeClean">
        <di:waypoint x="1596" y="290" />
        <di:waypoint x="1626" y="290" />
        <di:waypoint x="1626" y="435" />
        <di:waypoint x="1656" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_CleanToEnd" bpmnElement="Flow_CleanToEnd">
        <di:waypoint x="1866" y="435" />
        <di:waypoint x="1926" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_MergeCleanToClean" bpmnElement="Flow_MergeCleanToClean">
        <di:waypoint x="1706" y="435" />
        <di:waypoint x="1766" y="435" />
      </bpmndi:BPMNEdge>
      <bpmndi:BPMNEdge id="BPMNEdge_Flow_MergeInterruptedToInterrupted" bpmnElement="Flow_MergeInterruptedToInterrupted">
        <di:waypoint x="1411" y="290" />
        <di:waypoint x="1496" y="290" />
      </bpmndi:BPMNEdge>
    </bpmndi:BPMNPlane>
  </bpmndi:BPMNDiagram>
</bpmn:definitions>
