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,397 @@
maintenance:
title: FORM_FUNC_ANTICOAGULANT_CHECK;;
mlmname: FORM_FUNC_ANTICOAGULANT_CONFLICT_CHECK;;
arden: version 2.5;;
version: 5.50;;
institution: St. Clair Hospital;;
author: Juliet M. Law, Allscripts, Inc. Ext. 7461;;
specialist: ;;
date: 2012-03-28;;
validation: testing;;
library:
purpose:
Called from any Form or Order Set MLM.
Used to check for existing or unsubmitted anticoagulant orders that conflict with current anticoagulant selection.
;;
explanation: This MLM was written to be called from Forms and Order Sets that require a check for an anticoagulant conflict.
Change History:
2012.03.28 JML Created
2012.05.09 JML Changed Lovenox duplicate med alert to soft stop
2012.05.16 JML Changed Heparin duplicate med alert to soft stop
2013.05.02 JML CSR #31334: Leapfrog changes; added alert support for
Fondaparinux (Arixtra), Argatroban, and Apixaban (Eliquis)
2014.01.22 JML CSR #31334: Adding conflict checks for Warfarin and Xarelto
to support ortho post op order sets.
2018.09.07 JML CSR 37062: Adding conflict check for Post Op Shoulder OS.
2018.11.16 JML CSR 37344/37345/37346: Added new DVT Anticoagulant Orders- Ortho Procedures order set; called from some
ortho post op order sets.
;;
keywords: anticoagulant, conflict, called mlm, func
;;
knowledge:
type: data-driven;;
data:
//Establish Communication, Form, ClientInfo objects
(this_communication,
this_form,
client_info_obj,
selectedMed) := argument;
//Include standard .Net libraries
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
//Create local session object
local_session := cds_session.local;
//Define form values passed in through the Form and Communication Object
field_list := this_form.fields;
CallingField := this_communication.CallingFieldName;
CallingEvent := this_communication.CallingEvent;
//Patient GUIDs
client_guid := this_communication.ClientGUID;
visit_guid := this_communication.ClientVisitGUID;
chart_guid := this_communication.ChartGUID;
//Event values
CallingEvent := this_communication.CallingEvent;
CallingField := this_communication.CallingFieldName;
//General variables to control logic flow
stop := false;
severity := "";
//Define anticoagulant medications that require conflict check
(anticoagulant_meds) := READ {"SELECT ocmi.Name"
|| " FROM CV3OrderCatalogMasterItem ocmi WITH (NOLOCK)"
|| " WHERE ocmi.TherapeuticCategory = {{{SINGLE-QUOTE}}}coagulation modifiers | anticoagulants{{{SINGLE-QUOTE}}}"
|| " and ocmi.Name not like {{{SINGLE-QUOTE}}}zz%{{{SINGLE-QUOTE}}}"
|| " ORDER BY ocmi.Name"};
heparin_inj_meds := (anticoagulant_meds WHERE anticoagulant_meds IN ("Heparin Inj",
"Heparin Inj -",
"Heparin Inj-",
"Heparin Inj.") );
heparin_iv_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Heparin%25,000%"
OR anticoagulant_meds MATCHES PATTERN "Heparin Infusion%");
lovenox_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Enoxaparin%");
pradaxa_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Dabigatran%");
xarelto_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Rivaroxaban%");
warfarin_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Warfarin%");
arixtra_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Fondaparinux%");
argatroban_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Argatroban%");
apixaban_meds := (anticoagulant_meds WHERE anticoagulant_meds MATCHES PATTERN "Apixaban%");
//Check local session variable for unsubmitted orders
if (((count local_session.SessionUnsubmittedAnticoagulantOrders) as number) > 0) then
(existing_orders) := local_session.SessionUnsubmittedAnticoagulantOrders;
order_count := count (existing_orders) as number;
else
//Check for existing orders
(existing_orders) := read {"SELECT o.Name, o.TouchedWhen "
|| " FROM CV3Order o with (nolock) JOIN CV3OrderCatalogMasterItem ocmi 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 LIKE {{{SINGLE-QUOTE}}}Enoxaparin%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Heparin%25,000%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Heparin Inj%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Dabigatran%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Rivaroxaban%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Warfarin%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Fondaparinux%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Argatroban%{{{SINGLE-QUOTE}}}"
|| " OR o.Name LIKE {{{SINGLE-QUOTE}}}Apixaban%{{{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};
order_count := count (existing_orders) as number;
endif;
if (order_count > 0) then
//Patient has an existing (submitted or unsubmitted) anticoagulant medication order
//Iterate through each existing order and determine if there is a conflict
//Based on which new anticoagulant medication is selected on order set
for existingItem IN existing_orders do
if (selectedMed = "Heparin Inj" OR selectedMed matches pattern "%Heparin%" ) then
if ((existingItem IN lovenox_meds)
OR (existingItem IN pradaxa_meds)
OR (existingItem IN xarelto_meds)
OR (existingItem IN heparin_iv_meds)
OR (existingItem IN arixtra_meds)
OR (existingItem IN argatroban_meds)
OR (existingItem IN apixaban_meds)) then
//hard stop, no override
stop := true;
severity := "high";
stop_message := "Avoid concurrent use of " || selectedMed
|| " and " || existingItem
|| " due to increased bleeding risk.\n\nContact physician to adjust orders."
|| "\n\nYou MUST discontinue " || existingItem || " before " || selectedMed
|| " can be ordered.";
elseif (existingItem IN heparin_inj_meds) then
stop := true;
severity := "low";
stop_message := "Duplicate Medication Alert!\n\nThis patient already has an order for Heparin SQ."
|| " You MUST discontinue the previous Heparin SQ order before placing a new "
|| "Heparin SQ order, UNLESS the therapies will not be overlapping."
|| "\n\nIf this is a One Time dose, OR if the therapies will not overlap and will be given sequentially, click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|| "\n\nOtherwise, click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
elseif (selectedMed matches pattern "Enoxaparin Inj%") then
if ((existingItem IN heparin_iv_meds)
OR (existingItem IN argatroban_meds)) then
//soft stop, priority low, must acknowledge
stop := true;
severity := "low";
stop_message := selectedMed || " and " || existingItem
|| " should not be used together due to increased bleeding risk except when transitioning from "
|| existingItem || " to " || selectedMed || "."
|| "\n\nIf your Patient is transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}"
|| "\n\nIf your Patient is NOT transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}";
elseif ((existingItem IN heparin_inj_meds)
OR (existingItem IN pradaxa_meds)
OR (existingItem IN xarelto_meds)
OR (existingItem IN arixtra_meds)
OR (existingItem IN apixaban_meds)) then
//hard stop, no override
stop := true;
severity := "high";
stop_message := "Avoid concurrent use of " || selectedMed || " and "
|| existingItem || " due to increased bleeding risk.\n\nContact physician to adjust orders."
|| "\n\nYou MUST discontinue " || existingItem || " before " || selectedMed
|| " can be ordered.";
elseif ((existingItem IN lovenox_meds)) then
stop := true;
severity := "low";
stop_message := "Duplicate Medication Alert!\n\nThis patient already has an order for Enoxaparin."
|| " You MUST discontinue the previous Enoxaparin order before placing a new "
|| "Enoxaparin order, UNLESS the therapies will not be overlapping."
|| "\n\nIf this is a One Time dose, OR if the therapies will not overlap and will be given sequentially, click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|| "\n\nOtherwise, click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
elseif (selectedMed = "Fondaparinux Inj") then
if ((existingItem IN lovenox_meds)
OR (existingItem IN heparin_inj_meds)
OR (existingItem IN heparin_iv_meds)
OR (existingItem IN pradaxa_meds)
OR (existingItem IN xarelto_meds)
OR (existingItem IN apixaban_meds)) then
stop := true;
severity := "high";
stop_message := "Avoid concurrent use of " || selectedMed || " and "
|| existingItem || " due to increased bleeding risk.\n\nContact physician to adjust orders."
|| "\n\nYou MUST discontinue " || existingItem || " before " || selectedMed
|| " can be ordered.";
if (existingItem IN pradaxa_meds) then
stop_message := stop_message || "\n\n"
|| "If CrCl is greater than or equal to 30 ml/min, begin Arixtra"
|| " 12 hours after last Pradaxa dose."
|| "\n \n If CrCl is less than 30 ml/min, begin Arixtra"
|| " 24 hours after last Pradaxa dose.";
elseif (existingItem IN xarelto_meds) then
stop_message := stop_message || "\n\n"
|| "When switching from Xarelto to Arixtra"
|| ", discontinue Xarelto and give Arixtra"
|| " when the next Xarelto dose would have been due.";
endif;
elseif (existingItem IN argatroban_meds) then
stop := true;
severity := "low";
stop_message := selectedMed || " and " || existingItem
|| " should not be used together due to increased bleeding risk except when transitioning from "
|| existingItem || " to " || selectedMed || "."
|| "\n\nIf your Patient is transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}"
|| "\n\nIf your Patient is NOT transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}";
elseif (existingItem IN arixtra_meds) then
stop := true;
severity := "low";
stop_message := "Duplicate Medication Alert!\n\nThis patient already has an order for Fondaparinux."
|| " You MUST discontinue the previous Fondaparinux order before placing a new "
|| "Fondaparinux order, UNLESS the therapies will not be overlapping."
|| "\n\nIf this is a One Time dose, OR if the therapies will not overlap and will be given sequentially, click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|| "\n\nOtherwise, click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
elseif ( selectedMed matches pattern "Warfarin%" ) then
if ( ( existingItem IN xarelto_meds )
OR ( existingItem IN apixaban_meds ) ) then
stop := true;
severity := "low";
stop_message := selectedMed || " and " || existingItem || " should not be used together"
|| " due to increased bleeding risk.\n\nContact physician to adjust orders."
|| "\n\nWhen converting from " || existingItem || " to " || selectedMed
|| ", discontinue " || existingItem
|| " because " || existingItem || " affects the INR."
|| "\n\nUse Heparin or Lovenox with " || selectedMed
|| " as bridge therapy while waiting for the INR to rise if therapeutic levels are needed immediately."
|| "\n\nClick {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}} to contine ordering " || selectedMed
|| ", otherwise click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
elseif ( selectedMed matches pattern "Rivaroxaban%" ) then
if ( ( existingItem IN heparin_inj_meds )
OR ( existingItem IN lovenox_meds )
OR ( existingItem IN pradaxa_meds )
OR ( existingItem IN warfarin_meds )
OR ( existingItem IN arixtra_meds )
OR ( existingItem IN apixaban_meds ) ) then
stop := true;
severity := "high";
stop_message := "Avoid concurrent use of " || selectedMed || " and "
|| existingItem || " due to increased bleeding risk.\n\nContact physician to adjust orders.";
if ( existingItem IN warfarin_meds ) then
stop_message := stop_message || "\n\nWhen converting from " || existingItem
|| " to " || selectedMed
|| ", discontinue " || existingItem || " and start " || selectedMed
|| " when INR is less than 3.0";
elseif ( existingItem IN arixtra_meds ) then
stop_message := stop_message || "\n\nWhen converting from " || existingItem || " to " || selectedMed
|| ", discontinue " || existingItem || " and start " || selectedMed
|| " 0-2 hours before the next " || existingItem || " dose would have been due.";
elseif ( existingItem IN apixaban_meds ) then
stop_message := stop_message || "\n\nWhen converting from " || existingItem
|| " to " || selectedMed
|| ", discontinue " || existingItem
|| " and start " || selectedMed
|| " when the next " || existingItem
|| " dose would have been due.";
elseif ( existingItem IN lovenox_meds ) then
stop_message := stop_message || "\n\nWhen converting from " || existingItem
|| " to " || selectedMed
|| ", discontinue " || existingItem
|| " and start " || selectedMed
|| " 0-2 hours before the next " || existingItem
|| " dose would have been due.";
endif;
elseif ( ( existingItem IN heparin_iv_meds )
OR ( existingItem IN argatroban_meds ) ) then
stop := true;
severity := "low";
stop_message := selectedMed || " and " || existingItem
|| " should not be used together due to increased bleeding risk"
|| " except when transitioning from " || existingItem || " to "
|| selectedMed || "."
|| "\n\nStart " || selectedMed || " when " || existingItem
|| " infusion is stopped."
|| "\n\nIf your Patient is transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}"
|| "\n\nIf your Patient is NOT transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}";
elseif ( existingItem IN xarelto_meds ) then
stop := true;
severity := "low";
stop_message := "Duplicate Medication Alert!\n\nThis patient already has an order for Xarelto."
|| " You MUST discontinue the previous Xarelto order before placing a new "
|| "Xarelto order, UNLESS the therapies will not be overlapping."
|| "\n\nIf this is a One Time dose, OR if the therapies will not overlap and will be given sequentially, click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|| "\n\nOtherwise, click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
elseif ( selectedMed matches pattern "Apixaban%" ) then
if ( ( existingItem IN lovenox_meds )
OR ( existingItem IN arixtra_meds )
OR ( existingItem IN heparin_inj_meds )
OR ( existingItem IN warfarin_meds )
OR ( existingItem IN pradaxa_meds )
OR ( existingItem IN xarelto_meds ) ) then
stop := true;
severity := "high";
if ( existingItem IN warfarin_meds ) then
stop_message := "When converting from " || existingItem
|| " to " || selectedMed
|| ", discontinue " || existingItem
|| " and start " || selectedMed
|| " when INR less then 2.0.";
else
stop_message := "When converting from " || existingItem
|| " to " || selectedMed
|| ", discontinue " || existingItem
|| " and start " || selectedMed
|| " when the next " || existingItem
|| " dose would have been due.";
endif;
elseif ( ( existingItem IN heparin_iv_meds )
OR ( existingItem IN argatroban_meds ) ) then
stop := true;
severity := "low";
stop_message := selectedMed || " and " || existingItem
|| " should not be used together due to increased bleeding risk"
|| " except when transitioning from " || existingItem || " to "
|| selectedMed || "."
|| "\n\nStart " || selectedMed || " when " || existingItem
|| " infusion is stopped."
|| "\n\nIf your Patient is transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}"
|| "\n\nIf your Patient is NOT transitioning from " || existingItem || " to " || selectedMed
|| ", click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}";
elseif ( existingItem IN apixaban_meds ) then
stop := true;
severity := "low";
stop_message := "Duplicate Medication Alert! This patient already has an order for Apixaban."
|| " You MUST discontinue the previous Apixaban "
|| "order before placing a new Apixaban order, UNLESS the therapies will not be overlapping."
|| "\n\nIf this is a One Time dose, OR if the therapies will not overlap and will be given sequentially, click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}}."
|| "\n\nOtherwise, click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}}.";
endif;
endif;
enddo;
endif;
;;
priority: 50
;;
evoke:
;;
logic:
conclude true;
;;
action:
//Return to calling function whether a stop
// (i.e. conflict) is true, the message to display,
// and the severity (i.e. hard or soft stop)
return stop, stop_message, severity;
;;
Urgency: 50;;
end: