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

235 lines
7.6 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_Berinert_Calc;;
mlmname: Form_Berinert_Calc;;
arden: version 2;;
version: 5.50;;
institution: St. Clair Hospital;;
author: Teresa Spicuzza ;;
specialist: Teresa Spicuzza ;;
date: 2012-05-21;;
validation: testing;;
library:
purpose: Caculate Berinert dose based on weight. Present dose rounded as:
500 - 600 units round to 500 units
601 - 999 units round to the nearest 50 units
1000 - 1100 units round to 1000 units
1101 - 1499 units - round to the nearest 50 units
1500 - 1600 units round to 1500 units
1601 - 1999 units round to the nearest 50 units
2000 - 2100 units round to 2000 units
2101 - 2499 units - round to nearest 50 units
2500 - 2600 units round to 2500 units
2601 - 3000 units - round to nearest 50 units
For patients < 25 kg, pop up a note that states:
"Dosing in children < 12y/o is not established." and allow for a type in a dose;
For patients > 150 kg, pop up a note that states:
"Clinical trials did not include obese patients > 150 kg. No specific dosing recommendations are available."
and allow for a type in a dose.
;;
explanation:
Dosing Weight in Kilograms * 20 = Dose
If Dosing Weight in Kilograms is null alert user to
Please enter a Weight before proceeding
Change history
03.18.2015 TMS New MLM to calculate and round Berinert C1 Esterase Inhibitor (Human) doses. CSR 24477
;;
keywords:
Berinert, weight; C1 Esterase Inhibitor (Human)
;;
knowledge:
type: data-driven;;
data:
/********************Make Changes To Spelling And Flags In This Section*********************/
/*************************************************************************************************/
// 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;
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
using "ObjectsPlusXA.SCM.Forms";
using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms";
// Assigns fields passed in the Form object to the Field object
field_list:= this_form.fields;
CallingEvent := this_communication.CallingEvent;
CallingField := this_communication.CallingFieldName;
CR := 13 formatted with "%c";
LF := 10 formatted with "%c";
CRLF:= CR||LF;
adminInfo := first of
(field_list where field_list.DataItemName = "AdminInstructions");
OrderInfo := first of
(field_list where field_list.DataItemName = "PRX_NOTECOMMENT0");
comb_ht_wt_field := first of
(field_list where field_list.DataItemName = "CombinedMeasurements");
dose := first of
(field_list where field_list.DataItemName = "DosageLow");
dose_val := dose.value;
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 CallingEvent = "FormOpen" or (CallingEvent = "FieldChange" and callingfield = "CombinedMeasurements") then
if not exists wt or wt = 0 then
this_communication.Message :=
"Please Enter a Weight "
|| "before proceeding."
;
this_communication.MessageType := "Error";
else
wt_val := wt as number;
endif;
If (wt_val >= 25 and wt_val <= 150) then
//Dose
dose_calc := (wt as number) * 20;
If dose_calc >= 500 and dose_calc < 601 then
halffactor := 250; roundfactor := 500;
rndmessage := " (rounded to 500 mg) - ";
elseif
dose_calc >= 601 and dose_calc < 1000 then
halffactor := 25; roundfactor := 50;
rndmessage := " (rounded to nearest 50 mg) - ";
elseif
dose_calc >= 1000 and dose_calc < 1101 then
halffactor := 500; roundfactor := 1000;
rndmessage := " (rounded to 1000 mg) - ";
elseif
dose_calc >= 1101 and dose_calc < 1500 then
halffactor := 25; roundfactor := 50;
rndmessage := " (rounded to nearest 50 mg) - ";
elseif
dose_calc >= 1500 and dose_calc < 1601 then
halffactor := 750; roundfactor := 1500;
rndmessage := " (rounded to 1500 mg) - ";
elseif
dose_calc >= 1601 and dose_calc < 2000 then
halffactor := 25; roundfactor := 50;
rndmessage := " (rounded to nearest 50 mg) - ";
elseif
dose_calc >= 2000 and dose_calc < 2101 then
halffactor := 1000; roundfactor := 2000;
rndmessage := " (rounded to 2000 mg) - ";
elseif
dose_calc >= 2101 and dose_calc < 2500 then
halffactor := 25; roundfactor := 50;
rndmessage := " (rounded to nearest 50 mg) - ";
elseif
dose_calc >= 2500 and dose_calc < 2601 then
halffactor := 1250; roundfactor := 2500;
rndmessage := " (rounded to 2500 mg) - ";
elseif
dose_calc >= 2601 and dose_calc < 3000 then
halffactor := 25; roundfactor := 50;
rndmessage := " (rounded to nearest 50 mg) - ";
elseif
dose_calc >= 3000 then
halffactor := 1500; roundfactor := 3000;
rndmessage := " (rounded to 3000 mg) - ";
endif;
rnd_dose := int((dose_calc + halffactor)/roundfactor) * roundfactor;
if exists dose then
Dose.Value := rnd_dose ;
mltodraw := rnd_dose/50;
rawrate := ((rnd_dose /50) / 4);
rateofadmin := int((rawrate + 0.5)/1) * 1;
msg1 := "Dose calculated at 20 units/kg" ;
msg1b := "Final concentration after reconstitution is 50 units/ml. " ;
// msg1 := "Dose calculated at 20units/kg - Final concentration after reconstitution is 50units/ml. " ;
msg2 := "Administer " ;
msg2b := " units (";
msg3 := " ml) by slow IV injection at 4 ml/min. (" ;
msg4 := " minutes)";
dose.control_read_only := true;
admininfo.value := msg1 || rndmessage || msg1b || LF || LF || msg2 || rnd_dose || msg2b || mltodraw || msg3 || rateofadmin || msg4;
endif;
elseif
(wt as number) < 25 and (wt as number) > 0 then
this_communication.Message :=
"Dosing in children < 12y/o is not established. "
|| "Enter a dose if you wish to continue."
;
this_communication.MessageType := "Informational";
admininfo.value := " ";
Dose.Value := "";
dose.control_read_only := false;
elseif
(wt as number) > 150 then
this_communication.Message :=
"Clinical trials did not include obese patients > 150 kg. No specific dosing recommendations are available. "
|| "Enter a dose if you wish to continue."
;
this_communication.MessageType := "Informational";
admininfo.value := " ";
Dose.Value := "";
dose.control_read_only := false;
endif; // not exists wt
endif;
If CallingEvent = "FieldChange" and Callingfield = "DosageLow" then
wt_val := wt as number;
If (wt_val < 25 or wt_val > 150) and dose_val > 0 then
mltodraw := dose.value/50;
rawrate := ((dose.value /50) / 4);
rateofadmin := int((rawrate + 0.5)/1) * 1;
// msg1 := "Dose calculated at 20 units/kg" ;
msg1b := "Final concentration after reconstitution is 50 units/ml. " ;
msg2 := "Administer " ;
msg2b := " units (";
msg3 := " ml) by slow IV injection at 4 ml/min. (" ;
msg4 := " minutes)";
// dose.control_read_only := true;
admininfo.value := msg1b || LF || LF || msg2 || dose.value || msg2b || mltodraw || msg3 || rateofadmin || msg4;
endif;
endif;
;;
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: