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

1455 lines
63 KiB
Plaintext

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: