dsntk-examples 0.3.0

ÐecisionToolkit | Examples
Documentation
<?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>&gt;= 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>&gt;= 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>&gt;= 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>