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

316 lines
14 KiB
Plaintext

maintenance:
title: SCH_LAB_PRIORITY_OPTIONS_CALLED;;
mlmname: SCH_LAB_PRIORITY_OPTIONS_CALLED;;
arden: version 2;;
version: 4.50;;
institution: St Clair Isolation Set MLM;;
author: Eclipsys Corp;;
specialist: Shawn Head;;
date: 2014-11-24;;
validation: testing;;
library:
purpose: MLM will display either the custom priorities or system priorites and assign the proper schedule to the lab orders.
;;
explanation: This MLM is called from several MLM{{{SINGLE-QUOTE}}}s. As of go-live for this MLM the following MLM{{{SINGLE-QUOTE}}}s call this MLM.
FORM_LAB_HOLDORDER_REQUESTEDTIME,FORM_GENERIC_EITHER_OR_MANDITORY,FORM_BB_Type_and_Screen,FORM_LAB_GENERIC_MANDITORY
Additional MLM{{{SINGLE-QUOTE}}}s may require calling this MLM in the future. Please see the MLM FORM_LAB_PRIORITY_OPTIONS for more details
or review the original CSR specs.
Change History
2014.11.24 - STH CSR#: 32765 - Created MLM
2015.03.09 - STH CSR#: 32765 - Issues addressed based on users feed back (showing the time field disabled instead of hidding it,adding section for
order set calling, and making sure all fields are working from both order entry and being called from Order Sets).
2015.03.19 - STH CSR#: 32765 - Added logic for Order sets to be able to have multiple user friendly lab priority fields and still have the time disabled/enabled
approriately.
;;
keywords: Called MLMs, Form fields, schedule
;;
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*******************/
/* These variables must containt he same wording as the options in the drop down list */
/***************************************************************************************/
// Initialize error message
error_message:="";
field_list:= this_form.fields;
clientguid := this_communication.ClientGUID;
clientvisitguid := this_communication.ClientVisitGUID;
chartguid := this_communication.ChartGUID;
// Obtain common fields passed in the Form object to the Field object
//commented out ones are just not being used; however left incase you need them.
system_lab_priority := last of (field_list where field_list.DataItemName = "RequestedTime" );
user_friendly_lab_priority := last of (field_list where field_list.DataItemName = "LAB_Order Priorities" );
user_friendly_lab_time := last of (field_list where field_list.DataItemName = "LAB_Phleb Draw Sched Time" );
Lab_Priority_to_summary_line := last of (field_list where field_list.DataItemName = "LAB_Order Priority Summ Line" );
Blood_in_lab_checkbox := last of (field_list where field_list.DataItemName = "LAB_CB_BIL");
OrderName := this_communication.PrimaryObj.name;
OrderGUID := this_communication.ItemID;
comm_obj := this_communication.primaryobj;
session_type := comm_obj.internalprocessingtype;
// References the LOCAL SESSION object
local_session := cds_session.local;
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
if this_communication.FormType = "Order" then
DisplayNewScheduled := first of (field_list.Value
where field_list.DataItemName = "LAB_CB_Alternate Priorities");
//BEGIN - FORM OPEN SECTION
//if (this_communication.CallingEvent = "FormOpen") then
Order_Lab_ClassType_Value := read {"SELECT distinct cctv.Value "
|| " from CV3OrderCatalogMasterItem (NOLOCK) "
|| " inner join CV3CatalogClassTypeValue cctv (nolock) "
|| " on CV3OrderCatalogMasterItem.GUID = cctv.CatalogMasterGUID "
|| " Where cctv.ClassTypeGUID = (SELECT GUID FROM CV3CLASSTYPE WHERE CODE = {{{SINGLE-QUOTE}}}Lab_Specimentype{{{SINGLE-QUOTE}}}) "
|| " and CV3OrderCatalogMasterItem.Name = " || sql(OrderName)};
if Order_Lab_ClassType_Value[1] is not null then
AllBloodInLabOrders := ();
for x in 1 seqto(count(Order_Lab_ClassType_Value)) do
classtype := Order_Lab_ClassType_Value[x];
BloodInLabOrders := read {"SELECT distinct cv3order.name "
|| " from CV3Order with (nolock) "
|| " left JOIN CV3OrderCatalogMasterItem (NOLOCK) "
|| " on (CV3Order.OrderCatalogMasterItemGUID = CV3OrderCatalogMasterItem.guid) "
|| " inner join CV3CatalogClassTypeValue cctv (nolock) "
|| " on CV3OrderCatalogMasterItem.GUID = cctv.CatalogMasterGUID "
|| " Where cv3order.clientguid = " || sql(ClientGuid)
|| " and cv3order.chartguid = " || sql(chartguid)
|| " and cv3order.clientvisitguid = " || sql(ClientVisitGuid)
|| " and cctv.ClassTypeGUID = (SELECT GUID FROM CV3CLASSTYPE WHERE CODE = {{{SINGLE-QUOTE}}}Lab_Specimentype{{{SINGLE-QUOTE}}}) "
|| " and cctv.Value = " || sql(classtype)
|| " and cv3order.OrderStatusLevelNum in (60,80,83,85) "
|| " and cv3order.SignificantDtm >= dateadd(hh,-2,getdate()) "};
AllBloodInLabOrders := AllBloodInLabOrders, BloodInLabOrders;
enddo;
endif;
endif;
//REQUESTEDTIME-END field logic. End of section.
;;
evoke: // No evoke statement
;;
logic:
//BEGIN - ORDER SET LOGIC FOR LAB PRIORITY OPTIONS
if this_communication.FormType = "OrderSet" then
OS_UserFriendly_LabPriority := (field_list where field_list.DataItemName = "LAB_Order Priorities" );
OS_UserFriendly_LabTimes := (field_list where field_list.DataItemName = "LAB_Phleb Draw Sched Time" );
for x in (1 seqto count(OS_UserFriendly_LabPriority)) do
if (this_communication.CallingEvent = "FormOpen") or (this_communication.CallingFieldName = "LAB_Order Priorities|" || x) then
if (OS_UserFriendly_LabPriority[x].Value = "Scheduled Time")then
OS_UserFriendly_LabTimes[x].Control_Read_Only := false;
OS_UserFriendly_LabTimes[x].Control_Visible := true;
OS_UserFriendly_LabTimes[x].Control_Mandatory := true;
else
OS_UserFriendly_LabTimes[x].Control_Read_Only := true;
OS_UserFriendly_LabTimes[x].Control_Mandatory := false;
OS_UserFriendly_LabTimes[x].Control_Visible := true;
OS_UserFriendly_LabTimes[x].value := "";
endif;
endif;
enddo;
endif;
//END - ORDER SET LOGIC FOR LAB PRIORITY OPTIONS
//BEGIN - ORDER FORM LOGIC
if this_communication.FormType = "Order" then
if (this_communication.CallingEvent = "FormOpen") then
user_friendly_lab_time.Control_Visible := true;
user_friendly_lab_time.Control_Read_Only := false;
testbilo := BloodInLabOrders[1];
testallbilo := AllBloodInLabOrders[1];
if BloodInLabOrders[1] is not null or AllBloodInLabOrders[1] is not null then
Blood_in_lab_checkbox.Control_Visible := true;
else
Blood_in_lab_checkbox.Control_Visible := false;
endif;
if (DisplayNewScheduled) then
system_lab_priority.Control_Visible := false;
user_friendly_lab_priority.Control_Visible := true;
user_friendly_lab_priority.Control_Mandatory := true;
if (user_friendly_lab_priority.Value = "Scheduled Time")then
user_friendly_lab_time.Control_Read_Only := false;
user_friendly_lab_time.Control_Visible := true;
user_friendly_lab_time.Control_Mandatory := true;
else
user_friendly_lab_time.Control_Read_Only := true;
user_friendly_lab_time.Control_Mandatory := false;
user_friendly_lab_time.value := "";
endif;
else
system_lab_priority.Control_Visible := true;
user_friendly_lab_priority.Control_Visible := false;
user_friendly_lab_priority.Control_Mandatory := false;
user_friendly_lab_time.Control_Visible := false;
user_friendly_lab_time.Control_Mandatory := false;
endif;
if user_friendly_lab_priority.Value is not null and user_friendly_lab_priority.Value <> "" then
if (user_friendly_lab_priority.Value = "AM Rounds") then
system_lab_priority.Value.ReqTimeCode := "AM Rounds";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "ROUTINE (Drawn next even hour)") then
system_lab_priority.Value.ReqTimeCode := "Today";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "STAT") then
system_lab_priority.Value.ReqTimeCode := "STAT";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "Scheduled Time") then
system_lab_priority.Value.ReqTimeCode := "Scheduled Time";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "Nurse Collect (Add Specimen Required)") then
system_lab_priority.Value.ReqTimeCode := "Routine Collected Specimen";
Lab_Priority_to_summary_line.Value := "Nurse Collect";
elseif (user_friendly_lab_priority.Value = "Blood in Lab") then
system_lab_priority.Value.ReqTimeCode := "Routine Collected Specimen";
Lab_Priority_to_summary_line.Value := "Blood in Lab";
elseif (user_friendly_lab_priority.Value = "Nurse Collect STAT (Add Specimen Required)") then
system_lab_priority.Value.ReqTimeCode := "STAT Collected Specimen";
Lab_Priority_to_summary_line.Value := "Nurse Collect STAT";
else
system_lab_priority.Value.ReqTimeCode := "";
user_friendly_lab_priority.Value := "";
Lab_Priority_to_summary_line.Value := "";
endif;
endif;
endif;
//END - FORM OPEN SECTION
//BEGIN - USER FRIENDLY PRIORITY CHANGED
if (this_communication.CallingFieldName = "LAB_Order Priorities") then
if (user_friendly_lab_priority.Value = "Scheduled Time") then
//user_friendly_lab_time.Control_Visible := true;
user_friendly_lab_time.Control_Read_Only := false;
user_friendly_lab_time.Control_Mandatory := true;
else
//user_friendly_lab_time.Control_Visible := false;
user_friendly_lab_time.Control_Read_Only := true;
user_friendly_lab_time.Control_Mandatory := false;
user_friendly_lab_time.Value := "";
endif;
if (user_friendly_lab_priority.Value = "") then
system_lab_priority.Value.ReqTimeCode := "";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "AM Rounds") then
system_lab_priority.Value.ReqTimeCode := "AM Rounds";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "ROUTINE (Drawn next even hour)") then
system_lab_priority.Value.ReqTimeCode := "Today";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "STAT") then
system_lab_priority.Value.ReqTimeCode := "STAT";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "Scheduled Time") then
system_lab_priority.Value.ReqTimeCode := "Scheduled Time";
Lab_Priority_to_summary_line.Value := "";
elseif (user_friendly_lab_priority.Value = "Nurse Collect (Add Specimen Required)") then
system_lab_priority.Value.ReqTimeCode := "Routine Collected Specimen";
Lab_Priority_to_summary_line.Value := "Nurse Collect";
elseif (user_friendly_lab_priority.Value = "Blood in Lab") then
system_lab_priority.Value.ReqTimeCode := "Routine Collected Specimen";
Lab_Priority_to_summary_line.Value := "Blood in Lab";
elseif (user_friendly_lab_priority.Value = "Nurse Collect STAT (Add Specimen Required)") then
system_lab_priority.Value.ReqTimeCode := "STAT Collected Specimen";
Lab_Priority_to_summary_line.Value := "Nurse Collect STAT";
else
system_lab_priority.Value.ReqTimeCode := "";
user_friendly_lab_priority.Value := "";
Lab_Priority_to_summary_line.Value := "";
endif;
endif;
//END - USER FRIENDLY PRIORITY CHANGED
//BEGIN - BLOOD IN LAB CHECKBOX CHANGE
if (this_communication.CallingFieldName = "LAB_CB_BIL") then
if Blood_in_lab_checkbox.Value = true then
user_friendly_lab_priority.Value := "";
user_friendly_lab_time.value := "";
user_friendly_lab_priority.Control_Mandatory := false;
user_friendly_lab_priority.Control_Read_Only := true;
user_friendly_lab_time.Control_Mandatory := false;
user_friendly_lab_time.Control_Read_Only := true;
system_lab_priority.Value.ReqTimeCode := "Routine Collected Specimen";
Lab_Priority_to_summary_line.Value := "Blood in Lab";
else
user_friendly_lab_priority.Control_Read_Only := false;
user_friendly_lab_priority.Control_Mandatory := true;
system_lab_priority.Value.ReqTimeCode := "";
Lab_Priority_to_summary_line.Value := "";
endif;
endif;
//END - BLOOD IN LAB CHECKBOX CHANGE
if (this_communication.CallingFieldName = "Lab_Phleb Draw Sched Time") then
if user_friendly_lab_time.Value is not null or user_friendly_lab_time.Value <> "" then
system_lab_priority.Value.ReqTimeValue := user_friendly_lab_time.Value;
endif;
endif;
//END - ORDER FORM LOGIC
endif;
if (session_type = "Hold") then
if ((user_friendly_lab_priority.Value = "Scheduled Time") or (system_lab_priority.Value.ReqTimeCode = "Scheduled Time"))then
system_lab_priority.Control_Mandatory := false;
user_friendly_lab_time.Control_Mandatory := false;
endif;
endif;
conclude true;
;;
action:
// This MLM returns two parameters, of types communication_type and form_type respectively.
return this_communication, this_form;
;;
end: