Initial Checking with all 820 MLMs
This commit is contained in:
259
MLMStripper/bin/Debug/FORM/FORM_SET_TUBE_FEEDING_ORDERS.mlm
Normal file
259
MLMStripper/bin/Debug/FORM/FORM_SET_TUBE_FEEDING_ORDERS.mlm
Normal file
@@ -0,0 +1,259 @@
|
||||
maintenance:
|
||||
|
||||
title: FORM_SET_TUBE_FEEDING_ORDERS;;
|
||||
mlmname: FORM_SET_TUBE_FEEDING_ORDERS;;
|
||||
arden: version 2.5;;
|
||||
version: 5.50;;
|
||||
institution: St. Clair Hospital;;
|
||||
author: Juliet Law, Allscripts Ext. 7461;;
|
||||
specialist: Maria Pest, Allscripts Ext. 7443;;
|
||||
date: 2012-01-20;;
|
||||
validation: testing;;
|
||||
|
||||
library:
|
||||
purpose: Determines if a tube feeding order should be submitted as a supplement based on existence
|
||||
of active diet order.
|
||||
;;
|
||||
explanation: If an active diet order exists, then the user will be alerted that the tube feeding will be submitted
|
||||
as a supplement to the active diet; otherwise the tube feeding order will be ordered as the active diet.
|
||||
|
||||
Change History
|
||||
|
||||
01.20.2012 JMLaw CSR 25867: Created MLM
|
||||
09.02.2014 DW CSR# 32365 - Auto select orders when one is not present
|
||||
01.28.2015 JML WO# 1620448: modified the query that retrieves active diet orders to not include Completed (level num 100)
|
||||
as an active diet order.
|
||||
;;
|
||||
keywords: tube feeding, diet
|
||||
;;
|
||||
knowledge:
|
||||
type: data-driven;;
|
||||
data:
|
||||
//This MLM is passed three arguments of type
|
||||
// communication_type, form_type, and client_info_obj respectively
|
||||
(this_communication,
|
||||
this_form,
|
||||
client_info_obj) := argument;
|
||||
|
||||
//Obtain fields passed in from Form object
|
||||
field_list := this_form.fields;
|
||||
|
||||
//Obtain attribute values from Communication Object
|
||||
client_guid := this_communication.ClientGUID;
|
||||
visit_guid := this_communication.ClientVisitGUID;
|
||||
chart_guid := this_communication.ChartGUID;
|
||||
CallingEvent := this_communication.CallingEvent;
|
||||
CallingField := this_communication.CallingFieldName;
|
||||
|
||||
//Include .Net libraries
|
||||
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
|
||||
include standard_libs;
|
||||
|
||||
//Initialize local session object
|
||||
local_session := cds_session.local;
|
||||
|
||||
//Declare and initialize boolean local variables
|
||||
tubeFeedSelected := false;
|
||||
sessionObjectExists := false;
|
||||
dietOrderExists := false;
|
||||
|
||||
//Retrieve field list of Tube Feeding Nursing Order Grid
|
||||
TubeFeedingOrder := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Control_MultiFieldOccNum = 2);
|
||||
TubeFeedingOrder_List := TubeFeedingOrder.Value;
|
||||
|
||||
//Retrieve mapped field on Tube Feeding Order
|
||||
DietOrderFld := first of (field_list where field_list.DataItemName = "DIET_DSD_Tube Feed Order" and field_list.Control_MultiFieldOccNum = 1);
|
||||
DietSupplementFld := first of (field_list where field_list.DataItemName = "DIET_Tube Feed Diet or Supplement" and field_list.Control_MultiFieldOccNum = 1);
|
||||
|
||||
//Retrieve field list of NPO with Tube Feed Diet Grid
|
||||
NPOTubeFeedOrder := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Control_MultiFieldOccNum = 4);
|
||||
NPOTubeFeedOrder_List := NPOTubeFeedOrder.Value;
|
||||
|
||||
TubeFeedingFlush := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Control_MultiFieldOccNum = 3);
|
||||
TubeFeedingFlush_List := TubeFeedingFlush.Value;
|
||||
|
||||
DietitianConsult := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Control_MultiFieldOccNum = 6);
|
||||
DietitianConsult_List := DietitianConsult.Value;
|
||||
|
||||
Residuals := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Control_MultiFieldOccNum = 5);
|
||||
Residuals_List := Residuals.Value;
|
||||
|
||||
NursingInstruct := last of (field_list where field_list.DataItemName = "MultiOrderInline" and field_list.Control_MultiFieldOccNum = 1);
|
||||
NursingInstruct_List := NursingInstruct.Value;
|
||||
|
||||
|
||||
|
||||
|
||||
// FIELD CHANGE
|
||||
|
||||
|
||||
|
||||
//Only perform logic if a field change event has occurred on the Order Set
|
||||
|
||||
if (CallingEvent = "FieldChange") then
|
||||
|
||||
if (CallingField = "MultiOrderGrid|2") then
|
||||
|
||||
//Retrieve Nutritional Order Tube Feeding field; set boolean if selected or not
|
||||
TubeFeedFld := first of (TubeFeedingOrder_List where TubeFeedingOrder_List.Name = "Tube Feeding");
|
||||
|
||||
if (TubeFeedFld.IsSelected = true) then
|
||||
tubeFeedSelected := true;
|
||||
else
|
||||
tubeFeedSelected := false;
|
||||
endif;
|
||||
endif;
|
||||
|
||||
if (tubeFeedSelected = true) then
|
||||
//If Nutritional Diet Tube Feeding was selected, check for unsubmitted or submitted active Diet order
|
||||
if (local_session.SessionUnsubDietExists = true) then
|
||||
//Unsubmitted Active Diet order determined by local session variable
|
||||
//set in MLM SCH_ALERT_ON_NPO_TUBE_FEEDING_ORDERS
|
||||
dietOrderExists := true;
|
||||
sessionObjectExists := true;
|
||||
else
|
||||
//No unsubmitted, check database for Diet order
|
||||
(orderName) := read {"SELECT o.Name, o.TouchedWhen"
|
||||
|| " FROM CV3Order as o with (nolock) JOIN"
|
||||
|| " (CV3OrderCatalogMasterItem AS ocmi with (nolock)"
|
||||
|| " JOIN CV3OrderReviewCategory AS orc with (nolock)"
|
||||
|| " ON ocmi.OrderReviewCategoryGUID = orc.GUID)"
|
||||
|| " ON o.OrderCatalogMasterItemGUID = ocmi.GUID"
|
||||
|| " WHERE o.ClientGUID = " || SQL(client_guid)
|
||||
|| " AND o.ClientVisitGUID = " || SQL(visit_guid)
|
||||
|| " AND o.ChartGUID = " || SQL(chart_guid)
|
||||
|| " AND ("
|
||||
|| " (o.Name = {{{SINGLE-QUOTE}}}Diet{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name = {{{SINGLE-QUOTE}}}Liquids Only for Test{{{SINGLE-QUOTE}}}))"
|
||||
|| " AND"
|
||||
|| " ((o.OrderStatusLevelNum > 15"
|
||||
|| " AND o.OrderStatusLevelNum NOT IN ({{{SINGLE-QUOTE}}}69{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}70{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}100{{{SINGLE-QUOTE}}}))"
|
||||
|| " OR o.OrderStatusCode = {{{SINGLE-QUOTE}}}HOLD{{{SINGLE-QUOTE}}})"
|
||||
, primaryTime = touchedWhen};
|
||||
orderCount := count(orderName) as number;
|
||||
if (orderCount > 0) then
|
||||
dietOrderExists := true;
|
||||
endif;
|
||||
endif;
|
||||
endif;
|
||||
|
||||
//If Nutritional Diet Tube Feeding was selected and an active Diet order exists
|
||||
//then alert that tube feed will be entered as supplement
|
||||
//If user selects {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}, tube feed will be entered as only diet
|
||||
if (tubeFeedSelected = true AND dietOrderExists = true) then
|
||||
msg := "Patient has Active diet order."
|
||||
|| "\n\nThis tube feed order will be entered as a supplement to the existing tray diet."
|
||||
|| "\n\nIf this is correct, choose {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|
||||
|| "\n\nIf this is not correct, choose {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}} and remember to discontinue the Active diet order.";
|
||||
dialogRes := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with msg, "Active Diet Found", "YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}, "Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}};
|
||||
|
||||
//If user selects YES, tube feed will be entered as a supplement
|
||||
if ((dialogRes as string) = "Yes") then
|
||||
DietOrderFld.Value := "";
|
||||
DietSupplementFld.Value := "Supplement";
|
||||
|
||||
if (true IN NPOTubeFeedOrder_List.IsSelected) then
|
||||
NPOTubeFeedOrder_List.IsSelected := false;
|
||||
endif;
|
||||
NPOTubeFeedOrder_List.IsReadOnly := true;
|
||||
|
||||
elseif ((dialogRes as string) = "No") then
|
||||
DietOrderFld.Value := "Tube Feeding";
|
||||
DietSupplementFld.Value := "Diet";
|
||||
endif;
|
||||
|
||||
//If Nutritional Diet Tube Feeding was selected and an active Diet order does not exists
|
||||
//then alert that tube feed will be entered as only diet
|
||||
//If user selects {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}, tube feed will be automatically unselected and alert
|
||||
//will display to enter an active diet order first
|
||||
elseif (tubeFeedSelected = true AND dietOrderExists = false) then
|
||||
msg := "Patient DOES NOT have an Active diet.\n\nThis order will be entered as a tube feed only diet."
|
||||
|| " Patient will not receive a tray diet."
|
||||
|| "\n\nIf this is correct, choose {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|
||||
|| "\n\nIf this is not correct and the patient is to receive this tube feed as a supplement, choose {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.\n\n";
|
||||
dialogRes := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with msg, "No Active Diet Found", "YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}, "Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}};
|
||||
|
||||
if ((dialogRes as string) = "Yes") then
|
||||
DietOrderFld.Value := "Tube Feeding";
|
||||
DietSupplementFld.Value := "Diet";
|
||||
elseif ((dialogRes as string) = "No") then
|
||||
DietOrderFld.Value := "Tube Feeding";
|
||||
DietSupplementFld.Value := "Supplement";
|
||||
|
||||
//Display additional messagebox to user
|
||||
msg2 := "You MUST enter the tray diet order first, then enter the Tube Feeding order.";
|
||||
dialogRes2 := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with msg2, "Information", "Ok" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}, "Exclamation" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}};
|
||||
|
||||
TubeFeedingOrder_List.IsSelected := "false";
|
||||
endif;
|
||||
|
||||
else
|
||||
NPOTubeFeedOrder_List.IsReadOnly := "false";
|
||||
|
||||
endif;
|
||||
|
||||
endif; // Field Change
|
||||
|
||||
|
||||
|
||||
|
||||
// FORM OPEN
|
||||
|
||||
|
||||
|
||||
if (CallingEvent = "FormOpen")
|
||||
|
||||
then
|
||||
|
||||
(DietOrders) := read {"Select o.Name, o.TouchedWhen, ocmi.name "
|
||||
|| " From CV3OrderCatalogMasterItem AS ocmi with (nolock) "
|
||||
|| " Join CV3Order o with (nolock) ON o.OrderCatalogMasterItemGUID = ocmi.GUID "
|
||||
|| " Where o.ClientGUID = " || SQL(client_guid) || " AND o.ClientVisitGUID = " || SQL(visit_guid) || " AND o.ChartGUID = " || SQL(chart_guid)
|
||||
|| " and o.name in ({{{SINGLE-QUOTE}}}Tube Feed Flush{{{SINGLE-QUOTE}}} , {{{SINGLE-QUOTE}}}NPO with Tube Feed Diet (nursing instruction only){{{SINGLE-QUOTE}}} , {{{SINGLE-QUOTE}}}Dietitian Consult for Tube Feed{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Tube Feed Residuals{{{SINGLE-QUOTE}}} , {{{SINGLE-QUOTE}}}Tube Feed Nursing Instructions{{{SINGLE-QUOTE}}})"
|
||||
|| " and ((o.OrderStatusLevelNum > 15 AND o.OrderStatusLevelNum NOT IN ({{{SINGLE-QUOTE}}}69{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}70{{{SINGLE-QUOTE}}} , {{{SINGLE-QUOTE}}}100{{{SINGLE-QUOTE}}}))) "
|
||||
};
|
||||
|
||||
// Initialize all orders to selected
|
||||
|
||||
TubeFeedingFlush_List.IsSelected := "true";
|
||||
NPOTubeFeedOrder_List.IsSelected := "true";
|
||||
DietitianConsult_List.IsSelected := "true";
|
||||
Residuals_List.IsSelected:= "true";
|
||||
NursingInstruct_List.IsSelected := "true";
|
||||
|
||||
|
||||
// Parse out the current orders and deselect the order if it is already on file.
|
||||
|
||||
for i in 1 seqto count DietOrders do
|
||||
|
||||
DietOrder := DietOrders [i] ;
|
||||
|
||||
|
||||
if DietOrder = "Tube Feed Flush" then TubeFeedingFlush_List.IsSelected := "false";
|
||||
elseif DietOrder = "NPO with Tube Feed Diet (nursing instruction only)" then NPOTubeFeedOrder_List.IsSelected := "false";
|
||||
elseif DietOrder = "Dietitian Consult for Tube Feed" then DietitianConsult_List.IsSelected := "false";
|
||||
elseif DietOrder = "Tube Feed Residuals" then Residuals_List.IsSelected:= "false";
|
||||
elseif DietOrder = "Tube Feed Nursing Instructions" then NursingInstruct_List.IsSelected := "false";
|
||||
endif;
|
||||
|
||||
enddo;
|
||||
|
||||
endif; // Form Open
|
||||
|
||||
|
||||
;;
|
||||
priority: 50
|
||||
;;
|
||||
evoke:
|
||||
;;
|
||||
logic:
|
||||
|
||||
conclude true;
|
||||
;;
|
||||
action:
|
||||
|
||||
//This MLM returns two parameters of type this_communication and this_form, respectively.
|
||||
return this_communication, this_form;
|
||||
;;
|
||||
Urgency: 50;;
|
||||
end:
|
||||
Reference in New Issue
Block a user