Initial Checking with all 820 MLMs

This commit is contained in:
2020-02-02 00:54:01 -05:00
parent c59dc6de2e
commit 840d0432f4
828 changed files with 239162 additions and 0 deletions

View File

@@ -0,0 +1,336 @@
maintenance:
title: SCH_Tikosyn_EKG_auto_order ;;
mlmname: SCH_Tikosyn_EKG_auto_order;;
arden: version 2.5;;
version: 1.00;;
institution: St. Clair Hospital ;;
author: Sandy Zhang ;;
specialist: Amy Georgulis ;;
date: 2018-09-18;;
validation: testing;;
library:
purpose: This MLM auto-orders EKG 12 lead into worksheet in response to a Tikosyn order. Excludes ED patients and ED STAT orders of Tikosyn.
This is meant to address the lack of EKG being ordered with the Tikosyn orders from Tikosyn OS. Tikosyn OS is linked to the MLM: FORM_Set_Tikosyn_Electrolyte.
Previous name: SCH_Tikosyn_EKG_STAT_NOW. Changed to (SCH_Tikosyn_EKG_auto_order) due to expanded scope, ie. no longer restricted to only stat/now doses of Tikosyn.
;;
explanation:
Change history
09.13.2018 SZ CSR 36407 Created (CSR #36407 - auto order EKG with Tikosyn from Tikosyn Order Set)
;;
keywords:
;;
citations:
;;
knowledge:
type: data-driven;;
data:
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
error_occurred := false;
error_message := "";
log_execution_info := false;
if called_by_editor
then EvokingObject := read last {OrderSet: THIS where Name="intraabdominal antibiotics" };
endif;
tikosyn_order_enter_event := event { OrderEnter User Order: where TypeCode = "Medication"
and InitialSessionTypeCode <> "Discharge"
and (Name = "Dofetilide 125mcg Cap"
or Name = "Dofetilide 250mcg Cap"
or Name = "Dofetilide 500mcg Cap")
};
using "ObjectsPlusXA.SCM.Forms";
using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms";
//Assign GUIDs
client_guid := EvokingObject.ClientGUID;
visit_guid := EvokingObject.ClientVisitGUID;
chart_guid := EvokingObject.ChartGUID;
user_guid := EvokingObject.userGUID;
Evoking_order_frequency_code := EVOKINGOBJECT.FrequencyCode;
// set to {{{SINGLE-QUOTE}}}RTN{{{SINGLE-QUOTE}}} (Routine) for default orders
// set to {{{SINGLE-QUOTE}}}TIMEC{{{SINGLE-QUOTE}}} (Scheduled/Start Time) for STAT scheduled orders
Sys_Order_priority_code := EVOKINGOBJECT.SystemOrderPriorityCode;
STAT_NOW_order_trigger := false;
if Sys_Order_priority_code = "TIMEC" then
STAT_NOW_order_trigger := true;
endif;
//Object to create an order to add to Order Entry Worksheet
UnsubmittedOrder_obj := OBJECT [order_type,
item_name,
item_modifier,
item_version,
coded_time,
requested_time_hour,
requested_time_min,
order_field_name,
order_field_value];
//MLM call to create order to add to Order Entry Worksheet
create_ekg_order := MLM {{{SINGLE-QUOTE}}}SCH_Func_Create_Unsubmitted_Order_Diagnostic_Prefilled{{{SINGLE-QUOTE}}};
//Retrieve user occupation
( orderRoleType, user_guid ) := READ LAST { UserInfo : OrderRoleType, GUID };
//Retrieve order class type
( ocmi, orderSessionType, orderSource ) := READ LAST { Order : OrderCatalogMasterItem, InitialSessionTypeCode, SourceCode REFERENCING EvokingObject };
//Retrieve last tikosyn orders
(tikosyn_active_order) := READ {
"select o.name"
||" from cv3ordercatalogmasteritem as ocmi with (nolock)"
||" join cv3order as o with (nolock)on o.ordercatalogmasteritemguid = ocmi.guid"
||" and o.ClientGUID = " || client_guid || " and o.ChartGUID = " || chart_guid || " and o.ClientVisitGUID= " || visit_guid || " "
||" and (o.name like {{{SINGLE-QUOTE}}}%dofetilide%{{{SINGLE-QUOTE}}})"
||" and o.OrderStatusLevelNum >= 15"
};
tikosyn_order_build_variants := ("Dofetilide 250mcg Cap", "Dofetilide 125mcg Cap", "Dofetilide 500mcg Cap");
build_variant_count := count tikosyn_order_build_variants;
x := ();
first_tikosyn_order := true;
// checks if this would be the patient{{{SINGLE-QUOTE}}}s first tikosyn order
// by checking SQL to see if it matches any of the tikosyn order build variants
for x in (1 seqto build_variant_count) do
this_order := tikosyn_order_build_variants[x];
if (this_order is in tikosyn_active_order) then
first_tikosyn_order := false;
endif;
enddo;
// if it{{{SINGLE-QUOTE}}}s not the first tikosyn order, ask user if they would like EKGs for first 3 days
if (first_tikosyn_order = false) then
// checks if this would be a reorder
if (EVOKINGOBJECT.Name is in tikosyn_active_order) then
tikosyn_reorder := true;
else
tikosyn_reorder := false;
endif;
endif;
////////////////////////////////////////////////////////////////////////////
// Filter - Unsubmitted order for ekg filter
////////////////////////////////////////////////////////////////////////////
// check for unsubmitted orders of EKG 12 Lead x 6
// If exist, then end without creating worksheet order
(unsubmitted_ekg) := READ {UnsubmittedOrders: Name WHERE (Name MATCHES PATTERN "%EKG%12%lead%")} ;
number_unsub_ekg := count (unsubmitted_ekg);
create_order := true;
if (number_unsub_ekg >= 6) then
create_order := false;
endif;
if (create_order = true) then
(er_patient) := READ LAST {"SELECT a.ColumnNewValue"
|| " FROM CV3Client c WITH (NOLOCK) JOIN CV3ClientVisit cv WITH (NOLOCK)"
|| " ON c.GUID = cv.ClientGUID"
|| " JOIN SXAEDLOCATIONAUDIT a WITH (NOLOCK)"
|| " ON cv.GUID = a.ClientVisitGUID"
|| " WHERE c.GUID = " || Sql(client_guid)
|| " AND cv.GUID = " || Sql(visit_guid)
|| " AND cv.ChartGUID = " || Sql(chart_guid)
|| " AND (cv.CurrentLocation = {{{SINGLE-QUOTE}}}ER Major{{{SINGLE-QUOTE}}}"
|| " or cv.CurrentLocation like {{{SINGLE-QUOTE}}}%ER%{{{SINGLE-QUOTE}}})"
|| " AND a.ColumnName = {{{SINGLE-QUOTE}}}location{{{SINGLE-QUOTE}}}"
|| " ORDER BY a.TouchedWhen"};
// New feature: If Tikosyn is a home med in the OMR, then do not check boxes for daily labs, only necessary baseline labs
tikosyn_home_med := read last {
"SELECT p.DrugName"
||" FROM SXAAMBClientPrescription p with (nolock) JOIN SXAAMBDrugCategoryXRef xr with (nolock)"
||" ON p.GenericNameID = xr.GenericNameID"
||" JOIN SXAAMBDrugCategory dc with (nolock)"
||" ON xr.DrugCategoryID = dc.DrugCategoryID"
||" WHERE p.ClientGUID = " || sql(client_guid)
||" and (p.DrugName like {{{SINGLE-QUOTE}}}%dofetilide%{{{SINGLE-QUOTE}}} or p.DrugName like {{{SINGLE-QUOTE}}}%tikosyn%{{{SINGLE-QUOTE}}})"
||" and StatusType <> 8"
};
// if tikosyn is a home med then do not generate EKG orders
// only proceed if tikosyn is NOT a home med and patient is NOT in ER
if (not exist tikosyn_home_med) and ( er_patient is null ) then
// prompt user only if the reorder of tikosyn is a different dose (not a reorder)
// if user selects Yes, then create EKGs
// if user selects No, do not create EKGs
if (Evoking_order_frequency_code <> "Now") and (Evoking_order_frequency_code <> "STAT") then
if (first_tikosyn_order = false and tikosyn_reorder = false) then
Messagetext := "Patient has already received Tikosyn this visit and is ordered all required ECGs after the first 6 doses. Do you want to order ADDITIONAL ECGs after the next 6 doses with this Tikosyn order? " ||
"\n\nSelecting {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}} will add it to the order worksheet."
;
dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with Messagetext ,"Dofetilide (Tikosyn) ECG Orders","YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}};
if((dialogResult as string) = "Yes") then
order_six_EKG := true;
endif; //if((dialogResult as string) = "Yes") then
endif; //if (first_tikosyn_order = false and tikosyn_reorder = false) then
endif; //if (Evoking_order_frequency_code <> "Now") and (Evoking_order_frequency_code <> "STAT") then
// only order 6 x EKG if this is: 1) first tikosyn order
// or 2) reorder of a different dose and user selected {{{SINGLE-QUOTE}}}yes{{{SINGLE-QUOTE}}} to prompt
if (first_tikosyn_order = true) or (first_tikosyn_order = false and order_six_EKG = true) then
if (Evoking_order_frequency_code = "Now") or (Evoking_order_frequency_code = "STAT") then
// generate an EKG for 2.5 hours ahead of order time
target_time := EVOKINGOBJECT.RequestedDtm + 2 hours + 30 minutes;
target_hour := extract hour target_time;
target_min := extract minute target_time;
// create the order here
//Construct Object to pass to Unsubmitted Order Creation MLM
EKG_12_lead := NEW UnsubmittedOrder_obj WITH
[order_type := "Diagnostic",
item_name := "EKG 12 Lead",
item_modifier := "- for Tikosyn Order (STAT/Now dose)",
item_version := "",
coded_time := "Scheduled Time",
requested_time_hour := target_hour,
requested_time_min := target_min,
order_field_name := ("CARD EKG Indication 1", "Card Peformed By"),
order_field_value := ("Assess DrugThera Dysrhythmia", "South Hills Cardiology - M/S/Mac/F/G/G/L/P")
];
EKG_ISO_date_STAT := (extract year target_time) formatted with "%04d" || "-" ||
(extract month target_time) formatted with "%02d" || "-" ||
(extract day target_time) formatted with "%02d";
return_value := call create_ekg_order WITH (visit_guid, user_guid, client_guid, orderSessionType, "", EKG_12_lead, EKG_ISO_date_STAT);
endif; // if (Evoking_order_frequency_code = "Now") or (Evoking_order_frequency_code = "STAT") then
if (Evoking_order_frequency_code = "BID (09-21)" or Evoking_order_frequency_code = "BID" or Evoking_order_frequency_code = "Q12H") then
if (STAT_NOW_order_trigger = true) then
ordersneeded := 6;
target_dtm := EVOKINGOBJECT.RequestedDtm + 2 hours;
target_hour := extract hour target_dtm;
else // if (STAT_NOW_order_trigger = false) then
requested_hour := extract hour EVOKINGOBJECT.RequestedDtm;
ordersneeded := 6;
target_dtm := EVOKINGOBJECT.RequestedDtm;
if (requested_hour < 9) then
target_hour := 11;
elseif (requested_hour >= 9) and (requested_hour < 21) then
target_hour := 23;
elseif (requested_hour >= 21) then
target_hour := 11;
target_dtm := EVOKINGOBJECT.RequestedDtm + 1 day;
endif;
endif; // if (STAT_NOW_order_trigger = false) then
zero_zero := 00;
timeString_test := target_hour formatted with "%02d" || ":" || zero_zero formatted with "%02d" || ":" || zero_zero formatted with "%02d" ;
full_dtm_string := (extract month target_dtm) formatted with "%02d" || "-" || (extract day target_dtm) formatted with "%02d" || "-" || (extract year target_dtm) formatted with "%04d" || " " || timeString_test;
full_dtm := full_dtm_string as time;
k := ();
for k in (1 seqto ordersneeded) do
tikosyn_hour := extract hour full_dtm;
tikosyn_min := extract minute full_dtm;
// create the order here
//Construct Object to pass to Unsubmitted Order Creation MLM
EKG_12_lead_v2 := NEW UnsubmittedOrder_obj WITH
[order_type := "Diagnostic",
item_name := "EKG 12 Lead",
item_modifier := "- for tikosyn doses",
item_version := "",
coded_time := "Scheduled Time",
requested_time_hour := tikosyn_hour,
requested_time_min := tikosyn_min,
//requestedDate := requested_date,
order_field_name := ("CARD EKG Indication 1", "Card Peformed By"),
order_field_value := ("Assess DrugThera Dysrhythmia", "South Hills Cardiology - M/S/Mac/F/G/G/L/P")
];
EKG_ISO_date := (extract year full_dtm) formatted with "%04d" || "-" ||
(extract month full_dtm) formatted with "%02d" || "-" ||
(extract day full_dtm) formatted with "%02d";
return_value := call create_ekg_order WITH (visit_guid, user_guid, client_guid, orderSessionType, "", EKG_12_lead_v2, EKG_ISO_date);
//return_value := call create_ekg_order WITH (visit_guid, user_guid, client_guid, orderSessionType, "", EKG_12_lead_v2);
full_dtm := full_dtm + 12 hour;
enddo; // for k in (1 seqto ordersneeded) do
endif; // if (Evoking_order_frequency_code = "BID (09-21)" or Evoking_order_frequency_code = "BID" or Evoking_order_frequency_code = "Q12H") then
endif; // if (first_tikosyn_order = true) or (first_tikosyn_order = false and order_six_EKG = true) then
endif; // if (not exist tikosyn_home_med) and ( er_patient is null ) then
endif; // if (create_order = true) then
;;
evoke:
tikosyn_order_enter_event;
;;
logic:
if (called_by_editor) then
conclude false;
endif;
if (EvokingObject is null) then
conclude false;
endif;
conclude true;
;;
action:
;;
Urgency: 50;;
end: