<?xml version="1.0" encoding="UTF-8"?>
<definitions namespace="https://dsntk.io"
name="non-compliant-test-0019"
id="_7b7b45dd-41c3-4461-8157-68d7b90de6a8"
xmlns="https://www.omg.org/spec/DMN/20191111/MODEL/">
<itemDefinition id="_tFlight" name="tFlight">
<itemComponent id="_tFlight_Flight" name="Flight Number">
<typeRef>string</typeRef>
</itemComponent>
<itemComponent id="_tFlight_From" name="From">
<typeRef>string</typeRef>
</itemComponent>
<itemComponent id="_tFlight_To" name="To">
<typeRef>string</typeRef>
</itemComponent>
<itemComponent id="_tFlight_Dep" name="Departure">
<typeRef>dateTime</typeRef>
</itemComponent>
<itemComponent id="_tFlight_Arr" name="Arrival">
<typeRef>dateTime</typeRef>
</itemComponent>
<itemComponent id="_tFlight_Capacity" name="Capacity">
<typeRef>number</typeRef>
</itemComponent>
<itemComponent id="_tFlight_Status" name="Status">
<typeRef>string</typeRef>
</itemComponent>
</itemDefinition>
<itemDefinition id="_tFlightTable" isCollection="true" name="tFlightTable">
<typeRef>tFlight</typeRef>
</itemDefinition>
<itemDefinition id="_tPassenger" name="tPassenger">
<itemComponent id="_tPassenger_Name" name="Name">
<typeRef>string</typeRef>
</itemComponent>
<itemComponent id="_tPassenger_Status" name="Status">
<typeRef>string</typeRef>
</itemComponent>
<itemComponent id="_tPassenger_Miles" name="Miles">
<typeRef>number</typeRef>
</itemComponent>
<itemComponent id="_tPassenger_Flight" name="Flight Number">
<typeRef>string</typeRef>
</itemComponent>
</itemDefinition>
<itemDefinition id="_tPassengerTable" isCollection="true" name="tPassengerTable">
<typeRef>tPassenger</typeRef>
</itemDefinition>
<itemDefinition id="_tFlightNumberList" isCollection="true" name="tFlightNumberList">
<typeRef>string</typeRef>
</itemDefinition>
<inputData id="i_Flight_List" name="Flight List">
<variable name="Flight List" typeRef="tFlightTable"/>
</inputData>
<inputData id="i_Passenger_List" name="Passenger List">
<variable name="Passenger List" typeRef="tPassengerTable"/>
</inputData>
<decision name="Prioritized Waiting List" id="d_PrioritizedWaitingList">
<variable name="Prioritized Waiting List" typeRef="tPassengerTable"/>
<informationRequirement>
<requiredInput href="#i_Passenger_List"/>
</informationRequirement>
<informationRequirement>
<requiredInput href="#i_Flight_List"/>
</informationRequirement>
<knowledgeRequirement>
<requiredKnowledge href="#b_PassengerPriority"/>
</knowledgeRequirement>
<context>
<contextEntry>
<variable name="Cancelled Flights" typeRef="tFlightNumberList"/>
<literalExpression>
<text>Flight List[Status = "cancelled"].Flight Number</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Waiting List" typeRef="tPassengerTable"/>
<literalExpression>
<text>Passenger List[list contains(Cancelled Flights, Flight Number)]</text>
</literalExpression>
</contextEntry>
<contextEntry>
<literalExpression>
<text>sort(Waiting List, passenger priority)</text>
</literalExpression>
</contextEntry>
</context>
</decision>
<decision name="Rebooked Passengers" id="d_RebookedPassengers">
<variable name="Rebooked Passengers" typeRef="tPassengerTable"/>
<informationRequirement>
<requiredDecision href="#d_PrioritizedWaitingList"/>
</informationRequirement>
<informationRequirement>
<requiredInput href="#i_Flight_List"/>
</informationRequirement>
<knowledgeRequirement>
<requiredKnowledge href="#b_ReassignNextPassenger"/>
</knowledgeRequirement>
<invocation>
<literalExpression>
<text>reassign next passenger</text>
</literalExpression>
<binding>
<parameter name="Waiting List"/>
<literalExpression>
<text>Prioritized Waiting List</text>
</literalExpression>
</binding>
<binding>
<parameter name="Reassigned Passengers List"/>
<literalExpression>
<text>[]</text>
</literalExpression>
</binding>
<binding>
<parameter name="Flights"/>
<literalExpression>
<text>Flight List</text>
</literalExpression>
</binding>
</invocation>
</decision>
<businessKnowledgeModel id="b_PassengerPriority" name="passenger priority">
<variable name="passenger priority" typeRef="boolean"/>
<encapsulatedLogic>
<formalParameter name="Passenger1" typeRef="tPassenger"/>
<formalParameter name="Passenger2" typeRef="tPassenger"/>
<decisionTable hitPolicy="UNIQUE">
<input id="b_Passenger_Priority_dt_i_P1_Status" label="Passenger1.Status">
<inputExpression typeRef="string">
<text>Passenger1.Status</text>
</inputExpression>
<inputValues>
<text>"gold", "silver", "bronze"</text>
</inputValues>
</input>
<input id="b_Passenger_Priority_dt_i_P2_Status" label="Passenger2.Status">
<inputExpression typeRef="string">
<text>Passenger2.Status</text>
</inputExpression>
<inputValues>
<text>"gold", "silver", "bronze"</text>
</inputValues>
</input>
<input id="b_Passenger_Priority_dt_i_P1_Miles" label="Passenger1.Miles">
<inputExpression typeRef="number">
<text>Passenger1.Miles</text>
</inputExpression>
</input>
<output id="b_Status_Priority_dt_o" label="Passenger1 has priority">
<outputValues>
<text>true, false</text>
</outputValues>
<defaultOutputEntry>
<text>false</text>
</defaultOutputEntry>
</output>
<rule id="b_Passenger_Priority_dt_r1">
<inputEntry id="b_Passenger_Priority_dt_r1_i1">
<text>"gold"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r1_i2">
<text>"gold"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r1_i3">
<text>>= Passenger2.Miles</text>
</inputEntry>
<outputEntry id="b_Passenger_Priority_dt_r1_o1">
<text>true</text>
</outputEntry>
</rule>
<rule id="b_Passenger_Priority_dt_r2">
<inputEntry id="b_Passenger_Priority_dt_r2_i1">
<text>"gold"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r2_i2">
<text>"silver","bronze"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r2_i3">
<text>-</text>
</inputEntry>
<outputEntry id="b_Passenger_Priority_dt_r2_o1">
<text>true</text>
</outputEntry>
</rule>
<rule id="b_Passenger_Priority_dt_r3">
<inputEntry id="b_Passenger_Priority_dt_r3_i1">
<text>"silver"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r3_i2">
<text>"silver"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r3_i3">
<text>>= Passenger2.Miles</text>
</inputEntry>
<outputEntry id="b_Passenger_Priority_dt_r3_o1">
<text>true</text>
</outputEntry>
</rule>
<rule id="b_Passenger_Priority_dt_r4">
<inputEntry id="b_Passenger_Priority_dt_r4_i1">
<text>"silver"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r4_i2">
<text>"bronze"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r4_i3">
<text>-</text>
</inputEntry>
<outputEntry id="b_Passenger_Priority_dt_r4_o1">
<text>true</text>
</outputEntry>
</rule>
<rule id="b_Passenger_Priority_dt_r5">
<inputEntry id="b_Passenger_Priority_dt_r5_i1">
<text>"bronze"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r5_i2">
<text>"bronze"</text>
</inputEntry>
<inputEntry id="b_Passenger_Priority_dt_r5_i3">
<text>>= Passenger2.Miles</text>
</inputEntry>
<outputEntry id="b_Passenger_Priority_dt_r5_o1">
<text>true</text>
</outputEntry>
</rule>
</decisionTable>
</encapsulatedLogic>
</businessKnowledgeModel>
<businessKnowledgeModel id="b_ReassignNextPassenger" name="reassign next passenger">
<variable name="reassign next passenger" typeRef="tPassengerTable"/>
<encapsulatedLogic>
<formalParameter name="Waiting List" typeRef="tPassengerTable"/>
<formalParameter name="Reassigned Passengers List" typeRef="tPassengerTable"/>
<formalParameter name="Flights" typeRef="tFlightTable"/>
<context>
<contextEntry>
<variable name="Next Passenger" typeRef="tPassenger"/>
<literalExpression>
<text>Waiting List[1]</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Original Flight" typeRef="tFlight"/>
<literalExpression>
<text>Flights[Flight Number = Next Passenger.Flight Number][1]</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Best Alternate Flight" typeRef="tFlight"/>
<literalExpression>
<text>
Flights[
From = Original Flight.From
and
To = Original Flight.To
and
Departure > Original Flight.Departure
and
Status = "scheduled"
and
has capacity(item, Reassigned Passengers List)
][1]
</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Reassigned Passenger" typeRef="tPassenger"/>
<context>
<contextEntry>
<variable name="Name" typeRef="string"/>
<literalExpression>
<text>Next Passenger.Name</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Status" typeRef="string"/>
<literalExpression>
<text>Next Passenger.Status</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Miles" typeRef="number"/>
<literalExpression>
<text>Next Passenger.Miles</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Flight Number" typeRef="string"/>
<literalExpression>
<text>Best Alternate Flight.Flight Number</text>
</literalExpression>
</contextEntry>
</context>
</contextEntry>
<contextEntry>
<variable name="Remaining Waiting List" typeRef="tPassengerTable"/>
<literalExpression>
<text>remove( Waiting List, 1 )</text>
</literalExpression>
</contextEntry>
<contextEntry>
<variable name="Updated Reassigned Passengers List" typeRef="tPassengerTable"/>
<literalExpression>
<text>append( Reassigned Passengers List, Reassigned Passenger )</text>
</literalExpression>
</contextEntry>
<contextEntry>
<literalExpression>
<text>
if count(Remaining Waiting List) > 0 then
reassign next passenger(Remaining Waiting List, Updated Reassigned Passengers List, Flights)
else
Updated Reassigned Passengers List
</text>
</literalExpression>
</contextEntry>
</context>
</encapsulatedLogic>
<knowledgeRequirement>
<requiredKnowledge href="#b_HasCapacity"/>
</knowledgeRequirement>
</businessKnowledgeModel>
<businessKnowledgeModel id="b_HasCapacity" name="has capacity">
<variable name="has capacity" typeRef="boolean"/>
<encapsulatedLogic>
<formalParameter name="flight" typeRef="tFlight"/>
<formalParameter name="rebooked list" typeRef="tPassengerTable"/>
<literalExpression>
<text>flight.Capacity > count(rebooked list[Flight Number = flight.Flight Number])</text>
</literalExpression>
</encapsulatedLogic>
</businessKnowledgeModel>
</definitions>