Initial Checking with all 820 MLMs
This commit is contained in:
328
MLMStripper/bin/Debug/STD/STD_FUNC_TASK_RETRIEVAL.mlm
Normal file
328
MLMStripper/bin/Debug/STD/STD_FUNC_TASK_RETRIEVAL.mlm
Normal file
@@ -0,0 +1,328 @@
|
||||
maintenance:
|
||||
|
||||
title: Task Retrievals for Duplicate Task Checking;;
|
||||
mlmname: STD_FUNC_TASK_RETRIEVAL;;
|
||||
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: Retrieves OrderTaskOccurrences according to the rules stated in
|
||||
std_duplicate_task.mlm. Returns information to the calling MLM.
|
||||
;;
|
||||
explanation: See the explanation in std_duplicate.mlm
|
||||
;;
|
||||
keywords: Duplicate Task;
|
||||
;;
|
||||
knowledge:
|
||||
type: data-driven;;
|
||||
data:
|
||||
|
||||
/* Arguments that are passed by the calling MLM */
|
||||
(client_guid,
|
||||
chart_guid,
|
||||
client_visit_guid,
|
||||
task_occurrence_guid,
|
||||
task_name,
|
||||
task_scope,
|
||||
is_primary_task,
|
||||
originating_order_guid,
|
||||
past_time,
|
||||
future_time,
|
||||
tasks_to_be_canceled_string,
|
||||
schedule_type_code,
|
||||
order_task_guid ):= ARGUMENT;
|
||||
|
||||
/* Set to true if logging is needed.*/
|
||||
log_execution_info := false;
|
||||
|
||||
If exist client_guid
|
||||
then
|
||||
/*------------------------------------------------------------------*/
|
||||
/* Set Variables to Retrieve OrderTaskOccurrences from the Database */
|
||||
/*------------------------------------------------------------------*/
|
||||
|
||||
/* Set the OrderTaskOccurrence{{{SINGLE-QUOTE}}}s scope by using the patient{{{SINGLE-QUOTE}}}s GUIDs */
|
||||
If task_scope = "This Chart"
|
||||
then
|
||||
ID_equals_patient_GUID := "o.ClientGUID = " || SQL(client_guid)
|
||||
|| " AND t.ChartGUID = " || SQL(chart_guid);
|
||||
elseif task_scope = "This Visit"
|
||||
then
|
||||
ID_equals_patient_GUID := "o.ClientGUID = " || SQL(client_guid)
|
||||
|| " AND t.ChartGUID = " || SQL(chart_guid)
|
||||
|| " AND ord.ClientVisitGUID = " || SQL(client_visit_guid);
|
||||
else
|
||||
ID_equals_patient_GUID := "o.ClientGUID = " || SQL(client_guid);
|
||||
endif; /* task_scope */
|
||||
|
||||
|
||||
/* Set the OrderTaskOccurrences that are in memory to be canceled */
|
||||
If exist tasks_to_be_canceled_string
|
||||
then
|
||||
ignore_these_task_occurrences := SQL(task_occurrence_guid) || ","
|
||||
|| tasks_to_be_canceled_string;
|
||||
else
|
||||
ignore_these_task_occurrences := SQL(task_occurrence_guid);
|
||||
endif; /* tasks_to_be_canceled_string */
|
||||
|
||||
|
||||
/* When there is a CONTINUOUS order task (CV3OrderTask.ScheduleTypeCode) */
|
||||
/* Exclude the OrderTaskOccurrences that have the same OrderTaskGUID */
|
||||
If schedule_type_code = "Continuous"
|
||||
then
|
||||
AND_exclude_order_task_guid := " AND o.OrderTaskGUID <> "
|
||||
|| SQL(order_task_guid);
|
||||
else
|
||||
AND_exclude_order_task_guid := "";
|
||||
endif; /* If schedule_type_code */
|
||||
|
||||
// Select same kind of task (primary or follow-up)
|
||||
if is_primary_task
|
||||
then
|
||||
AND_match_task_sequence_number := " AND t.TaskSeqNum = 0";
|
||||
AND_exclude_follow_up_task_from_same_order := "";
|
||||
else
|
||||
AND_match_task_sequence_number := " AND t.TaskSeqNum <> 0";
|
||||
AND_exclude_follow_up_task_from_same_order := " AND t.OrderGUID <> "
|
||||
|| SQL(originating_order_guid);
|
||||
endif;
|
||||
|
||||
/*---------------------------------------*/
|
||||
/* Get the DATABASE OrderTaskOccurrences */
|
||||
/*---------------------------------------*/
|
||||
(db_order_name_list,
|
||||
db_order_type_code_list,
|
||||
db_significant_date_list,
|
||||
db_scheduled_dtm_list,
|
||||
db_earliest_scheduled_dtm_list,
|
||||
db_latest_scheduled_dtm_list,
|
||||
db_performed_from_dtm_list,
|
||||
db_performed_to_dtm_list,
|
||||
db_cds_occurrence_type_list,
|
||||
db_order_guid_list,
|
||||
db_order_task_guid_list,
|
||||
db_task_name_list,
|
||||
db_task_status_code_list,
|
||||
db_process_type_list,
|
||||
db_schedule_type_code_list,
|
||||
db_master_GUID_list,
|
||||
db_level_number_list ) := read
|
||||
{ "SELECT ord.Name, ord.TypeCode, "
|
||||
||" tzSignificant.TimeValue as SignificantDtmOffset,"
|
||||
||" tzScheduled.TimeValue as ScheduledDtmOffset,"
|
||||
||" tzEarliest.TimeValue as EarliestScheduledDtmOffset,"
|
||||
||" tzLatest.TimeValue as LatestScheduledDtmOffset,"
|
||||
||" tzPerformedFrom.TimeValue as PerformedFromDtmOffset,"
|
||||
||" tzPerformedTo.TimeValue as PerformedToDtmOffset,"
|
||||
||" o.CDSOccurrenceType,"
|
||||
||" o.OrderGUID, o.OrderTaskGUID, o.TaskName, o.TaskStatusCode,"
|
||||
||" t.ProcessType, t.ScheduleTypeCode, t.OrderCatalogMasterItemGUID,"
|
||||
||" ts.LevelNumber "
|
||||
||" FROM CV3OrderTask as t "
|
||||
||" JOIN CV3Order as ord"
|
||||
||" ON t.OrderGUID = ord.GUID AND t.ChartGUID = ord.ChartGUID AND t.ClientGUID = ord.ClientGUID "
|
||||
||" JOIN CV3OrderTaskOccurrence as o "
|
||||
||" ON o.OrderTaskGUID = t.GUID AND o.OrderGUID = t.OrderGUID AND o.ClientGUID = t.ClientGUID "
|
||||
||" JOIN CV3TaskStatus as ts "
|
||||
||" ON o.TaskStatusCode = ts.Code "
|
||||
||" JOIN CV3ClientVisit as cv "
|
||||
||" ON ord.ClientVisitGUID = cv.GUID AND ord.ClientGUID = cv.ClientGUID "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.ScheduledDtm) tzScheduled "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.SignificantDtm) tzSignificant "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.EarliestScheduledDtm) tzEarliest "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.LatestScheduledDtm) tzLatest "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.PerformedFromDtm) tzPerformedFrom "
|
||||
||" CROSS APPLY dbo.SXADBConvertLocalToOffsetTblFn(cv.TimeZone, o.PerformedToDtm) tzPerformedTo "
|
||||
||" WHERE t.ClientGUID = " || SQL (client_guid)
|
||||
||" AND " || ID_equals_patient_GUID
|
||||
||" AND o.CDSOccurrenceType >= 0 "
|
||||
||" AND ts.LevelNumber In (50,60) "
|
||||
||" AND o.TaskStatusCode <> {{{SINGLE-QUOTE}}}Not Performed{{{SINGLE-QUOTE}}} "
|
||||
||" AND o.IsSuspended = 0 "
|
||||
||" AND o.GUID NOT IN (" || ignore_these_task_occurrences || ")"
|
||||
|| AND_exclude_order_task_guid
|
||||
|| AND_match_task_sequence_number
|
||||
|| AND_exclude_follow_up_task_from_same_order
|
||||
||" AND t.ScheduleTypeCode In "
|
||||
||" ({{{SINGLE-QUOTE}}}Continuous{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}ToSchedule{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Scheduled{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}Unscheduled{{{SINGLE-QUOTE}}},{{{SINGLE-QUOTE}}}PRN{{{SINGLE-QUOTE}}})"
|
||||
||" AND ((ts.LevelNumber = 60 "
|
||||
||" AND (o.SignificantDtm between " || SQL(past_time)
|
||||
|| " and " || SQL(future_time)|| "))"
|
||||
||" OR "
|
||||
||" (ts.LevelNumber = 50 "
|
||||
||" AND ( (o.ScheduledDtm between " || SQL(past_time)
|
||||
|| " and " || SQL(future_time)|| ")"
|
||||
||" OR (o.EarliestScheduledDtm between " || SQL(past_time)
|
||||
|| " and " || SQL(future_time)|| ")"
|
||||
||" OR (o.LatestScheduledDtm between " || SQL(past_time)
|
||||
|| " and " || SQL(future_time)|| ")"
|
||||
||" OR ((o.EarliestScheduledDtm <= " || SQL(future_time)
|
||||
||") and (o.LatestScheduledDtm is null))"
|
||||
||" OR ((o.EarliestScheduledDtm <= " || SQL(past_time)
|
||||
|| ") and (o.LatestScheduledDtm >= "
|
||||
|| SQL(future_time)|| "))"
|
||||
||" )))"
|
||||
,PrimaryTime = SignificantDtmOffset };
|
||||
|
||||
endif; /* If exist client_guid */
|
||||
|
||||
/*-----------------------------------------------------*/
|
||||
/* Get the Unsubmitted OrderTaskOccurrences from CACHE */
|
||||
/*-----------------------------------------------------*/
|
||||
|
||||
/* Initialize Variables */
|
||||
unsub_master_GUID_list := ();
|
||||
unsub_order_name_list := ();
|
||||
unsub_order_type_code_list := ();
|
||||
unsub_process_type_list := ();
|
||||
unsub_schedule_type_code_list := ();
|
||||
unsub_significant_date_list := ();
|
||||
unsub_latest_scheduled_dtm_list := ();
|
||||
unsub_performed_to_dtm_list := ();
|
||||
unsub_task_name_list := ();
|
||||
unsub_task_status_code_list := ();
|
||||
unsub_task_guid_list := ();
|
||||
|
||||
/* Only get the cached data if the schedule_type_code <> "Continuous" */
|
||||
If is_primary_task AND ( schedule_type_code <> "Continuous" )
|
||||
then
|
||||
|
||||
(unsub_latest_scheduled_dtm_list,
|
||||
unsub_performed_to_dtm_list,
|
||||
unsub_task_name_list,
|
||||
unsub_task_status_code_list,
|
||||
unsub_task_guid_list,
|
||||
unsub_significant_date_list ) := read
|
||||
{Unsubmitted OrderTaskOccurrence: LatestScheduledDtm,
|
||||
PerformedToDtm, TaskName, TaskStatusCode,
|
||||
guid, significantdtm
|
||||
WHERE CDSOccurrenceType >= 0
|
||||
AND TaskStatusCode IS IN ("Pending", "OverDue", "Rescheduled", "Performed" )
|
||||
AND GUID <> task_occurrence_guid
|
||||
AND IsSuspended = FALSE
|
||||
AND (
|
||||
SignificantDtm IS WITHIN past_time to future_time
|
||||
OR ScheduledDtm IS WITHIN past_time to future_time
|
||||
OR EarliestScheduledDtm IS WITHIN past_time to future_time
|
||||
OR LatestScheduledDtm IS WITHIN past_time to future_time
|
||||
OR (EarliestScheduledDtm <= future_time and LatestScheduledDtm is null)
|
||||
OR (EarliestScheduledDtm <= past_time and LatestScheduledDtm >= future_time)
|
||||
)};
|
||||
|
||||
/* OrderTaskOccurrence Object */
|
||||
(order_obj,
|
||||
order_task_obj):= read last
|
||||
{OrderTaskOccurrence: Order, OrderTask
|
||||
REFERENCING EvokingObject };
|
||||
|
||||
/* OrderTask object */
|
||||
(unsub_master_GUID,
|
||||
unsub_process_type,
|
||||
unsub_schedule_type_code) := read last
|
||||
{OrderTask: OrderCatalogMasterItemGUID, ProcessType, ScheduleTypeCode
|
||||
REFERENCING order_task_obj };
|
||||
|
||||
/* Order object */
|
||||
(unsub_order_name,
|
||||
unsub_order_type_code,
|
||||
unsub_significant_date ) := read last
|
||||
{Order: Name, TypeCode, SignificantDtm
|
||||
REFERENCING order_obj };
|
||||
|
||||
/* Create equal sized lists */
|
||||
index_list := 1 seqto count(unsub_task_name_list);
|
||||
|
||||
for J in index_list do
|
||||
unsub_master_GUID_list := unsub_master_GUID_list,
|
||||
unsub_master_GUID;
|
||||
unsub_order_name_list := unsub_order_name_list,
|
||||
unsub_order_name;
|
||||
unsub_order_type_code_list := unsub_order_type_code_list,
|
||||
unsub_order_type_code;
|
||||
unsub_process_type_list := unsub_process_type_list,
|
||||
unsub_process_type;
|
||||
unsub_schedule_type_code_list := unsub_schedule_type_code_list,
|
||||
unsub_schedule_type_code;
|
||||
enddo;
|
||||
|
||||
endif; /* If schedule_type_code <> "Continuous" */
|
||||
|
||||
/*---------------------------------------------*/
|
||||
/* Append Unsubmitted and Database Information */
|
||||
/*---------------------------------------------*/
|
||||
if is_primary_task
|
||||
AND (exist DB_TASK_NAME_LIST or exist UNSUB_TASK_NAME_LIST)
|
||||
then
|
||||
latest_scheduled_dtm_list := unsub_latest_scheduled_dtm_list,
|
||||
db_latest_scheduled_dtm_list;
|
||||
master_GUID_list := unsub_master_GUID_list,
|
||||
db_master_GUID_list;
|
||||
order_name_list := unsub_order_name_list,
|
||||
db_order_name_list;
|
||||
order_type_code_list := unsub_order_type_code_list,
|
||||
db_order_type_code_list;
|
||||
performed_to_dtm_list := unsub_performed_to_dtm_list,
|
||||
db_performed_to_dtm_list;
|
||||
process_type_list := unsub_process_type_list,
|
||||
db_process_type_list;
|
||||
schedule_type_code_list := unsub_schedule_type_code_list,
|
||||
db_schedule_type_code_list;
|
||||
significant_date_list := unsub_significant_date_list,
|
||||
db_significant_date_list;
|
||||
task_name_list := unsub_task_name_list,
|
||||
db_task_name_list;
|
||||
task_status_code_list := unsub_task_status_code_list,
|
||||
db_task_status_code_list;
|
||||
else
|
||||
latest_scheduled_dtm_list := db_latest_scheduled_dtm_list;
|
||||
master_GUID_list := db_master_GUID_list;
|
||||
order_name_list := db_order_name_list;
|
||||
order_type_code_list := db_order_type_code_list;
|
||||
performed_to_dtm_list := db_performed_to_dtm_list;
|
||||
process_type_list := db_process_type_list;
|
||||
schedule_type_code_list := db_schedule_type_code_list;
|
||||
significant_date_list := db_significant_date_list;
|
||||
task_name_list := db_task_name_list;
|
||||
task_status_code_list := db_task_status_code_list;
|
||||
endif; /* exist task_name_list */
|
||||
;;
|
||||
evoke:
|
||||
;;
|
||||
logic:
|
||||
|
||||
/* Always conclude true to return information to the calling MLM */
|
||||
conclude true;
|
||||
;;
|
||||
action:
|
||||
Return ( latest_scheduled_dtm_list,
|
||||
master_GUID_list,
|
||||
order_name_list,
|
||||
order_type_code_list,
|
||||
performed_to_dtm_list,
|
||||
process_type_list,
|
||||
schedule_type_code_list,
|
||||
significant_date_list,
|
||||
task_name_list,
|
||||
task_status_code_list );
|
||||
;;
|
||||
end:
|
||||
Reference in New Issue
Block a user