202 lines
6.9 KiB
Plaintext
202 lines
6.9 KiB
Plaintext
maintenance:
|
|
|
|
title: SCH_ALERT_ON_FENTANYL_ORDERS ;;
|
|
mlmname: SCH_ALERT_ON_FENTANYL_ORDERS;;
|
|
arden: version 2.5;;
|
|
version: 1.00;;
|
|
institution: St.Clair Hospital ;;
|
|
author: Sandy Zhang ;;
|
|
specialist: Rob Stewart ;;
|
|
date: 2017-06-21;;
|
|
validation: testing;;
|
|
|
|
library:
|
|
purpose:
|
|
;;
|
|
explanation:
|
|
|
|
Change History
|
|
|
|
06.19.2017 SZ CSR 35469: Fentanyl/Duragesic Patch Indication Alert
|
|
;;
|
|
keywords: fentanyl transdermal patch, duragesic, alert
|
|
;;
|
|
citations:
|
|
;;
|
|
knowledge:
|
|
type: data-driven;;
|
|
data:
|
|
|
|
// MLM evoked on these Fentanyl order sets
|
|
fentanyl_orderset_event := event{OrderSetInit User OrderSet :
|
|
WHERE OrderSetName IN ("Fentanyl 125mcg Patch"
|
|
, "Fentanyl Patch"
|
|
, "Fentanyl Other Orders")};
|
|
|
|
// MLM evoked on Fentanyl Patch orders
|
|
fentanyl_order_event := event{OrderInit User Order :
|
|
WHERE Name matches pattern "%Fentanyl%" and Name matches pattern "%patch%" };
|
|
|
|
// MLM evoked on Duragesic Patch orders
|
|
//duragesic_order_event := event{OrderInit User Order :
|
|
// WHERE Name matches pattern "%Duragesic%" and Name matches pattern "%patch%" };
|
|
|
|
|
|
|
|
// grab relevant guids
|
|
ClientGuid := EVOKINGOBJECT.ClientGUID;
|
|
ChartGuid := EVOKINGOBJECT.ChartGUID;
|
|
userguid := read last {UserInfo: GUID};
|
|
VisitGuid := EVOKINGOBJECT.ClientVisitGUID;
|
|
|
|
// By default, the Fentanyl patch/duragesic alert IS displayed to user upon FormOpen of fentanyl patch/duragesic order
|
|
// If it meets any of these 3 exceptions then the alert is not shown:
|
|
// 1) User is a pain management or palliative care specialist
|
|
// 2) If patient was already prescribed fentanyl patch/duragesic during this visit
|
|
// 3) If fentanyl patch/duragesic is a home med and listed in their OMR
|
|
|
|
show_alert := "Yes";
|
|
|
|
//med_extension := EVOKINGOBJECT.MedicationExtension;
|
|
//order_user_data := EVOKINGOBJECT.OrderUserData;
|
|
|
|
|
|
/************************* exception 1 *****************************************/
|
|
// grab the ordering provider guid
|
|
if (EvokingEventType = "OrderInit") then
|
|
(OrderingProviderGuid) := read last {Order: CareProviderGuid REFERENCING EvokingObject};
|
|
endif;
|
|
|
|
// For ordersets, CareProviderGuid doesn{{{SINGLE-QUOTE}}}t exist so we{{{SINGLE-QUOTE}}}ll use userguid instead since that{{{SINGLE-QUOTE}}}s the best we can do
|
|
if (EvokingEventType = "OrderSetInit") then
|
|
(OrderingProviderGuid) := userguid;
|
|
endif;
|
|
|
|
|
|
exception_discpline := ("pain management", "palliative care", "palliative care/internal med");
|
|
exception_physicians := ("Erlanger, Daniel B","Platto, Michael J");
|
|
|
|
|
|
// SQL to get the discipline/specialty of the ordering provider
|
|
(ordering_provider_discipline, ordering_provider_name) := read last {
|
|
"select cp.Discipline, cp.displayname"
|
|
||" from CV3User u"
|
|
||" join CV3OrganizationalUnit ou on ou.GUID = u.OrgUnitGUID"
|
|
||" join CV3CareProvider cp on cp.GUID = u.GUID"
|
|
||" where u.Active = 1"
|
|
||" and u.GUID = " || sql(OrderingProviderGuid)
|
|
};
|
|
|
|
// if the ordering provider is a pain management or palliative care specialist then don{{{SINGLE-QUOTE}}}t show the alert
|
|
if (ordering_provider_discipline is in exception_discpline) then
|
|
show_alert := "No";
|
|
discipline_bypassed := "yay the provider{{{SINGLE-QUOTE}}}s DISCIPLINE has bypassed this alert";
|
|
endif;
|
|
|
|
|
|
if (ordering_provider_name is in exception_physicians) then
|
|
show_alert := "No";
|
|
provider_bypassed := "yay the provider has bypassed this alert";
|
|
endif;
|
|
|
|
|
|
|
|
/************************* exception 2 *****************************************/
|
|
// SQL to see if patient was already ordered Fentanyl during this visit
|
|
existing_fentanyl_order := read last {
|
|
"select ocmi.Name"
|
|
||" from cv3ordercatalogmasteritem ocmi with (nolock)"
|
|
||" join cv3order o with (nolock) on o.ordercatalogmasteritemguid = ocmi.guid"
|
|
||" where"
|
|
||" o.clientguid = " || sql(ClientGuid)
|
|
||" and o.chartguid = " || sql(ChartGuid)
|
|
||" and o.clientvisitguid = " || sql(VisitGuid)
|
|
||" and ocmi.Name like {{{SINGLE-QUOTE}}}%fentanyl%{{{SINGLE-QUOTE}}}"
|
|
||" and ocmi.Name like {{{SINGLE-QUOTE}}}%patch%{{{SINGLE-QUOTE}}}"
|
|
};
|
|
|
|
// if fentanyl patch order exists from this visit then don{{{SINGLE-QUOTE}}}t show alert
|
|
if exist existing_fentanyl_order then
|
|
show_alert := "No";
|
|
endif;
|
|
|
|
|
|
/************************* exception 3 *****************************************/
|
|
// SQL to see if fentanyl patch/duragesic is a home med and already in OMR
|
|
existing_fentanyl_omr := read last {
|
|
"SELECT p.DrugName"
|
|
||" FROM SXAAMBClientPrescription p with (nolock) JOIN SXAAMBDrugCategoryXRef xr with (nolock)"
|
|
||" ON p.GenericNameID = xr.GenericNameID"
|
|
||" JOIN SXAAMBDrugCategory dc with (nolock)"
|
|
||" ON xr.DrugCategoryID = dc.DrugCategoryID"
|
|
||" WHERE p.ClientGUID = " || sql(ClientGuid)
|
|
||" and ((p.DrugName like {{{SINGLE-QUOTE}}}%fentanyl%{{{SINGLE-QUOTE}}} and p.DrugName like {{{SINGLE-QUOTE}}}%transdermal%{{{SINGLE-QUOTE}}}) "
|
|
||" or (p.DrugName like {{{SINGLE-QUOTE}}}%duragesic%{{{SINGLE-QUOTE}}}))"
|
|
};
|
|
|
|
// if fentanyl patch/duragesic is a home med and exists in OMR then don{{{SINGLE-QUOTE}}}t show alert
|
|
if exist existing_fentanyl_omr then
|
|
show_alert := "No";
|
|
endif;
|
|
|
|
/************************* other exceptions *****************************************/
|
|
// Don{{{SINGLE-QUOTE}}}t fire on fentanyl patch removal orders
|
|
if (EVOKINGOBJECT.Name matches pattern "%removal%") then
|
|
show_alert := "No";
|
|
endif;
|
|
|
|
// don{{{SINGLE-QUOTE}}}t fire on fentanyl patch orders that are part of an order set
|
|
if exists EVOKINGOBJECT.OrderSet then
|
|
show_alert := "No";
|
|
endif;
|
|
|
|
|
|
|
|
|
|
// alert message content
|
|
alert_message := "\nFentanyl Transdermal Patch (Duragesic®) is used ONLY in patients with: " ||
|
|
"\n " ||
|
|
"\n1) {{+B}}CHRONIC{{-B}}, severe PAIN requiring long-term, around-the-clock analgesia." ||
|
|
"\n " ||
|
|
"\n{{+R}}AND{{-R}}" ||
|
|
"\n " ||
|
|
"\n2) {{+B}}OPIOID-TOLERANCE{{-B}}:" ||
|
|
"\ntaking AT LEAST 60 mg PO morphine OR 30 mg oxycodone OR 8 mg PO hydromorphone OR an equianalgesic-dose of another opioid for 7 DAYS OR MORE" ||
|
|
"\n ";
|
|
|
|
|
|
// alert destination
|
|
order_alert_dest := destination {alert} with
|
|
[alert_type := warning,
|
|
short_message := "Fentanyl Transdermal Patch (Duragesic®)",
|
|
priority := "High",
|
|
scope := Chart,
|
|
rule_group := "Fentanyl patch",
|
|
rule_number := 8000,
|
|
send_with_order := "DoNotSend",
|
|
alert_dialog_settings := "Must Acknowledge",
|
|
display_alert := true];
|
|
|
|
|
|
;;
|
|
priority: 50
|
|
;;
|
|
evoke: fentanyl_orderset_event;
|
|
fentanyl_order_event;
|
|
;;
|
|
logic:
|
|
|
|
/************************* Main Rule *****************************************/
|
|
// if no exceptions stopped the alert from showing then proceed with alert
|
|
if (show_alert = "Yes") then
|
|
conclude true;
|
|
else
|
|
conclude false;
|
|
endif;
|
|
;;
|
|
action:
|
|
write alert_message at order_alert_dest;
|
|
;;
|
|
Urgency: 50;;
|
|
end:
|