diff --git a/models/Application_examples/Agile_Production_Platform_Customer_Interactions.mp b/models/Application_examples/Agile_Production_Platform_Customer_Interactions.mp new file mode 100644 index 0000000000000000000000000000000000000000..def5c56813fb12743ffa09bc24d94abe11efe499 --- /dev/null +++ b/models/Application_examples/Agile_Production_Platform_Customer_Interactions.mp @@ -0,0 +1,300 @@ +/*********************************************************************************** + +Agile_Production_Platform_Customer_Interactions + +created collaboratively in Teams by K.Giammarco, M. Collins and E.Griffor 08-20-2020 +modified collaboratively in Teams by K.Giammarco and J.Beaver 09-17-2020 + + +The "Agile Production Platform" (APP) represents the linkage platform being designed +to enable agile production / building of alternative supply chains. + +The purpose of this model is to facilitate agreement on a baseline typical use case +for a Customer placing an order (for face shields, in this case) using the APP. + +The model currently produces one (1) event trace at scope 1. Reviewers of this model +are invited to provide feedback for better-named events, other events that may occur +normally or as a disruption to the sequence, missing or incorrect interactions, and +the partitioning of the high level APP functions for architectural cohesion. Lower- +level (implementation) activities have been deliberately omitted for now in order to +reach consensus on intended use at the highest level of abstraction. + +Also invited are direct edits to the model that suggest alternatives for Customer +behaviors (including misuse and possible nafarious actions) and APP behaviors that +would correspond to the new Customer behaviors. + +Since there is no concurrent editing capability at present, feedback may be delivered +to kmgiamma@nps.edu, mdcolli@evoforge.org and edward.griffor@nist.gov as: +- comments in the body of an email +- updated MP model with editor intials appended + - may use SAY statements to attach comments directly to events in the event trace + as demonstrated herein + + +************************************************************************************* + +The narrative for this baseline use case is as follows: + +Precondition: A Customer has an urgent need for 5,000 medical face shields. + + +1. Customer logs into the APP linkage platform. + +2. APP authenticates valid customer credentials and prompts the Customer for the need. + +3. Customer inputs a need for 5,000 units of a medical face shield with desired + attributes. + +4. APP identifies the individual components of the needed item. + +5. APP determines which Sector Resources to search for equivalent components (prepares + component search parameters). + +6. APP searches Sector Resources for available component matches and their attributes + (e.g., availability, timeliness, cost, reliability, quality, quantity). + +7. APP assembles combinations of available components having intersecting + attributes (find component matches). + +8. The APP constructs a list of valid supply chain elements. + +8a. If the supply chain for the order is complete, the APP displays the order options to the + Customer along with soonest delivery time, total cost, and component attributes for + each participant in the chain (e.g., participant reputation, material specifications, + product dimensions, suitability for certification). + +8b. Otherwise if one or more components is unavailable, the APP reprocesses the order with + a new search for equivalent alternatives to the missing component(s) (back to step 5). + +9a. If the supply chain is complete, the Customer receives the order options from the APP + and filters, sorts, and inspects the presented solutions, selects a solution, and places + the order. + + 9a-1. The order is delivered to the Customer and meets their expectations.(Favorable + Outcome) + 9a-2. The order is delivered to the Customer and does not meet their expectations. + (Unfavorable Outcome) + 9a-3. The order is not delivered to the Customer (Unfavorable Outcome). + + +9b. If no alternative supply chain can be found, the Customer is notified by the APP that the + order cannot be completed at this time. (Unfavorable Outcome) + + +Assumptions/Abstractions: + +The "Data for supply chain" event that is included in the APP and the Data Services/ +Resources root represents asynchronous and continuous data for support to the +alternative supply chain construction. The individual interactions involved here +are another level of refinement reserved for a separate MP model that can be elaborated +separately from this model which focuses on the Customer-APP interactions. + +Known ways to get to an unfavorable outcome: +- Customer asks for a disproportionately large amount of product and the system is strained +for other users +- Allow for aggregation + + + + +Questions: +- Does the APP prioritize orders? +- Can a customer get orders with "some assembly required" or does it come assembled from +some service provider? + +Postcondition: The Customer receives 5,000 face shields (not shown in the model yet). + +*************************************************************************************/ + + +SCHEMA Agile_Production_Platform_Customer_Interactions + +ROOT Customer: Log_into_APP + Input_a_need_for_5000_medical_face_shields + + ( Receive_potential_solutions + Filter_sort_inspect_presented_solutions + Select_solution + Place_order + + ( Receive_order + ( Order_meets_expectations | + + Order_does_not_meet_expectations ) | + + Does_not_receive_order ) | + + Unable_to_place_order ); + + +ROOT APP: { Handle_User_Interactions, + Manage_Supply_Chain_Options}; + +Handle_User_Interactions: Authenticate_Customer_credentials + Prompt_Customer_for_need + Send_customer_order + ( Alternative_supply_chain_found + Display_potential_solutions_with_attributes + Place_orders_on_behalf_of_Customer | + + Alternative_supply_chain_NOT_found + Notify_customer_order_cannot_be_completed ); + +Manage_Supply_Chain_Options: { Identify_individual_components_of_needed_item + Prepare_component_search_parameters + Find_component_matches + + Construct_list_of_valid_supply_chains + ( Complete_supply_chain_available Provide_list_to_user | + + Complete_supply_chain_unavailable ), + + Data_for_supply_chain + }; + + +COORDINATE $a: Log_into_APP FROM Customer, + $b: Authenticate_Customer_credentials FROM APP + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Prompt_Customer_for_need FROM APP, + $b: Input_a_need_for_5000_medical_face_shields FROM Customer + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Input_a_need_for_5000_medical_face_shields FROM Customer, + $b: Send_customer_order FROM APP + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Send_customer_order FROM APP, + $b: Identify_individual_components_of_needed_item FROM APP + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Provide_list_to_user FROM APP, + $b: Display_potential_solutions_with_attributes FROM APP + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Display_potential_solutions_with_attributes FROM APP, + $b: Receive_potential_solutions FROM Customer + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Place_order FROM Customer, + $b: Place_orders_on_behalf_of_Customer FROM APP + DO ADD $a PRECEDES $b ; OD; + +COORDINATE $a: Notify_customer_order_cannot_be_completed FROM APP, + $b: Unable_to_place_order FROM Customer + DO ADD $a PRECEDES $b ; OD; + + +ROOT Data_Services_Resources: Data_for_supply_chain; + +/* Abstracted out for now. Will elaborate in a separate MP model. + { [ Suppliers ], + [ Shippers ], + [ Manufacturers ], + [ Distributers ], + [ Design_Engineering ], + [ Shipping_Distribution ], + [ Customer_Services ], + [ Market_Services ], + [ Purchase_Order_Contract_Payment ] + }; + +*/ + +Data_Services_Resources, APP SHARE ALL Data_for_supply_chain; + + + +/*------------------------ TABLES, CHARTS & DIAGRAMS --------------------------*/ + +COORDINATE $a: $$EVENT +DO +/* Customer durations, placeholder values only */ + IF $a IS Log_into_APP THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Input_a_need_for_5000_medical_face_shields THEN SET $a.duration AT LEAST 5; FI; + IF $a IS Receive_potential_solutions THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Filter_sort_inspect_presented_solutions THEN SET $a.duration AT LEAST 20; FI; + IF $a IS Select_solution THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Place_order THEN SET $a.duration AT LEAST 3; FI; +/* APP durations, placeholder values only */ + IF $a IS Authenticate_Customer_credentials THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Prompt_Customer_for_need THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Send_customer_order THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Identify_individual_components_of_needed_item THEN SET $a.duration AT LEAST 5; FI; + IF $a IS Prepare_component_search_parameters THEN SET $a.duration AT LEAST 5; FI; + IF $a IS Find_component_matches THEN SET $a.duration AT LEAST 60; FI; + IF $a IS Construct_list_of_valid_supply_chains THEN SET $a.duration AT LEAST 10; FI; + IF $a IS Provide_list_to_user THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Display_potential_solutions_with_attributes THEN SET $a.duration AT LEAST 1; FI; + IF $a IS Place_orders_on_behalf_of_Customer THEN SET $a.duration AT LEAST 1; FI; +OD; + + +/* Durations Table */ + +TABLE Durations_Table { + TABS string Event_name, + number Start_time, + number Duration_time; + }; + + +/* Gantt Chart */ + +BAR CHART Gantt_Chart { TITLE("Gantt Chart"); + FROM Durations_Table; + X_AXIS Event_name; + ROTATE; /* to place the X_AXIS vertical */ +}; + +COORDINATE $e: $$EVENT + DO /* add this event to the Table */ + Durations_Table <| + Event_name: SAY($e), + Start_time: $e.start.smallest, + Duration_time: $e.duration.largest; + OD; + + + +/* Display on Output */ + +/*SHOW Durations_Table; +SHOW Gantt_Chart; +SHOW ACTIVITY DIAGRAM APP;*/ + +/*----------------------------------- QUESTIONS ------------------------------------*/ + +COORDINATE $x: Customer + DO ADD SAY("What additional interactions for the Customer may be needed " + "while the Customer is waiting for the order?") + PRECEDES $x; + OD; + + +/*----------------------------------- COMMENTS -------------------------------------*/ + +SAY("Partitioned the APP into user-facing " "and back end-facing functionality."); + +COORDINATE $x: Data_for_supply_chain + DO ADD SAY("Represents asynchronous and continuous data " + "for support to the alternative supply chain construction.") + PRECEDES $x; + OD; + +IF #Order_meets_expectations > 0 THEN +SAY("Favorable Outcome"); +FI; + +IF #Order_does_not_meet_expectations > 0 THEN +SAY("Unfavorable Outcome"); +FI; + +IF #Does_not_receive_order > 0 THEN +SAY("Unfavorable Outcome"); +FI; + +IF #Unable_to_place_order > 0 THEN +SAY("Unfavorable Outcome"); +FI;