Files
St.Clair/MLMStripper/bin/Debug/SCH/SCH_CDIFF_ALERT.mlm

156 lines
7.4 KiB
Plaintext

maintenance:
title: SCH_CDiff_Alert;;
mlmname: SCH_CDiff_Alert;;
arden: version 2.5;;
version: 15.3;;
institution: ;;
author: Shami Sharma;;
specialist: ;;
date: 2016-06-27;;
validation: testing;;
library:
purpose:
;;
explanation: Show alert on placing C-Diff order if positive result comes for Toxigenic C Difficile result item for the save visit
Change history
04.16.2018 DJW CSR# 36594 - Altered to check for existing positive CDiff result in the last 90 days
07/10/2019 JML CSR# 38386: Modified logic to auto-check lab test based on ED vs. Inpatient location.
;;
keywords:
;;
knowledge:
type: data-driven;;
data:
Order_Event_Init := event{OrderSetInit User OrderSet : WHERE OrderSetName IN ("Physician Clostridium Difficile Order Set", "Clostridium Difficile Nursing Standing Order") };
ClientGuid := EVOKINGOBJECT.ClientGUID;
ChartGuid := EVOKINGOBJECT.ChartGUID;
userguid := read last {UserInfo: GUID};
VisitGuid := EVOKINGOBJECT.ClientVisitGUID;
OSName := EvokingObject.OrderSetName;
//(this_order_id, this_order) := read last {OrderSet : GUID, OrderSetName Referencing EvokingObject};
order_alert_dest := destination {alert} with
[alert_type := warning,
short_message := "Physician Clostridium Difficile Order Set",
priority := "High",
scope := Chart,
rule_group := "Laxatives Order",
rule_number := 8050,
send_with_order := "DoNotSend",
alert_dialog_settings := "Must Comment",
display_alert := true];
send_alert:= "DoNotSend";
cdiff_alert_dest:= destination { Alert: warning, "C Diff Result Alert", high, chart, "Physician Clostridium Difficile Order Set MLM", 15042, send_alert, "No Override Allowed" };
// Determine if the patient has positive cdiff result in the past 90 days
CDiffResult := read last
{ " Select tol.text + {{{SINGLE-QUOTE}}} - {{{SINGLE-QUOTE}}} + cast (convert(char(10), bo.TouchedWhen,110) as varchar) + {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} + cast (convert(char(5), bo.TouchedWhen,114) as varchar) "
|| " from cv3BasicObservation bo with (nolock) "
|| " left outer join CV3TextualObservationLine tol with (nolock) on bo.clientguid = tol.clientguid and bo.GUID = tol.ObservationGUID "
|| " where bo.TouchedWhen > Convert(date,dateadd(day, -90, getdate())) and "
|| " bo.itemname IN ( {{{SINGLE-QUOTE}}}Toxigenic Clostridium Difficile by PCR{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Clostridium Difficile Screening{{{SINGLE-QUOTE}}} ) and tol.Text like {{{SINGLE-QUOTE}}}%positive%{{{SINGLE-QUOTE}}} and bo.IsHistory = {{{SINGLE-QUOTE}}}0{{{SINGLE-QUOTE}}} and "
|| " bo.clientguid = " || SQL(ClientGuid) || " "
|| " order by bo.TouchedWhen desc "
};
If exists CDiffResult then
cdiff_alert_message := "This patient was postitive for C.diff within the last 90 days. In a symptomatic patient best practice is to isolate and treat with oral Vancomycin and to not re-test the patient."
||" \n\n Please call Infection Prevention at 412-942-2230 with questions."; // \n\n C.diff value = " || CDiffResult || " ";
else
DOC := read last { " select count(1) from CV3User U (NOLOCK) "
||" INNER JOIN SXAAMCareProviderSpecialtyXREF s (nolock) ON s.CareProviderGUID=u.GUID "
||" INNER JOIN CV3Discipline d (nolock) on d.GUID=s.DisciplineGUID "
||" WHERE CODE = {{{SINGLE-QUOTE}}}Infectious Diseases{{{SINGLE-QUOTE}}} AND U.GUID = " || SQL(userguid)
};
IF ( DOC = 0 AND OSName = "Physician Clostridium Difficile Order Set" ) THEN
Result := read last { " SELECT TOP 1 O.Name "
||" FROM Cv3Order (NOLOCK) O "
||" INNER JOIN CV3OrderTaskOccurrence ot on ot.ClientGUID=O.ClientGUID and ot.OrderGUID=O.GUID and ot.TaskStatusCode={{{SINGLE-QUOTE}}}Performed{{{SINGLE-QUOTE}}} "
||" WHERE ot.PerformedFromDtm >= DATEADD(HOUR, -48, GETDATE())"
||" AND O.Status= {{{SINGLE-QUOTE}}}ACTIVE{{{SINGLE-QUOTE}}} AND O.ActivateStatus={{{SINGLE-QUOTE}}}AUA1{{{SINGLE-QUOTE}}} "
||" AND (NAME LIKE {{{SINGLE-QUOTE}}}%BISACODYL%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%CALCIUM POLYCARBOPHIL%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%DOCUSATE CALCIUM%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%DOCUSATE SODIUM%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%GLYCERIN SUPPOSITORY%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%MAGNESIUM CITRATE%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%MAGNESIUM HYDROXIDE%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%MINERAL OIL%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%POLYETHYLENE GLYCOL%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%PSYLLIUM%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%SENNA%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%SENNA/DOCUSATE SODIUM%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%SODIUM BIPHOSPHATE/SODIUM PHOSPHATE%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Dulcolax%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Fibercon%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Surfak%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Colace%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Milk of Magnesia%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%CoLyte%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%GoLYTELY%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%NuLytely%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%OCL Solution%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%MiraLax%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%MoviPrep%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Hydrocil Instant%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Senokot%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Peri-Colace%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Senokot S%{{{SINGLE-QUOTE}}} OR "
||" NAME LIKE {{{SINGLE-QUOTE}}}%Fleets Enema%{{{SINGLE-QUOTE}}} ) "
||" AND O.ClientGUID = " || SQL(ClientGuid)
||" AND O.ChartGUID = " || SQL(ChartGuid)
||" AND O.ClientVisitGUID = " || SQL(VisitGuid)
};
alert_message := "This patient has received laxatives in the last 48 hours. "
|| "C-diff testing is not recommended in this setting. "
|| "If you have valid clinical rationale for ordering C-diff in this context please note your rationale in the box below. ";
ENDIF; // Doc Exist
endif;
;;
priority: 50
;;
evoke: Order_Event_Init;
;;
logic:
Conclude True;
;;
action:
IF(EXISTS Result ) THEN
write alert_message at order_alert_dest;
ENDIF;
IF(EXISTS CDiffResult ) THEN
write cdiff_alert_message at cdiff_alert_dest;
ENDIF;
;;
Urgency: 50;;
end: