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

1222 lines
68 KiB
Plaintext

maintenance:
title: DOC_FUNC_SUICIDAL_OR_VIOLENT;;
mlmname: DOC_FUNC_SUICIDAL_OR_VIOLENT;;
arden: version 5.0;;
version: 2.00;;
institution: St.Clair Hospital;;
author: GMS;;
specialist: Don Warnick ;;
date: 2018-05-23;;
validation: testing;;
library:
purpose:
;;
explanation: Upon open of the ED Triage Note, this MLM will retrieve suicide & violence risk information from past visits and update an observation textbox.
Upon save of the ED Triage Note, it will update the Suicide Violence status board column with the latest information.
Change history
05.23.2018 DW CSR# 36510 Harm to Self or Others - Created
07.03.2018 DW CSR# 36510 added this response which is configured in the Paient Profile "NA under 12 years of age". There is no comma after the "NA" as there is in the ED Triage Note.
07.06.2018 DW CSR# 36510 added code to support the "discrepancy between past history and patient responses" checkbox
07.25.2018 DW CSR# 36510 Harm to Self or Others - Changes required for inpatient processes
10.30.2018 DW CSR# 36510 Harm to Self or Others - Changes required for inpatient processes - requested changes ("notify md" order verbiage change)
08.06.2019 DW CSR# 38551 Redesign based upon JACHO observations
09.03.2019 DW CSR# 38604 Columbia Severity Note for Outpatients and Adult Patient Profile Behavioral Health Outpatients
;;
keywords:
;;
knowledge:
type: data-driven;;
data:
standard_libs := mlm {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
using "ObjectsPlusXA.SCM.Forms";
using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms";
local_session := cds_session.local;
// Recieve arguments from the structured note
(thisDocumentCommunication) := argument;
// Extract interesting parts of the object model
(thisStructuredNoteDoc) := thisDocumentCommunication.DocumentConfigurationObj;
(thisParameters) := thisStructuredNoteDoc.ParametersList;
(thisObservations) := thisStructuredNoteDoc.ChartedObservationsList;
// Create prototypes for the object types we{{{SINGLE-QUOTE}}}ll need to instantiate
ObservationType := OBJECT [ObservationGUID, ClientDocumentGUID, ParameterGUID, DataType, ValueObj];
FreeTextValueType := OBJECT [Value];
DateValueType := OBJECT [Value];
ListValueType := OBJECT [ListGuid,ListItemsList, SuggestedTextValue];
ListValueListItemType := OBJECT [ListItemGUID, Value, IsSelected];
// Get the client and visit GUIDs
ClientGUID := thisDocumentCommunication.ClientGUID;
ChartGUID := thisDocumentCommunication.ChartGUID;
VisitGUID := thisDocumentCommunication.ClientVisitGUID;
userGuid := thisDocumentCommunication.UserGUID;
document_event_enter := event {ClientDocumentEnter User ClientDocument: where documentname = "ED Triage Note" or documentname matches pattern "%Patient Profile" };
document_event_modify := event {ClientDocumentModify User ClientDocument: where documentname = "ED Triage Note" or documentname matches pattern "%Patient Profile" };
// If evoked by document enter or document modify, attain the guids
If EvokingEventType = document_event_modify.type or EvokingEventType = document_event_enter.type
then
(VisitGUID, ChartGUID, ClientGUID) := read last {ClientDocument: ClientVisitGUID, ChartGUID, ClientGUID REFERENCING EvokingObject};
endif;
// Determine the type of Structured Note
if thisDocumentCommunication.DocumentName = "Adult Patient Profile - Behavioral Health Outpatient"
then
current_document_type := "behv_outpatient_patient_profile";
has_orders := "no";
elseif thisDocumentCommunication.DocumentName matches pattern "%Profile%"
then
current_document_type := "patient_profile";
orders_observation_name:= "SCH_PSY_Risk OrdersInp"; // List of order checkboxes
has_orders := "yes";
elseif thisDocumentCommunication.DocumentName = "ED Triage Note"
then
current_document_type := "triage_note";
orders_observation_name:= "SCH_PSY_Risk Orders"; // List of order checkboxes
has_orders := "yes";
else
current_document_type := "columbia_outpatient";
has_orders := "no";
endif;
If thisdocumentCommunication.EventType = "DocumentOpening" or thisdocumentCommunication.EventType is null then
// Gather past history (...only for "DocumentOpening" & "Document modify/enter"...unneeded for other events)
SignificantEvent := read
{"
select
case when (c.OnsetYearNum is null and c.OnsetMonthNum is null) or (c.OnsetYearNum = 0 and c.OnsetMonthNum = 0) then cast (convert(char(10), c.CreatedWhen,20)as varchar)
when c.OnsetYearNum is not null and c.OnsetYearNum <> 0 and c.OnsetMonthNum is not null and c.OnsetMonthNum <> 0 and c.OnsetDayNum is not null and c.OnsetDayNum <> 0 then cast (c.OnsetYearNum as varchar) + {{{SINGLE-QUOTE}}}-{{{SINGLE-QUOTE}}} + cast (c.OnsetMonthNum as varchar) + {{{SINGLE-QUOTE}}}-{{{SINGLE-QUOTE}}} + cast (c.OnsetDayNum as varchar)
else
case
when c.OnsetYearNum is not null and c.OnsetMonthNum = 0 then cast (c.OnsetYearNum as varchar)
when c.OnsetYearNum is not null and c.OnsetMonthNum > 0 then cast (c.OnsetYearNum as varchar) + {{{SINGLE-QUOTE}}}-{{{SINGLE-QUOTE}}} + cast (c.OnsetMonthNum as varchar)
end
end +
case when c.TypeCode = {{{SINGLE-QUOTE}}}Violence-Clinical Support Team{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}} - Flagged for Violence Caution by the Clinical Support Team (see significant event){{{SINGLE-QUOTE}}}
when c.TypeCode = {{{SINGLE-QUOTE}}}Behavioral Health{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}} - Flagged by Mental Health for {{{SINGLE-QUOTE}}} + c.Description + {{{SINGLE-QUOTE}}} (see significant event){{{SINGLE-QUOTE}}}
end
+ {{{SINGLE-QUOTE}}}\n{{{SINGLE-QUOTE}}}
from CV3ClientEventDeclaration c with (nolock)
where c.TypeCode in ({{{SINGLE-QUOTE}}}Violence-Clinical Support Team{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Behavioral Health{{{SINGLE-QUOTE}}}) and c.status = {{{SINGLE-QUOTE}}}active{{{SINGLE-QUOTE}}} and c.ClientGUID = " || ClientGuid || "
order by c.CreatedWhen
"};
SuidcideObservation := read
{"
SET CONCAT_NULL_YIELDS_NULL off
select cast (convert(char(10), obsparam.RecordedDtm,20)as varchar) + {{{SINGLE-QUOTE}}} - {{{SINGLE-QUOTE}}} +
case when ocmi.name = {{{SINGLE-QUOTE}}}SCH_PSY_Wish to be Dead{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}Have you wished you were dead or wished you could sleep and not wake up?{{{SINGLE-QUOTE}}}
when ocmi.name = {{{SINGLE-QUOTE}}}SCH_PSY_Suicidal Thoughts{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}Have you actually had any thoughts of killing yourself?{{{SINGLE-QUOTE}}}
when ocmi.name = {{{SINGLE-QUOTE}}}SCH_PSY_Suicide Behavior Question{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}Have you ever done, started, prepared to end your life?{{{SINGLE-QUOTE}}}
else ocmi.LeftJustifiedLabel + {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} + ocmi.RightJustifiedLabel
end
+ {{{SINGLE-QUOTE}}} - {{{SINGLE-QUOTE}}} + {{{SINGLE-QUOTE}}} ({{{SINGLE-QUOTE}}} + fs.Value + obsparam.ValueText +{{{SINGLE-QUOTE}}}){{{SINGLE-QUOTE}}}
+ {{{SINGLE-QUOTE}}}\n{{{SINGLE-QUOTE}}}
from CV3ObsCatalogMasterItem ocmi with (nolock)
inner join SXACDObservationParameter obsparam with (nolock) on " || ClientGuid || " = obsparam.ClientGUID and obsparam.ObsMasterItemGUID = ocmi.GUID and obsparam.IsCanceled = 0
left outer join SCMObsFSListValues fs with (nolock) on fs.ClientGUID = " || ClientGuid || " and ObsParam.ObservationDocumentGUID = fs.ParentGUID
where
(
(
ocmi.name like ({{{SINGLE-QUOTE}}}%hurt%{{{SINGLE-QUOTE}}}) or ocmi.name in ({{{SINGLE-QUOTE}}}SCH_PSY_Wish to be Dead{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Suicidal Thoughts{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Suicide Behavior Question{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}CAS psych suicide homicide ideation{{{SINGLE-QUOTE}}})
)
and fs.value not in ({{{SINGLE-QUOTE}}}no{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}Not at all{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Unable to answer due to clinical condition{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}NA, under 12 years of age{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}NA under 12 years of age{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Unable to respond or under 12 years of age{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}neither{{{SINGLE-QUOTE}}})
)
or ocmi.name = {{{SINGLE-QUOTE}}}SCH_PSY_Columbia Risk Score{{{SINGLE-QUOTE}}} and obsparam.ValueText <> {{{SINGLE-QUOTE}}}No Risk{{{SINGLE-QUOTE}}}
order by obsparam.RecordedDtm desc
"};
endif;
// DOCUMENT OPEN SECTION
IF thisdocumentCommunication.EventType = "DocumentOpening" then
HarmText := "";
// Concatenate the individual significant event items into a text variable (removes the commas)
If exists SignificantEvent
then
SignificantEventText:= "";
for i in 1 seqto count SignificantEvent do
SignificantEventText := SignificantEventText || SignificantEvent[i];
enddo;
HarmText:= SignificantEventText;
endif;
// Concatenate the individual suicide list items into a text variable (removes the commas)
If exists SuidcideObservation
then
SuidcideObservationText:= "";
for i in 1 seqto count SuidcideObservation do
SuidcideObservationText := SuidcideObservationText || SuidcideObservation[i];
enddo;
if HarmText = ""
then
HarmText := SuidcideObservationText;
else
HarmText := HarmText || SuidcideObservationText;
endif;
endif;
If HarmText = ""
then
HarmText := "No history of harming self or others has been found in the chart." ;
endif;
// Populate past history free text box
this_parametername := first of (thisParameters where thisParameters.Name = "sch_edtriage_Hurt History");
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := HarmText;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
// Determine which Orders were selected at Document Open (needed to prevent new orders from being created when the SN is updated for other reasons)
if has_orders = "yes"
then
PriorOrders:= " ";
theParameter := first of (thisparameters where thisparameters.Name = orders_observation_name);
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "MHRN Consult") then PriorOrders:= PriorOrders || "M"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "SCO 1:1") then PriorOrders:= PriorOrders || "S"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Notify MD (day/evening) PPM (nights)") then PriorOrders:= PriorOrders || "N"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Self Harm Precautions/Observation Monitoring") then PriorOrders:= PriorOrders || "P"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Constant Observation (CO)") then PriorOrders:= PriorOrders || "C"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Implement Environmental Assessment for High Suicidal Risk") then PriorOrders:= PriorOrders || "E"; endif;
// Populate prior order selections free text box
this_parametername := first of (thisParameters where thisParameters.Name = "SCH_PSY_Risk Orders Prior");
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := PriorOrders;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif;
// Patient Profile only Section - if this is a new profile, populate Columbia question responses with the ED Triage responses from this visit
If current_document_type= "patient_profile" and thisStructuredNoteDoc.ClientDocumentGUID is null
then
// Gather the responses
SuidcideObservationThisVisit := read
{"
SET CONCAT_NULL_YIELDS_NULL off
select ocmi.name + {{{SINGLE-QUOTE}}}|{{{SINGLE-QUOTE}}} + isnull ((obsparam.valuetext + fs.Value), {{{SINGLE-QUOTE}}}X{{{SINGLE-QUOTE}}})
from CV3ObsCatalogMasterItem ocmi with (nolock)
inner join SXACDObservationParameter obsparam with (nolock) on " || ClientGuid || " = obsparam.ClientGUID and obsparam.ChartGUID = " || ChartGuid || " and obsparam.ClientVisitGUID = " || VisitGuid || " and obsparam.ObsMasterItemGUID = ocmi.GUID and obsparam.IsCanceled = 0
left outer join SCMObsFSListValues fs with (nolock) on fs.ClientGUID = " || ClientGuid || " and ObsParam.ObservationDocumentGUID = fs.ParentGUID
join CV3ClientDocument cd with (nolock) on cd.guid = obsparam.OwnerGUID
where
ocmi.name in ({{{SINGLE-QUOTE}}}SCH_PSY_Columbia Risk Score{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Wish Dead Wake Up{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Done Start Any to End Life{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Think of How Might do{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Work out Detail of How to and Carry Out{{{SINGLE-QUOTE}}},
{{{SINGLE-QUOTE}}}SCH_PSY_THought and Intention of Acting{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Actual Thought of Killing Self{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_Think of How Might do{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_PSY_How Long ago{{{SINGLE-QUOTE}}})
and cd.DocumentName = {{{SINGLE-QUOTE}}}ed triage note{{{SINGLE-QUOTE}}}
and obsparam.ClientGUID = " || ClientGuid || " and obsparam.ChartGUID = " || ChartGuid || " and obsparam.ClientVisitGUID = " || VisitGuid || "
"};
// Loop through the responses looking for the risk score
for i in 1 seqto count SuidcideObservationThisVisit DO
observation := SuidcideObservationThisVisit[i];
if observation matches pattern "SCH_PSY_Columbia Risk Score%" then RiskScore:= substring ((length of observation) - (FIND "|" STRING observation)) CHARACTERS STARTING AT ((FIND "|" STRING observation) +1) FROM observation; endif;
enddo;
// Pre-populate the responses unless it is No Risk
if RiskScore <> "No Risk"
then
// Loop through the responses and update the corresponding observation in this note
for i in 1 seqto count SuidcideObservationThisVisit DO
observation := SuidcideObservationThisVisit[i];
ColumbiaQuestion := substring (FIND "|" STRING observation)-1 CHARACTERS STARTING AT 1 FROM observation;
ColumbiaResponse := substring ((length of observation) - (FIND "|" STRING observation)) CHARACTERS STARTING AT ((FIND "|" STRING observation) +1) FROM observation;
if observation matches pattern "SCH_PSY_Columbia Risk Score%"
then
// Populate risk score value text box
this_parametername := first of (thisParameters where thisParameters.Name = ColumbiaQuestion);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := ColumbiaResponse;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
else
// Populate the other observations
this_parametername := first of (thisParameters where thisParameters.Name = ColumbiaQuestion );
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if selectedItem.Value = ColumbiaResponse then selectedItem.IsSelected := true; endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif;
enddo;
// Populate risk score instructions text box
if RiskScore = "Low Risk" then protocol_instructions:= "Immediate notification of MD is required. Consider Special Constant Observation (SCO 1:1); Constant Observation and Safety Precautions/Observation Monitoring. Select the orders from below. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages.";
elseif RiskScore = "Moderate Risk" then protocol_instructions:= "Immediate notification of MD is required. Constant Observation; Safety Precautions/Observation Monitoring orders will be automatically entered. If diet is being ordered:Add a Seclusion Tray with No Hot Beverages.";
elseif RiskScore = "High Risk" then protocol_instructions:= "Immediate notification of MD is required. Special Constant Observation (SCO 1:1); Environmental Assessment; Safety Precautions/Observation Monitoring orders will be automatically entered. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages.";
endif;
this_parametername := first of (thisParameters where thisParameters.Name = "SCH_PSY_Risk Order Choices");
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := protocol_instructions;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
// Select the appropriate Orders for the risk
this_parametername := first of (thisParameters where thisParameters.Name = orders_observation_name);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if RiskScore = "High Risk" or RiskScore = "Moderate Risk"
then
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Environmental Assessment" then selectedItem.IsSelected := true; endif;
endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif; // Moderate or High Risk Section
endif; // Patient Profile Section
// CHART OBSERVATION SECTION
elseif thisdocumentCommunication.EventType = "ChartObservation" then
theParameter := first of (thisparameters where thisparameters.Name = "SCH_PSY_Discrepancy");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = ".") then nurseoverride := "yes"; endif;
// Determine which observation was selected if it is a Patient Profile or ED Triage Note (risk question vs order selection)
if has_orders = "yes"
then
theParameter := first of (thisparameters where thisparameters.Name = orders_observation_name);
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
endif;
if (has_orders = "yes" and thisDocumentCommunication.CurrentObservationObj.parameterguid <> theParameter.ParameterGUID) or has_orders = "no"
then
// Risk Button or Descrepancy Checbox Selection Section
// Determine which of the risk score buttons is selected
riskscore := 0 as number;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_Wish Dead Wake Up%" or thisparameters.Name matches pattern "SCH_PSY_Wish Dead WakeUp%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") then riskscore := riskscore + 1 as number; endif;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_Actual Thought of Killing%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes...") then riskscore := riskscore + 1 as number; endif;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_Think of How Might%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") then riskscore := riskscore + 10 as number; endif;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_Thought and Intention%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") then riskscore := riskscore + 20 as number; endif;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_Work out Detail of How to and Carry%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") then riskscore := riskscore + 20 as number; endif;
theParameter := first of (thisparameters where thisparameters.Name matches pattern "SCH_PSY_How Long%");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Over a year ago") then riskscore := riskscore + 1 as number;
elseif true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Between 3 months and a year") then riskscore := riskscore + 10 as number;
elseif true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Within the last 3 months") then riskscore := riskscore + 20 as number;
endif;
// Only found in the Columbia Severity Score for Outpatients Note
theParameter := first of (thisparameters where thisparameters.Name = "SCH_PSY_Risk Protect Factors"); // This one will elevate from Low to Moderate
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") and riskscore >= 0 and riskscore < 10 then riskscore := riskscore + 10 as number; endif;
// Only found in the Behavioral Health Outpatient Note
theParameter := first of (thisparameters where thisparameters.Name = "SCH_PSY_Recent hosp step down"); // This one will elevate from Low to Moderate
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "yes") and riskscore >= 0 and riskscore < 10 then riskscore := riskscore + 10 as number; endif;
// Calculate the risk score value
If riskscore = 0 then riskscorevalue := "No Risk"; triage_instructions := "No Mental Health orders are necessary.";
profile_instructions := "No Mental Health orders are necessary.";
columbop_instructions:= "No Mental Health orders are necessary.";
elseif riskscore >= 0 and riskscore < 10 then riskscorevalue := "Low Risk"; triage_instructions := "Consider ordering MHRN Consult and/or Special Constant Observation (SCO 1:1); or Constant Observation with Safety Precautions/Observation Monitoring if other risk factors are present. Select from below. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages.";
profile_instructions := "Immediate notification of MD is required. Consider Special Constant Observation (SCO 1:1); Constant Observation and Safety Precautions/Observation Monitoring. Select the orders from below. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages";
columbop_instructions:= "Low:\n\n-Develop and or reinforce Crisis Safety Plan";
elseif riskscore >= 10 and riskscore < 20 then riskscorevalue := "Moderate Risk"; triage_instructions := "MHRN Consult; Constant Observation; Safety Precautions/Observation Monitoring; orders will be automatically entered. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages";
profile_instructions := "Immediate notification of MD is required. Constant Observation; Safety Precautions/Observation Monitoring orders will be automatically entered. If diet is being ordered:Add a Seclusion Tray with No Hot Beverages.";
columbop_instructions:= "Moderate: \n\n-Develop and or reinforce Crisis Safety Plan \n\n-Patient to complete Self Report form at each visit \n\n-Staff to review patient{{{SINGLE-QUOTE}}}s Self Report form at each visit and discuss with patient if this is a change from last contact";
elseif riskscore >= 20 then riskscorevalue := "High Risk"; triage_instructions := "Immediate notification of MD is required. MHRN Consult, Special Constant Observation (SCO 1:1)), Implement the Safety Precautions/ Observation Monitoring Form, the Environmental Assessment for High Suicidal Risk will be automatically entered. If diet is being ordered: Add a Seclusion Tray with No Hot Beverages.";
profile_instructions := "Immediate notification of MD is required. Special Constant Observation (SCO 1:1); Environmental Assessment; Safety Precautions/Observation Monitoring orders will be automatically entered. If diet is being ordered:Add a Seclusion Tray with No Hot Beverages.";
columbop_instructions:= "High:\n\n-SCO 1:1 \n\n-Escort patient to the Emergency Department for a mental health evaluation \n\n-Contact attending psychiatrist \n\n-Encourage patient to notify family/significant other or staff to call if patient requests";
endif;
// Populate risk score value text box
this_parametername := first of (thisParameters where thisParameters.Name = "SCH_PSY_Columbia Risk Score");
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := riskscorevalue;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
// Populate risk score instructions text box
If current_document_type= "patient_profile" then protocol_instructions := profile_instructions; else protocol_instructions := triage_instructions; endif; // ED Triage Note vs Patient Profile ?
this_parametername := first of (thisParameters where thisParameters.Name = "SCH_PSY_Risk Order Choices");
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := protocol_instructions;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
// Populate Interventions text box (Columbia Severity Score Note only)
this_parametername := first of (thisParameters where thisParameters.Name = "SCH_PSY_Interventions"); // Columbia Severity Note for Outpatients only
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "FreeTextValue";
this_currentObj.ValueObj := New FreeTextValueType;
this_currentObj.ValueObj.Value := columbop_instructions;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
if has_orders = "yes"
then
// Select the appropriate Orders for the risk
this_parametername := first of (thisParameters where thisParameters.Name = orders_observation_name);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if riskscorevalue = "High Risk"
then
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := true; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif; // Patient Profile Only
if selectedItem.Value = "Environmental Assessment" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
endif;
if riskscorevalue = "Moderate Risk"
then
if selectedItem.Value = "CO" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := true; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif; // Patient Profile Only
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
endif;
if nurseoverride = "yes"
then
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := true; endif;
endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif;
else
// Order Button Checkbox Selection Section
if has_orders = "yes"
then
// Determine the value Risk Score text box
theParameter := first of (thisParameters where thisParameters.Name = "SCH_PSY_Columbia Risk Score");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
riskscorevalue := theObservation.ValueObj.Value;
if (riskscorevalue = "Moderate Risk" or riskscorevalue = "High Risk")
then
// Select the appropriate Orders for the risk
this_parametername := first of (thisParameters where thisParameters.Name = orders_observation_name);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if riskscorevalue = "High Risk"
then
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := true; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif; // Patient Profile Only
if selectedItem.Value = "Environmental Assessment" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
endif;
if riskscorevalue = "Moderate Risk"
then
if selectedItem.Value = "CO" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := true; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif; // Patient Profile Only
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif;
// Manually select orders when the patient is low risk
if riskscorevalue = "Low Risk"
then
SelectedBefore:= local_session.SessionSuicideOrdersSelected;
theParameter := first of (thisparameters where thisparameters.Name = orders_observation_name);
theObservation:= first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
SelectedNow := (theObservation.ValueObj.ListItemsList.Value where theObservation.ValueObj.ListItemsList.IsSelected = true);
// SCO is selected
if "SCO 1:1" in SelectedNow
then
this_parametername := first of (thisParameters where thisParameters.Name = orders_observation_name);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := true; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := true; endif; // Patient Profile Only
if selectedItem.Value = "Environmental Assessment" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := true; endif;
if selectedItem.Value = "CO" then selectedItem.IsSelected := false; endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
elseif "SCO 1:1" not in SelectedNow and "SCO 1:1" in SelectedBefore
then
this_parametername := first of (thisParameters where thisParameters.Name = orders_observation_name);
this_currentObj := NEW ObservationType;
this_currentObj.ClientDocumentGUID:= thisStructuredNoteDoc.ClientDocumentGUID;
this_currentObj.ParameterGUID := this_parametername.ParameterGUID;
this_currentObj.DataType := "ListValue";
this_currentObj.ValueObj := New ListValueType;
this_currentObj.ValueObj.ListGUID:= this_parametername.ConfigurationObj.ListGUID;
listItems := ();
FOR item IN this_parametername.ConfigurationObj.ListItemsList DO
selectedItem := NEW ListValueListItemType;
selectedItem.ListItemGUID := item.ListItemGUID;
selectedItem.Value := item.Value;
if selectedItem.Value = "SCO 1:1" then selectedItem.IsSelected := false; endif;
if selectedItem.Value = "MHRN Consult" then selectedItem.IsSelected := false; endif; // ED Triage Note Only
if selectedItem.Value = "Notify MD (day/evening) PPM (nights)" then selectedItem.IsSelected := false; endif; // Patient Profile Only
if selectedItem.Value = "Environmental Assessment" then selectedItem.IsSelected := false; endif;
if selectedItem.Value = "Safety Precautions/Observation Monitoring" then selectedItem.IsSelected := false; endif;
if selectedItem.Value = "CO" then selectedItem.IsSelected := false; endif;
listItems := (listItems, selectedItem);
ENDDO;
this_currentobj.ValueObj.ListItemsList := listItems;
thisStructuredNoteDoc.ChartedObservationsList := (thisstructuredNoteDoc.ChartedObservationsList, this_currentObj);
endif; // SCO selected
local_session.SessionSuicideOrdersSelected:= SelectedNow; // Set session object = orders that were selected
endif; // Low Risk
endif; // The note has orders
endif; // Risk Button or Order Button was selected
// DOCUMENT CLOSE SECTION
elseif thisdocumentCommunication.EventType = "DocumentClosing" then
// Determine the value of the risk score field
theParameter := first of (thisParameters where thisParameters.Name = "SCH_PSY_Columbia Risk Score");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
riskscorevalue := theObservation.ValueObj.Value;
// Search for {{{SINGLE-QUOTE}}}Call Physician{{{SINGLE-QUOTE}}} order on file
(CallPhysicianOnFile) := read
{"
select distinct ocmi.name
from cv3ordercatalogmasteritem ocmi with (nolock)
join cv3order o with (nolock) on o.ordercatalogmasteritemguid = ocmi.guid
where
o.clientguid = " || clientGuid || " and o.chartguid = " || chartGuid || " and o.clientvisitguid = " || visitGuid || " and ocmi.name = {{{SINGLE-QUOTE}}}Call Physician{{{SINGLE-QUOTE}}}
"};
// Display the "contact the doctor" message if "High Risk" (suppress on SN modify "Call Physician" order already on file)
If current_document_type = "triage_note" then notifymessage := "\n The patient score suggests a high risk of suicide.\n\n\n Please contact the doctor immediately.\n";
else notifymessage := "\n The patient score suggests a high risk of suicide.\n\n\n Please contact the doctor(day/evening) PPM (nights) immediately.\n";
endif;
If riskscorevalue = "High Risk" and not exists CallPhysicianOnFile then dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with notifymessage, "Suicide Caution","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}; endif;
// Determine which order boxes were selected
ordercount:= 0;
if has_orders = "yes"
then
theParameter := first of (thisparameters where thisparameters.Name = orders_observation_name);
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "SCO 1:1") then ordercount := ordercount + 1; SCOorder := true; ordername:= "SCO 1:1"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "CO") then ordercount := ordercount + 1; COorder := true; ordername:= "CO"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "MHRN Consult") then ordercount := ordercount + 1; MHRNorder := true; ordername:= "Mental Health Nurse Consult"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Notify MD (day/evening) PPM (nights)") then ordercount := ordercount + 1; NotifyMDorder := true; ordername:= "Notify MD"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Safety Precautions/Observation Monitoring") then ordercount := ordercount + 1; HarmPrecautorder:= true; ordername:= "Implement Safety Precautions/Observation Monitoring"; endif;
If true in (theObservation.ValueObj.ListItemsList.IsSelected where theObservation.ValueObj.ListItemsList.Value = "Environmental Assessment") then ordercount := ordercount + 1; EnvirAssessorder:= true; ordername:= "Implement Safety Precautions/Observation Monitoring"; endif;
endif;
// Create orders if something was selected
if ordercount > 0
then
// Search for orders already on file
(MHorderOnFile) := read
{"
select distinct ocmi.name
from cv3ordercatalogmasteritem ocmi with (nolock)
join cv3order o with (nolock) on o.ordercatalogmasteritemguid = ocmi.guid
where
o.clientguid = " || clientGuid || " and o.chartguid = " || chartGuid || " and o.clientvisitguid = " || visitGuid || " and
ocmi.name in
({{{SINGLE-QUOTE}}}Constant Observation (CO){{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Special Constant Observation (SCO 1:1){{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Mental Health Nurse Consult{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Implement Environmental Assessment for High Suicidal Risk{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Implement Safety Precautions/ Observation Monitoring{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Call Physician{{{SINGLE-QUOTE}}})
"};
// Attain the Attending MD
attendingguid := read last
{"Select providerguid from cv3careprovidervisitrole cpr with (nolock)
join cv3user u with (nolock) on u.guid = cpr.providerguid
where cpr.rolecode = {{{SINGLE-QUOTE}}}attending{{{SINGLE-QUOTE}}} and cpr.active = 1 and cpr.ToDtm is null and u.lastname not like {{{SINGLE-QUOTE}}}non staff%{{{SINGLE-QUOTE}}}
and cpr.clientguid = " || clientguid || " and cpr.chartguid = " || chartguid || " and cpr.clientvisitguid = " || visitguid || " "};
SCOOnFile := false;
MHRNOnFile := false;
NotifyMDOnFile := false;
HarmPrecautOnFile:= false;
EnvirAssessOnFile:= false;
COOnFile := false;
If exists MHorderOnFile
then
for i in 1 seqto count MHorderOnFile do
if MHorderOnFile[i] = "Special Constant Observation (SCO 1:1)" then SCOOnFile := true; endif;
if MHorderOnFile[i] = "Mental Health Nurse Consult" then MHRNOnFile := true; endif;
if MHorderOnFile[i] = "Call Physician" then NotifyMDOnFile := true; endif;
if MHorderOnFile[i] = "Implement Safety Precautions/ Observation Monitoring" then HarmPrecautOnFile:= true; endif;
if MHorderOnFile[i] = "Implement Environmental Assessment for High Suicidal Risk" then EnvirAssessOnFile:= true; endif;
if MHorderOnFile[i] = "Constant Observation (CO)" then COOnFile := true; endif;
enddo;
endif;
// Determine is the order is newly selected by comparing it to the list of orders selected upon document open
PriorOrderSCO := 0;
PriorOrderMHRN := 0;
PriorOrderHarmPrecaut:= 0;
PriorOrderNotifyMD := 0;
PriorOrderEnvirAssess:= 0;
PriorOrderCO := 0;
theParameter := first of (thisParameters where thisParameters.Name = "SCH_PSY_Risk Orders Prior");
theObservation := first of (thisobservations where thisobservations.ParameterGUID = theParameter.ParameterGUID);
if exists theObservation
then
PriorOrderList:= theObservation.ValueObj.Value;
PriorOrderSCO := FIND "S" IN STRING PriorOrderList;
PriorOrderMHRN := FIND "M" IN STRING PriorOrderList;
PriorOrderHarmPrecaut := FIND "P" IN STRING PriorOrderList;
PriorOrderNotifyMD := FIND "N" IN STRING PriorOrderList;
PriorOrderEnvirAssess := FIND "E" IN STRING PriorOrderList;
PriorOrderCO := FIND "C" IN STRING PriorOrderList;
endif;
// Create Objects and value variables to be used by either order
try
locationGuid := read last {"SELECT CurrentLocationGUID, touchedWhen"
|| " FROM CV3ClientVisit with (nolock)"
|| " WHERE GUID = " || Sql(visitGuid)
|| " AND ClientGUID = " || Sql(clientGuid)
, primaryTime = touchedWhen};
client_visit_obj := call {{{SINGLE-QUOTE}}}ClientVisit{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((visitGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
location_obj := call {{{SINGLE-QUOTE}}}Location{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((locationGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
Order_Creation_Reason := "Suicide Risk Assessment";
RequestingSource := "Standing Order";
SessionType := "Standard";
SessionReason := "";
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}CommonData: {{-R}}\n" || ex.Message || "\n\n";
if location_obj IS NOT Null then void := call location_obj.Dispose; location_obj := null; endif;
if client_visit_obj IS NOT Null then void := call client_visit_obj.Dispose; client_visit_obj := null; endif;
endcatch;
if client_visit_obj IS NOT Null
then
// Create SSO Order
if SCOorder = true and SCOOnFile = false and PriorOrderSCO = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj:= call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Special Constant Observation (SCO 1:1)");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Create CO Order
if COorder = true and COOnFile = false and PriorOrderCO = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj:= call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Constant Observation (CO)");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Create MNRN Consult Order
if MHRNorder = true and MHRNOnFile = false and PriorOrderMHRN = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj:= call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Mental Health Nurse Consult");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Create Notify MD Order
if NotifyMDorder = true and NotifyMDOnFile = false and PriorOrderNotifyMD = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj:= call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Call Physician");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
order_obj.SpecialInstructions := "Notify MD (day/evening) PPM (nights). Further direction regarding mental health consult";
retval := call order_obj.{{{SINGLE-QUOTE}}}SetEnterpriseDefinedDataItemValue<String>{{{SINGLE-QUOTE}}} with "NUR_NotifyType", "Physician" ;
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Create Environmental Assessment Order
if EnvirAssessorder = true and EnvirAssessOnFile = false and PriorOrderEnvirAssess = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj:= call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Implement Environmental Assessment for High Suicidal Risk");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Create Self Harm Precautions Order
if HarmPrecautorder = true and HarmPrecautOnFile = false and PriorOrderHarmPrecaut = 0
then
try
if not exist attendingguid
then
if current_document_type = "triage_note"
then attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}biggs{{{SINGLE-QUOTE}}} and firstname = {{{SINGLE-QUOTE}}}jason{{{SINGLE-QUOTE}}} and active = 1"};
else attendingGuid := read last {"Select guid from cv3user with (nolock) where lastname = {{{SINGLE-QUOTE}}}non staff{{{SINGLE-QUOTE}}} and active = 1"};
endif;
endif;
care_provider_obj:= call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((attendingGuid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
order_catalog_obj := call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with ("Implement Safety Precautions/ Observation Monitoring");
order_obj := call {{{SINGLE-QUOTE}}}GeneralOrder{{{SINGLE-QUOTE}}}.CreateGeneralOrder with client_visit_obj, order_catalog_obj,Order_Creation_Reason,care_provider_obj,RequestingSource,SessionType,SessionReason,location_obj,"Always" as {{{SINGLE-QUOTE}}}AvailabilityOverride{{{SINGLE-QUOTE}}};
void := call order_obj.Save;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New Other Order: {{-R}}\n" || ex.Message || "\n\n";
if care_provider_obj IS NOT Null then void := call care_provider_obj.Dispose; care_provider_obj := null; endif;
if order_obj is not null then void := call order_obj.Dispose; order_obj := null; endif;
if order_catalog_obj is not null then void := call order_catalog_obj.Dispose; order_catalog_obj := null; endif;
endcatch;
endif;
// Dispose of common objects
if location_obj is not null then void := call location_obj.Dispose; location_obj := null; endif;
if client_visit_obj is not null then void := call client_visit_obj.Dispose; client_visit_obj := null; endif;
endif; // Common Objects were succesfully created ?
endif; // Order count > 0
// DOCUMENT ENTER/MODIFY EVOKE SECTION
else
// Update the Enterprise Defined Column after the filing of the document. A new risk may have been revealed by the Columnbia resposnes
If called_by_editor then columnvalue := "."; endif;
if exists SuidcideObservation or exists SignificantEvent then columnvalue := "Yes";
else columnvalue := ".";
endif;
create_ED_column := MLM {{{SINGLE-QUOTE}}}SCH_FUNC_CREATE_ENTERPRISE_DEFINED_COLUMN{{{SINGLE-QUOTE}}}; // MLM that creates the Enterprise Defined Column
EDCObj := OBJECT [column_name,column_value,client_guid,chart_guid,client_visit_guid]; // Create Enterprise Defined Column Obj
SuicideViolence_Column := NEW EDCObj WITH
[
column_name := "Suicide Violence Risk",
column_value := columnvalue,
client_guid := ClientGUID,
chart_guid := ChartGUID,
client_visit_guid := visitGuid
];
return_value := call create_ED_column with ( SuicideViolence_Column );
endif; // Document Open / Chart Observation / Document Enter/ Document Modify Evoking Event
;;
evoke:
15 seconds after time of document_event_enter;
15 seconds after time of document_event_modify;
;;
logic:
conclude true;
;;
action: return thisDocumentCommunication;
;;
Urgency: 50;;
end: