Initial Checking with all 820 MLMs
This commit is contained in:
234
MLMStripper/bin/Debug/SCH/SCH_ALERT_ON_NITROGLYCERIN_ORDERS.mlm
Normal file
234
MLMStripper/bin/Debug/SCH/SCH_ALERT_ON_NITROGLYCERIN_ORDERS.mlm
Normal file
@@ -0,0 +1,234 @@
|
||||
maintenance:
|
||||
|
||||
title: SCH_ALERT_ON_NITROGLYCERIN_ORDERS ;;
|
||||
mlmname: SCH_ALERT_ON_NITROGLYCERIN_ORDERS;;
|
||||
arden: version 2.5;;
|
||||
version: 1.00;;
|
||||
institution: ;;
|
||||
author: Sandy Zhang ;;
|
||||
specialist: Sandy Zhang ;;
|
||||
date: 2017-07-28;;
|
||||
validation: testing;;
|
||||
|
||||
library:
|
||||
purpose: Generate a hard stop alert if nitroglycerin ointment or patch order exists and another is attempting to be ordered.
|
||||
;;
|
||||
explanation:
|
||||
|
||||
Change History:
|
||||
2017.07.28 SZ CSR #33082 - Custom duplicate alert for nitroglycerin ointment and topical patch
|
||||
;;
|
||||
keywords:
|
||||
;;
|
||||
citations:
|
||||
;;
|
||||
knowledge:
|
||||
type: data-driven;;
|
||||
data:
|
||||
|
||||
//.Net libraries
|
||||
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
|
||||
include standard_libs;
|
||||
|
||||
//Set the stop message
|
||||
stop_message := false;
|
||||
hard_stop := false;
|
||||
|
||||
//Capture current patient data
|
||||
(clientGuid, clientName) := read last {ClientInfo : GUID, DisplayName};
|
||||
clientVisitGuid := read last {ClientVisit : GUID};
|
||||
chartGuid := read last {ClientVisit : ChartGUID};
|
||||
|
||||
|
||||
//Set med lists for later
|
||||
(nitro_patch_meds) := ("Nitroglycerin 0.1mg/hr Patch", "Nitroglycerin 0.2mg/hr Patch", "Nitroglycerin 0.3mg/hr Patch"
|
||||
, "Nitroglycerin 0.4mg/hr Patch", "Nitroglycerin 0.6mg/hr Patch");
|
||||
|
||||
(nitro_oint_meds) := ("Nitroglycerin 2% Oint");
|
||||
|
||||
|
||||
|
||||
/*************************** Possible Evoking Events ************************************/
|
||||
|
||||
// initiation of nitroglycerin ointment order
|
||||
nitro_oint_event:= event{OrderInit User Order :
|
||||
WHERE Name = "Nitroglycerin 2% Oint"};
|
||||
|
||||
// initiation of nitroglycerin patch order
|
||||
nitro_patch_event := event{OrderInit User Order :
|
||||
WHERE Name IN ("Nitroglycerin 0.1mg/hr Patch"
|
||||
, "Nitroglycerin 0.2mg/hr Patch"
|
||||
, "Nitroglycerin 0.3mg/hr Patch"
|
||||
, "Nitroglycerin 0.4mg/hr Patch"
|
||||
, "Nitroglycerin 0.6mg/hr Patch")};
|
||||
|
||||
// initiation of nitroglycerin ointment orderset
|
||||
nitro_oint_orderset_event := event{OrderSetInit User OrderSet :
|
||||
WHERE OrderSetName IN ("Nitroglycerin Ointment","Nitroglycerin Ointment")};
|
||||
|
||||
|
||||
// initiation of nitroglycerin patch orderset
|
||||
nitro_patch_orderset_event := event{OrderSetInit User OrderSet :
|
||||
WHERE OrderSetName IN ("Nitroglycerin Patch")};
|
||||
|
||||
|
||||
/******************************************************************************/
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
//Determine evoking event -
|
||||
if (EvokingEvent = nitro_patch_event OR EvokingEvent = nitro_oint_event) then
|
||||
|
||||
(this_order_id, this_order) := read last {Order : GUID, Name Referencing EvokingObject};
|
||||
else
|
||||
(this_order_id, this_order) := read last {OrderSet : GUID, OrderSetName Referencing EvokingObject};
|
||||
endif;
|
||||
|
||||
|
||||
//Check for unsubmitted nitroglycerin orders
|
||||
(existing_orders, origOrderSet) := READ { UnsubmittedOrders: Name, OrderSetName
|
||||
WHERE Name matches pattern "Nitroglycerin 0.1mg/hr Patch%"
|
||||
OR Name matches pattern "Nitroglycerin 0.2mg/hr Patch%"
|
||||
OR Name matches pattern "Nitroglycerin 0.3mg/hr Patch%"
|
||||
OR Name matches pattern "Nitroglycerin 0.4mg/hr Patch%"
|
||||
OR Name matches pattern "Nitroglycerin 0.6mg/hr Patch%"
|
||||
OR Name matches pattern "Nitroglycerin 2% Oint%"};
|
||||
|
||||
if (exist existing_orders) then
|
||||
found_unsubmitted_order := "unbsubmitted orders were found :) ";
|
||||
|
||||
else
|
||||
no_unsubmitted_order := "no unbsubmitted orders were found :( ";
|
||||
|
||||
//No unsubmitted nitroglycerin order - check for existing nitroglycerin active orders
|
||||
(existing_orders,
|
||||
origOrderSet) := read {"SELECT o.Name, o.OrderSetName, o.TouchedWhen"
|
||||
|| " FROM CV3Order as o with (nolock) JOIN CV3OrderCatalogMasterItem AS ocmi with (nolock)"
|
||||
|| " ON o.OrderCatalogMasterItemGUID = ocmi.GUID"
|
||||
|| " WHERE o.ClientGUID = " || clientGuid
|
||||
|| " AND o.ClientVisitGUID = " || clientVisitGuid
|
||||
|| " AND o.ChartGUID = " || chartGuid
|
||||
|| " AND (o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 2% Oint%{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 0.1mg/hr Patch%{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 0.2mg/hr Patch%{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 0.3mg/hr Patch%{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 0.4mg/hr Patch%{{{SINGLE-QUOTE}}}"
|
||||
|| " OR o.Name like {{{SINGLE-QUOTE}}}Nitroglycerin 0.6mg/hr Patch%{{{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};
|
||||
|
||||
endif;
|
||||
|
||||
|
||||
// if an existing order was detected
|
||||
if (exist existing_orders) then
|
||||
//Keep counter in case other nitroglycerin order exist that are not in conflict
|
||||
i := 0;
|
||||
|
||||
//loop through existing, active patient orders
|
||||
for orderItem in existing_orders do
|
||||
i := i + 1;
|
||||
|
||||
// if ordering nitro ointment
|
||||
if (EvokingEvent = nitro_oint_event) then
|
||||
// and existing order is nitro patch then send alert
|
||||
if ((orderItem in nitro_patch_meds)) then
|
||||
stop_message := true;
|
||||
existing_order_name := orderItem;
|
||||
situation_1 := "ordering nitro ointment and existing order is nitro patch";
|
||||
endif;
|
||||
|
||||
|
||||
|
||||
// if ordering nitro ointment from orderset
|
||||
elseif (EvokingEvent = nitro_oint_orderset_event) then
|
||||
// and existing order is nitro patch then send alert
|
||||
if (orderItem in nitro_patch_meds) then
|
||||
stop_message := true;
|
||||
existing_order_name := orderItem;
|
||||
situation_2 := "ordering nitro ointment from orderset and existing order is nitro patch ";
|
||||
endif;
|
||||
|
||||
|
||||
|
||||
// if ordering nitro patch
|
||||
elseif (EvokingEvent = nitro_patch_event) then
|
||||
// and existing order is nitro ointment then send alert
|
||||
if ((orderItem in nitro_oint_meds)) then
|
||||
stop_message := true;
|
||||
existing_order_name := orderItem;
|
||||
situation_3 := "ordering nitro patch and existing order is nitro ointment";
|
||||
endif;
|
||||
|
||||
|
||||
|
||||
// if ordering patch orderset
|
||||
elseif (EvokingEvent = nitro_patch_orderset_event) then
|
||||
// and existing order is nitro ointment then send alert
|
||||
if ((orderItem in nitro_oint_meds)) then
|
||||
stop_message := true;
|
||||
existing_order_name := orderItem;
|
||||
situation_4 := "ordering patch orderset and existing order is nitro ointment ";
|
||||
endif;
|
||||
endif;
|
||||
enddo; //End loop through existing, active nitroglycerin patch/topical orders
|
||||
endif; // End - if (exist existing_orders)
|
||||
|
||||
|
||||
|
||||
/************************************** Declare Alert Details ********************************/
|
||||
|
||||
// If stop message is true then set the alert message and fire hard stop alert
|
||||
if (stop_message) then
|
||||
|
||||
// alert destination
|
||||
order_alert_dest := destination {alert} with
|
||||
[alert_type := warning,
|
||||
short_message := "Nitroglycerin topical/patch Order Conflict",
|
||||
priority := "High",
|
||||
scope := Chart,
|
||||
rule_group := "Nitroglycerin Conflict Group",
|
||||
rule_number := 8050,
|
||||
send_with_order := "DoNotSend",
|
||||
alert_dialog_settings := "No Override Allowed",
|
||||
display_alert := true];
|
||||
|
||||
// alert message
|
||||
alert_message := "{{+B}}Avoid concurrent use of {{+R}}" || this_order || "{{-R}} and {{+R}}"
|
||||
|| existing_order_name || "{{-R}}. Contact physician to adjust orders. {{-B}} ";
|
||||
|
||||
hard_stop := true;
|
||||
|
||||
endif;
|
||||
|
||||
/*******************************************************************************************/
|
||||
|
||||
|
||||
|
||||
;;
|
||||
priority: 50
|
||||
;;
|
||||
evoke:
|
||||
|
||||
nitro_patch_event;
|
||||
nitro_oint_event;
|
||||
nitro_patch_orderset_event;
|
||||
nitro_oint_orderset_event;
|
||||
|
||||
;;
|
||||
logic:
|
||||
conclude hard_stop;
|
||||
|
||||
|
||||
;;
|
||||
action:
|
||||
|
||||
write alert_message at order_alert_dest;
|
||||
;;
|
||||
Urgency: 50;;
|
||||
end:
|
||||
Reference in New Issue
Block a user