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

308 lines
14 KiB
Plaintext

maintenance:
title: Ordering Conditional Manditory field;;
mlmname: FORM_LAB_GENERIC_MANDITORY;;
arden: version 2;;
version: 4.50;;
institution: St Clair Isolation Set MLM;;
author: Mary Sieger, Mary.Sieger@stclair.org, 412-942-1194;;
specialist: Eclipsys Corporation;;
date: 2006-10-09;;
validation: testing;;
library:
purpose: Based on a value provided in one field, make another field manditory.
;;
explanation: This generic MLM can be called from several Micro order forms:
- LAB Ser Nsg Col_Ser1
- LAB_Micro_BodyFldCul
- LAB_Micro_ExudateCul
- LAB BBank Type & Scr
- LAB_Micro_Blood Cul
- LAB BBank Prod RBC
- LAB BBank Prod PLT
- LAB BBank Prod FFP
- (others?)
Rules:
Use lists of
forms,
fields to test on the form,
values to test for,
fields to make manditory (if the value is present).
change history
06.18.2008 DW Remove code to require an indication when Transfusion is selected from Surgery or Transfusion list
2/26/2015 STH CSR# 32765 - updated to call the user lab priority options MLM to display the user firendly lab priorities when approriate.
11.29.2017 DW CSR# 36079 - change "line draw" to "other" on the Blood Culture order form
;;
keywords: Called MLMs, Form fields, generic, field test, manditory
;;
knowledge:
type: data-driven;;
data:
/***********************Make Changes To Spelling And Flags In This Section************************/
//NOTE: THE RELATIVE ORDER OF ITEMS MUST BE MAINTAINED WITHING LISTS!!!
//MUST HAVE THE FOLLOWING ORDER FOR EACH ELEMENT ITEM:
//"FORM_NAME|FIELD_NAME_TO_TEST|VALUEs_TO_TEST_FOR|FIELD_TO_MAKE_MANDITORY"
form_map_list :=
("LAB Ser Nsg Col_Ser1|LAB_M_VO_OBR15_SpecType_Ser1|Skin (SKN),Tissue (TIS)|LAB_VO_FT_Ser_SkinInfo"
,"LAB_Micro_BodyFldCul|LAB_RC_SDES_MicroBodyFld|Body Fluid (FLD)|LAB_SREQ_VO_FT_MicroTypeIn"
,"Lab_Micro_BodyFldCul|Lab_RC_SDES_MicroBodyFld|Synovial Joint Fluid (SYN)|Lab_SREQ_VO_DI_SiteSynovialJointFluid"
,"LAB_Micro_ExudateCul|LAB_RC_SDES_MicroExCul|Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
,"LAB BBank Type & Scr|LAB_Yes or No|YES|BB_Date_ Proc Surgical Procedure"
// DW 11.29.2017 36079 Changed "line draw" to "other"
//,"LAB_Micro_Blood Cul|LAB_SREQ_VO_DI_Line_PeripDraw|Line Draw|LAB_SREQ_VO_FT_LineDrawDescrip"
,"LAB_Micro_Blood Cul|LAB_SREQ_VO_DI_Line_PeripDraw|Other|LAB_SREQ_VO_FT_LineDrawDescrip"
,"LAB BBank Prod RBC|BB Blood Prod Surg-Transfusion|Product for Surgery|LAB_VO_DI_BBProd Surgical Proc"
// Removed per ED CPOE project 06.18.08 DW
// ,"LAB BBank Prod RBC|BB Blood Prod Surg-Transfusion|Product for Transfusion|LAB_VO_DI_BBProd Trans Ind RC"
,"LAB BBank Prod PLT|BB Blood Prod Surg-Transfusion|Product for Surgery|LAB_VO_DI_BBProd Surgical Proc"
// Removed per ED CPOE project 06.18.08 DW
//,"LAB BBank Prod PLT|BB Blood Prod Surg-Transfusion|Product for Transfusion|LAB_VO_DI_BBProd Trans Ind Plt"
,"LAB BBank Prod FFP|BB Blood Prod Surg-Transfusion|Product for Surgery|LAB_VO_DI_BBProd Surgical Proc"
// Removed per ED CPOE project 06.18.08 DW
// ,"LAB BBank Prod FFP|BB Blood Prod Surg-Transfusion|Product for Transfusion|LAB_VO_DI_BBProd TransInd FFP_Cryo"
,"Lab_Micro_FungusSmea|Lab_RC_SDES_MicroSource_FungusSmear|Synovial Joint Fluid (SYN)|Lab_SREQ_VO_DI_SiteSynovialJointFluid"
,"Resp Vent Adult Vol|Resp Vent Flow By|TRUE|Resp Vent Base Flow"
,"Resp Vent Adult Vol|Resp Vent Flow By|TRUE|Resp Vent Flow Sensitivity"
,"DIET_Diet_All Option|RequestedTime|OVERDUE|DIET_Non Routine Trays"
,"LAB_Micro_GramStainO|LAB_Micro_CB_SpecimenNotInList|TRUE|LAB_RC_SDES_MicroExBF_Sites"
,"LAB_Micro_GramStainO|LAB_Micro_CB_SpecimenNotInList|FALSE|LAB_RC_SDES_MicroSource_GramStainOnly"
,"LAB_Micro_GramStainO|LAB_RC_SDES_MicroExBF_Sites|Body Fluid (FLD),Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
,"LAB_Micro_GramStainO|LAB_RC_SDES_MicroSource_GramStainOnly|Tissue (TIS)|LAB_SREQ_VO_DI_MicroDescript"
,"LAB_Micro_GramStainO|LAB_RC_SDES_MicroSource_GramStainOnly|Synovial Joint Fluid (SYN)|LAB_SREQ_VO_DI_SiteSynovialJointFluid"
,"Lab_Micro_AFBSmearOn|LAB_Micro_CB_SpecimenNotInList|TRUE|LAB_RC_SDES_MicroExBF_Sites"
,"Lab_Micro_AFBSmearOn|LAB_Micro_CB_SpecimenNotInList|FALSE|Lab_RC_SDES_MicroSource_AFBSmearOnly"
,"Lab_Micro_AFBSmearOn|LAB_RC_SDES_MicroExBF_Sites|Body Fluid (FLD),Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
,"Lab_Micro_AFBSmearOn|Lab_RC_SDES_MicroSource_AFBSmearOnly|Tissue (TIS)|LAB_SREQ_VO_DI_MicroDescript"
,"Lab_Micro_AFBSmearOn|Lab_RC_SDES_MicroSource_AFBSmearOnly|Synovial Joint Fluid (SYN)|LAB_SREQ_VO_DI_SiteSynovialJointFluid"
,"Lab_Micro_FungusCul|LAB_Micro_CB_SpecimenNotInList|TRUE|LAB_RC_SDES_MicroExBF_Sites"
,"Lab_Micro_FungusCul|LAB_Micro_CB_SpecimenNotInList|FALSE|LAB_RC_SDES_MicroSource_FungusSmear"
,"Lab_Micro_FungusCul|LAB_RC_SDES_MicroExBF_Sites|Body Fluid (FLD),Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
,"Lab_Micro_FungusCul|LAB_RC_SDES_MicroSource_FungusSmear|Tissue (TIS)|LAB_SREQ_VO_DI_MicroDescript"
,"Lab_Micro_FungusCul|Lab_RC_SDES_MicroSource_FungusSmear|Synovial Joint Fluid (SYN)|Lab_SREQ_VO_DI_SiteSynovialJointFluid"
,"LAB_Micro_TBCulture|LAB_Micro_CB_SpecimenNotInList|TRUE|LAB_RC_SDES_MicroExBF_Sites"
,"LAB_Micro_TBCulture|LAB_Micro_CB_SpecimenNotInList|FALSE|Lab_RC_SDES_MicroSources_TBCul"
,"LAB_Micro_TBCulture|LAB_RC_SDES_MicroExBF_Sites|Body Fluid (FLD),Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
//NOTE: for TB Cultures, Additional Information (LAB_SREQ_VO_DI_MicroDescript) is NEVER Manditory! per Mary
//,"LAB_Micro_TBCulture|Lab_RC_SDES_MicroSources_TBCul|Tissue (TIS)|LAB_SREQ_VO_DI_MicroDescript"
,"LAB_Micro_TBCulture|Lab_RC_SDES_MicroSources_TBCul|Synovial Joint Fluid (SYN)|Lab_SREQ_VO_DI_SiteSynovialJointFluid"
,"LAB_Micro_Legionella|LAB_Micro_CB_SpecimenNotInList|TRUE|LAB_RC_SDES_MicroExBF_Sites"
,"LAB_Micro_Legionella|LAB_Micro_CB_SpecimenNotInList|FALSE|LAB_RC_SDES_MicroSource_LegionellaCul"
,"LAB_Micro_Legionella|LAB_RC_SDES_MicroExBF_Sites|Body Fluid (FLD),Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
//,"LAB_Micro_Legionella|LAB_RC_SDES_MicroExBF_Sites|Exudate (EX)|LAB_SREQ_VO_FT_MicroTypeIn"
,"LAB_Micro_Legionella|LAB_RC_SDES_MicroSource_LegionellaCul|Tissue (TIS)|LAB_SREQ_VO_DI_MicroDescript"
//NOTE: for Legionella Cultures, no Synovial Box, per Mary
//,"LAB_Micro_Legionella|LAB_RC_SDES_MicroSource_LegionellaCul|Synovial Joint Fluid (SYN)|LAB_SREQ_VO_DI_SiteSynovialJointFluid"
,"YOUR_FORM_NAME_HERE|YOUR_TEST_FIELD_HERE|VALID_VAL1,VALID_VAL2|MANDITORY_FIELD_HERE"
);
/**************************************************************************************JAB********/
// 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;
//Initialize MLM pointers:
str_parse := mlm {{{SINGLE-QUOTE}}}UTIL_STRING_PARSE{{{SINGLE-QUOTE}}};
chk_overdue_time := MLM {{{SINGLE-QUOTE}}}overdue_req_time{{{SINGLE-QUOTE}}};
gen_dsply := mlm {{{SINGLE-QUOTE}}}FORM_GENERIC_Display{{{SINGLE-QUOTE}}};
// Display any realated fields first:
(this_communication, this_form) := call gen_dsply
with this_communication, this_form, client_info_obj;
// Initialize error message
error_message:="";
// Initialize lists
test_form_name_list := ();
test_field_list := ();
test_manditory_field_list := ();
// Assigns fields passed in the Form object to the Field object
field_list:= this_form.fields;
//*****BEGIN ***** STH 2.10.2015 - Added for CSR 32765 to display user friendly lab priorities
Call_UserFriendly_Lab_Priorities := mlm {{{SINGLE-QUOTE}}}SCH_LAB_PRIORITY_OPTIONS_CALLED{{{SINGLE-QUOTE}}};
DisplayNewScheduled := first of (field_list.Value
where field_list.DataItemName = "LAB_CB_Alternate Priorities");
//*****END ***** STH 2.10.2015 - Added for CSR 32765 to display user friendly lab priorities
CallingForm := this_form.name;
CallingEvent := this_communication.CallingEvent;
CallingField := this_communication.CallingFieldName;
if called_by_editor then
CallingForm := "LAB Ser Nsg Col_Ser1";
CallingEvent := "FieldChange";
CallingField := "LAB_M_VO_OBR15_SpecType_Ser1";
endif;
for i in 1 seqto count form_map_list do
// initialize vars:
manditory_field := null;
trigger_field := null;
// parse the form mapper:
form_element_list := call str_parse with form_map_list[i], "|";
test_form_name := form_element_list[1]; //Lookup form name from map list
// Test for proper form
if CallingForm = test_form_name then
test_manditory_field := form_element_list[4]; //Lookup manditory field from map list
manditory_field := first of
(field_list where field_list.DataItemName = test_manditory_field);
// Set open form defaults
if exists manditory_field then
test_field := form_element_list[2]; //Lookup test field from map list
trigger_field := first of
(field_list where field_list.DataItemName = test_field);
//check for {{{SINGLE-QUOTE}}}additional info{{{SINGLE-QUOTE}}} fields
if manditory_field.dataitemname = "LAB_SREQ_VO_DI_MicroDescript" then
Right_box := last of (field_list
where field_list.DataItemName = "LAB_SREQ_LO_CB_Micro_Right" );
Superficial_box := last of (field_list
where field_list.DataItemName = "LAB_SREQ_LO_CB_Micro_Superficial" );
Left_box := last of (field_list
where field_list.DataItemName = "LAB_SREQ_LO_CB_Micro_Left" );
Deep_box := last of (field_list
where field_list.DataItemName = "LAB_SREQ_LO_CB_Micro_Deep" );
endif;
// Test for proper field
if exists trigger_field then
//Lookup list of valid values for the test field
test_val_list := call str_parse with form_element_list[3], ",";
//Check for time field
if trigger_field.dataitemname = "RequestedTime" and "overdue" is in test_val_list then
if exists trigger_field.value.reqtimevalue then
time_type := "scheduled";
time_val := trigger_field.value.reqtimevalue;
else
time_type := "coded";
time_val := trigger_field.value.reqtimecode;
endif;
// check for overdue time
time_is_overdue := call chk_overdue_time
with time_val, time_type;
endif;
if (trigger_field.value as string) is in test_val_list or time_is_overdue then
// Mandate the field and, if necessary, make it visible
manditory_field.control_visible := true;
manditory_field.control_mandatory := True;
manditory_field.control_read_only := False;
// make {{{SINGLE-QUOTE}}}additional info{{{SINGLE-QUOTE}}} settings writable
if manditory_field.dataitemname = "LAB_SREQ_VO_DI_MicroDescript" then
Right_box.control_visible := True;
Right_box.control_read_only := False;
Superficial_box.control_visible := True;
Superficial_box.control_read_only := False;
Left_box.control_visible := True;
Left_box.control_read_only := False;
Deep_box.control_visible := True;
Deep_box.control_read_only := False;
endif;
// i := count form_map_list;
else
// manditory_field.control_visible := false;
manditory_field.control_mandatory := False;
if trigger_field.dataitemname <> "RequestedTime" then
manditory_field.control_read_only := True;
endif;
manditory_field.value:="";
if manditory_field.dataitemname = "LAB_SREQ_VO_DI_MicroDescript" then
// set all {{{SINGLE-QUOTE}}}additional info{{{SINGLE-QUOTE}}} boxes to read-only
Right_box.control_mandatory := False;
Right_box.control_read_only := True;
Right_box.value:="";
Superficial_box.control_mandatory := False;
Superficial_box.control_read_only := True;
Superficial_box.value:="";
Left_box.control_mandatory := False;
Left_box.control_read_only := True;
Left_box.value:="";
Deep_box.control_mandatory := False;
Deep_box.control_read_only := True;
Deep_box.value:="";
endif; // manditory_field.dataitemname = "LAB_SREQ_VO_DI_MicroDescript"
endif; // (trigger_field.value as string) is in test_val_list
/* // FOR DEBUGGING PURPOSES: display a message to the user
this_communication.Message :=
"callingform = "|| callingform
|| "\nCallingEvent = " || CallingEvent
|| "\ntest_form_name = " || test_form_name
|| "\ntest_field = " || test_field
|| "\ntest_manditory_field = " || test_manditory_field
|| "\ntrigger_field.value.reqtimecode = " || trigger_field.value.reqtimecode
|| "\ntrigger_field.value.reqtimevalue = " || trigger_field.value.reqtimevalue
|| "\nmanditory_field = " || manditory_field.dataitemname
|| "\ntest_val_list = " || test_val_list
|| "\ncfg_end = " || cfg_end
|| "\ncurr_time = " || curr_time || x;
this_communication.MessageType := "Informational";
*/
endif; // exists trigger_field
endif; // exists manditory_field
endif; // CallingForm = test_form_name
enddo; // for i in 1 seqto count form_map_list
//****BEGIN***** STH 2.10.2015 Added for CSR 32765 only display user friendly lab priorities if the opbservation is added to the form AND selected/checked
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***** STH 2.10.2015 Added for CSR 32765 only display user friendly lab priorities if the opbservation is added to the form AND selected/checked
;;
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: