maintenance: title: FORM_SET_DVT_PE_TREATMENT ;; mlmname: FORM_SET_DVT_PE_TREATMENT;; arden: version 2.5;; version: 1.00;; institution: St.Clair Hospital ;; author: Sandy Zhang ;; specialist: Amy Georgolis ;; date: 2017-09-22;; validation: testing;; library: purpose: Requested by pharmacy: Box checking algorithm for DVT/PE Treatment options (Rivaroxaban and Apixaban). 1) If Rivaroxaban 15mg (Apixaban 10mg) is selected then check 20mg (apixaban 5mg) option as well. 2) If Rivaroxaban 20mg only is selected then change start date to today using hidden field. 3) Allow users to select stop after date from field above order grid, map to maintenance therapy stop after date. Attached to {{{SINGLE-QUOTE}}}Called MLMs{{{SINGLE-QUOTE}}} for Forms: PRX_OS_Rivaroxaban and PRX_OS_Apixaban ;; explanation: Change history 09.22.2017 SZ CSR #35039 - Add DVT/PE dose options for rivaroxaban and apixaban Initial build - derived from FORM_Set_Tikosyn_Electrolyte as a model 02.01.2018 SZ added code to fix stop after date requirements by Amy 03.19.2018 SZ CSR #36412 - Apixaban occurrence-Enhance order set. Has several safety enhancements and does a much better job with auto-schedule 03.22.2018 SZ CSR #36414 - Apply apixaban ordering corrections to xarelto 07.03.2019 SZ Help Desk ticket #3797703 - System change caused issues with __ x times(doses)logic for stat and now ordering. Issue corrected on both apixaban and rivaroxaban order sets. ;; keywords: ;; citations: ;; knowledge: type: data-driven;; data: standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}}; include standard_libs; using "ObjectsPlusXA.SCM.Forms"; using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms"; // 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; /***************************************************************************************/ // Use String parse str_parse := mlm {{{SINGLE-QUOTE}}}UTIL_STRING_PARSE{{{SINGLE-QUOTE}}}; // 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; user_guid := this_communication.UserGuid; CallingEvent := this_communication.CallingEvent; CallingField := this_communication.CallingFieldName; Stop_After_field := last of (field_list where field_list.DataItemName = "StopAfter" and field_List.Control_MultiFieldOccNum = 1); Stop_After_field_value := Stop_After_field.Value; Stop_After_field_value_number := Stop_After_field_value.Number; Stop_After_field_value_option := Stop_After_field_value.Option; Stop_After_field_2 := last of (field_list where field_list.DataItemName = "StopAfter" and field_List.Control_MultiFieldOccNum = 2); Stop_After_field_2_value := Stop_After_field_2.Value; Stop_After_field_2_value_number := Stop_After_field_2_value.Number; Stop_Date_field := last of (field_list where field_list.DataItemName = "StopDate"); primary_obj := this_communication.PrimaryObj[1]; tomorrow := Now + 1 day; current_hour := (extract hour NOW); /****************************************** start Rivaroxaban part ***********************************************/ if (Primary_Obj.OrderSetName = "Rivaroxaban") then prompt_answer_no := last of (field_list where field_list.DataItemName = "Checkbox" and field_List.Control_MultiFieldOccNum = 6); prompt_answer_yes := last of (field_list where field_list.DataItemName = "Checkbox" and field_List.Control_MultiFieldOccNum = 7); stat_dose_15mg := last of (field_list where field_list.DataItemName = "PRX_Dosing Stat and Then"); //Rivaroxaban OS = 15mg now_dose_15mg := last of (field_list where field_list.DataItemName = "PRX_Dosing Start Now"); //Rivaroxaban OS = 15mg Rivaroxaban_DVTPE_order_grid := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_List.Control_MultiFieldOccNum = 3); Rivaroxaban_DVTPE_order_options := Rivaroxaban_DVTPE_order_grid.Value; Rivaroxaban_15mg_tab := Rivaroxaban_DVTPE_order_options[1]; Rivaroxaban_20mg_tab := Rivaroxaban_DVTPE_order_options[2]; req_date_field_15mg := last of (field_list where field_list.DataItemName = "RequestedDate" and field_List.Control_MultiFieldOccNum = 3); req_date_field_20mg := last of (field_list where field_list.DataItemName = "RequestedDate" and field_List.Control_MultiFieldOccNum = 2); req_time_field_15mg := last of (field_list where field_list.DataItemName = "RequestedTime" and field_List.Control_MultiFieldOccNum = 3); req_time_field_20mg := last of (field_list where field_list.DataItemName = "RequestedTime" and field_List.Control_MultiFieldOccNum = 2); req_time_field_15mg_value := req_time_field_15mg.Value; req_time_field_20mg_value := req_time_field_20mg.Value; if (CallingEvent = "FieldChange") and (CallingField = "MultiOrderGrid|3") then Stop_After_field_value.Number := 42; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Number := 42; Stop_After_field_2_value.Option := "Doses"; // if user is ordering after 9pm, but before 9am (with even doses) then default the start/scheduled times to 09:00 if (current_hour < 9) or (current_hour >= 21) then if (current_hour >= 21) then req_date_field_15mg.Value := NOW + 1 day; endif; req_time_field_15mg_value.ReqTimeCode := "Scheduled/Start Time"; req_time_field_20mg_value.ReqTimeCode := "Scheduled/Start Time"; req_time_field_15mg_value.ReqTimeValue := "09:00"; req_time_field_20mg_value.ReqTimeValue := "17:00"; else req_time_field_15mg_value.ReqTimeCode := "Scheduled/Start Time"; req_time_field_20mg_value.ReqTimeCode := "Scheduled/Start Time"; req_time_field_15mg_value.ReqTimeValue := "21:00"; req_time_field_20mg_value.ReqTimeValue := "17:00"; endif; // defaults start time of 15mg to 22 days // true/false if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = false) and (not exist req_date_field_20mg.Value) then Rivaroxaban_20mg_tab.IsSelected := true; if (current_hour >= 9 and current_hour < 21) then req_date_field_20mg.Value := req_date_field_15mg.Value + 22 day; endif; if (current_hour >= 21) or (current_hour < 9) then req_date_field_20mg.Value := req_date_field_15mg.Value + 21 day; endif; endif; // false/true if (Rivaroxaban_15mg_tab.IsSelected = false) and (Rivaroxaban_20mg_tab.IsSelected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value; req_time_field_20mg_value.ReqTimeValue := "17:00"; endif; // true/true if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = true) then if current_hour >= 9 and current_hour < 21 then req_date_field_20mg.Value := req_date_field_15mg.Value + 22 day; endif; if (current_hour >= 21) or (current_hour < 9) then req_date_field_20mg.Value := req_date_field_15mg.Value + 21 day; endif; endif; // code for unchecking of 5mg // true/false if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = false) and (exist req_date_field_20mg.Value) then req_date_field_20mg.Value := req_date_field_15mg.Value; endif; // code for unchecking of 5mg and requires MD to select a stop after date if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = false) then if current_hour >= 9 and current_hour < 21 then req_date_field_20mg.Value := req_date_field_15mg.Value + 22 day; endif; if (current_hour >= 21) or (current_hour < 9) then req_date_field_20mg.Value := req_date_field_15mg.Value + 21 day; endif; Stop_After_field.Control_Mandatory := true; endif; // false/false if (Rivaroxaban_15mg_tab.IsSelected = false) and (Rivaroxaban_20mg_tab.IsSelected = false) then req_date_field_20mg.Value := null; endif; if (Rivaroxaban_15mg_tab.IsSelected = true) then Stop_After_field.Control_Mandatory := true; endif; endif; //if (CallingEvent = "FieldChange") and (CallingField = "MultiOrderGrid|3") then /************************************************* Rivaroxaban - stop after dosing changes - Rivaroxaban **************************************/ fifteen_mg_time_field_string := req_time_field_15mg_value.ReqTimeValue as string; twenty_mg_time_field_string := req_time_field_20mg_value.ReqTimeValue as string; // code for modifying stop after date of Rivaroxaban if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = true) and (CallingEvent = "FieldChange") and (CallingField = "StopAfter|1") then if (stat_dose_15mg.Value = true) or (now_dose_15mg.Value = true) then //calculated_days := (Stop_After_field_value_number)/2; calculated_days := (Stop_After_field_value.Number/2); if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (current_hour >= 9) and (current_hour < 21) and (even_dose_detected = true) then if (prompt_answer_no.Value = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; if (prompt_answer_yes.Value = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days) day; endif; endif; if (current_hour >= 9) and (current_hour < 21) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; // logic for {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} answer to prompt and STAT/NOW dose already selected during stop after changes if (prompt_answer_no.Value = true) then if (current_hour >= 21 or current_hour < 9) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days) day; endif; if (current_hour >= 21 or current_hour < 9) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; endif; // logic for {{{SINGLE-QUOTE}}}YES{{{SINGLE-QUOTE}}} answer to prompt and STAT/NOW dose already selected during stop after changes if (prompt_answer_yes.Value = true) then if (current_hour >= 21 or current_hour < 9) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; if (current_hour >= 21 or current_hour < 9) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; endif; else // neither STAT/NOW are selected, so both are unselected //if (stat_dose_15mg.Value = true) or (now_dose_15mg.Value = true) then calculated_days := (Stop_After_field_value.Number/2); if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (current_hour >= 9) and (current_hour < 21) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days + 1) day; endif; if (current_hour >= 21 or current_hour < 9) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days +1) day; endif; if (current_hour >= 21 or current_hour < 9) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days) day; endif; endif; // if (stat_dose_15mg.Value = true) or (now_dose_15mg.Value = true) then // takes # of doses and inserts into hidden stopafter field // done this way due to glitch where "units", "minutes", or "hours" would get inserted into order despite code that reinserts "Doses" into field to correct it Stop_After_field_2_value.Number := Stop_After_field_value_number; Stop_After_field_2_value.Option := Stop_After_field_value_option; // prevents ordering of 5mg dose if user presses "Clear". Or else it would order 10mg and 5mg with same start date. if (Stop_After_field_value.Option = "Doses") and (Stop_After_field_value.Number = 0) then Rivaroxaban_20mg_tab.IsSelected := false; Stop_After_field_value.Number := 42; Stop_After_field_2_value.Number := 42; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Option := "Doses"; clear_button_message := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Clearing the stop after date has removed the Rivaroxaban 20mg dose" ,"Alert","Ok" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; endif; endif; // if (Rivaroxaban_15mg_tab.IsSelected = true) and (Rivaroxaban_20mg_tab.IsSelected = true) and (CallingEvent = "FieldChange") and (CallingField = "StopAfter|1") then if (Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true) then // added to prevent selection of anything other than "Doses" in the stop after field if (Stop_After_field_value.Option <> "Doses") and (Stop_After_field_value.Option <> "Times") then dlg_result := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "\nOnly {{{SINGLE-QUOTE}}}Doses{{{SINGLE-QUOTE}}} or {{{SINGLE-QUOTE}}}Times{{{SINGLE-QUOTE}}} can be selected as the stop after option" || "\n " ,"DVT/PE Treatment ", "ok" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}},"Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}}; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Option := "Doses"; endif; endif; //if (Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true) then /*************************** Rivaroxaban - STAT ORDERING - Rivaroxaban ****************************/ Rivaroxaban_DVTPE_STAT_NOW_order_grid := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_List.Control_MultiFieldOccNum = 4); Rivaroxaban_DVTPE_STAT_NOW_order_options := Rivaroxaban_DVTPE_STAT_NOW_order_grid.Value; Rivaroxaban_DVTPE_STAT_NOW_order_grid.Control_Visible := false; Rivaroxaban_15mg_STAT_tab := Rivaroxaban_DVTPE_STAT_NOW_order_options[1]; Rivaroxaban_15mg_NOW_tab := Rivaroxaban_DVTPE_STAT_NOW_order_options[2]; // if user selected to give a STAT dose of 15mg then push back doses for rivaroxaban 20mg if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then if (stat_dose_15mg.Value = true) and (now_dose_15mg.Value = true) then stat_dose_15mg.Value := false; else continue_processing_stat := true; endif; if ((Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true)) and (continue_processing_stat = true) then if (stat_dose_15mg.Value = true) then if (Stop_After_field_value.Number > 1) and (Stop_After_field_value_number > 1) then // reduce dose count by 1 because the NOW order will count as the first dose Stop_After_field_value.Number := Stop_After_field_value_number - 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number - 1; //change on 7/1 endif; // selects the stat order in order grid at bottom of the order set Rivaroxaban_15mg_STAT_tab.IsSelected := true; Rivaroxaban_15mg_STAT_tab.IsReadOnly := true; next_dose_15mg := req_time_field_15mg_value.ReqTimeValue; if (next_dose_15mg = "21:00") then next_dose_text := "9:00PM"; after_next_dose_text := "9:00AM"; endif; if (next_dose_15mg = "09:00") then next_dose_text := "9:00AM"; after_next_dose_text := "9:00PM"; endif; // this formats the date in the dialogue based on current hour //if (current_hour < 9) or (current_hour >= 21) then if (current_hour < 9) then start_date_stat_now_formatted := (extract month Now) formatted with "%02d" || "-" || (extract day Now) formatted with "%02d" || "-" || (extract year Now) formatted with "%04d" ; else start_date_stat_now_formatted := (extract month tomorrow) formatted with "%02d" || "-" || (extract day tomorrow) formatted with "%02d" || "-" || (extract year tomorrow) formatted with "%04d" ; endif; //ask user (via message dialogue box) if they would like to move the start time back for rivaroxaban 15mg move_start_of_15mg := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Do you want the {{{SINGLE-QUOTE}}}STAT{{{SINGLE-QUOTE}}} dose to replace the " || next_dose_text || " dose?" ||" .\n\n Choose YES to give a stat dose and then start at " || after_next_dose_text || " on " || start_date_stat_now_formatted ||" .\n\n Choose NO to give a stat dose and then start at " || next_dose_text ,"Rivaroxaban 15mg Alert","YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // yes indiates stat dose = replacing upcoming 10mg so push back all future doses by 1 if ((move_start_of_15mg as string) = "Yes") then prompt_answer_yes.Value := true; // if the requestedtime (for 15mg) is set to 2100 then +1 day to requestedate and set new requestedtime to 0900 if (fifteen_mg_time_field_string = "21:00") then req_date_field_15mg.Value := req_date_field_15mg.Value + 1 day; req_time_field_15mg_value.ReqTimeValue := "09:00"; else // (fifteen_mg_time_field_string = "09:00") req_time_field_15mg_value.ReqTimeValue := "21:00"; endif; if (Stop_After_field_value.Number = 1) and (Stop_After_field_value_number = 1) then if (req_date_field_20mg.Value = req_date_field_15mg.Value) then req_date_field_20mg.Value := req_date_field_15mg.Value + 1 day; endif; endif; endif; // if (move_start_of_15mg as string) = "Yes") then //edits on 3/19/18 // no indicates not replacing stat dose = pushing forward all doses by 1 // no need to push forward if stop after of 1 dose if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // no indicates not replacing stat dose = pushing forward all doses by 1 if ((move_start_of_15mg as string) = "No") then prompt_answer_no.Value := true; req_time_field_20mg_value.ReqTimeValue := "17:00"; calculated_days := (Stop_After_field_value.Number/2); // detect if number of doses is odd if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (current_hour >= 9) and (current_hour < 21) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; endif; if (current_hour >= 21) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days +1) day; endif; if (current_hour >= 21) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days ) day; endif; if (current_hour < 9) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; endif; endif; endif; //if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end changes else // uncheck of 10mg STAT checkbox //if (stat_dose_15mg.Value = true) then Rivaroxaban_15mg_STAT_tab.IsSelected := false; Rivaroxaban_15mg_STAT_tab.IsReadOnly := false; if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then Stop_After_field_value.Number := Stop_After_field_value_number + 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 endif; // used to undo forward shift in date(+1) due to {{{SINGLE-QUOTE}}}YES{{{SINGLE-QUOTE}}} on prompt if (prompt_answer_yes.Value = true) and (Stop_After_field_value.Number = 1) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; prompt_answer_yes.Value := false; endif; if (prompt_answer_yes.Value = true) and (Stop_After_field_value.Number > 1) then prompt_answer_yes.Value := false; endif; fifteen_mg_start_day_extract := extract day req_date_field_15mg.Value; today_day_extract := extract day Now; // if start date was shifted due to dialogue prompt, then reverse changes if (today_day_extract <> fifteen_mg_start_day_extract) and (current_hour < 21) then req_date_field_15mg.Value := req_date_field_15mg.Value - 1 day; req_time_field_15mg_value.ReqTimeValue := "21:00"; endif; if (current_hour < 9) or (current_hour >= 21) and (fifteen_mg_time_field_string = "21:00") then req_time_field_15mg_value.ReqTimeValue := "09:00"; //req_time_field_20mg_value.ReqTimeValue := "09:00"; endif; // if (today_day_extract <> fifteen_mg_start_day_extract) then // 3/19/18 changes // revert date/time changes when STAT dose is unselected and Prompt answer of {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected if (prompt_answer_no.Value = true) and (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then calculated_days := Stop_After_field_value.Number/2; if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (even_dose_detected = true) then if (current_hour >= 9) and (current_hour < 21) then req_date_field_20mg.Value := req_date_field_20mg.Value + 1 day; endif; prompt_answer_no.Value := false; endif; if (odd_dose_detected = true) then prompt_answer_no.Value := false; if (current_hour >= 21) or (current_hour < 9)then req_date_field_20mg.Value := req_date_field_20mg.Value + 1 day; endif; endif; endif; // if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end 3/19/18 changes endif; // if (stat_dose_15mg.Value = true) then else // if ((Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true)) and (continue_processing_stat = true) then stat_dose_15mg.Value := false; Rivaroxaban_15mg_STAT_tab.IsSelected := false; endif; // if ((Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true)) and (continue_processing_stat = true) then if (Rivaroxaban_15mg_tab.IsSelected = false) then stat_dose_15mg.Value := false; Rivaroxaban_15mg_STAT_tab.IsSelected := false; endif; endif; // if (Primary_Obj.OrderSetName = "Apixaban") and (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then /*************************** Rivaroxaban - NOW ORDERING - Rivaroxaban ****************************/ if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Start Now|1") then if (stat_dose_15mg.Value = true) and (now_dose_15mg.Value = true) then now_dose_15mg.Value := false; else continue_processing_now := true; endif; if ((Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true)) and (continue_processing_now = true) then if (now_dose_15mg.Value = true) then if (Stop_After_field_value.Number > 1) and (Stop_After_field_value_number > 1) then // reduce dose count by 1 because the NOW order will count as the first dose Stop_After_field_value.Number := Stop_After_field_value_number - 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number - 1; //change on 7/1 endif; Rivaroxaban_15mg_NOW_tab.IsSelected := true; Rivaroxaban_15mg_NOW_tab.IsReadOnly := true; next_dose_15mg := req_time_field_15mg_value.ReqTimeValue; if (next_dose_15mg = "21:00") then next_dose_text := "9:00PM"; after_next_dose_text := "9:00AM"; endif; if (next_dose_15mg = "09:00") then next_dose_text := "9:00AM"; after_next_dose_text := "9:00PM"; endif; // this formats the date in the dialogue based on current hour if (current_hour < 9) then start_date_stat_now_formatted := (extract month Now) formatted with "%02d" || "-" || (extract day Now) formatted with "%02d" || "-" || (extract year Now) formatted with "%04d" ; else start_date_stat_now_formatted := (extract month tomorrow) formatted with "%02d" || "-" || (extract day tomorrow) formatted with "%02d" || "-" || (extract year tomorrow) formatted with "%04d" ; endif; //ask user (via message dialogue box) if they would like to move the start time back for apixaban 10mg move_start_of_15mg := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Do you want the {{{SINGLE-QUOTE}}}NOW{{{SINGLE-QUOTE}}} dose to replace the " || next_dose_text || " dose?" ||" .\n\n Choose YES to give a stat dose and then start at " || after_next_dose_text || " on " || start_date_stat_now_formatted ||" .\n\n Choose NO to give a stat dose and then start at " || next_dose_text ,"Rivaroxaban 15mg Alert","YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // yes indiates NOW dose = replacing upcoming 10mg so push back all future doses by 1 if ((move_start_of_15mg as string) = "Yes") then prompt_answer_yes.Value := true; // if the requestedtime (for 15mg) is set to 2100 then +1 day to requestedate and set new requestedtime to 0900 if (fifteen_mg_time_field_string = "21:00") then req_date_field_15mg.Value := req_date_field_15mg.Value + 1 day; req_time_field_15mg_value.ReqTimeValue := "09:00"; else // (fifteen_mg_time_field_string = "09:00") req_time_field_15mg_value.ReqTimeValue := "21:00"; endif; if (Stop_After_field_value.Number = 1) and (Stop_After_field_value_number = 1) then if (req_date_field_20mg.Value = req_date_field_15mg.Value) then req_date_field_20mg.Value := req_date_field_15mg.Value + 1 day; endif; endif; endif; // if (move_start_of_15mg as string) = "Yes") then //edits on 3/19/18 // no indicates not replacing stat dose = pushing forward all doses by 1 // no need to push forward if stop after of 1 dose if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // no indicates not replacing stat dose = pushing forward all doses by 1 if ((move_start_of_15mg as string) = "No") then prompt_answer_no.Value := true; req_time_field_20mg_value.ReqTimeValue := "17:00"; calculated_days := (Stop_After_field_value.Number/2); // detect if number of doses is odd if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (current_hour >= 9) and (current_hour < 21) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; endif; if (current_hour >= 21) and (odd_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days +1) day; endif; if (current_hour >= 21) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_15mg.Value + (calculated_days ) day; endif; if (current_hour < 9) and (even_dose_detected = true) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; endif; endif; endif; // if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end changes else // deselect of 10mg NOW checkbox Rivaroxaban_15mg_NOW_tab.IsSelected := false; Rivaroxaban_15mg_NOW_tab.IsReadOnly := false; if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then Stop_After_field_value.Number := Stop_After_field_value_number + 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 endif; // used to undo forward shift in date(+1) due to {{{SINGLE-QUOTE}}}YES{{{SINGLE-QUOTE}}} on prompt if (prompt_answer_yes.Value = true) and (Stop_After_field_value.Number = 1) then req_date_field_20mg.Value := req_date_field_20mg.Value - 1 day; prompt_answer_yes.Value := false; endif; if (prompt_answer_yes.Value = true) and (Stop_After_field_value.Number > 1) then prompt_answer_yes.Value := false; endif; fifteen_mg_start_day_extract := extract day req_date_field_15mg.Value; today_day_extract := extract day Now; // if start date was shifted due to dialogue prompt, then reverse changes if (today_day_extract <> fifteen_mg_start_day_extract) and (current_hour < 21) then req_date_field_15mg.Value := req_date_field_15mg.Value - 1 day; req_time_field_15mg_value.ReqTimeValue := "21:00"; endif; if (current_hour < 9) or (current_hour >= 21) and (fifteen_mg_time_field_string = "21:00") then req_time_field_15mg_value.ReqTimeValue := "09:00"; //req_time_field_20mg_value.ReqTimeValue := "09:00"; endif; // if (today_day_extract <> fifteen_mg_start_day_extract) then // 3/19/18 changes // revert date/time changes when STAT dose is unselected and Prompt answer of {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected if (prompt_answer_no.Value = true) and (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then calculated_days := Stop_After_field_value.Number/2; if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (even_dose_detected = true) then if (current_hour >= 9) and (current_hour < 21) then req_date_field_20mg.Value := req_date_field_20mg.Value + 1 day; endif; prompt_answer_no.Value := false; endif; if (odd_dose_detected = true) then prompt_answer_no.Value := false; if (current_hour >= 21) or (current_hour < 9)then req_date_field_20mg.Value := req_date_field_20mg.Value + 1 day; endif; endif; endif; // if (prompt_answer_no.Value = true) and (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end 3/19/18 changes endif; // if (now_dose_15mg.Value = true) then else // unselect STAT dose checkbox now_dose_15mg.Value := false; Rivaroxaban_15mg_NOW_tab.IsSelected := false; endif; // if (Rivaroxaban_15mg_tab.IsSelected = true) or (Rivaroxaban_20mg_tab.IsSelected = true) then if (Rivaroxaban_15mg_tab.IsSelected = false) then now_dose_15mg.Value := false; Rivaroxaban_15mg_NOW_tab.IsSelected := false; endif; endif; // if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then //************ stop here ********************************************************/ // sets second stop after field to match first stop after field on FormClose if (Rivaroxaban_15mg_tab.IsSelected = true) and (CallingEvent = "FormClose") then Stop_After_field_2_value.Number := Stop_After_field_value.Number; endif; endif; // if (Primary_Obj.OrderSetName = "Rivaroxaban") then /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ /****************************************** start apixaban part *******************************************************************************************************************************/ if (Primary_Obj.OrderSetName = "Apixaban") then prompt_answer_no := last of (field_list where field_list.DataItemName = "Checkbox" and field_List.Control_MultiFieldOccNum = 2); prompt_answer_yes := last of (field_list where field_list.DataItemName = "Checkbox" and field_List.Control_MultiFieldOccNum = 3); stat_dose_10mg := last of (field_list where field_list.DataItemName = "PRX_Dosing Stat and Then"); //Apixaban OS = 10mg now_dose_10mg := last of (field_list where field_list.DataItemName = "PRX_Dosing Start Now"); //Apixaban OS = 10mg Apixaban_DVTPE_order_grid := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_List.Control_MultiFieldOccNum = 2); Apixaban_DVTPE_order_options := Apixaban_DVTPE_order_grid.Value; Apixaban_10mg_tab := Apixaban_DVTPE_order_options[1]; Apixaban_5mg_tab := Apixaban_DVTPE_order_options[2]; DVT_PE_req_date_field := last of (field_list where field_list.DataItemName = "RequestedDate" and field_List.Control_MultiFieldOccNum = 2); DVT_PE_req_date_field_10mg := last of (field_list where field_list.DataItemName = "RequestedDate" and field_List.Control_MultiFieldOccNum = 3); // new code additions 2/28/18 DVT_PE_req_time_field_5mg := last of (field_list where field_list.DataItemName = "RequestedTime" and field_List.Control_MultiFieldOccNum = 2); DVT_PE_req_time_field_10mg := last of (field_list where field_list.DataItemName = "RequestedTime" and field_List.Control_MultiFieldOccNum = 3); DVT_PE_req_time_field_5mg_value := DVT_PE_req_time_field_5mg.Value; DVT_PE_req_time_field_10mg_value := DVT_PE_req_time_field_10mg.Value; // selection of DVT/PE treatment defaults if (CallingEvent = "FieldChange") and (CallingField = "MultiOrderGrid|2") then Stop_After_field_value.Number := 14; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Number := 14; Stop_After_field_2_value.Option := "Doses"; // if user is ordering after 9pm, but before 9am (with even doses) then default the start/scheduled times to 09:00 if (current_hour < 9) or (current_hour >= 21) then if (current_hour >= 21) then DVT_PE_req_date_field_10mg.Value := NOW + 1 day; endif; DVT_PE_req_time_field_10mg_value.ReqTimeCode := "Scheduled/Start Time"; DVT_PE_req_time_field_5mg_value.ReqTimeCode := "Scheduled/Start Time"; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "09:00"; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else DVT_PE_req_time_field_10mg_value.ReqTimeCode := "Scheduled/Start Time"; DVT_PE_req_time_field_5mg_value.ReqTimeCode := "Scheduled/Start Time"; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "21:00"; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; // defaults start time of 5mg to 7 days if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = false) and (not exist DVT_PE_req_date_field.Value) then Apixaban_5mg_tab.IsSelected := true; DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + 7 day; endif; // sz new code 2/1/18 - to fix stop after date requirements if (Apixaban_10mg_tab.IsSelected = false) and (Apixaban_5mg_tab.IsSelected = true) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value; Stop_After_field.Control_Mandatory := false; if (current_hour >= 9) and (current_hour < 21) then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; if (current_hour < 9) and (current_hour >= 21) then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; endif; // sz new code 2/1/18 - to fix stop after date requirements if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = true) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + 7 day; // Stop_After_field.Control_Mandatory := true; endif; // code for unchecking of 5mg if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = false) and (exist DVT_PE_req_date_field.Value) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value; endif; // sz new code 2/1/18 - to fix stop after date requirements // code for unchecking of 5mg and requires MD to select a stop after date if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = false) then DVT_PE_req_date_field.Value := NOW + 7 day; Stop_After_field.Control_Mandatory := true; endif; if (Apixaban_10mg_tab.IsSelected = false) and (Apixaban_5mg_tab.IsSelected = false) then DVT_PE_req_date_field.Value := null; endif; if (Apixaban_10mg_tab.IsSelected = true) then Stop_After_field.Control_Mandatory := true; endif; endif; // if (Primary_Obj.OrderSetName = "Apixaban") and (CallingEvent = "FieldChange") and (CallingField = "MultiOrderGrid|2") then /************************************************* Apixaban - stop after dosing changes **************************************/ ten_mg_time_field_string := DVT_PE_req_time_field_10mg_value.ReqTimeValue as string; five_mg_time_field_string := DVT_PE_req_time_field_5mg_value.ReqTimeValue as string; // code for modifying stop after date of Apixaban // no need to change stop after date if either 10mg or 5mg are not selected if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = true) and (CallingEvent = "FieldChange") and (CallingField = "StopAfter|1") then if (stat_dose_10mg.Value = true) or (now_dose_10mg.Value = true) then calculated_days := (Stop_After_field_value_number)/2; if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (even_dose_detected = true) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + calculated_days day; if (ten_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; if (ten_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; endif; if (odd_dose_detected = true) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + calculated_days day; if (ten_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; if (ten_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; endif; else // if (stat_dose_10mg.Value = true) or (now_dose_10mg.Value = true) then calculated_days := Stop_After_field_value_number/2; // detect if number of doses is odd if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (even_dose_detected = true) then // start date of 5mg is equal to doses/2 DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + calculated_days day; // DVT_PE_req_date_field (is start date for 5mg) // DVT_PE_req_date_field_10mg (is start date for 10mg) if (ten_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; if (ten_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; endif; // if (even_dose_detected = true) and (not exist stat_now_order_active) then if (odd_dose_detected = true) then if (current_hour >= 9) and (current_hour < 21) then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + (calculated_days + 1) day; else DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + calculated_days day; endif; // DVT_PE_req_date_field (is start date for 5mg) // DVT_PE_req_date_field_10mg (is start date for 10mg) if (ten_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; // if (ten_mg_time_field_string = "21:00") then if (ten_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; // if (ten_mg_time_field_string = "21:00") then endif; // if (odd_dose_detected = true) and (not exist stat_now_order_active) then endif; //if (stat_dose_10mg.Value = true) or (now_dose_10mg.Value = true) then // takes # of doses and inserts into hidden stopafter field // done this way due to glitch where "units", "minutes", or "hours" would get inserted into order despite code that reinserts "Doses" into field to correct it Stop_After_field_2_value.Number := Stop_After_field_value_number; Stop_After_field_2_value.Option := Stop_After_field_value_option; // prevents ordering of 5mg dose if user presses "Clear". Or else it would order 10mg and 5mg with same start date. if (Stop_After_field_value.Option = "Doses") and (Stop_After_field_value.Number = 0) then Apixaban_5mg_tab.IsSelected := false; //july_2019_spot_fix := true; Stop_After_field_value.Number := 14; Stop_After_field_2_value.Number := 14; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Option := "Doses"; //Stop_After_field_value.Option := null; //Stop_After_field_value.Number := null; clear_button_message := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Clearing the stop after date has removed the Apixaban 5mg dose" ,"Alert","Ok" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; endif; endif; //if (Apixaban_10mg_tab.IsSelected = true) and (Apixaban_5mg_tab.IsSelected = true) and (CallingEvent = "FieldChange") and (CallingField = "StopAfter|1") then if (Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true) then // added to prevent selection of anything other than "Doses" in the stop after field if (Stop_After_field_value.Option <> "Doses") and (Stop_After_field_value.Option <> "Times") then dlg_result := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "\nOnly {{{SINGLE-QUOTE}}}Doses{{{SINGLE-QUOTE}}} or {{{SINGLE-QUOTE}}}Times{{{SINGLE-QUOTE}}} can be selected as the stop after option" || "\n " ,"DVT/PE Treatment ", "ok" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}},"Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}}; Stop_After_field_value.Option := "Doses"; Stop_After_field_2_value.Option := "Doses"; endif; endif; //if (Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true) then /*************************** Apixaban - STAT ORDERING****************************/ Apixaban_DVTPE_STAT_NOW_order_grid := last of (field_list where field_list.DataItemName = "MultiOrderGrid" and field_List.Control_MultiFieldOccNum = 3); Apixaban_DVTPE_STAT_NOW_order_options := Apixaban_DVTPE_STAT_NOW_order_grid.Value; Apixaban_DVTPE_STAT_NOW_order_grid.Control_Visible := false; Apixaban_10mg_STAT_tab := Apixaban_DVTPE_STAT_NOW_order_options[1]; Apixaban_10mg_NOW_tab := Apixaban_DVTPE_STAT_NOW_order_options[2]; // if user selected to give a STAT dose of 10mg then push back doses for apixaban 5mg if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then if (stat_dose_10mg.Value = true) and (now_dose_10mg.Value = true) then stat_dose_10mg.Value := false; else continue_processing_stat := true; endif; if ((Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true)) and (continue_processing_stat = true) then if (stat_dose_10mg.Value = true) then if (Stop_After_field_value.Number > 1) and (Stop_After_field_value_number > 1) then // reduce dose count by 1 because the NOW order will count as the first dose Stop_After_field_value.Number := Stop_After_field_value_number - 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number - 1; //change on 7/1 endif; // selects the stat order in order grid at bottom of the order set Apixaban_10mg_STAT_tab.IsSelected := true; Apixaban_10mg_STAT_tab.IsReadOnly := true; next_dose_10mg := DVT_PE_req_time_field_10mg_value.ReqTimeValue; if (next_dose_10mg = "21:00") then next_dose_text := "9:00PM"; after_next_dose_text := "9:00AM"; endif; if (next_dose_10mg = "09:00") then next_dose_text := "9:00AM"; after_next_dose_text := "9:00PM"; endif; // this formats the date in the dialogue based on current hour //if (current_hour < 9) or (current_hour >= 21) then if (current_hour < 9) then start_date_stat_now_formatted := (extract month Now) formatted with "%02d" || "-" || (extract day Now) formatted with "%02d" || "-" || (extract year Now) formatted with "%04d" ; else start_date_stat_now_formatted := (extract month tomorrow) formatted with "%02d" || "-" || (extract day tomorrow) formatted with "%02d" || "-" || (extract year tomorrow) formatted with "%04d" ; endif; //ask user (via message dialogue box) if they would like to move the start time back for apixaban 10mg move_start_of_10mg := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Do you want the {{{SINGLE-QUOTE}}}STAT{{{SINGLE-QUOTE}}} dose to replace the " || next_dose_text || " dose?" ||" .\n\n Choose YES to give a stat dose and then start at " || after_next_dose_text || " on " || start_date_stat_now_formatted ||" .\n\n Choose NO to give a stat dose and then start at " || next_dose_text ,"Apixaban 10mg Alert","YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // yes indiates stat dose = replacing upcoming 10mg so push back all future doses by 1 if ((move_start_of_10mg as string) = "Yes") then // if the requestedtime (for 5mg) is set to 2100 then +1 day to requestedate and set new requestedtime to 0900 if (ten_mg_time_field_string = "21:00") then stat_order_moved_date_time := true; DVT_PE_req_date_field_10mg.Value := DVT_PE_req_date_field_10mg.Value + 1 day; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_time_field_10mg_value.ReqTimeValue := "21:00"; endif; if (Stop_After_field_value.Number = 1) and (Stop_After_field_value_number = 1) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; endif; endif; // if (move_start_of_10mg as string) = "Yes") then //edits on 3/19/18 // no indicates not replacing stat dose = pushing forward all doses by 1 // no need to push forward if stop after of 1 dose if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // no indicates not replacing stat dose = pushing forward all doses by 1 if ((move_start_of_10mg as string) = "No") then prompt_answer_no.Value := true; //if (current_hour >= 9) and (current_hour < 21) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value - 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; //endif; endif; endif; //if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end changes else // deselect of 10mg STAT checkbox //if (stat_dose_10mg.Value = true) then Apixaban_10mg_STAT_tab.IsSelected := false; Apixaban_10mg_STAT_tab.IsReadOnly := false; //Stop_After_field_value.Number := Stop_After_field_value_number + 1; //change on 7/1 //Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then Stop_After_field_value.Number := Stop_After_field_value_number + 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 endif; // code to prevent issues if stop after = 1 dose and "STAT" or "NOW" dose is selected with "yes" to prompt if (Stop_After_field_value.Number = 1) and (Stop_After_field_2_value.Number = 1) and (DVT_PE_req_date_field.Value = DVT_PE_req_date_field_10mg.Value) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value - 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; endif; ten_mg_start_day_extract := extract day DVT_PE_req_date_field_10mg.Value; today_day_extract := extract day Now; // if start date was shifted due to dialogue prompt, then reverse changes if (today_day_extract <> ten_mg_start_day_extract) and (current_hour < 21) then DVT_PE_req_date_field_10mg.Value := DVT_PE_req_date_field_10mg.Value - 1 day; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "21:00"; endif; if (current_hour < 9) or (current_hour >= 21) and (ten_mg_time_field_string = "21:00") then DVT_PE_req_time_field_10mg_value.ReqTimeValue := "09:00"; //DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; // if (today_day_extract <> ten_mg_start_day_extract) then // 3/19/18 changes // revert time changes when STAT dose is unselected and Prompt answer of {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then calculated_days := Stop_After_field_value.Number/2; if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (prompt_answer_no.Value = true) and (even_dose_detected = true) then // even doses should have same start times, if not then {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected for prompt to move dose. Correct the offset for 5mg dose. if (ten_mg_time_field_string <> five_mg_time_field_string) then if (ten_mg_time_field_string = "21:00") and (five_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; if (ten_mg_time_field_string = "09:00") and (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; prompt_answer_no.Value := false; endif; endif; if (prompt_answer_no.Value = true) and (odd_dose_detected = true) then if (ten_mg_time_field_string = "21:00") and (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; if (ten_mg_time_field_string = "09:00") and (five_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; prompt_answer_no.Value := false; endif; endif; // if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end 3/19/18 changes endif; // if (stat_dose_10mg.Value = true) then else // if ((Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true)) and (continue_processing_stat = true) then stat_dose_10mg.Value := false; Apixaban_10mg_STAT_tab.IsSelected := false; endif; // if ((Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true)) and (continue_processing_stat = true) then if (Apixaban_10mg_tab.IsSelected = false) then stat_dose_10mg.Value := false; Apixaban_10mg_STAT_tab.IsSelected := false; endif; endif; // if (Primary_Obj.OrderSetName = "Apixaban") and (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then /*************************** Apixaban - NOW ORDERING****************************/ if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Start Now|1") then if (stat_dose_10mg.Value = true) and (now_dose_10mg.Value = true) then now_dose_10mg.Value := false; else continue_processing_now := true; endif; if ((Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true)) and (continue_processing_now = true) then if (now_dose_10mg.Value = true) then if (Stop_After_field_value.Number > 1) and (Stop_After_field_value_number > 1) then // reduce dose count by 1 because the NOW order will count as the first dose Stop_After_field_value.Number := Stop_After_field_value_number - 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number - 1; //change on 7/1 endif; Apixaban_10mg_NOW_tab.IsSelected := true; Apixaban_10mg_NOW_tab.IsReadOnly := true; next_dose_10mg := DVT_PE_req_time_field_10mg_value.ReqTimeValue; if (next_dose_10mg = "21:00") then next_dose_text := "9:00PM"; after_next_dose_text := "9:00AM"; endif; if (next_dose_10mg = "09:00") then next_dose_text := "9:00AM"; after_next_dose_text := "9:00PM"; endif; // this formats the date in the dialogue based on current hour if (current_hour < 9) then start_date_stat_now_formatted := (extract month Now) formatted with "%02d" || "-" || (extract day Now) formatted with "%02d" || "-" || (extract year Now) formatted with "%04d" ; else start_date_stat_now_formatted := (extract month tomorrow) formatted with "%02d" || "-" || (extract day tomorrow) formatted with "%02d" || "-" || (extract year tomorrow) formatted with "%04d" ; endif; //ask user (via message dialogue box) if they would like to move the start time back for apixaban 10mg move_start_of_10mg := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "Do you want the {{{SINGLE-QUOTE}}}NOW{{{SINGLE-QUOTE}}} dose to replace the " || next_dose_text || " dose?" ||" .\n\n Choose YES to give a stat dose and then start at " || after_next_dose_text || " on " || start_date_stat_now_formatted ||" .\n\n Choose NO to give a stat dose and then start at " || next_dose_text ,"Apixaban 10mg Alert","YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; // yes indiates NOW dose = replacing upcoming 10mg so push back all future doses by 1 if ((move_start_of_10mg as string) = "Yes") then // if the requestedtime (for 5mg) is set to 2100 then +1 day to requestedate and set new requestedtime to 0900 if (ten_mg_time_field_string = "21:00") then DVT_PE_req_date_field_10mg.Value := DVT_PE_req_date_field_10mg.Value + 1 day; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_time_field_10mg_value.ReqTimeValue := "21:00"; endif; if (Stop_After_field_value.Number = 1) and (Stop_After_field_value_number = 1) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; endif; endif; // if (move_start_of_10mg as string) = "Yes") then //edits on 3/19/18 // no indicates not replacing stat dose = pushing forward all doses by 1 // no need to push forward if stop after of 1 dose if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // no indicates not replacing stat dose = pushing forward all doses by 1 if ((move_start_of_10mg as string) = "No") then prompt_answer_no.Value := true; //if (current_hour >= 9) and (current_hour < 21) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value - 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; //endif; endif; endif; // if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end changes else // deselect of 10mg NOW checkbox Apixaban_10mg_NOW_tab.IsSelected := false; Apixaban_10mg_NOW_tab.IsReadOnly := false; // Stop_After_field_value.Number := Stop_After_field_value_number + 1; //change on 7/1 // Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then Stop_After_field_value.Number := Stop_After_field_value_number + 1; Stop_After_field_2_value.Number := Stop_After_field_2_value_number + 1; //change on 7/1 endif; // code to prevent issues if stop after = 1 dose and "STAT" or "NOW" dose is selected with "yes" to prompt if (Stop_After_field_value.Number = 1) and (Stop_After_field_2_value.Number = 1) and (DVT_PE_req_date_field.Value = DVT_PE_req_date_field_10mg.Value) then if (five_mg_time_field_string = "21:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; else // (ten_mg_time_field_string = "09:00") DVT_PE_req_date_field.Value := DVT_PE_req_date_field_10mg.Value - 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; stop_after_issue := true; endif; ten_mg_start_day_extract := extract day DVT_PE_req_date_field_10mg.Value; today_day_extract := extract day Now; // if start date was shifted due to dialogue prompt, then reverse changes if (today_day_extract <> ten_mg_start_day_extract) and (current_hour < 21) then DVT_PE_req_date_field_10mg.Value := DVT_PE_req_date_field_10mg.Value - 1 day; DVT_PE_req_time_field_10mg_value.ReqTimeValue := "21:00"; endif; if (current_hour < 9) or (current_hour >= 21) and (ten_mg_time_field_string = "21:00") then DVT_PE_req_time_field_10mg_value.ReqTimeValue := "09:00"; //DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; // if (today_day_extract <> ten_mg_start_day_extract) then // 3/19/18 changes // revert time changes when STAT dose is unselected and Prompt answer of {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then calculated_days := Stop_After_field_value.Number/2; if ((calculated_days as string) matches pattern "%.5%") then odd_dose_detected := true; else even_dose_detected := true; endif; if (prompt_answer_no.Value = true) and (even_dose_detected = true) then // even doses should have same start times, if not then {{{SINGLE-QUOTE}}}NO{{{SINGLE-QUOTE}}} was selected for prompt to move dose. Correct the offset for 5mg dose. if (ten_mg_time_field_string <> five_mg_time_field_string) then if (ten_mg_time_field_string = "21:00") and (five_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; if (ten_mg_time_field_string = "09:00") and (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; prompt_answer_no.Value := false; endif; endif; if (prompt_answer_no.Value = true) and (odd_dose_detected = true) then if (ten_mg_time_field_string = "21:00") and (five_mg_time_field_string = "21:00") then DVT_PE_req_date_field.Value := DVT_PE_req_date_field.Value + 1 day; DVT_PE_req_time_field_5mg_value.ReqTimeValue := "09:00"; endif; if (ten_mg_time_field_string = "09:00") and (five_mg_time_field_string = "09:00") then DVT_PE_req_time_field_5mg_value.ReqTimeValue := "21:00"; endif; prompt_answer_no.Value := false; endif; endif; // if (Stop_After_field_value.Number >= 1) and (Stop_After_field_2_value.Number > 1) then // end 3/19/18 changes endif; // if (now_dose_10mg.Value = true) then else // unselect STAT dose checkbox now_dose_10mg.Value := false; Apixaban_10mg_NOW_tab.IsSelected := false; endif; // if (Apixaban_10mg_tab.IsSelected = true) or (Apixaban_5mg_tab.IsSelected = true) then if (Apixaban_10mg_tab.IsSelected = false) then now_dose_10mg.Value := false; Apixaban_10mg_NOW_tab.IsSelected := false; endif; endif; // if (CallingEvent = "FieldChange") and (CallingField = "PRX_Dosing Stat and Then|1") then // sets second stop after field to match first stop after field on FormClose if (Apixaban_10mg_tab.IsSelected = true) and (CallingEvent = "FormClose") then Stop_After_field_2_value.Number := Stop_After_field_value.Number; endif; endif; //if (Primary_Obj.OrderSetName = "Apixaban") ;; priority: 50 ;; evoke: // No evoke statement // evoked from ;; logic: conclude true; ;; action: // This MLM returns two parameters, of types communication_type and form_type respectively. return this_communication, this_form; ;; Urgency: 50;; end: