maintenance: title: Form_Insulin_Sliding_Scale_calc;; mlmname: Form_Insulin_Sliding_Scale_calc;; arden: version 2;; version: 4.50;; institution: St. Clair Hospital;; author: Teresa M. Spicuzza ;; specialist: Josue Lopez, Eclipsys Corporation;; date: 2007-02-02;; validation: testing;; library: purpose: Populate Variable dose fields based upon Sliding scale dosing option and baseline dose of insulin. ;; explanation: 1. On any activation, this MLM will gather data from the fields: a. Baseline Dose b. Variable Dose c. Dosing Option 2. On the FieldChange event of the Dose Options field, this MLM will a. clear any previous values from the Variable Dose object, b. if the Dose Option value is "Manual Entry", i. set Dose Options Read Only atribute to "true" ii. set the Baseline Dose Mandatory attribute to "false" c. if the Dose Option value is "Low", "Moderate" or "High", i. set Dose Options Read Only atribute to "false" ii. set the Baseline Dose Mandatory attribute to "true" 3. On the ButtonClick event, this MLM will a. set error messages for i. missing Dosing Option ii. Dosing Option = "Manual Entry" and Variable Doses are missing iii.Other Dosing Option and Baseline Dosage value is missing b. if errors are found, i. blank out Variable Dose list ii. display error message c. if no errors are found, then for i. Dosing Option = "Manual Entry" 1) if missing Baseline Dosage, convert it to 0 2) add Baseline Dosage to (entered) Variable Doses 3) display informational message about Variable Dose amount. ii. Other Dosing Options 1) select Low, Moderate or High Variable Dose increments according to Dosing Option chosen 2) create a Variable Dose object for each Blood Sugar range, and 3) Set Variable Dose amount = Baseline amount + increment for each object. MLM assigned to: OEF: PRX_IjSS Calling Event: ButtonClick Calling Field: CallMLM Button Calling Event: FieldChange Calling Field: PRX_InsulinSlideDosing ;; keywords: Insulin, sliding scale; ;; knowledge: type: data-driven;; data: /******************* Make Changes To Spelling And Flags In This Section ***************/ log_execution_info := false; low_incr := (1, 2, 3, 4, 5); mod_incr := (1, 3, 5, 7, 9); high_incr := (2, 4, 7, 10, 13); dose_ranges := ("Low", "Moderate", "High"); /**************************************************************************************/ // This MLM receives three arguments from system (this_communication, // Communication object this_form, // Form object client_info_obj // Arden ClientInfo object ) := argument; // get calling event values from communication object calling_event := this_communication.CallingEvent; calling_field := this_communication.CallingFieldName; // Assign pointer to the Field object, get field values field_list := this_form.fields; // get Baseline dose baseline_field := first of (field_list where field_list.DataItemName = "PRX_InsulinBaseline" ); if exists baseline_field then baseline_value := baseline_field.value as number; endif; // get variable dose list VariableDose_field := first of (field_list where field_list.DataItemName = "VariableDose" ); if exists VariableDose_field then dose_list := VariableDose_field.Value; endif; // This sets the value of the increments depending upon the dosing option selected. Option_field := first of (field_list where field_list.DataItemName = "PRX_InsulinSlideDosing" ); if exists Option_field then opt_chosen := Option_field.Value; endif; // process fields according to calling events if calling_event = "FieldChange" and calling_field = "PRX_InsulinSlideDosing" then // blank out variable dose list, make read only VariableDose_field.Control_Read_Only := false; if exist dose_list then for ea_dose in dose_list do ea_dose.condition := null; ea_dose.from := null; ea_dose.to := null; ea_dose.DoseInstructions := null; ea_dose.uom := null; ea_dose.ItemID := null; enddo; endif; // exist dose_list VariableDose_field.Control_Read_Only := true; // set field characteristics when option is chosen if opt_chosen = "Manual Entry" then VariableDose_field.Control_Read_Only := false; baseline_field.Control_Mandatory := false; elseif opt_chosen is in dose_ranges then VariableDose_field.Control_Read_Only := true; baseline_field.Control_Mandatory := true; endif; // opt_chosen = ... elseif calling_event = "ButtonClick" then // check for errors err_msg := ""; fatal_error := false; if (opt_chosen is null) or (opt_chosen = "") then fatal_error := true; err_msg := "Please Select a Dosing Option before proceeding."; else if opt_chosen = "Manual Entry" then if not exist dose_list then fatal_error := true; err_msg := "Dosages must be entered manually."; endif; elseif opt_chosen is in dose_ranges then if (baseline_value is null) or (baseline_value = "") then fatal_error := true; err_msg := "Please Enter a Baseline Dose before proceeding."; endif; // baseline_value is null endif; // opt_chosen = ... endif; // not exist opt_chosen // proceed only if no errors if fatal_error then if exist dose_list then for ea_dose in dose_list do ea_dose.condition := null; ea_dose.from := null; ea_dose.to := null; ea_dose.DoseInstructions := null; ea_dose.uom := null; ea_dose.ItemID := null; enddo; endif; // exist dose_list this_communication.Message := err_msg; this_communication.MessageType := "Error"; else // hooray, no errors! if opt_chosen = "Manual Entry" then if (baseline_value is null) or (baseline_value = "") then baseline_value := 0; endif; for ea_dose in dose_list do entered_dose := ea_dose.DoseInstructions as number; final_dose := entered_dose + baseline_value; ea_dose.DoseInstructions := final_dose; enddo; this_communication.Message := "Baseline amount of " || baseline_value || " " || "added to Variable Doses"; this_communication.MessageType := "Informational"; else // other options chosen // select dosage range if opt_chosen = "Low" then dose_opt := low_incr; elseif opt_chosen = "Moderate" then dose_opt := mod_incr; elseif opt_chosen = "High" then dose_opt := high_incr; endif; inc1 := dose_opt[1]; inc2 := dose_opt[2]; inc3 := dose_opt[3]; inc4 := dose_opt[4]; inc5 := dose_opt[5]; // set the value in the Variable dose field based upon the baseline // and dosing options selected on form VariableDose_field.Control_Read_Only := false; // clear exisisting Variable Dose list if exist dose_list then for ea_dose in dose_list do ea_dose.condition := null; ea_dose.from := null; ea_dose.to := null; ea_dose.DoseInstructions := null; ea_dose.uom := null; ea_dose.ItemID := null; enddo; endif; // exist dose_list // create new Variable Dose list variable_dose_type := OBJECT [Condition, From, To, DoseInstructions, UOM, ItemID]; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "70"; var_dose.to := "149"; var_dose.DoseInstructions := (baseline_value as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "150"; var_dose.to := "199"; var_dose.DoseInstructions := (baseline_value as number) + (inc1 as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "200"; var_dose.to := "249"; var_dose.DoseInstructions := (baseline_value as number) + (inc2 as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "250"; var_dose.to := "299"; var_dose.DoseInstructions := (baseline_value as number) + (inc3 as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "300"; var_dose.to := "349"; var_dose.DoseInstructions := (baseline_value as number) + (inc4 as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; var_dose := NEW variable_dose_type; var_dose.condition := "Blood Sugar"; var_dose.from := "350"; var_dose.to := "399"; var_dose.DoseInstructions := (baseline_value as number) + (inc5 as number); var_dose.uom := "units"; var_dose.ItemID := NULL; VariableDose_field.Value := VariableDose_field.Value, var_dose; VariableDose_field.Control_Read_Only := true; endif; // opt_chosen = ... endif; // fatal_error endif; // calling_event = ... ;; evoke: ;; logic: Conclude true; ;; action: // This MLM returns communication_type and form_type parameters. return this_communication, this_form; ;; Urgency: 50;; end: