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

232 lines
6.0 KiB
Plaintext
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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: