Files
St.Clair/MLMStripper/bin/Debug/DOC/DOC_DIET_KBC_ADULT_ASSESSMENT.mlm

251 lines
9.7 KiB
Plaintext

maintenance:
title: DOC_DIET_KBC_ADULT_ASSESSMENT ;;
mlmname: DOC_DIET_KBC_ADULT_ASSESSMENT;;
arden: version 6.1;;
version: 2.50;;
institution: St.Clair Hospital;;
author: Shivprasad Jadhav ;;
specialist: Shivprasad Jadhav, Allscripts Corporation;;
date: 2015-09-01;;
validation: testing;;
library:
purpose:
1st senario-When user select criteria i.e {1-Patient consuming <50% of meals x 3days or 2-NPO or clear liquids >3days}
from [2."Adult Assessment/Intervention"flowsheet when selecting [Risk assessment/Screenings] observation in "Nutrition Risk Screen" then MLM should creat
a Dietitian Consult for the charted observation which has mention.
2nd Senario- If there is an active "Dietitian consult order with this indication i.e{1-Patient consuming <50% of meals x3 days} or {2- NPO or clear liquids >3 days}
has present or charted previously and "Dietitian Consult order was created previously then MLM should not create a 2nd order for Dietitian consult .
3rd Senario- If user select othere criteria except given criteria i.e {1-Patient consuming <50% of meals x3 days} or {2- NPO or clear liquids >3 days} then MLM should not creat
any "Dietitian Consult Order.
;;
explanation:
Change history
10-01-2015 SJ CSR 32400 : Created date.
09-28-2016 DJW HD#2113751 - Provide a message box to confirm the choice before automatically creating a Dietitian Consult Order
;;
keywords:
;;
knowledge:
type: data-driven;;
data:
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
// Receive arguments from the structured note
(this_documentCommunication) := argument;
//Get The Flowsheet Name
(this_FS_doc) := this_documentCommunication.DocumentConfigurationObj;
(this_parms) := this_FS_doc.ParametersList;
(this_curr_col) := this_FS_doc.Currentcolumn;
(this_currentObs) := this_documentCommunication.CurrentObservationObj;
this_observations := this_curr_col.chartedobservationslist;
(ClientGuid) := this_documentCommunication.ClientGUID;
(ChartGuid) := this_documentCommunication.ChartGUID;
(ClientVisitGuid) := this_documentCommunication.ClientVisitGUID;
(UserGuid) := this_DocumentCommunication.UserGUID ;
LocationGuid := read last {"SELECT CurrentLocationGUID FROM CV3ClientVisit where ClientGUID = " || ClientGuid};
// read First {" Select cv.CurrentLocationGUID from Cv3ClientVisit cv With (nolock) Where cv.guid= "||SQL(ClientVisitGuid) ||" "} ;
CatalogItemName := "Dietitian Consult";
prm_med := First of (this_parms where this_parms.Name = "AS nut risk screen");
Obs_med := first of (this_observations where this_observations.ParameterGUID = prm_med.ParameterGUID );
val_med := Obs_med.ValueObj.listitemslist where Obs_med.ValueObj.listitemslist.isselected = true ;
/*a:=val_med[1].Value;
b:=val_med[2].Value;
DataItem1:=val_med[3].Value;
DataItem2:=val_med[4].Value;
e:=val_med[5].Value; */
indexList := 1 seqto count (val_med);
for i in indexList do
If val_med[i].Value="patient consuming <50% of meals x 3 days" Then
DataItem1 := "patient consuming <50% of meals x 3 days";
Elseif val_med[i].Value="NPO or clear liquids > 3 days" Then
DataItem2 := "NPO or clear liquids > 3 days";
Else DataItem1 := Null ; DataItem2 := Null ;
Endif;
enddo;
UserData := Read first { "Select Top 1 o.name "
|| " from cv3ClientVisit cv (nolock) Join cv3Order o (nolock) "
|| " On cv.guid =o.ClientVisitGUID And cv.ClientGUID=o.ClientGUID "
|| " Join cv3OrderUserData ud On ud.OrderGUID=o.GUID And ud.ClientGUID=cv.ClientGUID "
|| " And ud.UserDataCode in ({{{SINGLE-QUOTE}}}NUTR_Consult Reasons{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}NUTR_Consult Reason 2{{{SINGLE-QUOTE}}}) "
|| " And o.Name = {{{SINGLE-QUOTE}}}Dietitian Consult{{{SINGLE-QUOTE}}} And o.orderstatuslevelnum < 55 "
|| " and o.OrderStatusCode = {{{SINGLE-QUOTE}}}AUA1{{{SINGLE-QUOTE}}} And o.ClientVisitGUID = " || ClientVisitGuid
|| " Where ud.Value in ({{{SINGLE-QUOTE}}}Patient consuming <50% of meals x 3 days{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}NPO or Clear Liquids > 3 days{{{SINGLE-QUOTE}}}) "};
If UserData is Null Then
If (DataItem1 is Not Null) or ( DataItem2 is Not Null ) Then
dlg_result := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with
"\n This choice will create a Dietitian Consult {{{SINGLE-QUOTE}}}" ||
"\n\n Click {{{SINGLE-QUOTE}}}Yes{{{SINGLE-QUOTE}}} to confirm your choice " ||
"\n\n Click {{{SINGLE-QUOTE}}}No{{{SINGLE-QUOTE}}} if you wish to change your choice " ||
"\n "
,"Create a Dietitian Consult Order ? ", "YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}},"Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}};
If (dlg_result as string) = "Yes" then
error_destination := destination { IntermediateMessage } with [
alert_type := "Warning",
short_message := "Auto Order MLM",
priority := "low",
scope := "chart",
Rule_group := "Auto Order MLM",
Rule_number := 1001,
Rule_subgroup := "",
Send_alert_with_order := "",
Alert_dialog_settings := "",
Display_alert := true ];
user_IDType := "Edstan Number (physician)";
user_IDCode := read last {"SELECT IDCode FROM CV3CAREPROVIDERID " || " where ProviderGUID = " || UserGUID
|| " and ProviderIDTypeCode = {{{SINGLE-QUOTE}}}Edstan Number (physician){{{SINGLE-QUOTE}}}"};
order_Creation_Reason := "Order Created Form MLM";
try
client_visit_obj := call {{{SINGLE-QUOTE}}}ClientVisit{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((ClientVisitGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}}) ;
WSSessionType := "Standard";
WSSessionReason := "";
WSRequestedBySource := "";
WSRequestedBy_obj := call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindById with ( user_IDType, (user_IDCode as STRING) );
WSlocation_obj := call {{{SINGLE-QUOTE}}}Location{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((LocationGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}Common Data:{{-R}}\n" ||
ex.Message || "\n\n";
if ( client_visit_obj is NOT NULL ) then
void:= call client_visit_obj.Dispose;
client_visit_obj:= null;
endif;
if ( WSRequestedBy_obj is NOT NULL ) then
void:= call WSRequestedBy_obj.Dispose;
WSRequestedBy_obj:= null;
endif;
if ( WSlocation_obj is NOT NULL ) then
void:= call WSlocation_obj.Dispose;
WSlocation_obj:= null;
endif;
endcatch;
try
// get OrderCatalogMasterItem ObjectsPlus object
general_catalog_item := call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with CatalogItemName;
// Create the prefilled General order
GeneralOrder2_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder
with
client_visit_obj, // ClientVisit ObjectsPlus object
general_catalog_item, // OrderCatalogMasterItem ObjectsPlus object
order_Creation_Reason, // CreateReason
wsRequestedBy_obj, // RequestedBy ObjectsPlus object
wsRequestedBySource, // string RequestedBySource (must be in dictionary)
wsSessionType, // string SessionType
wsSessionReason, // string SessionReason
wslocation_obj, // Location ReleaseLocGrpID
"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}}; // AvailabilityOverride
IF (EXISTS DataItem1 AND DataItem1 IS NOT NULL ) or (EXISTS DataItem2 AND DataItem2 IS NOT NULL ) THEN
If DataItem1 is not Null Then Val := DataItem1 ; Else Val := DataItem2; Endif;
Value := call GeneralOrder2_obj.{{{SINGLE-QUOTE}}}SetEnterpriseDefinedDataItemValue<String>{{{SINGLE-QUOTE}}} with
"NUTR_Consult Reasons" , Val ;
ENDIF;
IF (EXISTS DataItem1 AND DataItem1 IS NOT NULL ) And (EXISTS DataItem2 AND DataItem2 IS NOT NULL ) THEN
Value := call GeneralOrder2_obj.{{{SINGLE-QUOTE}}}SetEnterpriseDefinedDataItemValue<String>{{{SINGLE-QUOTE}}} with
"NUTR_Consult Reason 2" , DataItem2 ;
ENDIF;
if ( general_catalog_item is NOT NULL ) then
void:= call general_catalog_item.Dispose;
general_catalog_item:= null;
endif;
//GeneralOrder2_dest.ObjectsPlus := GeneralOrder2_obj;
empty := Call GeneralOrder2_obj.save;
endtry;
catch Exception ex
error_occurred := true;
error_message := error_message || "{{+R}}New general order:{{-R}}\n" ||
ex.Message || "\n\n";
if ( general_catalog_item is NOT NULL ) then
void:= call general_catalog_item.Dispose;
general_catalog_item:= null;
endif;
if ( GeneralOrder2_obj is NOT NULL ) then
void:= call GeneralOrder2_obj.Dispose;
GeneralOrder2_obj:= null;
endif;
endcatch;
if ( client_visit_obj is NOT NULL ) then
void:= call client_visit_obj.Dispose;
client_visit_obj:= null;
endif;
if ( WSRequestedBy_obj is NOT NULL ) then
void:= call WSRequestedBy_obj.Dispose;
WSRequestedBy_obj:= null;
endif;
if ( WSlocation_obj is NOT NULL ) then
void:= call WSlocation_obj.Dispose;
WSlocation_obj:= null;
endif;
endif; // Proceed with the consult order?
Endif;
Endif;
;;
evoke:
;;
logic: conclude true;
;;
action: return this_documentCommunication;
;;
Urgency: 50;;
end: