326 lines
11 KiB
Plaintext
326 lines
11 KiB
Plaintext
maintenance:
|
|
|
|
title: SCH_DAY_OF_DISCHARGE_ALERT;;
|
|
mlmname: SCH_DAY_OF_DISCHARGE_ALERT;;
|
|
arden: version 2.5;;
|
|
version: 16.3;;
|
|
institution: St. Clair Hospital;;
|
|
author: Juliet M. Law;;
|
|
specialist: Peggy Leschak;;
|
|
date: 2019-04-12;;
|
|
validation: testing;;
|
|
|
|
library:
|
|
purpose: Alert the physician to missing DOH required information on Day of Discharge Summary eNote
|
|
;;
|
|
explanation: When filling out the Day of Discharge Summary eNote, the following fields are required by the DOH to contain values:
|
|
* Hospital Course and Significant History
|
|
* Results, Testing, Findings
|
|
* Procedures and Treatments
|
|
|
|
If one or more of these fields are empty at time of document save, then the physician will receive an alert.
|
|
|
|
Change History
|
|
---------------
|
|
2019.04.12 JML CSR 38075: Created
|
|
|
|
;;
|
|
keywords: ClientDocument; Day of Discharge; DOH;
|
|
;;
|
|
citations:
|
|
;;
|
|
knowledge:
|
|
type: data-driven;;
|
|
data:
|
|
|
|
/*******************Make Changes To Spelling And Flags In This Section*******************/
|
|
|
|
/* Set to true if logging is needed.*/
|
|
log_execution_info := false;
|
|
|
|
/* What is the name of the Flowsheet (Clinical Document)? */
|
|
/* If the name is changed here, it must also be changed in the EVENT statement */
|
|
clinical_document_name := "Day of Discharge Summary eNote";
|
|
|
|
/* What is the name of the Observation that will be used to chart Suspected Abuse? */
|
|
DOD_HospCourse_observation := "SCH_MDPN_DS_HospCourse";
|
|
DOD_ReasonHosp_observation := "SCH_MDPN_DS_ReasonHospital";
|
|
DOD_ResultReview_observation := "SCH_MDPN_Review";
|
|
DOD_OtherResults_observation := "SCH_MDPN_Other Results";
|
|
DOD_ProcTxReason_observation := "SCH_MDPN_DS_Proc Tx Reason";
|
|
DOD_ProcTxFT_observation := "SCH_MDPN_DS_Proc Tx FT";
|
|
|
|
/* What will the user chart to indicate a positive response? */
|
|
display_alert := false;
|
|
check_hospital_course := false;
|
|
check_results := false;
|
|
check_procedures := false;
|
|
alert_msg := "According to hospital bylaws charting is required in the following sections:";
|
|
|
|
|
|
Day_of_Discharge_doc_enter := event { ClientDocumentEnter User ClientDocument:
|
|
WHERE DocumentName = "Day of Discharge Summary eNote"};
|
|
Day_of_Discharge_doc_modify := event { ClientDocumentModify User ClientDocument:
|
|
WHERE DocumentName = "Day of Discharge Summary eNote"};
|
|
|
|
day_of_discharge_alert := destination { Alert: Warning, "Day of Discharge Alert",
|
|
High, chart, "Day of Discharge Missing Information", 7500 };
|
|
|
|
|
|
/***************************************************************************************/
|
|
|
|
/* This block executes only when this MLM is called by the editor */
|
|
if called_by_editor
|
|
then
|
|
EvokingObject := read last {ClientDocument : THIS};
|
|
endif;
|
|
|
|
/* Get the patient{{{SINGLE-QUOTE}}}s name*/
|
|
pat_name := read last
|
|
{ClientInfo: DisplayName };
|
|
|
|
/* Get the patient{{{SINGLE-QUOTE}}}s current location and ClientVisitGUID */
|
|
(pat_location,
|
|
pat_visit_guid ) := read last
|
|
{ClientVisit: CurrentLocation, GUID };
|
|
|
|
/* Get the received document{{{SINGLE-QUOTE}}}s name, and the pointers to the PatientCareDocument, */
|
|
/* to the flowsheet, and to the ClientObservation object */
|
|
(received_doc_name,
|
|
PatientCareDocObj,
|
|
ChartFlowsheetObj,
|
|
ClientObservationDocumentObj ) := read last
|
|
{ClientDocument : DocumentName, PatientCareDocument, ChartFlowsheet, ClientObservationDocument
|
|
REFERENCING EvokingObject };
|
|
|
|
/* Get the name of the results review observation and the pointer to */
|
|
/* the object that has the patient{{{SINGLE-QUOTE}}}s answer to the results review */
|
|
( HospReason_ObservationObj ) := read last { ClientObservationDocument : ClientObservation
|
|
REFERENCING ClientObservationDocumentObj
|
|
Where Name = DOD_ReasonHosp_observation };
|
|
|
|
(hosp_course_obs_display_name,
|
|
Hosp_Course_FSListValues_obj) := read last
|
|
{ClientObservationDocument: Name, ObsFSListValues
|
|
REFERENCING ClientObservationDocumentObj
|
|
WHERE Name = DOD_HospCourse_observation
|
|
};
|
|
|
|
( Other_Results_ObservationObj ) := read last { ClientObservationDocument : ClientObservation
|
|
REFERENCING ClientObservationDocumentObj
|
|
Where Name = DOD_OtherResults_observation
|
|
};
|
|
|
|
(results_review_obs_display_name,
|
|
Results_Review_FSListValues_obj):= read last
|
|
{ClientObservationDocument: Name, ObsFSListValues
|
|
REFERENCING ClientObservationDocumentObj
|
|
Where Name = DOD_ResultReview_observation
|
|
};
|
|
|
|
(ProcTreatment_ObservationObj ) := read last { ClientObservationDocument : ClientObservation
|
|
REFERENCING ClientObservationDocumentObj
|
|
Where Name = DOD_ProcTxFT_observation };
|
|
|
|
(proc_reason_obs_display_name,
|
|
Proc_Reason_FSListValues_obj) := read last
|
|
{ClientObservationDocument : Name, ObsFSListValues
|
|
REFERENCING ClientObservationDocumentObj
|
|
WHERE Name = DOD_ProcTxReason_observation
|
|
};
|
|
|
|
|
|
hosp_course_list := read
|
|
{ObsFSListValues : Value
|
|
REFERENCING Hosp_Course_FSListValues_obj };
|
|
|
|
hosp_reason_value := read last { ClientObservation : ValueText
|
|
REFERENCING HospReason_ObservationObj };
|
|
|
|
result_review_list := read
|
|
{ObsFSListValues: Value
|
|
REFERENCING Results_Review_FSListValues_obj };
|
|
|
|
other_results_value := read last { ClientObservation : ValueText
|
|
REFERENCING Other_Results_ObservationObj };
|
|
|
|
proc_reason_list := read
|
|
{ObsFSListValues : Value
|
|
REFERENCING Proc_Reason_FSListValues_obj };
|
|
|
|
proc_treatment_value := read last { ClientObservation : ValueText
|
|
REFERENCING ProcTreatment_ObservationObj };
|
|
|
|
if ( EvokingEventType = "ClientDocumentEnter" ) then
|
|
|
|
if ( ( count hosp_course_list = 0 ) AND ( hosp_reason_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nHospital Course and Significant History";
|
|
endif;
|
|
|
|
if ( ( count result_review_list = 0 ) AND ( other_results_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nResults, Tests, Finding";
|
|
endif;
|
|
|
|
if ( ( count proc_reason_list = 0 ) AND ( proc_treatment_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nProcedures and Treatments";
|
|
endif;
|
|
|
|
elseif ( EvokingEventType = "ClientDocumentModify" ) then
|
|
|
|
//Determine which required observations have already been charted
|
|
( obsName,
|
|
obsValueText,
|
|
obsValueList ) := read { " SELECT ocmi.Name, obsparam.ValueText, SOBS.Value"
|
|
|| " FROM CV3ClientDocumentCUR cd WITH (NOLOCK) JOIN CV3OBSERVATIONDOCUMENTCUR od WITH (NOLOCK)"
|
|
|| " ON cd.GUID = od.OWNERGUID"
|
|
|| " AND cd.ArcType = od.ArcType"
|
|
|| " AND cd.ArcType = 0"
|
|
|| " JOIN CV3ObsCatalogMasterItem ocmi WITH (NOLOCK)"
|
|
|| " ON od.ObsMasterItemGUID = ocmi.GUID"
|
|
|| " JOIN SXACDObservationParameter obsparam WITH (NOLOCK)"
|
|
|| " ON cd.GUID = obsparam.OwnerGUID"
|
|
|| " AND od.ObservationDocumentGUID = obsparam.ObservationDocumentGUID"
|
|
|| " AND ocmi.GUID = obsparam.ObsMasterItemGUID"
|
|
|| " LEFT JOIN SCMObsFSListValues SOBS WITH (NOLOCK)"
|
|
|| " ON obsparam.ObservationDocumentGUID = SOBS.ParentGUID"
|
|
|| " AND obsparam.ClientGUID = SOBS.ClientGUID"
|
|
|| " WHERE cd.GUID = " || SQL(EVOKINGOBJECT.GUID)
|
|
|| " AND ocmi.Name IN ({{{SINGLE-QUOTE}}}SCH_MDPN_DS_HospCourse{{{SINGLE-QUOTE}}}"
|
|
|| " ,{{{SINGLE-QUOTE}}}SCH_MDPN_DS_ReasonHospital{{{SINGLE-QUOTE}}}"
|
|
|| " ,{{{SINGLE-QUOTE}}}SCH_MDPN_Review{{{SINGLE-QUOTE}}}"
|
|
|| " ,{{{SINGLE-QUOTE}}}SCH_MDPN_Other Results{{{SINGLE-QUOTE}}}"
|
|
|| " ,{{{SINGLE-QUOTE}}}SCH_MDPN_DS_Proc Tx Reason{{{SINGLE-QUOTE}}}"
|
|
|| " ,{{{SINGLE-QUOTE}}}SCH_MDPN_DS_Proc Tx FT{{{SINGLE-QUOTE}}}) "};
|
|
|
|
if ( ( NOT DOD_HospCourse_observation IN obsName ) AND ( NOT DOD_ReasonHosp_observation IN obsName ) ) then
|
|
check_hospital_course := true;
|
|
else
|
|
|
|
hosp_course_unanswered := false;
|
|
reason_hosp_unanswered := false;
|
|
|
|
for i IN 1 seqto count obsName do
|
|
if ( obsName[i] = DOD_HospCourse_observation ) then
|
|
if ( obsValueList[i] IS NULL ) then
|
|
hosp_course_unanswered := true;
|
|
endif;
|
|
endif;
|
|
if ( obsName[i] = DOD_ReasonHosp_observation ) then
|
|
if ( obsValueText[i] IS NULL ) then
|
|
reason_hosp_unanswered := true;
|
|
endif;
|
|
endif;
|
|
enddo;
|
|
|
|
if ( ( hosp_course_unanswered = true ) AND ( reason_hosp_unanswered = true ) ) then
|
|
check_hospital_course := true;
|
|
endif;
|
|
|
|
endif;
|
|
|
|
if ( ( NOT DOD_ResultReview_observation IN obsName ) AND ( NOT DOD_OtherResults_observation IN obsName ) ) then
|
|
check_results := true;
|
|
else
|
|
|
|
result_review_unanswered := false;
|
|
other_result_unanswered := false;
|
|
|
|
for j IN 1 seqto count obsName do
|
|
if ( obsName[j] = DOD_ResultReview_observation ) then
|
|
if ( obsValueList[j] IS NULL ) then
|
|
result_review_unanswered := true;
|
|
endif;
|
|
endif;
|
|
if ( obsName[j] = DOD_OtherResults_observation ) then
|
|
if ( obsValueText[j] IS NULL ) then
|
|
other_result_unanswered := true;
|
|
endif;
|
|
endif;
|
|
enddo;
|
|
|
|
if ( ( result_review_unanswered = true ) AND ( other_result_unanswered = true ) ) then
|
|
check_results := true;
|
|
endif;
|
|
endif;
|
|
|
|
if ( ( NOT DOD_ProcTxReason_observation IN obsName ) AND ( NOT DOD_ProcTxFT_observation IN obsName ) ) then
|
|
check_procedures := true;
|
|
else
|
|
|
|
proc_tx_reason_unanswered := false;
|
|
proc_tx_ft_unanswered := false;
|
|
|
|
for k IN 1 seqto count obsName do
|
|
if ( obsName[k] = DOD_ProcTxReason_observation ) then
|
|
if ( obsValueList[k] IS NULL ) then
|
|
proc_tx_reason_unanswered := true;
|
|
endif;
|
|
endif;
|
|
if ( obsName[k] = DOD_ProcTxFT_observation ) then
|
|
if ( obsValueText[k] IS NULL ) then
|
|
proc_tx_ft_unanswered := true;
|
|
endif;
|
|
endif;
|
|
enddo;
|
|
|
|
if ( ( proc_tx_reason_unanswered = true ) AND ( proc_tx_ft_unanswered = true ) ) then
|
|
check_procedures := true;
|
|
endif;
|
|
endif;
|
|
|
|
//If Observation was not previously charted, check to see if it was charted this time
|
|
if ( check_hospital_course = true ) then
|
|
|
|
if ( ( count hosp_course_list = 0 ) AND ( hosp_reason_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nHospital Course and Significant History";
|
|
endif;
|
|
|
|
endif;
|
|
|
|
if ( check_results = true ) then
|
|
|
|
if ( ( count result_review_list = 0 ) AND ( other_results_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nResults, Tests, Finding";
|
|
endif;
|
|
|
|
endif;
|
|
|
|
if ( check_procedures = true ) then
|
|
|
|
if ( ( count proc_reason_list = 0 ) AND ( proc_treatment_value IS NULL ) ) then
|
|
display_alert := true;
|
|
alert_msg := alert_msg || "\n\nProcedures and Treatments";
|
|
endif;
|
|
|
|
endif;
|
|
|
|
|
|
endif;
|
|
|
|
|
|
;;
|
|
|
|
evoke: Day_of_Discharge_doc_enter ;
|
|
Day_of_Discharge_doc_modify;
|
|
;;
|
|
|
|
logic: conclude true;
|
|
;;
|
|
|
|
action:
|
|
/*---------------------------------------------------*/
|
|
/* Always write an asynchronous alert to the chart */
|
|
/*---------------------------------------------------*/
|
|
if ( display_alert = true ) then
|
|
write alert_msg
|
|
at day_of_discharge_alert;
|
|
endif;
|
|
|
|
;;
|
|
end:
|