Initial Checking with all 820 MLMs

This commit is contained in:
2020-02-02 00:54:01 -05:00
parent c59dc6de2e
commit 840d0432f4
828 changed files with 239162 additions and 0 deletions

View File

@@ -0,0 +1,360 @@
maintenance:
title: Allergy Checking Using the Item-Catalog;;
mlmname: STD_FUNC_ALLERGY_CAT;;
arden: version 2.5;;
version: 18.4;;
institution: Allscripts, Standard MLM;;
author: Allscripts Healthcare Solutions, Inc.;;
specialist: ;;
date: 2018-10-26;;
validation: testing;;
/* P r o p r i e t a r y N o t i c e */
/* Unpublished (c) 2013 - 2018 Allscripts Healthcare, LLC. and/or its affiliates. All Rights Reserved.
P r o p r i e t a r y N o t i c e: This software has been provided pursuant to a License Agreement, with
Allscripts Healthcare, LLC. and/or its affiliates, containing restrictions on its use. This software contains
valuable trade secrets and proprietary information of Allscripts Healthcare, LLC. and/or its affiliates and is
protected by trade secret and copyright law. This software may not be copied or distributed in any form or medium,
disclosed to any third parties, or used in any manner not provided for in said License Agreement except with prior
written authorization from Allscripts Healthcare, LLC. and/or its affiliates. Notice to U.S. Government Users:
This software is {{{SINGLE-QUOTE}}}Commercial Computer Software{{{SINGLE-QUOTE}}}.
All product names are the trademarks or registered trademarks of Allscripts Healthcare, LLC. and/or its affiliates.
*/
/* P r o p r i e t a r y N o t i c e */
library:
purpose: Checks for Drug Allergies via Item-Catalog.
;;
explanation: See STD_ALLERGY MLM for an explanation.
;;
keywords: allergy; IV additives; Item-Catalog;;
knowledge:
type: data-driven;;
data:
(
order_name,
order_is_additive,
patient_allergy_names,
OrderCatalogMasterItemGUID,
Generic_name_id,
patient_allergy_category_types,
patient_allergy_adverse_event_date_year,
patient_allergy_adverse_event_date_month,
patient_allergy_adverse_event_date_day,
input_parameter_xml,
allergen_guid,
client_guid,
allergy_category_type,
rx_other_allergen_check,
is_reverse_check,
reverse_check_order,
reverse_check_rx,
reverse_check_med_orders,
reverse_check_outpatient_orders_flag):= ARGUMENT;
/*******************Make Changes To Spelling And Flags In This Section*******************/
/* Set to true if logging is needed.*/
log_execution_info := false;
/***************************************************************************************/
//Declare the Med_Data_Object
Med_Data_Object := OBJECT [
rx_hx_typecode,
sort_field,
OrderName,
OrderOrAdditiveName,
PrescriptionName,
ComponentName,
ComboDrugName,
OrderGUID,
AdditiveGUID,
PrescriptionID,
StartDate,
StatusType,
TypeCode,
IsUnmapped,
allergen_msg,
msg_type,
IsComboDrug
];
// list that holds all of the objects that will be returned
mdo_list := ();
if is_reverse_check
then
( rx_hx_typecode_list,
allergen_msg_list,
order_guid_list,
additive_guid_list,
prescription_id_list,
order_name_list,
order_or_additive_name_list,
prescription_name_list,
start_date_list,
status_type_list,
type_code_list,
IsDnumLevel_list,
FormularyBrandKey_list
) := read { "EXEC SXACatalogAllergyAlertSelPr "
|| SQL(input_parameter_xml)|| ", "
|| SQL(allergen_guid) || ", "
|| SQL(client_guid) || ", "
|| SQL(allergy_category_type) || ", "
|| SQL(rx_other_allergen_check) || ", "
|| SQL(reverse_check_order) || ", "
|| SQL(reverse_check_rx) || ", "
|| SQL(reverse_check_med_orders) || ", "
|| SQL(reverse_check_outpatient_orders_flag) };
if exist allergen_msg_list
then
num_msgs := count (allergen_msg_list);
//num_msgs := num_msgs + 1;
for JJ in (1 seqto num_msgs ) do
instance := new Med_Data_Object;
instance.rx_hx_typecode := rx_hx_typecode_list[JJ];
instance.OrderName := order_name_list[JJ];
instance.OrderOrAdditiveName := order_or_additive_name_list[JJ];
instance.PrescriptionName := prescription_name_list[JJ];
instance.ComponentName := "";
instance.ComboDrugName := "";
instance.OrderGUID := order_guid_list[JJ];
instance.AdditiveGUID := additive_guid_list[JJ];
instance.PrescriptionID := prescription_id_list[JJ];
instance.StartDate := start_date_list[JJ];
instance.StatusType := status_type_list[JJ];
instance.TypeCode := type_code_list[JJ];
instance.msg_type := "Catalog";
instance.IsComboDrug := false;
instance.IsUnmapped := false;
if (instance.PrescriptionID is not null and instance.PrescriptionID <> -1)
then
instance.sort_field :=
instance.PrescriptionName || "|" || instance.PrescriptionID
|| "|{2}";
//[MU2][SNOMEDCT]
current_FormularyBrandKey := FormularyBrandKey_list[JJ];
IsDnumLevel := IsDnumLevel_list[JJ];
if IsDnumLevel = false
then
IsDnumLevel:=0;
else
IsDnumLevel:=1;
endif;
tempallergen_msg := allergen_msg_list[JJ];
(one_allergen_msg) := read last { "EXEC SXACatalogAllergenMessageTextSelPr "
|| SQL(IsDnumLevel)|| ", "
|| SQL(instance.PrescriptionName) || ", "
|| SQL(current_FormularyBrandKey) || ", "
|| SQL(allergen_guid) || ", "
|| SQL(1) || ", "
|| SQL(NULL) };
if one_allergen_msg <> ""
then
instance.allergen_msg := allergen_msg_list[JJ] || one_allergen_msg;
mdo_list := mdo_list, instance;
endif;
elseif (instance.AdditiveGUID is not null)
then
instance.sort_field :=
instance.OrderOrAdditiveName || "|" || instance.AdditiveGUID
|| "|{2}";
instance.allergen_msg := allergen_msg_list[JJ];
mdo_list := mdo_list, instance;
else
instance.sort_field :=
instance.OrderName || "|" || instance.OrderGUID
|| "|{2}";
instance.allergen_msg := allergen_msg_list[JJ];
mdo_list := mdo_list, instance;
endif;
enddo;
endif;
/* Only retrieves data if the patient has allergies */
elseIf exist patient_allergy_names
then
if OrderCatalogMasterItemGUID is not null
then
/* Gets the allergen codes and other relevant data associated with the order{{{SINGLE-QUOTE}}}s
catalog item allergens */
(allergen_codes,
allergen_msg_texts) := read
{ "SELECT Code, MessageText,CV3OrderCatalogMasterItem.Name "
|| " FROM CV3Allergen JOIN CV3CatalogItemAllergen"
|| " ON CV3Allergen.GUID = CV3CatalogItemAllergen.AllergenGUID"
|| " INNER JOIN CV3OrderCatalogMasterItem ON"
|| " CV3CatalogItemAllergen.ItemGUID = CV3OrderCatalogMasterItem.GUID"
|| " WHERE CV3CatalogItemAllergen.ItemGUID = "
|| SQL(OrderCatalogMasterItemGUID)};
if (order_is_additive)
then
order_or_prescription_string := " additive.";
else
order_or_prescription_string := " order.";
endif;
else
/* Gets the allergen codes and other relevant data associated with the
prescription{{{SINGLE-QUOTE}}}s catalog item allergens */
num_allergies := count (patient_allergy_names);
for J in (1 seqto num_allergies ) do
if J=1
then
one_patient_allergy_name:= patient_allergy_names[J];
else
one_patient_allergy_name:= one_patient_allergy_name || "," || patient_allergy_names[J];
endif;
enddo;
(allergen_codes,
allergen_msg_texts) := read { "EXEC SXACatalogAllergenMessageTextSelPr "
|| SQL(NULL)|| ", "
|| SQL(order_name) || ", "
|| SQL(EVOKINGOBJECT.FormularyBrandKey) || ", "
|| SQL(allergen_guid) || ", "
|| SQL(0) || ", "
|| SQL(one_patient_allergy_name) };
order_or_prescription_string := " prescription.";
endif;
endif; /* If exist patient_allergy_names */
;;
evoke: ;;
logic:
if (is_reverse_check)
then
conclude true;
endif;
/* Stops processing when the patient does not have any allergies */
if not (exist order_name or exist patient_allergy_names)
then
xxx_debug_check:= "patient does not have allergies";
conclude false;
endif;
/* Initializes variables */
alert_msg_list:= ();
alert_allergen_list:= ();
alert_category_type_list := ();
alert_adverse_event_year_list := ();
alert_adverse_event_month_list := ();
alert_adverse_event_day_list := ();
allergies_found := patient_allergy_names is in allergen_codes ;
if any allergies_found
then
num_allergies := count (patient_allergy_names);
for J in (1 seqto num_allergies ) do
one_patient_allergy_name:= patient_allergy_names[J];
if (one_patient_allergy_name is in allergen_codes)
then
category_type := patient_allergy_category_types[J];
adverse_event_date_year := patient_allergy_adverse_event_date_year[J];
adverse_event_date_month := patient_allergy_adverse_event_date_month[J];
adverse_event_date_day := patient_allergy_adverse_event_date_day[J];
allergen_code := one_patient_allergy_name;
if (category_type = "Adverse Event" and
category_type = prev_category_type and
allergen_code = prev_allergen_code)
then
alert_allergen_list := alert_allergen_list, null;
alert_msg_list:= alert_msg_list, null;
alert_category_type_list := alert_category_type_list, null;
alert_adverse_event_year_list := alert_adverse_event_year_list, null;
alert_adverse_event_month_list := alert_adverse_event_month_list, null;
alert_adverse_event_day_list := alert_adverse_event_day_list, null;
else
/* Creates the list of matching allergens
to return to the calling MLM */
alert_allergen_list:= alert_allergen_list, allergen_code;
/* Creates a portion of the alert message */
if (category_type = "Allergy" or category_type is null)
then
temp_alert_msg:=
"The patient is allergic to " || allergen_code
|| ". A reaction may occur with the "
|| order_name || order_or_prescription_string;
elseif (category_type = "Adverse Event")
then
temp_alert_msg:=
"The patient had an adverse event with " || allergen_code
|| ". A reaction may occur with the "
|| order_name || order_or_prescription_string ;
elseif (category_type = "Intolerance")
then
temp_alert_msg:=
"The patient has an intolerance to " || allergen_code
|| ". A reaction may occur with the "
|| order_name || order_or_prescription_string ;
endif;
/* Extracts the freetext message in the item-catalog that is */
/* assocated with the allergen code */
allergy_freetext_msg:= first(allergen_msg_texts
where allergen_code = allergen_codes);
/* Adds the item-catalog{{{SINGLE-QUOTE}}}s freetext message to the alert */
if exist allergy_freetext_msg
then
temp_alert_msg:= temp_alert_msg || " " || allergy_freetext_msg;
endif;
/* Creates the alert message that is returned to the calling MLM */
alert_msg_list:= alert_msg_list, temp_alert_msg;
alert_category_type_list := alert_category_type_list, category_type;
alert_adverse_event_year_list := alert_adverse_event_year_list,
adverse_event_date_year;
alert_adverse_event_month_list := alert_adverse_event_month_list,
adverse_event_date_month;
alert_adverse_event_day_list := alert_adverse_event_day_list,
adverse_event_date_day;
endif;
prev_category_type := category_type;
prev_allergen_code := allergen_code;
endif;
enddo;
endif; /* if any allergies_found */
/* Always conclude true to return information to the calling MLM */
conclude true;
;;
action:
if is_reverse_check
then
return mdo_list;
else
return (alert_allergen_list,
alert_msg_list,
alert_category_type_list,
alert_adverse_event_year_list,
alert_adverse_event_month_list,
alert_adverse_event_day_list);
endif;
;;
end: