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: