495 lines
24 KiB
Plaintext
495 lines
24 KiB
Plaintext
maintenance:
|
|
|
|
title: SCH_ORDER_REC_STROKE_MEDICATIONS ;;
|
|
filename: SCH_ORDER_REC_STROKE_MEDICATIONS;;
|
|
arden: version 2.50;;
|
|
version: 5.50;;
|
|
institution: St. Clair Hospital;;
|
|
author: Peggy Karish ;;
|
|
specialist: Don Warnick;;
|
|
date: 2017-05-04;;
|
|
validation: testing;;
|
|
|
|
library:
|
|
purpose: This MLM will alert the physician when the patient does not have an appropriate med to be selected for discharge order reconciliation.
|
|
;;
|
|
explanation:
|
|
|
|
Change History
|
|
|
|
DW 06.12.2017 - CSR# 35309 - Stroke Quality Measure - Created
|
|
DW 10.16.2017 - CSR# 35309 - Stroke Quality Measure - Disable pilot code
|
|
DW 10.17.2017 - CSR# 35309 - Corrected SQL issue with determining the strengths of the components of a combination drug. Issue converting text to float.
|
|
DW 11.02.2017 - CSR# 35309 - Corrected SQL issue with document names (was searching for contraindications in "physician progress note" w/o a suffix which is appended
|
|
DW 12.12.2017 - HD# 2995007 - Corrected issue regarding the patient classification by HI. To be classified as AFIB, the patient must also have a Stroke/TIA HI
|
|
DW 12.18.2017 - HD# 2995007 - Corrected issue regarding the patient classification by HI. Was missing the {{{SINGLE-QUOTE}}}Discharge Diag{{{SINGLE-QUOTE}}} type. Sandy found it in testing Beta Blocker MLM
|
|
|
|
;;
|
|
keywords: Order Reconciliation, Discharge
|
|
;;
|
|
knowledge:
|
|
type: data-driven;;
|
|
data:
|
|
|
|
// Intense Statins List
|
|
|
|
/*
|
|
Dnum Int Strngth Generic (Brand)
|
|
|
|
d05048 xx mg-40 mg amLODIPine-atorvastatin (Caduet)
|
|
d04105 40 mg atorvastatin (Lipator)
|
|
d08089 40 mg-xx mg atorvastatin-ezetimibe (Liptruzet)
|
|
d05348 xx mg-80 mg ezetimibe-simvastatin (Vytorin)
|
|
d04851 20 mg rosuvastatin (Crestor)
|
|
d00746 80 mg simvastatin (Zocor)
|
|
*/
|
|
|
|
// Caduet Lipator Liptruzet Vytorin Crestor Zocor
|
|
|
|
IntenseStatinsID := "d05048" , "d04105" , "d08089" , "d05348" , "d04851" , "d00746" ; // DNUM
|
|
IntenseStatinsStrn := "40" , "40" , "40" , "80" , "20" , "80"; // Intense Strength Dosage
|
|
IntenseStatinsPosit:= "2" , "1" , "1" , "2" , "1" , "1"; // Which Medication in a combination drug is the Stroke Med (always 1 if not a combination)
|
|
|
|
|
|
|
|
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
|
|
include standard_libs;
|
|
|
|
log_execution_info:= false;
|
|
|
|
error_destination := destination { Alert } with [alert_type := "Warning", short_message := "ObjectsPlus Error from MLM", priority := "low", scope := "chart", Rule_group := "MLM Error", Rule_number := 1003, Rule_subgroup := "", Send_with_order := "", Alert_dialog_settings := "", Display_alert := true ];
|
|
|
|
order_rec_event := event{OrderReconciliationPerform Any ORDERRECONCILE: Where ReconcileTypeCode = "Discharge"};
|
|
// doc_open_event := event{ClientDocumentEnter User ClientDocument: WHERE DocumentName = "Physician Progress Note" };
|
|
|
|
(ClientVisitGuid, ChartGuid, ClientGuid, VisitType) := read last {ClientVisit: GUID, ChartGUID, ClientGUID, TypeCode};
|
|
|
|
birthdate := read last { ClientInfo: BirthDate};
|
|
patientage:= int ((NOW - birthdate) / (1 year));
|
|
|
|
/*
|
|
// Search for pilot Hospitalist user names
|
|
|
|
|
|
userguid :=read last {UserInfo: guid};
|
|
|
|
|
|
PiotDoctor := read last
|
|
{ "
|
|
select u.IDCode
|
|
from CV3User u
|
|
join CV3CareProvider cp with (nolock) on cp.GUID = u.GUID
|
|
join CV3OrganizationalUnit ou with (nolock) on ou.guid = u.OrgUnitGUID
|
|
join CV3UserSecurityGroup usg with (nolock) on usg.UserGUID = u.GUID
|
|
join CV3SecurityGroup sg with (nolock) on sg.GUID = usg.SecurityGroupGUID
|
|
where ou.Description = {{{SINGLE-QUOTE}}}Medical Affairs{{{SINGLE-QUOTE}}} and sg.code = {{{SINGLE-QUOTE}}}OBS Physician{{{SINGLE-QUOTE}}} and u.Active = 1
|
|
and u.guid = " || userguid || "
|
|
order by u.DisplayName
|
|
"
|
|
};
|
|
|
|
If exist PiotDoctor
|
|
|
|
then
|
|
|
|
*/
|
|
|
|
|
|
/*
|
|
// Search for Arterial Fibulation and Stroke Problems (DW 12.12.2017 - HD# 2995007 replaced with individual stroke and afib hi lookups. patient only should be classified as "afib" if they also have a stroke hi)
|
|
|
|
|
|
CodedProblem := read last
|
|
{ "
|
|
select
|
|
case when chi.code >= {{{SINGLE-QUOTE}}}I48{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}I48.91{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}Afib{{{SINGLE-QUOTE}}} else {{{SINGLE-QUOTE}}}Stroke{{{SINGLE-QUOTE}}} end
|
|
from CV3HealthIssueDeclaration hid with (nolock)
|
|
join CV3CodedHealthIssue chi with (nolock) on chi.guid = hid.CodedHealthIssueGUID
|
|
where hid.typecode = {{{SINGLE-QUOTE}}}Problem-Visit{{{SINGLE-QUOTE}}} and hid.CodingScheme = {{{SINGLE-QUOTE}}}ICD10{{{SINGLE-QUOTE}}} and hid.Status = {{{SINGLE-QUOTE}}}active{{{SINGLE-QUOTE}}}
|
|
and hid.clientguid = " || ClientGuid || " and hid.ChartGUID = " || ChartGuid || " and hid.ClientVisitGUID = " || ClientVisitGuid || "
|
|
and
|
|
(
|
|
chi.code >= {{{SINGLE-QUOTE}}}G45.0{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}G45.2{{{SINGLE-QUOTE}}} or
|
|
chi.code >= {{{SINGLE-QUOTE}}}G45.8{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}G45.9{{{SINGLE-QUOTE}}} or
|
|
chi.code >= {{{SINGLE-QUOTE}}}O99.41{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}O99.413{{{SINGLE-QUOTE}}} or
|
|
chi.code = {{{SINGLE-QUOTE}}}O99.419{{{SINGLE-QUOTE}}}
|
|
or
|
|
chi.code >= {{{SINGLE-QUOTE}}}I60{{{SINGLE-QUOTE}}} and chi.code < {{{SINGLE-QUOTE}}}I64{{{SINGLE-QUOTE}}}
|
|
or
|
|
chi.code >= {{{SINGLE-QUOTE}}}I48{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}I48.91{{{SINGLE-QUOTE}}}
|
|
)
|
|
"
|
|
};
|
|
|
|
//hid.Description, hid.TypeCode, hid.CodingScheme, hid.Code,
|
|
*/
|
|
|
|
|
|
// Search for Stroke Problems
|
|
|
|
|
|
CodedProblem_Stroke := read last
|
|
{ "
|
|
select
|
|
chi.code
|
|
from CV3HealthIssueDeclaration hid with (nolock)
|
|
join CV3CodedHealthIssue chi with (nolock) on chi.guid = hid.CodedHealthIssueGUID
|
|
where (hid.typecode = {{{SINGLE-QUOTE}}}Problem-Visit{{{SINGLE-QUOTE}}} or hid.typecode = {{{SINGLE-QUOTE}}}Problem-Chronic{{{SINGLE-QUOTE}}} or hid.typecode = {{{SINGLE-QUOTE}}}Discharge Diag{{{SINGLE-QUOTE}}}) and hid.CodingScheme = {{{SINGLE-QUOTE}}}ICD10{{{SINGLE-QUOTE}}} and hid.Status = {{{SINGLE-QUOTE}}}active{{{SINGLE-QUOTE}}}
|
|
and hid.clientguid = " || ClientGuid || " and hid.ChartGUID = " || ChartGuid || " and hid.ClientVisitGUID = " || ClientVisitGuid || "
|
|
and
|
|
(
|
|
chi.code >= {{{SINGLE-QUOTE}}}G45.0{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}G45.2{{{SINGLE-QUOTE}}} or
|
|
chi.code >= {{{SINGLE-QUOTE}}}G45.8{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}G45.9{{{SINGLE-QUOTE}}} or
|
|
chi.code >= {{{SINGLE-QUOTE}}}O99.41{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}O99.413{{{SINGLE-QUOTE}}} or
|
|
chi.code = {{{SINGLE-QUOTE}}}O99.419{{{SINGLE-QUOTE}}}
|
|
or
|
|
chi.code >= {{{SINGLE-QUOTE}}}I60{{{SINGLE-QUOTE}}} and chi.code < {{{SINGLE-QUOTE}}}I64{{{SINGLE-QUOTE}}}
|
|
)
|
|
"
|
|
};
|
|
|
|
|
|
// Search for Arterial Fibulation Problems
|
|
|
|
|
|
CodedProblem_Afib := read last
|
|
{ "
|
|
select
|
|
chi.code
|
|
from CV3HealthIssueDeclaration hid with (nolock)
|
|
join CV3CodedHealthIssue chi with (nolock) on chi.guid = hid.CodedHealthIssueGUID
|
|
where
|
|
(
|
|
(hid.typecode = {{{SINGLE-QUOTE}}}Problem-Visit{{{SINGLE-QUOTE}}} and hid.clientguid = " || ClientGuid || " and hid.ChartGUID = " || ChartGuid || " and hid.ClientVisitGUID = " || ClientVisitGuid || " )
|
|
or
|
|
(hid.typecode = {{{SINGLE-QUOTE}}}Problem-Chronic{{{SINGLE-QUOTE}}} and hid.clientguid = " || ClientGuid || " )
|
|
)
|
|
and hid.CodingScheme = {{{SINGLE-QUOTE}}}ICD10{{{SINGLE-QUOTE}}} and hid.Status = {{{SINGLE-QUOTE}}}active{{{SINGLE-QUOTE}}}
|
|
and
|
|
(
|
|
chi.code >= {{{SINGLE-QUOTE}}}I48{{{SINGLE-QUOTE}}} and chi.code <= {{{SINGLE-QUOTE}}}I48.91{{{SINGLE-QUOTE}}}
|
|
)
|
|
"
|
|
};
|
|
|
|
|
|
If exists CodedProblem_Stroke and not exist CodedProblem_Afib then CodedProblem := "Stroke"; endif;
|
|
If exists CodedProblem_Stroke and exist CodedProblem_Afib then CodedProblem := "Afib"; endif;
|
|
|
|
|
|
|
|
|
|
|
|
if CodedProblem = "Afib" or CodedProblem = "Stroke"
|
|
|
|
|
|
then
|
|
|
|
|
|
ComfortMeasuresOnlyOrder := read last
|
|
{ "
|
|
select top 1 o.Name, cast( convert(char(16), o.CreatedWhen,120) as varchar)
|
|
from CV3OrderCatalogMasterItem ocmi with (nolock)
|
|
join CV3Order o with (nolock) on o.OrderCatalogMasterItemGUID = ocmi.GUID
|
|
where ocmi.name like {{{SINGLE-QUOTE}}}Code Status:%{{{SINGLE-QUOTE}}} and o.Name like {{{SINGLE-QUOTE}}}%Comfort Measures Only{{{SINGLE-QUOTE}}} and o.OrderStatusLevelNum >= 15 and o.OrderStatusCode not in ({{{SINGLE-QUOTE}}}DISC{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}CANC{{{SINGLE-QUOTE}}}) and
|
|
o.clientguid = " || ClientGuid || " and o.ChartGUID = " || ChartGuid || " and o.ClientVisitGUID = " || ClientVisitGuid || "
|
|
order by o.CreatedWhen desc
|
|
"
|
|
};
|
|
|
|
|
|
// If there are no "Comfort Measures" orders, proceed with further SQL queries
|
|
|
|
|
|
If not exists ComfortMeasuresOnlyOrder
|
|
|
|
then
|
|
|
|
|
|
// Return a list of relavant stroke medications
|
|
|
|
|
|
(Anticoagulants, Antiplatelets, Statins) := read
|
|
{ "
|
|
select distinct
|
|
case when dc2.CategoryName = {{{SINGLE-QUOTE}}}anticoagulants{{{SINGLE-QUOTE}}} then gn.DrugCatalogKey else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end {{{SINGLE-QUOTE}}}Anticoagulant{{{SINGLE-QUOTE}}},
|
|
case when dc2.CategoryName = {{{SINGLE-QUOTE}}}antiplatelet agents{{{SINGLE-QUOTE}}} then gn.DrugCatalogKey else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end {{{SINGLE-QUOTE}}}Antiplatelet{{{SINGLE-QUOTE}}},
|
|
case when dc.CategoryName in ({{{SINGLE-QUOTE}}}antihyperlipidemic combinations{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}HMG-CoA reductase inhibitors (statins){{{SINGLE-QUOTE}}}) then gn.DrugCatalogKey else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end {{{SINGLE-QUOTE}}}Statin{{{SINGLE-QUOTE}}}
|
|
from SXAAMBDrugName bn with (nolock)
|
|
join SXAAMBGenericNameDrugNameXRef dnx with (nolock) on dnx.DrugNameID = bn.DrugNameID
|
|
join SXARxGenericName gn with (nolock) on gn.GenericNameID = dnx.GenericNameID
|
|
join SXAMTCategoryDrugXREFVW cdx with (nolock) on cdx.drug_id = gn.DrugCatalogKey
|
|
join SXAMTDrugCategoriesVW cat with (nolock) on cat.multum_category_id = cdx.multum_category_id
|
|
join SXAAMBDrugCategoryXRef xr with (nolock) on gn.GenericNameID = xr.GenericNameID
|
|
join SXAAMBDrugCategory dc with (nolock) on xr.DrugCategoryID = dc.DrugCategoryID
|
|
join SXAAMBDrugCategory dc2 with (nolock) on dc.ParentDrugCategoryID = dc2.DrugCategoryID
|
|
left join SXAAMBDrugCategory dc3 with (nolock) on dc2.ParentDrugCategoryID = dc3.DrugCategoryID
|
|
where
|
|
dc2.CategoryName = {{{SINGLE-QUOTE}}}anticoagulants{{{SINGLE-QUOTE}}} or dc2.CategoryName = {{{SINGLE-QUOTE}}}antiplatelet agents{{{SINGLE-QUOTE}}} or dc.CategoryName in ({{{SINGLE-QUOTE}}}antihyperlipidemic combinations{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}HMG-CoA reductase inhibitors (statins){{{SINGLE-QUOTE}}})
|
|
"};
|
|
|
|
// case when dc.CategoryName in ({{{SINGLE-QUOTE}}}antihyperlipidemic combinations{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}HMG-CoA reductase inhibitors{{{SINGLE-QUOTE}}}) then gn.DrugCatalogKey else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end {{{SINGLE-QUOTE}}}Statin{{{SINGLE-QUOTE}}}
|
|
// dc2.CategoryName = {{{SINGLE-QUOTE}}}anticoagulants{{{SINGLE-QUOTE}}} or dc2.CategoryName = {{{SINGLE-QUOTE}}}antiplatelet agents{{{SINGLE-QUOTE}}} or dc.CategoryName in ({{{SINGLE-QUOTE}}}antihyperlipidemic combinations{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}HMG-CoA reductase inhibitors{{{SINGLE-QUOTE}}})
|
|
|
|
|
|
|
|
// Search for Patient Medications
|
|
|
|
|
|
(PatientMedDrugID, PatientMedStrength1, PatientMedStrength2, PatientMedName ) := read
|
|
{ "
|
|
select distinct dnm.drug_id
|
|
,case when gi.StrengthDesc like {{{SINGLE-QUOTE}}}%mg%{{{SINGLE-QUOTE}}} then substring(gi.StrengthDesc,0,CHARINDEX({{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},gi.StrengthDesc)) else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end
|
|
,case when LEN(gi.StrengthDesc) - LEN(REPLACE(gi.StrengthDesc,{{{SINGLE-QUOTE}}}mg-{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}})) = 3 then replace (substring(gi.StrengthDesc,CHARINDEX({{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},gi.StrengthDesc)+3,9),{{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}) else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end
|
|
,cp.DrugName
|
|
from SXAAMBClientPrescription cp with (nolock)
|
|
inner join SXAMTDrugNameMapVW dnm with (nolock) on dnm.drug_synonym_id = cp.FormularyBrandKey
|
|
join SXAMTCategoryDrugXREFVW cdx with (nolock) on cdx.drug_id = dnm.drug_id
|
|
join SXAMTDrugCategoriesVW cat with (nolock) on cat.multum_category_id = cdx.multum_category_id
|
|
join sxarxgenericitem gi with (nolock) on gi.GenericItemID = cp.GenericItemID and gi.DrugCatalogKey = cp.FormularyDrugKey
|
|
where cp.ClientGuid = " || ClientGuid || " and cp.statustype = {{{SINGLE-QUOTE}}}1{{{SINGLE-QUOTE}}}
|
|
union
|
|
select distinct dm.DrugKey, ot.OrderDosageLow, {{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}, ocmi.Name
|
|
from cv3ordercatalogmasteritem ocmi with (nolock)
|
|
join cv3order o with (nolock) on o.OrderCatalogMasterItemGUID = ocmi.guid
|
|
JOIN CV3DrugMapping dm with (nolock) on dm.CatalogItemGUID = ocmi.GUID
|
|
join CV3OrganizationalUnit ou with (nolock) on ou.GUID = ocmi.OrgUnitGUID
|
|
join CV3OrderTask ot with (nolock) on ot.OrderGUID = o.GUID
|
|
where ou.name ={{{SINGLE-QUOTE}}}Pharmacy Department{{{SINGLE-QUOTE}}} and o.OrderStatusLevelNum > 15 and o.OrderStatusLevelNum not in ({{{SINGLE-QUOTE}}}69{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}70{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}100{{{SINGLE-QUOTE}}}) and
|
|
o.clientguid = " || ClientGuid || " and o.ChartGUID = " || ChartGuid || " and o.ClientVisitGUID = " || ClientVisitGuid || "
|
|
"};
|
|
|
|
|
|
// 10/17/2017 - Corrected Issue with drug strentgh pattern (some have text and can{{{SINGLE-QUOTE}}}t convert to float). Removed the cast and convert only the intense statins later which do not have text
|
|
|
|
// ,case when gi.StrengthDesc like {{{SINGLE-QUOTE}}}%mg%{{{SINGLE-QUOTE}}} then cast (substring(gi.StrengthDesc,0,CHARINDEX({{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},gi.StrengthDesc)) as float) else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end
|
|
// ,case when LEN(gi.StrengthDesc) - LEN(REPLACE(gi.StrengthDesc,{{{SINGLE-QUOTE}}}mg-{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}})) = 3 then cast (replace (substring(gi.StrengthDesc,CHARINDEX({{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},gi.StrengthDesc)+3,9),{{{SINGLE-QUOTE}}}mg{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}{{{SINGLE-QUOTE}}}) as float) else {{{SINGLE-QUOTE}}} {{{SINGLE-QUOTE}}} end
|
|
|
|
|
|
|
|
// Check for Anticoagulant Medications
|
|
|
|
AnticoagulantFound:= "";
|
|
for x in 1 seqto count (PatientMedDrugID) do
|
|
if (PatientMedDrugID[x] is in Anticoagulants)
|
|
then AnticoagulantFound := AnticoagulantFound || " " || PatientMedName [x];
|
|
endif;
|
|
enddo;
|
|
|
|
|
|
// Check for Antiplatelet Medications
|
|
|
|
AntiplateletFound:= "";
|
|
for x in 1 seqto count (PatientMedDrugID) do
|
|
if (PatientMedDrugID[x] is in Antiplatelets)
|
|
then AntiplateletFound := AntiplateletFound || " " || PatientMedName [x];
|
|
endif;
|
|
enddo;
|
|
|
|
|
|
// Check for Statin Medications
|
|
|
|
StatinFound := "";
|
|
IntStatinFound := "";
|
|
|
|
for x in 1 seqto count (PatientMedDrugID) do
|
|
|
|
if (PatientMedDrugID[x] is in Statins)
|
|
|
|
then StatinFound := StatinFound || " " || PatientMedName [x];
|
|
|
|
// Compare the drug name to the Intense Statin Drug ID list at the top of the MLM
|
|
|
|
for y in 1 seqto count (IntenseStatinsID) do
|
|
|
|
If (PatientMedDrugID[x] = IntenseStatinsID[y])
|
|
|
|
then
|
|
|
|
// Determine which strength (combinations have 2)qualifies it as an Intense statin using the Intense Statin LR list at the top of the MLM
|
|
|
|
position := IntenseStatinsPosit[y];
|
|
|
|
if position = "1"
|
|
then intensestren:= PatientMedStrength1[x];
|
|
else intensestren:= PatientMedStrength2[x];
|
|
endif;
|
|
|
|
// Determine if this strength qualifies as an Intense statin using the Intense Statin Strength list at the top of the MLM
|
|
|
|
if (intensestren as number) >= (IntenseStatinsStrn[y] as number)
|
|
then
|
|
IntStatinFound := IntStatinFound || PatientMedName[x];
|
|
endif;
|
|
|
|
endif;
|
|
|
|
enddo;
|
|
endif;
|
|
|
|
enddo;
|
|
|
|
|
|
|
|
|
|
// Search for all Contraindications
|
|
|
|
ContraIndications := read
|
|
{"
|
|
select
|
|
case when ocmi.name = {{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra Statin4{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}StatinContraindicated{{{SINGLE-QUOTE}}}
|
|
when ocmi.name = {{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra INT Statin3{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}IntensiveStatinContraindicated{{{SINGLE-QUOTE}}}
|
|
when ocmi.name = {{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra Antith 2{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}AntiplateletContraindicated{{{SINGLE-QUOTE}}}
|
|
when ocmi.name = {{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra AntiCoag 1{{{SINGLE-QUOTE}}} then {{{SINGLE-QUOTE}}}AnticoagulantContraindicated{{{SINGLE-QUOTE}}}
|
|
end
|
|
from CV3ClientDocumentCUR cd with (nolock)
|
|
join CV3ClientDocDetailCUR cdd with (nolock) on cdd.ClientDocumentGUID = cd.GUID and cdd.ClientGUID = cd.clientguid and cdd.Active = 1 and cdd.ArcType = cd.ArcType
|
|
join CV3ObservationDocumentCUR od with (nolock) on od.OwnerGUID = cdd.ClientDocumentGUID and od.ArcType = cdd.ArcType
|
|
join CV3ObservationCUR o with (nolock) on o.GUID = od.ObservationGUID and o.ArcType = od.ArcType
|
|
join CV3ObsCatalogMasterItem ocmi with (nolock) on od.ObsMasterItemGUID = ocmi.GUID
|
|
join SCMObsFSListValues fsl with (nolock) on fsl.ParentGUID = od.ObservationDocumentGUID AND fsl.ClientGUID = " || ClientGuid || "
|
|
where cd.ClientGUID = " || ClientGuid || " and cd.ChartGUID = " || ChartGuid || " and cd.ClientVisitGUID = " || ClientVisitGuid || " and cd.IsCanceled = 0 and od.Active = 1
|
|
and (cd.DocumentName like {{{SINGLE-QUOTE}}}Physician Progress%{{{SINGLE-QUOTE}}} or cd.DocumentName like {{{SINGLE-QUOTE}}}Day of Discharge Summary eNote%{{{SINGLE-QUOTE}}} or cd.DocumentName like {{{SINGLE-QUOTE}}}History and Physical%{{{SINGLE-QUOTE}}})
|
|
and ocmi.Name in ({{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra INT Statin3{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra Antith 2{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra AntiCoag 1{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}SCH_MDPN_CM_STK Contra Statin4{{{SINGLE-QUOTE}}})
|
|
"};
|
|
|
|
// and cd.DocumentName in ({{{SINGLE-QUOTE}}}Physician Progress Note{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Day of Discharge Summary eNote{{{SINGLE-QUOTE}}}, {{{SINGLE-QUOTE}}}History and Physical{{{SINGLE-QUOTE}}}) 11/02 code wasn{{{SINGLE-QUOTE}}}t retruning the contraindications as these documents are all suffixed with discipline
|
|
|
|
|
|
|
|
if "StatinContraindicated" in ContraIndications then StatinContra:= "true"; else StatinContra:= "false"; endif;
|
|
if "IntensiveStatinContraindicated" in ContraIndications then InStatContra:= "true"; else InStatContra:= "false"; endif;
|
|
if "AntiplateletContraindicated" in ContraIndications then AntiplContra:= "true"; else AntiplContra:= "false"; endif;
|
|
if "AnticoagulantContraindicated" in ContraIndications then AnticgContra:= "true"; else AnticgContra:= "false"; endif;
|
|
|
|
|
|
AlertMsg:= "false";
|
|
PbmCount:= 0;
|
|
AntiplMissing := "";
|
|
AnticgMissing := "";
|
|
StatinMissing := "";
|
|
IntStatinMissing := "";
|
|
MsgText := "";
|
|
|
|
If CodedProblem = "Afib"
|
|
|
|
then
|
|
|
|
// Afib Section
|
|
|
|
If AntiplateletFound = "" and AnticoagulantFound = "" and AntiplContra = "false" then AntiplMissing := "true"; AlertMsg:= "true"; PbmCount := PbmCount +1; else AntiplMissing := "false"; endif;
|
|
If AnticoagulantFound = "" and AnticgContra = "false" then AnticgMissing := "true"; AlertMsg:= "true"; PbmCount := PbmCount +1; else AnticgMissing := "false"; endif;
|
|
|
|
If StatinFound = "" and StatinContra = "false"
|
|
|
|
then StatinMissing := "true"; AlertMsg:= "true"; PbmCount := PbmCount +1;
|
|
|
|
else
|
|
StatinMissing := "false";
|
|
|
|
If patientage < 76 and IntStatinFound = "" and InStatContra = "false"
|
|
then IntStatinMissing := "true"; PbmCount := PbmCount +1;
|
|
endif;
|
|
|
|
endif;
|
|
|
|
MsgProblem := "afib";
|
|
|
|
|
|
else
|
|
|
|
|
|
// Stroke Section
|
|
|
|
If AntiplateletFound = "" and AnticoagulantFound = "" and AntiplContra = "false" then AntiplMissing := "true"; AlertMsg:= "true"; PbmCount := PbmCount +1; else AntiplMissing := "false"; endif;
|
|
|
|
If StatinFound = "" and StatinContra = "false"
|
|
|
|
then StatinMissing := "true"; AlertMsg:= "true"; PbmCount := PbmCount +1;
|
|
|
|
else StatinMissing := "false";
|
|
|
|
If patientage < 75 and IntStatinFound = "" and InStatContra = "false"
|
|
then IntStatinMissing := "true"; PbmCount := PbmCount +1;
|
|
endif;
|
|
|
|
|
|
endif;
|
|
|
|
MsgProblem := "stroke";
|
|
|
|
endif;
|
|
|
|
|
|
If PbmCount > 0
|
|
|
|
then
|
|
|
|
If AntiplMissing = "true" then MsgText := MsgText || "\n\n - An antiplatelet medication is recommended for stroke or TIA. This medication or an appropriately documented contraindication is missing."; endif;
|
|
If AnticgMissing = "true" then MsgText := MsgText || "\n\n - Anticoagulation therapy is recommended in the setting of active or history of Afib or Aflutter. This medication or an appropriately documented contraindication is missing."; endif;
|
|
If StatinMissing = "true" then MsgText := MsgText || "\n\n - A statin is recommended for stroke or TIA. This medication or an appropriately documented contraindication is missing."; endif;
|
|
If IntStatinMissing = "true" then MsgText := MsgText || "\n\n - An intensive statin dose is recommended for stroke or TIA patients under 75. This medication or an appropriately documented contraindication is missing."; endif;
|
|
/*
|
|
MsgText := "\nAs a Certified Primary Stroke Center, St. Clair Hospital is responsible for complying with American Stroke Association and Joint Commission guidelines for stroke and TIA patients. " ||
|
|
"Currently, your patient will be discharged without an evidence-based recommended medication or an appropriately documented contraindication. " ||
|
|
"Please address in the discharge medication reconciliation or in the Quality Core Measures section of the progress note. \n "
|
|
|
|
|| MsgText || " \n\n\n\n ";
|
|
*/
|
|
|
|
MsgText := "\nBest Practice Recommendations: \n\n "
|
|
|
|
|| MsgText || "\n\n\n\n *These are American Stroke Association and Joint Commission recommendations for Primary Stroke Centers. \n\n\n\n ";
|
|
|
|
dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with " " || MsgText, "Discharge Medication Alert","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}};
|
|
|
|
endif;
|
|
|
|
|
|
|
|
|
|
endif; // Does patient have a Comfort Measures Only Code Status Order?
|
|
/*
|
|
|
|
dialogResult := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with
|
|
"\n\n Coded Problem_Stroke :" ||CodedProblem_Stroke ||
|
|
"\n\n Coded Problem_Afib :" ||CodedProblem_Afib ||
|
|
"\n\n Coded Problem :" ||CodedProblem ||
|
|
"\n\n Patient Age :" || patientage ||
|
|
"\n\n Comfort Meas Only :" || ComfortMeasuresOnlyOrder ||
|
|
"\n\n ContraIndications :" || ContraIndications ||
|
|
"\n\n Anticoagulant Found :" || AnticoagulantFound ||
|
|
"\n\n Antiplatelet Found:" || AntiplateletFound ||
|
|
"\n\n Statin Found :" || StatinFound ||
|
|
"\n\n Intense StatinFound :" || IntStatinFound ||
|
|
" " , ".Stroke Evidence","OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}};
|
|
*/
|
|
|
|
endif; // Does patient has a coded problem for Stroke or Arterial Fibrulation?
|
|
|
|
|
|
// endif; // Pilot Doctor
|
|
|
|
;;
|
|
evoke:
|
|
order_rec_event;
|
|
// doc_open_event;
|
|
;;
|
|
|
|
logic:
|
|
conclude true;
|
|
;;
|
|
|
|
action:
|
|
|
|
|
|
if Error_occurred
|
|
then
|
|
write "An error has occured in the MLM {{+B}}SCH_ORDER_REC_SAVED_STROKE_MEDICATIONS{{-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;
|
|
|
|
;;
|
|
end:
|