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

122 lines
4.4 KiB
Plaintext

maintenance:
title: MRSA Order Check;;
mlmname: Form_MRSA_ScreenCheckOrders;;
arden: version 2;;
version: 5.00;;
institution: St. Clair Hospital;;
author: Teresa M. Spicuzza ;;
specialist: Eclipsys Corporation;;
date: 2010-12-14;;
validation: testing;;
library:
purpose: Prohibit ordering of MRSA Nasal Screen if one exists, patient has had a positive screen, or patient is not on
a screening unit.
;;
explanation: This MLM will hard stop user from entering an Infection Control MRSA Nasal Screen when one already exists.
Change history
12.21.2010 TS Created
05.04.2011 TS Added different alert messge if patient has an order pending collection.
09.26.2016 TS Added "(OrderedWithin3 = "Yes" and NewOrderBox.Value = true and StatusCode <> "PCOL")" to eliminate
users from ordering Nasal Screen via the Copy/Reorder function in SCM. CSR 35095
;;
keywords:
MRSA, Infection Control;
;;
knowledge:
type: data-driven;;
data:
// This MLM is passed three arguments, of types
// communication_type, form_type and client info object respectively.
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
using "ObjectsPlusXA.SCM.Forms";
using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms";
(this_communication, // Communication object
this_form, // Form object
client_info_obj // Arden ClientInfo object
) := argument;
called_by := this_communication.CallingEvent;
ClientGuid := this_communication.ClientGUID;
ClientVisitGuid := this_communication.ClientVisitGUID;
ChartGuid := this_communication.ChartGuid;
// Assigns fields passed in the Form object to the Field object
field_list:= this_form.fields;
// Get patient current location
CurrentLocation := read last
{"Select CurrentLocation "
||" From cv3Clientvisit "
||" Where Guid = " || SQL(ClientVisitGuid)
||" and VisitStatus = {{{SINGLE-QUOTE}}}ADM{{{SINGLE-QUOTE}}}" };
// Obtain needed data elements from SCH_Func_MRSA_Order
MRSA_Rules_MLM := mlm {{{SINGLE-QUOTE}}}SCH_Func_MRSA_Order{{{SINGLE-QUOTE}}};
(ScreeningUnit, OrderedToday, OrderedWithin3, PositiveScreen, SigDTM, StatusCode, ResultValue, MRSAHistory, NursingHomeResidency, AntiInfectivewithin7)
:= call MRSA_Rules_MLM with (ClientVisitGuid, ChartGuid, ClientGuid, CurrentLocation);
StopOrderBox := last of (field_list where field_list.DataItemName = "MLM Generic Free Text");
NewOrderBox := last of (field_list where field_list.DataItemName = "MLM Generic Checkbox");
//dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with "\n SigDtm: " || SigDTM ||"\n itemevent: " || ItemEvent ,"Alert","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}};
NextTestDtm := (SigDTM as time) + 3 days;
If OrderedWithin3 = "Yes" and StatusCode <> "PCOL" then
ReasonMessage := "Additional MRSA Nasal Screen does not need performed " ||"\n until " || (NextTestDtm as time) || ".";
endif;
If OrderedWithin3 = "Yes" and StatusCode = "PCOL" then
ReasonMessage := "Patient has an MRSA Order pending collection; please add specimen to pending order in SCM.";
endif;
If PositiveScreen = "Yes" then
ReasonMessage := "This patient has a positive screening for MRSA, therefore this test does not need ordered.";
endif;
If (PositiveScreen = "Yes") or ((OrderedWithin3 = "Yes" and NewOrderBox.Value = false)) or (OrderedWithin3 = "Yes" and NewOrderBox.Value = true and StatusCode <> "PCOL") then
hardstop := "yes";
else hardstop := "no";
endif;
//Present user with message box and stop order from being ordered. If order allowed change value of NewOrderBox to True to eliminate
//MLM stopping user when trying to status specimen as collected.
StopOrderBoxValue:= StopOrderBox.value;
If exists StopOrderBox then
If hardstop = "yes" then
this_communication.DisplayForm := "yes";
this_communication.Message := ReasonMessage;
this_communication.MessageType := "Error";
StopOrderBoxValue.control_mandatory := TRUE;
NewOrderBox.value := FALSE;
else
StopOrderBoxValue.control_mandatory := FALSE;
NewOrderBox.value :=TRUE;
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: