maintenance: title: FORM_PRE_CARDIAC_PERIPHERAL_PROC;; mlmname: FORM_PRE_CARDIAC_PERIPHERAL_PROC;; arden: version 2.5;; version: 6.10;; institution: St. Clair Hospital;; author: Shivprasad Jadhav;; specialist: Shivprasad jadhav, Allscripts Corporation;; date: 2015-02-10;; validation: testing;; library: purpose: 1) Check for the EKG 12 lead order for past 14 days on the patient visit and if no order found then preselect EKG 12 lead order 2) Check for the below order status of “940” in last 96 hours and if order found with this status then preselect the respective order. - CBC (Includes Diff) - BUN - Potassium Plasma/ Serum - Prothrombin/INR - Creatinine ;; explanation: Change History ----------------- 13.01.2015 JML CSR# 32940: Created ;; keywords: Called MLMs ;; knowledge: type: data-driven;; data: // This MLM is passed three arguments, of types // communication_type, form_type and client info object respectively. (this_communication, // Communication object this_form, // Form object client_info_obj //Arden ClientInfo object ) := argument; /*******************Make Changes To Spelling And Flags In This Section*******************/ /* Set to true if a decision.log is needed.*/ log_execution_info := FALSE; /***************************************************************************************/ // Initialize error message error_message:=""; // Assigns fields passed in the Form object to the Field object field_list:= this_form.fields; client_guid := this_communication.ClientGUID; visit_guid := this_communication.ClientVisitGUID; chart_guid := this_communication.ChartGUID; //pObj := this_communication.PrimaryObj; CallingEvent := this_communication.CallingEvent; CallingField := this_communication.CallingFieldName; item_event := this_communication.itemevent; form_type := this_communication.formtype; //-----------BEGIN COPY SECTION------------------- DisplayNewScheduled := first of (field_list.Value where field_list.DataItemName = "LAB_CB_Alternate Priorities"); if (DisplayNewScheduled) then Call_UserFriendly_Lab_Priorities := mlm {{{SINGLE-QUOTE}}}SCH_LAB_PRIORITY_OPTIONS_CALLED{{{SINGLE-QUOTE}}}; (this_communication,this_form) := call Call_UserFriendly_Lab_Priorities with (this_communication,this_form,client_info_obj); endif; //-----------END COPY SECTION------------------- //Retrieve relevant form fields Labs_96Hr := last of ( field_list WHERE field_list.DataItemName = "MultiOrderCheckBox" and field_list.Label = "Labs within 96 hrs of procedure"); //and field_list.Control_MultiFieldOccNum = 5); Labs_96Hr_Val := Labs_96Hr.Value; if ( CallingEvent = "FormOpen" ) then //Check to see if patient is on continuous heparin EKG_12_Check := read {"SELECT o.Name" || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID" || " WHERE cv.ClientGUID = " || Sql(client_guid) || " AND o.NAME IN ( {{{SINGLE-QUOTE}}}EKG 12 Lead{{{SINGLE-QUOTE}}} ) " || " AND DATEDIFF(DD, o.ARRIVALDTM, GetDate()) <= 14" || " AND o.OrderStatusCode NOT IN ({{{SINGLE-QUOTE}}}CANC{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}CAND{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}DISCD{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}DISC{{{SINGLE-QUOTE}}})"}; //|| " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}})"}; If Length(EKG_12_Check) is NULL Then EKG :=1; Else EKG :=2; EndIf; //EKG Grid And Its Order Value Multi_Grid := First of ( field_list where field_list.DataItemName = "MultiOrderGrid" and field_list.Label = "Diagnostic Test") ; Multi_Grid_fields := Multi_Grid.Value; item1 := Multi_Grid_fields[1]; If EKG =1 Then Item1.IsSelected := TRUE ; //item1.IsReadonly := TRUE ; Else Item1.IsSelected := FALSE; //item1.IsReadonly := FALSE ; EndIF; lab_name :="abc"; ( lab_name_Potassium ) := read {"SELECT o.Name " || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID" || " WHERE cv.ClientGUID = " || Sql(client_guid) || " " || " AND (o.NAME IN (Select Distinct OCMI.Name " || " from CV3ResultComponent RC (NoLock) " || " INNER JOIN CV3ResultCatalogItem RCI1 (NoLock) " || " ON RC.ItemChildGUID = RCI1.GUID " || " INNER JOIN CV3ResultCatalogItem RCI2 (NoLock) " || " ON RC.ItemParentGUID = RCI2.GUID " || " INNER JOIN CV3OrderCatalogMasterItem OCMI (NoLock) " || " ON RCI2.OrderMasterItemGUID = OCMI.GUID " || " Where RCI1.ItemName Like {{{SINGLE-QUOTE}}}%Potassium Plasma/Serum%{{{SINGLE-QUOTE}}} ) or o.NAME ={{{SINGLE-QUOTE}}}Potassium Plasma/Serum{{{SINGLE-QUOTE}}}) " || " AND DATEDIFF(HH, o.ARRIVALDTM, GetDate()) <= 96 " || " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}})"}; ( lab_name_BUN ) := read {"SELECT o.Name " || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID" || " WHERE cv.ClientGUID = " || Sql(client_guid) || " AND (o.NAME IN (Select Distinct OCMI.Name " || " from CV3ResultComponent RC (NoLock) " || " INNER JOIN CV3ResultCatalogItem RCI1 (NoLock) " || " ON RC.ItemChildGUID = RCI1.GUID " || " INNER JOIN CV3ResultCatalogItem RCI2 (NoLock) " || " ON RC.ItemParentGUID = RCI2.GUID " || " INNER JOIN CV3OrderCatalogMasterItem OCMI (NoLock) " || " ON RCI2.OrderMasterItemGUID = OCMI.GUID " || " Where RCI1.ItemName like {{{SINGLE-QUOTE}}}%BUN%{{{SINGLE-QUOTE}}} ) or o.NAME ={{{SINGLE-QUOTE}}}BUN{{{SINGLE-QUOTE}}} ) " || " AND DATEDIFF(HH, o.ARRIVALDTM, GetDate()) <= 96 " //1400 || " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}})"}; ( lab_name_Creatinine ) := read {"SELECT o.Name " || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID" || " WHERE cv.ClientGUID = " || Sql(client_guid) || " AND (o.NAME IN (Select Distinct OCMI.Name " || " from CV3ResultComponent RC (NoLock) " || " INNER JOIN CV3ResultCatalogItem RCI1 (NoLock) " || " ON RC.ItemChildGUID = RCI1.GUID " || " INNER JOIN CV3ResultCatalogItem RCI2 (NoLock) " || " ON RC.ItemParentGUID = RCI2.GUID " || " INNER JOIN CV3OrderCatalogMasterItem OCMI (NoLock) " || " ON RCI2.OrderMasterItemGUID = OCMI.GUID " || " Where RCI1.ItemName Like {{{SINGLE-QUOTE}}}%Creatinine%{{{SINGLE-QUOTE}}} ) or o.NAME ={{{SINGLE-QUOTE}}}Creatinine{{{SINGLE-QUOTE}}} ) " || " AND DATEDIFF(HH, o.ARRIVALDTM, GetDate()) <= 96 " //1400 || " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}})"}; //Check to see if patient had these labs drawn in last 96 hours ( lab_name_CBC ) := read {"SELECT o.Name " || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID " || " WHERE cv.ClientGUID = " || Sql(client_guid) || " AND o.NAME IN ({{{SINGLE-QUOTE}}}CBC (Includes Diff){{{SINGLE-QUOTE}}}) " || " AND DATEDIFF(HH, o.ARRIVALDTM, GetDate()) <= 96 " //96 " //1400" //|| " AND DATEDIFF(DD, o.ARRIVALDTM, GetDate()) <= 60 " //1400" || " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}}) "}; ( lab_name_Prothrombin ) := read {"SELECT o.Name " || " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK)" || " ON cv.GUID = o.ClientVisitGUID" || " AND cv.ClientGUID = o.ClientGUID" || " AND cv.ChartGUID = o.ChartGUID " || " WHERE cv.ClientGUID = " || Sql(client_guid) || " AND o.NAME IN ( {{{SINGLE-QUOTE}}}Prothrombin/INR{{{SINGLE-QUOTE}}} ) " || " AND DATEDIFF(HH, o.ARRIVALDTM, GetDate()) <= 96 " //96 " //1400" //|| " AND DATEDIFF(DD, o.ARRIVALDTM, GetDate()) <= 14 " //1400" || " AND o.OrderStatusCode IN ({{{SINGLE-QUOTE}}}SPRV{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESF{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESI{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}RESC{{{SINGLE-QUOTE}}}) "}; //Len1 :=Length(lab_name_Potassium); If (Not Exist lab_name_Potassium ) Then lab_name := lab_name || ",Potassium Plasma/Serum"; EndIf; //Len2 :=Length( lab_name_BUN ) ; if (Not Exist lab_name_BUN ) Then lab_name := lab_name || ",BUN"; EndIf; //Len3 :=Length ( lab_name_Creatinine ); if ( Not Exist lab_name_Creatinine) Then lab_name := lab_name || ",Creatinine" ; EndIf; // Len4 :=Length ( lab_name_CBC ); if not exists lab_name_CBC Then lab_name := lab_name || ",CBC (Includes Diff)" ; EndIf; //Len5 :=Length ( lab_name_Prothrombin ); if ( Not Exist lab_name_Prothrombin) Then lab_name := lab_name || ",Prothrombin/INR" ; EndIf; (New_lab_name) := Read { " IF OBJECT_ID({{{SINGLE-QUOTE}}}tempdb..#TempTab{{{SINGLE-QUOTE}}}) IS NOT NULL DROP TABLE #TempTab " || " create table #TempTab(Data varchar(50)) " || " declare @InStr varchar(100) = " || Sql(lab_name) || " SET @InStr = REPLACE(@InStr + {{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}},,{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}) " || " DECLARE @SP INT " || " DECLARE @VALUE VARCHAR(1000) " || " WHILE PATINDEX({{{SINGLE-QUOTE}}}%,%{{{SINGLE-QUOTE}}}, @INSTR ) <> 0 " || " BEGIN " || " SELECT @SP = PATINDEX({{{SINGLE-QUOTE}}}%,%{{{SINGLE-QUOTE}}},@INSTR) " || " SELECT @VALUE = LEFT(@INSTR , @SP - 1) " || " SELECT @INSTR = STUFF(@INSTR, 1, @SP, {{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}) " || " INSERT INTO #TempTab(Data) VALUES (@VALUE) " || " END " || " SELECT * FROM #TempTab " }; if ( exists lab_name ) then for lab in 1 seqto ( count Labs_96Hr_Val ) do if ( Labs_96Hr_Val[lab].Name IN New_lab_name ) then Labs_96Hr_Val[lab].IsSelected := true; else Labs_96Hr_Val[lab].IsSelected := false; endif; enddo; else //No labs exist for this patient, select all labs Labs_96Hr_Val.IsSelected := ( true, true, true, true, True ); endif; endif; //End FormOpen Event ;; evoke: // No evoke statement ;; logic: conclude true; ;; action: // This MLM returns two parameters, of types communication_type and form_type respectively. return this_communication, this_form; ;; end: