maintenance: title: FORM_SET_FBC_ADMISSION_ORDERS;; mlmname: FORM_SET_FBC_ADMISSION_ORDERS;; arden: version 2;; version: 5.50;; institution: St Clair Hospital;; author: Juliet M. Law, Allscripts Corp ext 7461;; specialist: Dean Miklavic, Allscripts Corp Ext 7466;; date: 2012-03-01;; validation: testing;; library: purpose: Used for medication grids to disable dosing instruction checkbox in Family Birth Center Admission Order Set ;; explanation: This MLM is called from the Family Birth Center Admission Order Set Change history 03.01.2012 JML Copied from FORM_SET_SUBCUTANEOUS_INSULIN MLM 07.26.2016 BB CSR#33588 - Adding Antibiotic scheduling to FBC Admission Orderset ;; keywords: Called MLMs, Family, Birth ;; 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; standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}}; include standard_libs; using "ObjectsPlusXA.SCM.Forms"; using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms"; /***************************************************************************************/ // Initialize error message error_message := ""; // Assigns fields passed in the Form object to the Field object field_list:= this_form.fields; //Retrieve Calling Event and Field information CallingEvent := this_communication.CallingEvent; CallingField := this_communication.CallingFieldName; //Retrieve list and values of Pharmacy Medication Guidelines Field Pharm_Med_Guidelines := last of (field_list where field_list.DataItemName = "MultiOrderInline" AND field_List.Control_MultiFieldOccNum = 1); Pharm_Med_Guidelines_List := Pharm_Med_Guidelines.Value; //Retrieve list and values of Group B Strep Medications Grid GroupB_Strep := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 45); GroupB_Strep_List := GroupB_Strep.Value; //BB //Retrieve values for Requested Date/Time hidden fields [BB] GroupB_Strep_Pen_ReqDate := last of ( field_list WHERE field_list.DataItemName = "RequestedDate" and field_list.Control_MultiFieldOccNum = 1); GroupB_Strep_Pen_ReqTime := last of ( field_list WHERE field_list.DataItemName = "RequestedTime" and field_list.Control_MultiFieldOccNum = 1); Pen_ReqDate_Val := GroupB_Strep_Pen_ReqDate.Value; Pen_ReqTime_Val := GroupB_Strep_Pen_ReqTime.Value; GroupB_Strep_Cef_ReqDate := last of ( field_list WHERE field_list.DataItemName = "RequestedDate" and field_list.Control_MultiFieldOccNum = 2); GroupB_Strep_Cef_ReqTime := last of ( field_list WHERE field_list.DataItemName = "RequestedTime" and field_list.Control_MultiFieldOccNum = 2); Cef_ReqDate_Val := GroupB_Strep_Cef_ReqDate.Value; Cef_ReqTime_Val := GroupB_Strep_Cef_ReqTime.Value; GroupB_Strep_Van_ReqDate := last of ( field_list WHERE field_list.DataItemName = "RequestedDate" and field_list.Control_MultiFieldOccNum = 3); GroupB_Strep_Van_ReqTime := last of ( field_list WHERE field_list.DataItemName = "RequestedTime" and field_list.Control_MultiFieldOccNum = 3); Van_ReqDate_Val := GroupB_Strep_Van_ReqDate.Value; Van_ReqTime_Val := GroupB_Strep_Van_ReqTime.Value; //Set date/time for current, +4hours, +8hours, +12hours and parse each section for later manipulation [BB] TimeTest := "00:00"; MinuteTime := Minute of Now; DateTimeNow := now; DateTimePlusFour := DateTimeNow + 4 hour; DateTimePlusFourPlus := DateTimeNow + 5 hour; DateTimePlusEight := DateTimeNow + 8 hour; DateTimePlusEightPlus := DateTimeNow + 9 hour; DateTimePlusTwelve := DateTimeNow + 12 hour; DateTimePlusTwelvePlus := DateTimeNow + 13 hour; // Current Date/Time DateMonth := month of DateTimeNow ; if ( length ( DateMonth as string ) = 1 ) then DateMonth := "0" || DateMonth; endif; DateDay := day of DateTimeNow; if ( length ( DateDay as string ) = 1 ) then DateDay := "0" || DateDay; endif; DateYear := year of DateTimeNow; DateSplit := DateMonth ||"-"|| DateDay ||"-"|| DateYear; TimeHour := hour of DateTimeNow; if ( length ( TimeHour as string ) = 1 ) then TimeHour := "0" || TimeHour; endif; TimeMinute := minute of DateTimeNow; if ( length ( TimeMinute as string ) = 1 ) then TimeMinute := "0" || TimeMinute; endif; TimeSplit := TimeHour ||":"|| TimeMinute; // Date/Time plus 4 hours DateMonth4 := month of DateTimePlusFour ; if ( length ( DateMonth4 as string ) = 1 ) then DateMonth4 := "0" || DateMonth4; endif; DateDay4 := day of DateTimePlusFour; if ( length ( DateDay4 as string ) = 1 ) then DateDay4 := "0" || DateDay4; endif; DateYear4 := year of DateTimePlusFour; DateSplit4 := DateMonth4 ||"-"|| DateDay4 ||"-"|| DateYear4; // || " 00:00") as time; //7/19/16 TimeHour4 := hour of DateTimePlusFour; if ( length ( TimeHour4 as string ) = 1 ) then TimeHour4 := "0" || TimeHour4; endif; TimeHour4Plus := hour of DateTimePlusFourPlus; if ( length ( TimeHour4Plus as string ) = 1 ) then TimeHour4Plus := "0" || TimeHour4Plus; endif; TimeMinute4 := minute of DateTimePlusFour; if ( length ( TimeMinute4 as string ) = 1 ) then TimeMinute4 := "0" || TimeMinute4; endif; TimeSplit4 := TimeHour4 ||":"|| TimeMinute4; // Date/Time plus 8 hours DateMonth8 := month of DateTimePlusEight ; if ( length ( DateMonth8 as string ) = 1 ) then DateMonth8 := "0" || DateMonth8; endif; DateDay8 := day of DateTimePlusEight; if ( length ( DateDay8 as string ) = 1 ) then DateDay8 := "0" || DateDay8; endif; DateYear8 := year of DateTimePlusEight; DateSplit8 := DateMonth8 ||"-"|| DateDay8 ||"-"|| DateYear8; TimeHour8 := hour of DateTimePlusEight; if ( length ( TimeHour8 as string ) = 1 ) then TimeHour8 := "0" || TimeHour8; endif; TimeHour8Plus := hour of DateTimePlusEightPlus; if ( length ( TimeHour8Plus as string ) = 1 ) then TimeHour8Plus := "0" || TimeHour8Plus; endif; TimeMinute8 := minute of DateTimePlusEight; if ( length ( TimeMinute8 as string ) = 1 ) then TimeMinute8 := "0" || TimeMinute8; endif; TimeSplit8 := TimeHour8 ||":"|| TimeMinute8; // Date/Time plus 12 hours DateMonth12 := month of DateTimePlusTwelve ; if ( length ( DateMonth12 as string ) = 1 ) then DateMonth12 := "0" || DateMonth12; endif; DateDay12 := day of DateTimePlusTwelve; if ( length ( DateDay12 as string ) = 1 ) then DateDay12 := "0" || DateDay12; endif; DateYear12 := year of DateTimePlusTwelve; DateSplit12 := DateMonth12 ||"-"|| DateDay12 ||"-"|| DateYear12; TimeHour12 := hour of DateTimePlusTwelve; if ( length ( TimeHour12 as string ) = 1 ) then TimeHour12 := "0" || TimeHour12; endif; TimeHour12Plus := hour of DateTimePlusTwelvePlus; if ( length ( TimeHour12Plus as string ) = 1 ) then TimeHour12Plus := "0" || TimeHour12Plus; endif; TimeMinute12 := minute of DateTimePlusTwelve; if ( length ( TimeMinute12 as string ) = 1 ) then TimeMinute12 := "0" || TimeMinute12; endif; TimeSplit12 := TimeHour12 ||":"|| TimeMinute12; //bb //On Form Open Event, disable the checkbox contained in the Pharmacy Medication Guidelines Field if (CallingEvent = "FormOpen") then Pharm_Med_Guidelines_List.IsReadOnly := (True); endif; //On Field Change event, control the ability to select group of medications contained in the //Group B Strep Medications Grid if (CallingEvent = "FieldChange") then if (CallingField = "MultiOrderGrid|45") then //List of Penicillin medications selected FirstThree := (GroupB_Strep_List.IsSelected[1], GroupB_Strep_list.IsSelected[2], GroupB_Strep_List.IsSelected[3]); //List of Cefazolin medications selected NextTwo := (GroupB_Strep_List.IsSelected[4], GroupB_Strep_List.IsSelected[5]); LastTwo := (GroupB_Strep_List.IsSelected[6], GroupB_Strep_List.IsSelected[7]); //Determines the number of penicillin medications selected based on list defined above FirstThreeTrueCount := count (FirstThree WHERE FirstThree = true); //Determines the number of cefazolin medications selected based on list defined above NextTwoTrueCount := count (NextTwo WHERE NextTwo = true); //Determines if the vancomycin medication is selected LastTwoTrueCount := count (LastTwo WHERE LastTwo = true); //Count of medications in the Group B Strep Medications Grid that are set to Read Only ReadOnlyTrueCount := count (GroupB_Strep_List.IsReadOnly WHERE GroupB_Strep_List.IsReadOnly = true); //Initialize variables used to set the IsReadOnly and IsSelected property on medications in the grid NewReadOnly := (); NewSelected := (); //Begin loop through Group B Strep Medications grid for k in 1 seqto (count GroupB_Strep_List.IsSelected) do //If 1 penicillin medication is selected, then select all 3 penicillins and set all other medications in grid //to Read Only if (FirstThreeTrueCount = 1) then if (k <= 3) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; //BB //when Penicillin is selected add 4 hours to additional scheduled Penicillin order admin time [BB] //Adjust for Administration time calculated for < 45 minutes is initiating hour, >= 45 minutes is next hour [BB] GroupB_Strep_Pen_ReqDate.value := DateSplit4 ; Pen_ReqTime_Val.ReqTimeCode := "Scheduled/Start Time"; If MinuteTime >= 45 then Pen_ReqTime_Val.ReqTimeValue := TimeHour4Plus ||":00"; else Pen_ReqTime_Val.ReqTimeValue := TimeHour4 ||":00"; endif; //bb endif; //If 2 pencillin medications are selected, we can safely assume user is attempting to unselect the penicillins //UnSelect all penicillin medications and reset the other medications in grid to NOT Read Only elseif (FirstThreeTrueCount = 2) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, false; //If 1 cefazolin medication is selected and no other medications in the grid are set to Read Only, //we can safely assume user is attempting to select cefazolin //Select both cefazolin medications and set all other medications in the grid to Read Only elseif (NextTwoTrueCount = 1 AND ReadOnlyTrueCount = 0) then if (k >= 4 AND k < 6) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; //BB //when Cefazolin is selected add 8 hours to additional scheduled Cefazolin order admin time [BB] //Adjust for Administration time calculated for < 45 minutes is initiating hour, >= 45 minutes is next hour [BB] GroupB_Strep_Cef_ReqDate.value := DateSplit8; Cef_ReqTime_Val.ReqTimeCode := "Scheduled/Start Time"; If MinuteTime >= 45 then Cef_ReqTime_Val.ReqTimeValue := TimeHour8Plus ||":00"; else Cef_ReqTime_Val.ReqTimeValue := TimeHour8 ||":00"; endif; //bb endif; //If 1 cefazolin medication is selected and other medications in the grid are set to Read Only, //we can safely assume user is attempting to unselect cefazolin //Unselect both cefazolin medications and reset all other medications in the grid to NOT Read Only elseif (NextTwoTrueCount = 1 AND ReadOnlyTrueCount > 0) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, false; //If vancomycin is selected, then set all other medications in the grid to Read Only elseif (LastTwoTrueCount = 1 AND ReadOnlyTrueCount = 0) then if (k = 6 OR k = 7) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; //BB //when Vancomycin is selected add 12 hours to additional scheduled Vancomycin order admin time [BB] //Adjust for Administration time calculated for < 45 minutes is initiating hour, >= 45 minutes is next hour [BB] GroupB_Strep_Van_ReqDate.value := DateSplit12; Van_ReqTime_Val.ReqTimeCode := "Scheduled/Start Time"; If MinuteTime >= 45 then Van_ReqTime_Val.ReqTimeValue := TimeHour12Plus ||":00"; else Van_ReqTime_Val.ReqTimeValue := TimeHour12 ||":00"; endif; //bb endif; //If vancomycin is unselected, then reset all other medications in grid to NOT Read Only elseif (LastTwoTrueCount = 1 AND ReadOnlyTrueCount > 0) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, false; endif; enddo; //Update Group B Strep List grid fields with the appropriate IsReadOnly and IsSelected properties. GroupB_Strep_List.IsReadOnly := NewReadOnly; GroupB_Strep_List.IsSelected := NewSelected; endif; endif; ;; 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: