Initial Checking with all 820 MLMs

This commit is contained in:
2020-02-02 00:54:01 -05:00
parent c59dc6de2e
commit 840d0432f4
828 changed files with 239162 additions and 0 deletions

View File

@@ -0,0 +1,456 @@
maintenance:
title: Cardiac Protocol Heparin Dosing ;;
mlmname: FORM_Heparin_Cardiac_Protocol_POV;;
arden: version 2;;
version: 4.50;;
institution: St. Clair Hospital ;;
author: Teresa Spicuzza;;
specialist: Robert Spence, St. Clair Hospital ;;
date: 2008-06-25;;
validation: testing;;
library:
purpose: Calculates Heparin Dose based on Patient Weight.
;;
explanation: On any event, this MLM gathers information from the
fields on the Weight-based heparing order entry form and sets a
fatal error flag is needed.
Processing continues only if there are no errors on the form.
On the FormOpen event, the MLM will transfer the value of hte rate field
to the current rate field.
On the FieldChange event the fields "Current Rate Action" and "Adjustment in
units/kg/hr" are considered.
Form to which to attach: PRX_IvDrpHepWtBased
Calling Event: FormOpen
Calling Event: FieldChange
Calling Field: PRX_HepWbRateAdjust
Calling Field: PRX_HepChgValue
History
07/18/2008 RS Added logic to cap the variable used for calculating the Rate ml/hr
11/21/2012 TMS Added PRX_HepWbCurrentRate as call field to logic to start calculation of adjustment and new rate - Ticket 154292
07.23.2019 TMS CSR 37676 - Change log_execution_info to false per upgrade analysis.
;;
keywords: Heparin, dosage,;
;;
knowledge:
type: data-driven;;
data:
/*-----------------------------------------------------------------------*/
/* This MLM receives three objects from the system, of types shown below */
/*-----------------------------------------------------------------------*/
(this_comm, // Communication type object
this_form, // Form type object
client_obj // Arden ClientInfo type object
) := argument;
/************* Make Changes To Spelling And Flags In This Section *************/
/*------------------------------------*/
/* Set to true if a CDS log is needed.*/
/*------------------------------------*/
log_execution_info := false;
/*-------------------------*/
/* set flags and variables */
/*-------------------------*/
fatal_error := false;
hep_soln_conc := 50; // "standard" concentration in units/ml
Measurements_di := "CombinedMeasurements";
APTT_val_sec_di := "PRX_HepWtBase_APTTvalue";
curr_rate_u_h_di := "PRX_HepWbCurrentRate";
curr_rate_adj_di := "PRX_HepWbRateAdjust";
adj_val_u_h_di := "PRX_HepChgUnitsPerHr";
calc_rate_di := "PRX_Generic_CB";
iv_rate_u_h_di := "PRX_DRIPINIT";
iv_rate_ml_comp := "OrderIVRate";
route_di := "OrderRouteCode";
// iv_rate_ml_h_di := "PRX_DRIPINIT";
// iv_rate_uom_di := "PRX_DRIPINITUOM";
/******************************************************************************/
/*--------------------------*/
/* set up testing variables */
/*--------------------------*/
if called_by_editor then
visit_obj := read last {ClientVisit: THIS};
// client_obj := read last {ClientInfo: THIS};
endif;
/*-------------------------------------------*/
/* get information from Communication object */
/*-------------------------------------------*/
called_by := this_comm.CallingEvent;
call_field := this_comm.CallingFieldName;
if called_by_editor then
client_guid := visit_obj.clientguid;
visit_guid := visit_obj.GUID;
chart_guid := visit_obj.chartguid;
orderId := "1000002689073001";
called_by := "FormOpen";
else
client_guid := this_comm.ClientGUID;
visit_guid := this_comm.ClientVisitGUID;
chart_guid := this_comm.ChartGuid;
orderid := this_comm.ItemID;
endif;
/*------------------------------------------------------------*/
/* Assign pointers to the Field list and to individual fields */
/*------------------------------------------------------------*/
field_list := this_form.fields;
comb_ht_wt_fld := first of (field_list
where field_list.DataItemName = Measurements_di);
APTT_val_sec_fld := first of (field_list
where field_list.DataItemName = APTT_val_sec_di);
curr_rate_u_h_fld := first of (field_list
where field_list.DataItemName = curr_rate_u_h_di);
curr_rate_adj_fld := first of (field_list
where field_list.DataItemName = curr_rate_adj_di);
adj_val_u_h_fld := first of (field_list
where field_list.DataItemName = adj_val_u_h_di);
calc_rate_fld := first of (field_list
where field_list.DataItemName = calc_rate_di);
iv_rate_u_h_fld := first of (field_list
where field_list.DataItemName = iv_rate_u_h_di);
iv_rate_ml_h_fld :=first of (field_list
where field_list.DataItemName = iv_rate_ml_comp );
EdLocFld := first of (field_list
where field_list.DataItemName = "ED Location");
FromOrderSet := first of (field_list
where field_list.DataItemName = "MLM_From Order Set");
/*--------------------------------------*/
/* RS: 06/12 get location */
/*--------------------------------------*/
If (called_by = "FormOpen") or (call_field = "MLM_From Order Set") 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;
ApttVal := read last
{"Select top 1 bo.value "
|| " From cv3order as o with (nolock) "
|| " join cv3basicobservation as bo with (nolock) "
|| " on o.clientguid = bo.clientguid "
|| " and o.chartguid = bo.chartguid "
|| " and o.guid = bo.orderguid "
|| " and bo.status = {{{SINGLE-QUOTE}}}F{{{SINGLE-QUOTE}}} "
|| " and bo.Active = 1 "
|| " And bo.IsHistory = 0 "
|| " join cv3ordercatalogmasteritem as ocmi with (nolock) "
|| " on ocmi.guid = o.ordercatalogmasteritemguid "
|| " and ocmi.active = 1 "
|| " and ocmi.name = {{{SINGLE-QUOTE}}}APTT{{{SINGLE-QUOTE}}} "
|| " where o.clientguid = " || SQL(client_guid)
|| " and o.chartguid = " || SQL(chart_guid)
|| " and o.performeddtm >= (DATEADD(hour, -28, getdate())) "
|| " order by o.performeddtm desc "
};
CompVal := ApttVal As Number;
APTT_val_sec_fld.VALUE := CompVal;
If (FromOrderSet.Value = True) then
orderlist := read
{" Select guid from cv3ordercatalogmasteritem "
|| " where (name = {{{SINGLE-QUOTE}}}Heparin 25,000 Units +D5W 500ml{{{SINGLE-QUOTE}}}) or "
|| " (name = {{{SINGLE-QUOTE}}}Heparin 25,000 Units +0.9% NaCl 500ml{{{SINGLE-QUOTE}}}) "
|| " and active = 1 "
};
orderid1:=First(orderlist);
orderid2:=Last(orderlist);
OldRate := read last
{" Select top 1 oud.value "
|| " from cv3order as o with (nolock) "
|| " join cv3orderuserdata as oud with (nolock) "
|| " on oud.orderguid= o.guid "
|| " and oud.userdatacode = {{{SINGLE-QUOTE}}}PRX_DRIPINIT{{{SINGLE-QUOTE}}} "
|| " where o.clientguid = " || SQL(client_guid)
|| " and o.chartguid = " || SQL (chart_guid)
|| " and (o.ordercatalogmasteritemguid = " || SQL(orderid1)
|| " or o.ordercatalogmasteritemguid = " || SQL(orderid2) || ") "
|| " and o.requesteddtm <= getdate() "
|| " order by o.requesteddtm desc, o.createdwhen desc"
};
else
OldRate := read last
{" Select top 1 oud.value "
|| " from cv3order as o with (nolock) "
|| " join cv3orderuserdata as oud with (nolock) "
|| " on oud.orderguid= o.guid "
|| " and oud.userdatacode = {{{SINGLE-QUOTE}}}PRX_DRIPINIT{{{SINGLE-QUOTE}}} "
|| " where o.clientguid = " || SQL(client_guid)
|| " and o.chartguid = " || SQL (chart_guid)
|| " and o.ordercatalogmasteritemguid = " || SQL(orderid)
|| " and o.requesteddtm <= getdate() "
|| " order by o.requesteddtm desc, o.createdwhen desc"
};
endif;
/* test := (curr_rate_adj_fld.value is null) or (curr_rate_adj_fld.Value <> "Initial") ;
this_comm.Message := "Old Rate Set to " || OldRate
|| "\n\n Rate Adjust set to \n" || curr_rate_adj_fld.Value
|| "If statement would return " ||test;
this_comm.MessageType := "Error";
*/
If (curr_rate_adj_fld.value is null) or (curr_rate_adj_fld.Value <> "Initial") then
curr_rate_u_h_fld.value := OldRate;
iv_rate_ml_h_fld.control_read_only := True;
iv_rate_u_h_fld.control_read_only := True;
else
curr_rate_u_h_fld.value := NULL;
endif;
// now for the suggested calculations
/* test := curr_rate_adj_fld.Value <> "Initial" ;
this_comm.Message := "Called by " || called_by
|| "\nCalling field " || call_field
|| "\nexists APTT_val_sec_Fld " || exists APTT_val_sec_Fld
|| "\nexists curr_rate_u_h_fld " || exists curr_rate_u_h_fld
|| "\ncurr_rate_adj_fld.Value is" || curr_rate_adj_fld.value ;
this_comm.MessageType := "Error";
curr_rate_adj_fld.value := "Increase";
*/
If (exists APTT_val_sec_Fld)
and (exists curr_rate_u_h_fld) then
If (curr_rate_adj_fld.Value <> "Initial" or curr_rate_adj_fld.Value is null) then
If CompVal < 66 then
curr_rate_adj_fld.value := "Increase";
adj_val_u_h_fld.value := 200;
elseif (CompVal >= 66) and (CompVal <= 76) then
curr_rate_adj_fld.value := "Increase";
adj_val_u_h_fld.value := 100;
elseif (CompVal >= 77) and (CompVal <= 115) then
curr_rate_adj_fld.value := "No Change";
adj_val_u_h_fld.value := null;
elseif (CompVal >= 116) and (CompVal <= 134) then
curr_rate_adj_fld.value := "Decrease";
adj_val_u_h_fld.value := 100;
elseif (CompVal > 134) then
curr_rate_adj_fld.value := "Decrease";
adj_val_u_h_fld.value := 200;
fatal_error := true;
this_comm.Message := "Please Note that recent APTT above 134 Seconds \n\n"
||"Please STOP HEPARIN INFUSION for 1 hour... \n\n"
||"Then resume at new rate as calculated on this order";
this_comm.MessageType := "Error";
endif;
endif;
else
curr_rate_adj_fld.value := null;
adj_val_u_h_fld.value := null;
endif;
endif;
If EdLocFld.Value matches pattern "ER%" then
IsED := True;
else
IsED := False;
endif;
if exist APTT_val_sec_fld then
APTT_val_sec_fld.Control_Mandatory := false;
endif;
if exist curr_rate_u_h_fld then
if curr_rate_u_h_fld.Value is null then
curr_rate_u_h := 0;
else
curr_rate_u_h := curr_rate_u_h_fld.Value;
endif;
endif;
if exist curr_rate_adj_fld then
adj_action := curr_rate_adj_fld.Value;
endif;
if exist adj_val_u_h_fld then
adj_amt_u_h := adj_val_u_h_fld.Value as number;
endif;
if exist iv_rate_u_h_fld then
iv_rate_u_h := iv_rate_u_h_fld.Value;
// iv_rate_amt := iv_rate_u_h.AMOUNT as number;
// iv_rate_uom := iv_rate_u_h.UOM;
else
fatal_error:=true;
endif;
if exist iv_rate_ml_h_fld then
iv_rate_ml_h := iv_rate_ml_h_fld.Value;
endif;
/*----------------------------------*/
/* process form fields and settings */
/* only if no errors are found */
/*----------------------------------*/
if not fatal_error then
// if (called_by = "FormOpen") or (call_field = "MLM_From Order Set" ) then
// curr_rate_u_h_fld.Control_Read_Only := false;
// curr_rate_u_h_fld.Value := iv_rate_u_h.Amount;
// curr_rate_u_h_fld.Control_Read_Only := true;
/// APTT_val_sec_fld.Control_Mandatory := false;
// APTT_val_sec_fld.Value := null;
If (call_field = "PRX_DRIPINIT") then
marker:=true;
checkrate := iv_rate_u_h_fld.Value ;
if ((floor (checkrate /50)) <> (ceiling(checkrate /50)) or (checkrate is null) or (checkrate =0)) then
this_comm.Message := "Your IV Rate Must Be Divisible by 50" || "\n\n" ||
"You Entered: " || checkrate;
this_comm.MessageType := "Error";
iv_rate_u_h_fld.value:=null;
iv_rate_ml_h.Amount := null;
else
iv_rate_ml_h.Amount := checkrate /50;
endif;
// this will only apply on initials
// TMS added PRX_HepWbCurrentRate to logic to prevent looping when current rate is changed
// elseif (call_field ="PRX_HepWtBase_APTTvalue") and (curr_rate_adj_fld.value is null or curr_rate_adj_fld.Value <> "Initial") then
elseif ((call_field ="PRX_HepWtBase_APTTvalue") or (call_field = "PRX_HepWbCurrentRate")) and (curr_rate_adj_fld.value is null or curr_rate_adj_fld.Value <> "Initial") then
iv_rate_u_h_fld.Value:= null;
iv_rate_ml_h.Amount := null;
If (curr_rate_adj_fld.value is null or curr_rate_adj_fld.Value <> "Initial") then
APTT_val_sec_fld.Control_Mandatory := true;
curr_rate_adj_fld.value := null;
adj_val_u_k_h_fld.value := null;
endif;
CompVal := APTT_val_sec_fld.VALUE As Number;
If CompVal is not null then
If (exists APTT_val_sec_Fld) and (exists curr_rate_u_h_fld) then
If CompVal < 66 then
curr_rate_adj_fld.value := "Increase";
adj_val_u_h_fld.value := 200;
elseif (CompVal >= 66) and (CompVal <= 76) then
curr_rate_adj_fld.value := "Increase";
adj_val_u_h_fld.value := 100;
elseif (CompVal >= 77) and (CompVal <= 115) then
curr_rate_adj_fld.value := "No Change";
adj_val_u_h_fld.value := null;
elseif (CompVal >= 116) and (CompVal <= 134) then
curr_rate_adj_fld.value := "Decrease";
adj_val_u_h_fld.value := 100;
elseif (CompVal > 134) then
curr_rate_adj_fld.value := "Decrease";
adj_val_u_h_fld.value := 200;
endif;
endif;
else
curr_rate_adj_fld.value := null;
adj_val_u_k_h_fld.value := null;
endif;
elseif (call_field = calc_rate_di) or (called_by = "FormOpen") or (FromOrderSet.Value = True) then
calc_rate_fld.Value := False;
CompVal := APTT_val_sec_fld.VALUE As Number;
if (CompVal > 134) then
fatal_error := true;
this_comm.Message := "Please Note that recent APTT above 134 Seconds \n\n"
||"Please STOP HEPARIN INFUSION for 1 hour... \n\n"
||"Then resume at new rate as calculated on this order";
this_comm.MessageType := "Error";
endif;
if adj_action = "Initial" then
/* clear adjustment field and make read only */
adj_val_u_h_fld.Value := null;
adj_val_u_h_fld.Control_Mandatory := false;
adj_val_u_h_fld.Control_Read_Only := true;
iv_rate_ml_h.Amount := iv_rate_u_h_fld.Value /50 ;
elseif adj_action = "No Change" then
/* clear adjustment field and make read only */
adj_val_u_h_fld.Value := null;
adj_val_u_h_fld.Control_Mandatory := false;
adj_val_u_h_fld.Control_Read_Only := true;
/* make APTT field mandatory */
APTT_val_sec_fld.Control_Mandatory := true;
iv_rate_u_h_fld.Value := curr_rate_u_h;
iv_rate_ml_h.Amount := curr_rate_u_h / 50;
elseif (adj_action = "Increase") or (adj_action = "Decrease") then
if adj_action = "Decrease" then
adj_amt_u_h := -adj_amt_u_h ;
endif;
iv_rate_u_h_fld.Value := curr_rate_u_h + adj_amt_u_h ;
iv_rate_ml_h.Amount := iv_rate_u_h_fld.Value / 50;
endif;
endif; // called_by = ...
endif; // not fatal error
;;
evoke: // No evoke statement
;;
logic:
conclude true; // always, to return modified objects
;;
action:
/*-----------------------------------------------------------*/
/* return communication_type and form_type objects to system */
/*-----------------------------------------------------------*/
return this_comm, this_form;
;;
end: