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,305 @@
maintenance:
title: DOC_FUNC_IRU_PREADMISSION_SCREEN;;
mlmname: DOC_FUNC_IRU_PREADMISSION_SCREEN;;
arden: version 15.1;;
version: 2.50;;
institution: St.Clair Hospital;;
author: Juliet Law;;
specialist: Shubha Rai / Debbie Eiler;;
date: 2016-02-29;;
validation: testing;;
library:
purpose:
;;
explanation:
Change history
02.29.2016 JML CSR 33994: Create date.
;;
keywords:
;;
knowledge:
type: data-driven;;
data:
// Receive arguments from the structured note
(this_documentCommunication) := argument;
// .Net assemblies required for ObjectsPlus
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
//Include MLM
str_parse := MLM {{{SINGLE-QUOTE}}}UTIL_STRING_PARSE{{{SINGLE-QUOTE}}};
//Include Called MLM to setup CDS objects
set_cds_vars := MLM {{{SINGLE-QUOTE}}}Called_RPM_DOM_Get_Definition_MLM{{{SINGLE-QUOTE}}};
Get_result_impression_lookup := MLM {{{SINGLE-QUOTE}}}ACS_result_impression_Lookup{{{SINGLE-QUOTE}}};
//Document Types
STRUCTUREDNOTE := "StructuredNote";
//Event Types
DOCUMENTCLOSING := "DocumentClosing";
CHARTOBSERVATION := "ChartObservation";
DOCUMENTOPENING := "DocumentOpening";
//Setting debugFlag to True will allow popup dialogs containing debug information to appear
debugFlag := false;
//Tab definitions and formating
TAB := 9 FORMATTED WITH "%C" ;
TAB2 := TAB || TAB ;
TAB3 := TAB || TAB || TAB;
CR := 13 formatted with "%c";
LF := 10 formatted with "%c";
CRLF:= CR||LF;
CRLF2 := CR||LF||LF;
SP:= 32 formatted with "%c";
SP2:= SP||SP;
SP3:= SP||SP||SP;
//Initialize CDS objects via MLM call
(this_documentCommunication, client_guid, client_visit_guid, client_chart_guid, user_guid,
document_type, document_name, event_type, configuration_guid, this_currentObj, CancelEventFlag,
this_structuredNoteDoc, authored_date_time, authored_by_guid, client_document_guid, document_date_time,
isNewFlag, isIncompleteFlag, isResultsPendingFlag, isPriorityFlag, this_parameters,
this_chartedObservationsList, this_parameters_display_name, current_parameter, current_parameter_name,
current_parameter_guid, current_parameter_DataType, selectedItems, selectedItems_value, current_value,
diagnosticMessage, displayMessageFlag, CoSigner1, CoSigner2, DocumentTopic) := CALL set_cds_vars WITH
(this_documentCommunication);
//Set up debugging information to be captured
messageText := "";
if (debugFlag = true) then
messageText := "Debug Information:\n\n";
messageText := messageText || " DOC_FUNC_IRU_PREADMISSION_SCREEN mlm called.\n\n";
endif;
//Local Variables
theDocumentName := "Inpatient Rehabilitation Unit Pre-Admission Screen";
// Create prototypes for the object types we{{{SINGLE-QUOTE}}}ll need to instantiate
ObservationType := OBJECT [ObservationGUID, ClientDocumentGUID, ParameterGUID, DataType, ValueObj];
FreeTextValueType := OBJECT [Value];
NumericValueType := OBJECT [Value];
DateValueType := OBJECT [Value];
ListValueType := OBJECT [ListGuid,ListItemsList, SuggestedTextValue];
ListValueListItemType := OBJECT [ListItemGUID, Value, IsSelected];
if ( event_type = DOCUMENTOPENING AND document_name = theDocumentName ) then
vital_sign_msg := "Vital Signs in last Past 24 Hours - Last Charted";
//Retrieve last 24 hours of vital signs
( vital_sign,
vital_value,
vital_date ) := READ {"SELECT oci.Name, o.ValueText, cd.AuthoredDtm"
|| " FROM CV3ClientVisit cv WITH (NOLOCK) JOIN CV3ClientDocumentCUR cd WITH (NOLOCK)"
|| " ON cv.ClientGUID = cd.ClientGUID"
|| " AND cv.GUID = cd.ClientVisitGUID"
|| " AND cv.ChartGUID = cd.ChartGUID"
|| " JOIN CV3ClientDocDetailCUR cdd WITH (NOLOCK) "
|| " ON cd.GUID = cdd.ClientDocumentGUID"
|| " AND cd.ClientGUID = cdd.ClientGUID"
|| " JOIN CV3ObservationDocumentCUR od WITH (NOLOCK)"
|| " ON cdd.ClientDocumentGUID = od.OwnerGUID "
|| " JOIN CV3ObsCatalogMasterItem ocmi WITH (NOLOCK)"
|| " ON od.ObsMasterItemGUID = ocmi.GUID"
|| " JOIN CV3ObservationCUR o WITH (NOLOCK)"
|| " ON o.GUID = od.ObservationGUID"
|| " JOIN CV3ObsCatalogItem oci WITH (NOLOCK)"
|| " ON oci.guid = o.ObsItemGUID"
|| " WHERE cd.ClientGUID = " || Sql(client_guid)
|| " AND cd.ChartGUID = " || Sql(client_chart_guid)
|| " AND cd.ClientVisitGUID = " || Sql(client_visit_guid)
|| " AND cd.DocumentName = {{{SINGLE-QUOTE}}}1.Vital Signs - Basic{{{SINGLE-QUOTE}}}"
|| " AND o.ValueText is not null"
|| " AND oci.Name IN ({{{SINGLE-QUOTE}}}Farenheit{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Heart Rate{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Resp Rate{{{SINGLE-QUOTE}}},"
|| " {{{SINGLE-QUOTE}}}Noninvasive Systolic BP{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Noninvasive Diastolic BP{{{SINGLE-QUOTE}}},"
|| " {{{SINGLE-QUOTE}}}SCH_vs_pulse ox saturation{{{SINGLE-QUOTE}}})"
|| " AND DateDiff(HOUR, cd.AuthoredDtm, GETDATE()) <= 24"
|| " AND od.Active = 1"
|| " AND cdd.Active = 1"
|| " ORDER BY cd.AuthoredDtm"};
if ( exists vital_sign ) then
pulse_ox := "Pulse Ox: "; pulse_ox_value := ""; pulse_ox_datediff := 0;
temp := "T: "; temp_value := ""; temp_datediff := 0;
hr := "HR: "; hr_value := ""; hr_datediff := 0;
resp_rate := "R: "; resp_rate_value := ""; resp_rate_datediff := 0;
bp := "BP: "; bp_sys_value := ""; bp_sys_datediff := 0;
bp_dia_value := ""; bp_dia_datediff := 0;
for i IN 1 seqto ( count vital_sign ) do
if ( vital_sign[i] = "SCH_vs_pulse ox saturation" AND pulse_ox_datediff = 0 ) then
pulse_ox_value := vital_value[i];
pulse_ox_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "SCH_vs_pulse ox saturation" AND ( ( now - vital_date[i] ) <= pulse_ox_datediff ) ) then
pulse_ox_value := vital_value[i];
else
pulse_ox_datediff := ( now - vital_date[i] );
endif;
if ( vital_sign[i] = "Farenheit" AND temp_datediff = 0 ) then
temp_value := vital_value[i];
temp_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "Farenheit" AND ( ( now - vital_date[i] ) <= temp_datediff ) ) then
temp_value := vital_value[i];
else
temp_datediff := ( now - vital_date[i] );
endif;
if ( vital_sign[i] = "Heart Rate" AND hr_datediff = 0 ) then
hr_value := vital_value[i];
hr_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "Heart Rate" AND ( ( now - vital_date[i] ) <= hr_datediff ) ) then
hr_value := vital_value[i];
else
hr_datediff := ( now - vital_date[i] );
endif;
if ( vital_sign[i] = "Resp Rate" AND resp_rate_datediff = 0 ) then
resp_rate_value := vital_value[i];
resp_rate_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "Resp Rate" AND ( ( now - vital_date[i] ) <= resp_rate_datediff ) ) then
resp_rate_value := vital_value[i];
else
resp_rate_datediff := ( now - vital_date[i] );
endif;
if ( vital_sign[i] = "Noninvasive Systolic BP" AND bp_sys_datediff = 0 ) then
bp_sys_value := vital_value[i];
bp_sys_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "Noninvasive Systolic BP" AND ( ( now - vital_date[i] ) <= bp_sys_datediff ) ) then
bp_sys_value := vital_value[i];
else
bp_sys_datediff := ( now - vital_date[i] );
endif;
if ( vital_sign[i] = "Noninvasive Diastolic BP" AND bp_dia_datediff = 0 ) then
bp_dia_value := vital_value[i];
bp_dia_datediff := ( now - vital_date[i] );
elseif ( vital_sign[i] = "Noninvasive Diastolic BP" AND ( ( now - vital_date[i] ) <= bp_dia_datediff ) ) then
bp_dia_value := vital_value[i];
else
bp_dia_datediff := ( now - vital_date[i] );
endif;
enddo;
vital_sign_msg := vital_sign_msg || CRLF2 || TAB || vital_date[i] || SP2 || temp || temp_value
|| SP2 || hr || hr_value
|| SP2 || resp_rate || resp_rate_value
|| SP2 || bp || bp_sys_value || "/" || bp_dia_value
|| SP2 || pulse_ox || pulse_ox_value;
else
vital_sign_msg := vital_sign_msg || CRLF2 || TAB || "No vital signs charted in the last 24 hours.";
endif;
VitalParameterName := "SCH_FB_IRU Vital Signs";
VitalParameter := first of ( this_parameters WHERE this_parameters.Name = VitalParameterName );
this_currentVitalsObs := NEW ObservationType;
this_currentVitalsObs.ClientDocumentGUID := this_structuredNoteDoc.ClientDocumentGUID;
this_currentVitalsObs.ParameterGUID := VitalParameter.ParameterGUID;
this_currentVitalsObs.DataType := "FreeTextValue";
this_currentVitalsObs.ValueObj := NEW FreeTextValueType;
this_currentVitalsObs.ValueObj.Value := vital_sign_msg;
this_structuredNoteDoc.ChartedObservationsList := ( this_structuredNoteDoc.ChartedObservationsList, this_currentVitalsObs );
//Retrieve applicable diagnostic MI / Cardiac results
medical_imaging_msg := "Medical Imaging Results in last 7 days";
( order_name,
order_dttm ) := READ {"SELECT DISTINCT {{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}} + o.Name + {{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}, osh.CreatedWhen"
|| " FROM CV3ClientVisit v WITH (NOLOCK) JOIN CV3Order o WITH (NOLOCK) "
|| " ON v.GUID = o.ClientVisitGUID"
|| " AND v.ClientGUID = o.ClientGUID"
|| " AND v.ChartGUID = o.ChartGUID"
|| " JOIN CV3OrderStatusHistory osh WITH (NOLOCK)"
|| " ON o.GUID = osh.OrderGUID"
|| " AND o.ClientGUID = osh.ClientGUID"
|| " JOIN CV3OrderCatalogMasterItem om WITH (NOLOCK) "
|| " ON o.OrderCatalogMasterItemGUID = om.GUID"
|| " JOIN CV3OrganizationalUnit org WITH (NOLOCK) "
|| " ON om.OrgUnitGUID = org.GUID"
|| " WHERE v.ClientGUID = " || Sql(client_guid)
|| " AND v.GUID = " || Sql(client_visit_guid)
|| " AND v.ChartGUID = " || Sql(client_chart_guid)
|| " AND o.CreatedWhen >= dateadd(day, -7, getdate())"
|| " and o.CreatedWhen < DATEADD(day, 0, getdate())"
|| " AND o.TypeCode = {{{SINGLE-QUOTE}}}Diagnostic{{{SINGLE-QUOTE}}}"
|| " AND osh.FunctionCodeNum = {{{SINGLE-QUOTE}}}10{{{SINGLE-QUOTE}}}"
|| " AND ( org.code LIKE {{{SINGLE-QUOTE}}}%medical imaging%{{{SINGLE-QUOTE}}}"
|| " OR org.Code like {{{SINGLE-QUOTE}}}%cardiology%{{{SINGLE-QUOTE}}}"
|| " OR org.Code like {{{SINGLE-QUOTE}}}%cardiac%{{{SINGLE-QUOTE}}}"
|| " OR org.Code like {{{SINGLE-QUOTE}}}%eeg%{{{SINGLE-QUOTE}}})"};
if ( exists order_name ) then
Retreive_Attribute := "text_val";
Retreive_Object := "Results";
Filterable_Attribute := "itemname";
Filterable_Operator := "IN" ;
if ( count order_name = 1 ) then
Filterable_Value := first of ( order_name );
else
Filterable_Value := order_name;
endif;
Additional_condition := "";
// Call Impression Lookup MLM to get patient data
(All_Attributes_Lst, All_Med_Rel_Dttm_Lst, All_Values_Lst) := CALL Get_result_impression_lookup WITH
(client_guid, client_visit_guid, client_chart_guid, Is_Historical, Retreive_Object, Retreive_Attribute,
Filterable_Attribute, Filterable_Operator, Filterable_Value, Additional_condition);
if ( exists All_Values_Lst ) then
for i IN 1 seqto ( count All_Attributes_Lst ) do
medical_imaging_msg := medical_imaging_msg || CRLF2 || TAB || All_Attributes_Lst[i] || SP
|| All_Med_Rel_Dttm_Lst[i] || ": " || All_Values_Lst[i];
enddo;
else
medical_imaging_msg := medical_imaging_msg || CRLF2 || TAB || "No IMAGE diagnostic impressios Recorded.";
endif;
else
medical_imaging_msg := medical_imaging_msg || CRLF2 || TAB || "No IMAGE diagnostic impressions Recorded.";
endif;
MIParameterName := "SCH_FB_IRU_Diagnosis";
MIParameter := first of ( this_parameters WHERE this_parameters.Name = MIParameterName );
this_currentMIObs := NEW ObservationType;
this_currentMIObs.ClientDocumentGUID := this_structuredNoteDoc.ClientDocumentGUID;
this_currentMIObs.ParameterGUID := MIParameter.ParameterGUID;
this_currentMIObs.DataType := "FreeTextValue";
this_currentMIObs.ValueObj := NEW FreeTextValueType;
this_currentMIObs.ValueObj.Value := medical_imaging_msg;
this_structuredNoteDoc.ChartedObservationsList := ( this_structuredNoteDoc.ChartedObservationsList, this_currentMIObs );
endif;
;;
evoke:
;;
logic: conclude true;
;;
action: return this_documentCommunication;
;;
Urgency: 50;;
end: