maintenance: title: Form_Heparin_Dose_calc_Cap;; mlmname: Form_Heparin_Dose_calc_Cap;; arden: version 2;; version: 4.50;; institution: St. Clair Hospital;; author: Teresa M. Spicuzza (Teresa.Spicuzza@stclair.org), 412.942.1721 ;; specialist: Eclipsys Corporation;; date: 2006-10-27;; validation: testing;; library: purpose: Calculate Heparin bolus dose based on weight. ;; explanation: (Per T. Spicuzza, 10-26-06): Dosing Weight in Kilograms * Bolus Concentration = Bolus Dose (round to nearest 100) Dose equals value of (rounded) Bolus Dose If (rounded) Bolus Dose is 5000 or less Then Product Concentration equals ‘1000’ WORx Product Code equals ‘06466’ Concentration Text equals ‘(1000units/ml)’ ElseIf (rounded) Bolus Dose is 5001 or greater Product Concentration equals ‘1000’ WORx Product Code equals ‘06466’ Concentration Text equals ‘(1,000units/ml)’ Endif If Dosing Weight in Kilograms is null alert user to ‘Enter a Calculation Weight on the Vital Sign Flowsheet before proceeding’ Change history 02.26.2010 TS Changed Worx code on >5000 units and <5000 units to a new product (same product). 07.06.2011 TS changed dose cap from 4000 units to 5000 units. ;; keywords: Heparin, bolus, weight; ;; knowledge: type: data-driven;; data: /********************Make Changes To Spelling And Flags In This Section*********************/ /********************************************************************************JAB********/ // This MLM is passed three arguments, of types // communication_type, form_type and client info object respectively. (this_communication, // Communication object this_form, // Form object client_info_obj // Arden ClientInfo object ) := argument; called_by := this_communication.CallingEvent; call_field := this_communication.CallingFieldName; //RS Set some needed fields if called_by_editor then client_guid := "9000001369400200"; visit_guid := visit_obj.GUID; chart_guid := "9000001918900170"; orderId := "1000002689073001"; called_by := "FormOpen"; else client_guid := this_communication.ClientGUID; visit_guid := this_communication.ClientVisitGUID; chart_guid := this_communication.ChartGuid; orderid := this_comm.ItemID; endif; //Initialize MLM pointers: round_dose := mlm {{{SINGLE-QUOTE}}}SYS_ROUND_DOSAGE{{{SINGLE-QUOTE}}}; // Assigns fields passed in the Form object to the Field object field_list:= this_form.fields; /*--------------------------------------*/ /* RS: 06/12 get location */ /*--------------------------------------*/ FromOrderSet := first of (field_list where field_list.DataItemName = "MLM_From Order Set"); EdLocFld := first of (field_list where field_list.DataItemName = "ED Location"); IF (EDLocFld.Value = "") or (EDLocFld.Value is Null) then //Retrieve Patient{{{SINGLE-QUOTE}}}s Current Location LocName:= read last {"SELECT currentlocation " || " FROM cv3clientvisit " || " WHERE ClientGUID = " || SQL(client_guid ) || " And GUID = " || SQL(visit_guid)}; EdLocFld.Value := LocName; endif; /*---------------------------------------------------*/ If EdLocFld.Value matches pattern "ER%" then IsED := True; else IsED := False; endif; comb_ht_wt_field := first of (field_list where field_list.DataItemName = "CombinedMeasurements"); test_ht_wt_val := comb_ht_wt_field.value; wt2 := test_ht_wt_val.weight; testex := exists comb_ht_wt_field ; if exists comb_ht_wt_field then comb_ht_wt_val := comb_ht_wt_field.value; wt := comb_ht_wt_val.weight; ht := comb_ht_wt_val.height; wt_type := comb_ht_wt_val.weighttype; bsa := comb_ht_wt_val.bsa; bmi := comb_ht_wt_val.bmi; endif; if not exists wt then tester:=true; else //Units per Kg wt bolus_conc := first of (field_list where field_list.DataItemName = "PRX_WtBasedHeparinBolusUnitsPerKg"); //Route dose_route := first of (field_list where field_list.DataItemName = "OrderRouteCode"); //Dose dose := first of (field_list where field_list.DataItemName = "dosagelow"); //Strength prod_conc_str := first of (field_list where field_list.DataItemName = "PRX_CONCSTRENGTH"); //WORx Code worx_prod_code := first of (field_list where field_list.DataItemName = "PRX_DRUGIDCODE"); //Concentration Text prod_conc_txt := first of (field_list where field_list.DataItemName = "PRX_Concentration"); if exists bolus_conc then bolus_dose := (wt as number) * (bolus_conc.value as number); endif; //round the dose // per trackit 100664 problem with system rounding to 50 not 100 // RS Overridin system call and using our own integer rounding calculation // Original code // (error_msg, rnd_bolus_dose) := call round_dose // with bolus_dose, dose_route.value; // new code introduced 11/11/2008 rnd_bolus_dose := int((bolus_dose + 50)/100) * 100; // Cap the rounded bolus dose. If greater than 5000, set to 5000 if rnd_bolus_dose > 5000 then rnd_bolus_dose := 5000; endif; //use the rounded dose for the actual dose if exists dose then dose.value := rnd_bolus_dose; endif; If rnd_bolus_dose <= 5000 then prod_conc_str.value := "1000"; worx_prod_code.value := "06466"; prod_conc_txt.value := "(1000units/ml)"; else prod_conc_str.value := "1000"; worx_prod_code.value := "06466"; prod_conc_txt.value := "(1000units/ml)"; endif; // rnd_bolus_dose <= 5000 endif; // not exists wt /*this_communication.Message := " Calling field is " || call_field || "\n" || " Order set field = " || FromOrderSet.value || "\n" || " W2 = " || wt2 || "\n" || " test_ht_wt_val = " || test_ht_wt_val || "\n" || " Exist ht_wt? = "|| testex ; this_communication.MessageType := "Informational"; */ ;; evoke: ;; 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: