Files
St.Clair/MLMStripper/bin/Debug/FORM/FORM_PRE_CARDIAC_PERIPHERAL_PROC.mlm

289 lines
12 KiB
Plaintext

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: