Files
St.Clair/MLMStripper/bin/Debug/SCH/SCH_ACCESS_MANAGER_COLUMN_UPDATE.mlm

209 lines
10 KiB
Plaintext

maintenance:
title: SCH_Access_Manager_Column_Update;;
mlmname: SCH_Access_Manager_Column_Update;;
arden: version 2.5;;
version: 5.50;;
institution: Eclipsys, Test MLM;;
author: Dan Bredl;;
specialist: Don Warnick;;
date: 2017-10-05;;
validation: testing;;
library:
purpose: This MLM will Enterprise Defined Columns created for the SER system
;;
explanation: The columns will be updated by various registration triggers, client visit enter, client visit modify etc...
Change history
10.05.2017 DW CSR# 26413 Access Manager - Created
01/16/2018 BB CSR# 26413 Access Manager - modififed the authorization search, as it changed locations in the database.
08/17/2018 DW HD#3341738 Incomplete registration flag is set to "complete" by incoming "blood refusal" interface message (we should not be sending in interfaced ADT, but we are)
09/27/2018 BB CSR# 36624 Access Manager Phase II - Added new entry for Consent Indicator, which returns if Conditions of Admission or Important Message from Medicare (IMM)
or Emergency Medicine Consent to Treat has been filled out in Signature Capture and signed.
10/15/2018 DW CSR# 37522 Optimize timed MLM{{{SINGLE-QUOTE}}}s - Modified the MLM for optimization.
05/10/2019 BB CSR#37676 18.4 Upgrade resolution. Interfaces UserDisplayName is no longer used in this version, has now become {{{SINGLE-QUOTE}}}NPSCMServices{{{SINGLE-QUOTE}}}
;;
keywords: ObjectsPlus, Orders
;;
knowledge:
type: data-driven;;
data:
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
error_occurred := false;
error_message := "";
log_execution_info := false;
error_destination := destination { Alert } with [alert_type := "Warning",short_message := "ObjectsPlus Error from MLM",priority := "low",scope := "chart",Rule_group := "ObjectsPlus Error from MLM",Rule_number := 1003,Rule_subgroup := "",Send_alert_with_order := "", Alert_dialog_settings := "",Display_alert := true ];
If called_by_editor then EvokingObject := read last { ClientVisit: This }; endif; // If called by the editor
SigCaptureFlagFormatted := " "; //[BB] Addition
// Evoking Events (Note: The ClientVisitModify is not evoked by all Access Manager updates.)
visit_enter_event := event{ClientVisitEnter Any ClientVisit};
visit_modify_event:= event{ClientVisitModify Any ClientVisit};
(UserDisplayaName ) := read last { UserInfo: Displayname };
if EvokingEventType = "ClientVisitEnter" or EvokingEventType = "ClientVisitModify"
then
(client_guid, chart_guid, client_visit_guid,New_Location) := read last {ClientVisit: clientguid, chartguid, guid,CurrentLocation REFERENCING EvokingObject};
endif;
if EvokingEventType = "ClientVisitEnter" OR ( UserDisplayaName <> "Interface" AND evokingEventType = "ClientVisitModify" )
THEN
CompleteRegistrationFlag := read last
{"
select case when vr.IsCompleteRegistration = 0
or (avl.CurrentLocation = {{{SINGLE-QUOTE}}}er major{{{SINGLE-QUOTE}}} and vr.ModeOfArrivalID is null) or (avl.CurrentLocation <> {{{SINGLE-QUOTE}}}er major{{{SINGLE-QUOTE}}} and vr.AdmitSourceID is null)
then {{{SINGLE-QUOTE}}} * {{{SINGLE-QUOTE}}}else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end
from CV3ActiveVisitList avl with (nolock)
join SXAAMVisitRegistration vr with (nolock) on vr.ClientVisitGUID = avl.GUID
where avl.GUID = " || client_visit_guid || " AND avl.ClientGUID = " || client_guid || " and avl.ChartGUID = " || chart_guid || " "
};
If not exists CompleteRegistrationFlag then CompleteRegistrationFlag := " "; endif; // If for some reason the 4 second delay is not enough
InsuranceAuthorizationFlag := read last
{"
select
a.AuthNumber
from SXAEDIAuthorization a with (nolock)
JOIN SXAEDIAuthorizationPatientVisitXRef avp with (nolock) ON a.AuthorizationID = avp.AuthorizationID
where avp.VisitGUID = " || client_visit_guid || " "
};
If not exists InsuranceAuthorizationFlag then InsuranceAuthorizationFlag := " "; endif; // If for some reason the 4 second delay is not enough
// Create a Column Object for the Generic Enterprise Defined Column Creator MLM
CreateColumnMLM := MLM {{{SINGLE-QUOTE}}}SCH_FUNC_CREATE_ENTERPRISE_DEFINED_COLUMN{{{SINGLE-QUOTE}}}; // MLM that creates the Enterprise Defined Column in the "Action" section of the MLM
ColumnObj := OBJECT [column_name,column_value,client_guid,chart_guid,client_visit_guid]; // Create Enterprise Defined Column Obj
// Update the Insurance Authorization Column
Auth_Column := NEW ColumnObj WITH
[
column_name := "Authorization",
column_value := InsuranceAuthorizationFlag,
client_guid := client_guid,
chart_guid := chart_guid,
client_visit_guid := client_visit_guid
];
return_value := call CreateColumnMLM with ( Auth_Column );
// Update the Incomplete Registration Column
IncompleteRegistration_Column := NEW ColumnObj WITH
[
column_name := "Incomplete Registration",
column_value := CompleteRegistrationFlag,
client_guid := client_guid,
chart_guid := chart_guid,
client_visit_guid := client_visit_guid
];
return_value := call CreateColumnMLM with ( IncompleteRegistration_Column );
Endif;
//If UserDisplayaName = "Interface" AND evokingEventType = "ClientVisitModify" //[BB] Interfaces userdisplayanme has changed for 18.4
If UserDisplayaName matches pattern "%SCMServices%" AND evokingEventType = "ClientVisitModify"
then
SigCaptureFlag := read
{"
select case when cd.documentname = {{{SINGLE-QUOTE}}}Conditions of Admission{{{SINGLE-QUOTE}}} Then {{{SINGLE-QUOTE}}}COA{{{SINGLE-QUOTE}}}
WHEN cd.documentname = {{{SINGLE-QUOTE}}}Important Message from Medicare (IMM){{{SINGLE-QUOTE}}} Then {{{SINGLE-QUOTE}}}IMM{{{SINGLE-QUOTE}}}
WHEN cd.documentname = {{{SINGLE-QUOTE}}}Emergency Medicine Consent to Treat{{{SINGLE-QUOTE}}} Then {{{SINGLE-QUOTE}}}EMCT{{{SINGLE-QUOTE}}}
End
from cv3clientdocumentCUR cd with (nolock)
where cd.Active=1
and cd.DocumentName in ({{{SINGLE-QUOTE}}}Conditions of Admission{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Important Message from Medicare (IMM){{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Emergency Medicine Consent to Treat{{{SINGLE-QUOTE}}})
AND cd.ClientVisitGUID = " || client_visit_guid || " AND cd.ClientGUID = " || client_guid || " AND cd.chartguid = " || chart_guid || " "
};
if exists SigCaptureFlag then
for i in 1 seqto count SigCaptureFlag DO
SigCaptureFlagFormatted := SigCaptureFlagFormatted || SigCaptureFlag[i] || " / ";
enddo;
endif;
// Update the Admission Column
CreateColumnMLM := MLM {{{SINGLE-QUOTE}}}SCH_FUNC_CREATE_ENTERPRISE_DEFINED_COLUMN{{{SINGLE-QUOTE}}}; // MLM that creates the Enterprise Defined Column in the "Action" section of the MLM
ColumnObj := OBJECT [column_name,column_value,client_guid,chart_guid,client_visit_guid]; // Create Enterprise Defined Column Obj
SigCap_Column := NEW ColumnObj WITH
[
column_name := "Consent Indicator",
column_value := SigCaptureFlagFormatted,
client_guid := client_guid,
chart_guid := chart_guid,
client_visit_guid := client_visit_guid
];
return_value := call CreateColumnMLM with ( SigCap_Column );
If not exists SigCaptureFlag then SigCaptureFlag := " "; endif; // If for some reason the 4 second delay is not enough
endif;
;;
priority: 50
;;
evoke:
// Note: Delays were added because the MLM was sometimes presdeing the creation or modification of the patient record. No data or the piror data was being returned.
4 seconds after time of visit_enter_event;
4 seconds after time of visit_modify_event;
;;
logic:
conclude true;
;;
action:
if Error_occurred
then
write "An error has occured in the MLM {{+B}}SCH_Access_Manager_Incomplete_Registration_Collumn_Update{{-B}} Please notify your System Administrators that an error message has occurred for this patient. They will review the following error message: \n" at error_destination;
write error_message at error_destination;
endif;
;;
Urgency: 50;;
end: