316 lines
14 KiB
Plaintext
316 lines
14 KiB
Plaintext
maintenance:
|
|
|
|
title: SCH_URINE_Culture_Alert;;
|
|
mlmname: SCH_URINE_Culture_Alert;;
|
|
arden: version 2.5;;
|
|
version: 15.3;;
|
|
institution: ;;
|
|
author: Shami Sharma;;
|
|
specialist: ;;
|
|
date: 2018-01-12;;
|
|
validation: testing;;
|
|
|
|
library:
|
|
purpose:
|
|
;;
|
|
explanation:
|
|
|
|
|
|
Change history
|
|
|
|
07.30.2018 DW CSR# 36700 - Remove "Quality Department" from the atert - Alter the text of the alert message
|
|
|
|
|
|
;;
|
|
keywords:
|
|
;;
|
|
knowledge:
|
|
type: data-driven;;
|
|
data:
|
|
|
|
log_execution_info:= FALSE;
|
|
|
|
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
|
|
include standard_libs;
|
|
SessionType := "Standard";
|
|
SessionReason := "";
|
|
RequestingSource := "";
|
|
user_IDType := "Primary";
|
|
order_creation_reason := "From MLM";
|
|
|
|
using "ObjectsPlusXA.SCM.Common";
|
|
using namespace "ObjectsPlusXA.SunriseClinicalManager.Common";
|
|
|
|
OrderEnter := event{OrderEnter User Order : where Name IN ("Urine Culture","Urine Culture (reflex)","Urinalysis with Reflex Culture","Routine/Microscopic Urinalysis") };
|
|
OrderInit := event{OrderInit User Order : where Name IN ("Urine Culture","Urine Culture (reflex)","Urinalysis with Reflex Culture","Routine/Microscopic Urinalysis") };
|
|
|
|
ClientGuid := EVOKINGOBJECT.ClientGUID;
|
|
ChartGuid := EVOKINGOBJECT.ChartGUID;
|
|
userguid := read last {UserInfo: GUID};
|
|
VisitGuid := EVOKINGOBJECT.ClientVisitGUID;
|
|
(LocationGUID,CName,IDcode,VisitIDcode) := read last {ClientVisit: CurrentLocationGUID,ClientDisplayName, IDCode,VisitIDCode };
|
|
(user_id ,Username):=read last {UserInfo: guid,idcode,DisplayName};
|
|
(UNIT) := read last { "select Top 1 case when cc.typecode = {{{SINGLE-QUOTE}}}unit{{{SINGLE-QUOTE}}} then cc.levelcode when b.typecode={{{SINGLE-QUOTE}}}unit{{{SINGLE-QUOTE}}} then b.levelcode when a.typecode={{{SINGLE-QUOTE}}}unit{{{SINGLE-QUOTE}}} then a.levelcode "
|
|
|| " when cv3l.typecode={{{SINGLE-QUOTE}}}unit{{{SINGLE-QUOTE}}} then cv3l.levelcode else null end as Unit From CV3ClientVisit CV With (nolock) "
|
|
|| " Inner Join Cv3Location L With (nolock) On L.Guid=CV.CurrentLocationGUID AND CV.Active=1 AND CV.VisitStatus={{{SINGLE-QUOTE}}}ADM{{{SINGLE-QUOTE}}} "
|
|
|| " Left Join Cv3ClientVisitLocation CVL With (nolock) ON CVL.ClientVisitGUID=CV.GUID Left Join CV3Location CV3L On CV3L.GUID=CVL.LocationGUID "
|
|
|| " Left Join CV3Location a With (nolock) on CV3L.parentguid= a.guid Left Join CV3Location b With (nolock) on a.parentguid = b.guid "
|
|
|| " left join cv3location cc With (nolock) on b.parentguid = cc.guid "
|
|
|| " WHERE CVL.Status={{{SINGLE-QUOTE}}}CUR{{{SINGLE-QUOTE}}} and CV.GUID = " || VisitGuid || " " };
|
|
|
|
order_alert_dest := destination {alert} with
|
|
[alert_type := warning,
|
|
short_message := "URINE CULTURE",
|
|
priority := "High",
|
|
scope := Chart,
|
|
rule_group := "Foley Order",
|
|
rule_number := 8050,
|
|
send_with_order := "DoNotSend",
|
|
alert_dialog_settings := "Must Comment",
|
|
display_alert := true];
|
|
IF(EvokingEventType = "OrderInit") THEN
|
|
/* Result := read last { " SELECT TOP 1 O.Name "
|
|
||" FROM Cv3Order (NOLOCK) O "
|
|
||" WHERE NAME in ({{{SINGLE-QUOTE}}}Foley Catheter{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Discontinue Foley Catheter{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Catheter: Foley{{{SINGLE-QUOTE}}}) "
|
|
||" AND O.StopDtm BETWEEN DATEADD(HOUR, -48, GETDATE()) AND GETDATE()"
|
|
||" AND O.ClientGUID = " || SQL(ClientGuid)
|
|
||" AND O.ChartGUID = " || SQL(ChartGuid)
|
|
||" AND O.ClientVisitGUID = " || SQL(VisitGuid)
|
|
||" ORDER BY CreatedWhen DESC "
|
|
};*/
|
|
FC_remove := read last {"SELECT Distinct CD.ClientVisitGUID, CD.ClientGUID, OCMI.Name AS ObsName,ISNULL(SFV.Value, o.ValueText) AS Value,(OD.CreatedWhen) AS ObsDate,CD.DocumentName "
|
|
||" ,ROW_NUMBER() OVER(PARTITION BY CD.ClientGUID ORDER BY OD.CreatedWhen DESC) AS rk "
|
|
||" INTO #TempRemove "
|
|
||" FROM CV3ClientVisit CV "
|
|
||" INNER JOIN CV3ClientDocument CD WITH (NOLOCK) ON CV.GUID = CD.ClientVisitGUID And CD.ClientGUID = CV.ClientGUID And CD.DocumentName like {{{SINGLE-QUOTE}}}%Adult Assessment/Intervention%{{{SINGLE-QUOTE}}} AND CD.Active = 1 AND CD.IsCanceled = 0 "
|
|
||" INNER JOIN CV3ObservationDocument OD WITH (NOLOCK) ON CD.GUID = OD.OwnerGUID AND OD.Active = 1 "
|
|
||" INNER JOIN CV3ObsCatalogMasterItem OCMI WITH (NOLOCK) ON OCMI.GUID = OD.ObsMasterItemGUID AND OCMI.Name in ( {{{SINGLE-QUOTE}}}AS urethral cath type{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}INV urethral cath removal{{{SINGLE-QUOTE}}}) "
|
|
||" LEFT JOIN CV3Observation O With (NoLock) ON OD.ObservationGUID = O.GUID "
|
|
||" LEFT JOIN SCMObsFSListValues SFV WITH (NOLOCK) ON SFV.ParentGUID = OD.ObservationDocumentGUID AND SFV.ClientGUID = Cv.ClientGUID AND SFV.Active = 1 "
|
|
||" WHERE (ISNULL(SFV.Value, o.ValueText) LIKE {{{SINGLE-QUOTE}}}%Remove%{{{SINGLE-QUOTE}}} OR ISNULL(SFV.Value, o.ValueText) LIKE {{{SINGLE-QUOTE}}}%Urethral Catheter Removed%{{{SINGLE-QUOTE}}}) AND OD.CreatedWhen >= DATEADD(HOUR, -48, GETDATE()) "
|
|
||" AND CD.ClientGUID = " || SQL(ClientGuid)
|
|
||" AND CD.ChartGUID = " || SQL(ChartGuid)
|
|
||" AND CD.ClientVisitGUID = " || SQL(VisitGuid)
|
|
|
|
||" SELECT ClientGUID FROM #TempRemove WHERE Rk=1 "
|
|
} ;
|
|
TempF := READ LAST {" SELECT Distinct CD.ClientVisitGUID, CD.ClientGUID, OCMI.Name AS ObsName,convert(float ,ISNULL(SFV.Value, o.ValueText)) AS Value,(OD.CreatedWhen) AS ObsDate, "
|
|
||" CD.DocumentName,ROW_NUMBER() OVER(PARTITION BY CD.ClientGUID ORDER BY OD.CreatedWhen DESC) AS rk "
|
|
||" INTO #tempF "
|
|
||" FROM CV3ClientVisit CV "
|
|
||" INNER JOIN CV3ClientDocument CD WITH (NOLOCK) ON CV.GUID = CD.ClientVisitGUID And CD.ClientGUID = CV.ClientGUID AND CD.Active = 1 AND CD.IsCanceled = 0 "
|
|
||" INNER JOIN CV3ObservationDocument OD WITH (NOLOCK) ON CD.GUID = OD.OwnerGUID AND OD.Active = 1 "
|
|
||" INNER JOIN CV3ObsCatalogMasterItem OCMI WITH (NOLOCK) ON OCMI.GUID = OD.ObsMasterItemGUID AND OCMI.Name in ({{{SINGLE-QUOTE}}}Farenheit{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}gen gen pe mea temp fahren{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}CVS temp fahrenheit CAL{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}sch_edtriage_fahrenheit NU{{{SINGLE-QUOTE}}})"
|
|
||" LEFT JOIN CV3Observation O With (NoLock) ON OD.ObservationGUID = O.GUID "
|
|
||" LEFT JOIN SCMObsFSListValues SFV WITH (NOLOCK) ON SFV.ParentGUID = OD.ObservationDocumentGUID AND SFV.ClientGUID = Cv.ClientGUID AND SFV.Active = 1"
|
|
||" WHERE CD.ClientGUID = " || SQL(ClientGuid)
|
|
||" AND CD.ChartGUID = " || SQL(ChartGuid)
|
|
||" AND CD.ClientVisitGUID = " || SQL(VisitGuid)
|
|
||" SELECT Value FROM #tempF WHERE Rk=1 "
|
|
};
|
|
|
|
|
|
|
|
WBC_Count := READ LAST {" SELECT DISTINCT
|
|
CV.ClientGUID,
|
|
CV.ChartGUID,
|
|
CV.GUID,
|
|
BO.ItemName,
|
|
ISNULL(BO.Value,{{{SINGLE-QUOTE}}}0{{{SINGLE-QUOTE}}}) VALUE,
|
|
SUBSTRING(CONVERT(VARCHAR, BO.Entered, 121), 1,16) AS BOEntered
|
|
,O.PerformedDtm As Entered
|
|
,ROW_NUMBER() OVER(PARTITION BY CV.ClientGUID ORDER BY BO.Entered DESC) AS rk
|
|
|
|
INTO #TT
|
|
FROM CV3ClientVisit CV WITH (NOLOCK)
|
|
INNER JOIN CV3Order O WITH (NOLOCK)
|
|
ON CV.ClientGUID = O.ClientGUID
|
|
AND CV.ChartGuid= O.ChartGuid
|
|
AND O.OrderStatusLevelNum IN (80,83,85)
|
|
AND CV.GUID = O.ClientVisitGUID
|
|
AND O.Name LIKE {{{SINGLE-QUOTE}}}%CBC%{{{SINGLE-QUOTE}}}
|
|
INNER JOIN CV3BasicObservation BO WITH (NOLOCK)
|
|
ON O.ClientGUID = BO.ClientGUID
|
|
AND O.ChartGuid=BO.ChartGuid
|
|
AND O.GUID = BO.OrderGUID
|
|
AND BO.Ishistory = 0
|
|
AND BO.ItemName = {{{SINGLE-QUOTE}}}White Blood Cell Count{{{SINGLE-QUOTE}}}
|
|
INNER JOIN CV3catalogItemName CIN
|
|
ON CIN.ResultItemGUID = BO.ResultItemGUID
|
|
AND (CIN.UpperName IN ( {{{SINGLE-QUOTE}}}WBC{{{SINGLE-QUOTE}}} , {{{SINGLE-QUOTE}}}WHITE BLOOD CELL COUNT{{{SINGLE-QUOTE}}}))
|
|
WHERE O.ClientGUID = " || SQL(ClientGuid)
|
|
||" AND O.ChartGUID = " || SQL(ChartGuid)
|
|
||" AND O.ClientVisitGUID = " || SQL(VisitGuid)
|
|
|
|
|| " SELECT Convert(Float,Value) AS F_VALUE FROM #TT WHERE Rk=1 "};
|
|
|
|
|
|
|
|
|
|
IF( Exists TempF) THEN
|
|
TempF_value:= TempF as number;
|
|
ELSE
|
|
TempF_value:= "Nill";
|
|
ENDIF;
|
|
|
|
IF( Exists WBC_Count) THEN
|
|
WBC_Count_value:= WBC_Count as number;
|
|
ELSE
|
|
WBC_Count_value:= "Nill";
|
|
ENDIF;
|
|
|
|
ShowAlert := False;
|
|
|
|
|
|
IF( Exists FC_remove) THEN
|
|
|
|
IF( TempF_value = "Nill" AND (WBC_Count_value AS NUMBER) < 11) THEN
|
|
ShowAlert := TRUE;
|
|
ENDIF;
|
|
IF( (TempF_value AS Number) < 100.4 AND WBC_Count_value= "Nill") THEN
|
|
ShowAlert := TRUE;
|
|
ENDIF;
|
|
IF( (TempF_value AS Number) < 100.4 AND (WBC_Count_value AS Number) < 11) THEN
|
|
ShowAlert := TRUE;
|
|
ENDIF;
|
|
|
|
IF ShowAlert THEN
|
|
alert_message := "Many patients experience dysuria within 48 hours of a Foley being removed. "
|
|
||"If your patient is not experiencing any other symptoms of a urinary tract infection and is not at risk, "
|
|
||"please consider waiting 24 hours and re-evaluating the need for a urine culture. \n\n"
|
|
||"If you would like to proceed with the order at this time, please place your rationale below.Contact Infection Control with questions. ";
|
|
|
|
//alert_message := "This patient recently had an indwelling catheter.Patients who recently had indwelling catheters frequently have dysuria. If no other clinical concern for UTI, consider delaying urine culture and reevaluating in 24-48 hrs. as a urine culture now may lead to unnecessary treatment.";
|
|
ENDIF;
|
|
ENDIF;
|
|
ENDIF;
|
|
|
|
IF(EvokingEventType = "OrderEnter") THEN
|
|
|
|
IF(EVOKINGOBJECT.Name IN ("Urine Culture","Urine Culture (reflex)","Urinalysis with Reflex Culture","Routine/Microscopic Urinalysis") ) THEN
|
|
|
|
(unsub_mlm_name_list,ConReason1_List ):= read { UNSUBMITTED Alert: MLMName,AlertComments Where MLMName = "SCH_URINE_Culture_Alert" };
|
|
for j in 1 seqto count ConReason1_List do
|
|
If EXISTS ConReason1_List[j] then
|
|
IndicationConsult := ConReason1_List[j];
|
|
|
|
Endif;
|
|
Enddo;
|
|
if(count(ConReason1_List)>0) THEN
|
|
|
|
|
|
orderItemName:="Infection Prevention Consult";
|
|
// Create a GENERAL order from a catalog item
|
|
try
|
|
|
|
|
|
// ClientVisit object
|
|
client_visit_obj := call {{{SINGLE-QUOTE}}}ClientVisit{{{SINGLE-QUOTE}}}.FindByPrimaryKey
|
|
with ((VisitGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
|
|
|
|
// GENERAL catalog item object
|
|
general_catalog_item := call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName
|
|
with orderItemName;
|
|
|
|
// CareProvider Object
|
|
requesting_care_provider_obj := call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey
|
|
with ((userguid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
|
|
|
|
// Location Object
|
|
location_guid := read last {"SELECT CurrentLocationGuid FROM CV3ClientVisit "
|
|
|| " WHERE ClientGuid = " || clientGUID};
|
|
location_obj := call {{{SINGLE-QUOTE}}}Location{{{SINGLE-QUOTE}}}.FindByPrimaryKey
|
|
with ((location_guid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
|
|
|
|
// Create GENERAL order
|
|
GeneralOrder_Obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder
|
|
with client_visit_obj,
|
|
general_catalog_item,
|
|
order_creation_reason,
|
|
requesting_care_provider_obj,
|
|
RequestingSource,
|
|
SessionType,
|
|
SessionReason,
|
|
location_obj,
|
|
"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
|
|
|
|
GeneralOrder_Obj.RequestedDate := "T";
|
|
void := call GeneralOrder_Obj.{{{SINGLE-QUOTE}}}SetEnterpriseDefinedDataItemValue<String>{{{SINGLE-QUOTE}}} with "C Diff Indication",( IndicationConsult AS {{{SINGLE-QUOTE}}}System.String{{{SINGLE-QUOTE}}});
|
|
|
|
void := call GeneralOrder_Obj.Save;
|
|
void := call GeneralOrder_Obj.Dispose;
|
|
|
|
|
|
endtry;
|
|
|
|
catch Exception ex
|
|
error_occurred := true;
|
|
error_message := "{{+R}}Error in saving prefilled auto order :{{-R}}\n" ||
|
|
ex.Message || "\n\n";
|
|
|
|
endcatch;
|
|
|
|
// Clean UP
|
|
if (location_obj IS NOT NULL) then
|
|
void := call location_obj.Dispose;
|
|
location_obj := NULL;
|
|
endif;
|
|
|
|
if (requesting_care_provider_obj IS NOT NULL) then
|
|
void := call requesting_care_provider_obj.Dispose;
|
|
requesting_care_provider_obj := NULL;
|
|
endif;
|
|
|
|
if (general_catalog_item IS NOT NULL) then
|
|
void := call general_catalog_item.Dispose;
|
|
general_catalog_item := NULL;
|
|
endif;
|
|
|
|
if (client_visit_obj IS NOT NULL) then
|
|
void := call client_visit_obj.Dispose;
|
|
client_visit_obj := NULL;
|
|
endif;
|
|
email_add:= "Janet.nordin@stclair.org; sharma.shami@stclair.org; shubha.rai@stclair.org";
|
|
//email_add:= "sharma.shami@stclair.org";
|
|
if exist email_add
|
|
then
|
|
primary_alert := destination { Email: reminder, "Email Alert - Infection Prevention Consult - Urine Order", low, chart, email_add };
|
|
primary_alert_message := "Consult Infection Prevention Order is Placed. \n"
|
|
|| "Date Ordered " ||Now||"\n"
|
|
|| "MRN: " || IDcode ||"\n"
|
|
|| "Visit ID No: " || VisitIDcode ||"\n"
|
|
|| "Unit: " || Unit ||"\n"
|
|
|| "Order Placed By: " || Username ||"\n"
|
|
|| "Indication for Consult: " || IndicationConsult ||"\n"
|
|
|| "Order Placed from : " || EVOKINGOBJECT.Name ||"\n" ;
|
|
else
|
|
primary_alert_dest := destination { Alert: Warning,"Provider/Email not found", high, chart, 7500 };
|
|
endif;
|
|
|
|
ENDIF;
|
|
ENDIF;
|
|
|
|
ENDIF;
|
|
|
|
|
|
;;
|
|
priority: 50
|
|
;;
|
|
evoke: OrderEnter; OrderInit; ;;
|
|
logic: Conclude True;
|
|
;;
|
|
action: IF ShowAlert THEN
|
|
|
|
write alert_message at order_alert_dest;
|
|
|
|
|
|
ENDIF;
|
|
IF exist email_add
|
|
then
|
|
write primary_alert_message at primary_alert;
|
|
ENDIF;
|
|
|
|
;;
|
|
Urgency: 50;;
|
|
end:
|