Files
St.Clair/MLMStripper/bin/Debug/SCH/SCH_READMISSION_PHARMACY_ORDER.mlm

262 lines
11 KiB
Plaintext

maintenance:
title: SCH_Readmission_Pharmacy_Order;;
mlmname: SCH_Readmission_Pharmacy_Order;;
arden: version 2.5;;
version: 5.50;; // FP1
institution: SCH ;;
author: Chintan Tilwa;;
specialist: ;;
date: 2012-09-19;;
validation: testing;;
library:
purpose: Create Pharmacy Risk orders and health issues based upon Admission Profile Selections
;;
explanation: This orders created by this MLM will by-pass the order entry worksheet
and will write directly to the database once the evoking object is saved.
Change history
10.15.2012 CT CSR# 30880 - Created by GOS for Readmission Initiative Project
04.30.2013 DW CSR# 31334 - Adjusted to support the re-configuration of Pregnancy & Lactation questions
10.12.2015 GOS CSR#23359 - Made change in MLM for ICD9-ICD10 Coding Scheme [ICD10] And Duplicate Check of HI .DE
11.21.2018 DW HD#2388518 - Dialysis Patient has duplicate Health Issues (joining on clientguid)
;;
keywords: ObjectsPlus, Orders
;;
knowledge:
type: data-driven;;
data:
// Specify which .NET assemblies need to be loaded for ObjectsPlus
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
error_occurred := false;
error_message := "";
log_execution_info := false;
HI_mod_mlm := MLM {{{SINGLE-QUOTE}}}SCH_Create_General_Order{{{SINGLE-QUOTE}}};
// str_parse := mlm {{{SINGLE-QUOTE}}}UTIL_STRING_PARSE{{{SINGLE-QUOTE}}};
// Evoking Events
Document_Enter := event {ClientDocumentEnter User ClientDocument: where documentname in ("Readmission Risk Assessment","Adult Patient Profile","Adult Patient Profile - Observation")};
Document_Modify := event {ClientDocumentModify User ClientDocument: where documentname in ("Readmission Risk Assessment","Adult Patient Profile","Adult Patient Profile - Observation")};
// Gather the components of the Order Object
user_IDType := "Primary";
careProvider_obj := read last{UserInfo: careProvider };
CareProviderIDs_obj:= read last{CareProvider: CareProviderID REFERENCING careProvider_obj };
user_IDCode := read last{CareProviderID: IDCode REFERENCING CareProviderIDs_obj where ProviderIDTypeCode = user_IDType };
(location_guid, Active_ClientVisitGUID, client_guid, chartguid)
:= read last {ClientVisit: CurrentLocationGUID, GUID, clientguid, chartguid };
Active_ClientVisitGUID := EvokingObject.ClientVisitGUID;
Care_Provider := EVOKINGOBJECT.AuthoredProviderGUID;
try
client_visit_obj := call {{{SINGLE-QUOTE}}}ClientVisit{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((Active_ClientVisitGUID as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}}) ;
WSRequestedBy_obj := call {{{SINGLE-QUOTE}}}CareProvider{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((Care_Provider as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
WSlocation_obj := call {{{SINGLE-QUOTE}}}Location{{{SINGLE-QUOTE}}}.FindByPrimaryKey with ((location_guid as number) as {{{SINGLE-QUOTE}}}Int64{{{SINGLE-QUOTE}}});
WSSessionType := "Standard";
WSSessionReason := "";
WSRequestedBySource:= "";
order_Creation_Reason := "From Test MLM" ;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}Common Data:{{-R}}\n" || ex.Message || "\n\n";
if ( client_visit_obj is NOT NULL ) then void:= call client_visit_obj.Dispose; client_visit_obj:= null; endif;
if ( WSRequestedBy_obj is NOT NULL ) then void:= call WSRequestedBy_obj.Dispose; WSRequestedBy_obj:= null; endif;
if ( WSlocation_obj is NOT NULL ) then void:= call WSlocation_obj.Dispose; WSlocation_obj:= null; endif;
endcatch;
// Determine which of the questions have a response of "yes"
(Client_Observation_Document_Obj, GUID)
:= read last {ClientDocument: ClientObservationDocument, GUID
REFERENCING EvokingObject};
(PregnancyResponse):= read Last {ClientObservationDocument: ObsFSListValues
REFERENCING Client_Observation_Document_Obj where Name = "SCH_PRO fem repro pg yn"};
(LactationResponse):= read Last {ClientObservationDocument: ObsFSListValues
REFERENCING Client_Observation_Document_Obj where Name = "SCH_PRO fem repro breastfeed yn"};
(DialysisResponse) := read Last {ClientObservationDocument: ObsFSListValues
REFERENCING Client_Observation_Document_Obj where Name = "SCH_CK_Dialysis y/n"};
if PregnancyResponse.value = "yes" then pregval := "Pregnant"; else pregval := ""; endif;
if LactationResponse.value = "yes" then feedval := "Lactating"; else feedval := ""; endif;
if DialysisResponse.value = "yes" then dialval := "On Dialysis";else dialval := ""; endif;
val1:= (pregval,feedval,dialval);
// Loop through each of the selections.
for i in 1 seqto count of val1 do
Selection_Name := val1[i] ;
if Selection_Name <> ""
then
// Search for a health issue related to this selection and create one if it doesn{{{SINGLE-QUOTE}}}t exist
if Selection_Name = "Pregnant" then
(PregnantHI) := read
{ "select distinct hi.shortname "
|| "from cv3healthissuedeclaration hi with (nolock) "
|| "join CV3CodedHealthIssue chi with (nolock) on chi.GUID = hi.CodedHealthIssueGUID "
|| "where hi.clientvisitguid = " || Active_ClientVisitGUID || " "
|| "and hi.active = 1 and hi.status = {{{SINGLE-QUOTE}}}Active{{{SINGLE-QUOTE}}} And hi.ICD10Code is not null " //Added By Shivprasad for CSR 23359-ICD9-10 On 16 Sept 2015
|| "and hi.typecode = {{{SINGLE-QUOTE}}}problem-visit{{{SINGLE-QUOTE}}} and hi.shortname = {{{SINGLE-QUOTE}}}Pregnancy{{{SINGLE-QUOTE}}}"};
If not exists PregnantHI then
hitype := "Problem-Visit";
hiname := "Pregnancy";
hinumber:= "Z33.1"; //"V22.2"; //CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hischeme:= "ICD10"; //"ICD9"; //CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hitext := "Created from Patient Profile information. " ;
Func_Create_HI_MLM := mlm {{{SINGLE-QUOTE}}}SCH_Func_Create_Health_Issue{{{SINGLE-QUOTE}}};
void := call Func_Create_HI_MLM with (Active_ClientVisitGUID,hiname,hinumber,hitext,hitype,hischeme);
endif;
endif;
if Selection_Name = "Lactating" then
(LactatingHI) := read
{ "select distinct hi.shortname "
|| "from cv3healthissuedeclaration hi with (nolock) "
|| "join CV3CodedHealthIssue chi with (nolock) on chi.GUID = hi.CodedHealthIssueGUID "
|| "where hi.clientvisitguid = " || Active_ClientVisitGUID || " "
|| "and hi.active = 1 and hi.status = {{{SINGLE-QUOTE}}}Active{{{SINGLE-QUOTE}}} And hi.ICD10Code is not null " //Added By Shivprasad for CSR 23359-ICD9-10 On 16 Sept 2015
|| "and hi.typecode = {{{SINGLE-QUOTE}}}problem-visit{{{SINGLE-QUOTE}}} and hi.shortname = {{{SINGLE-QUOTE}}}Lactating Mother{{{SINGLE-QUOTE}}}"};
if not exists LactatingHI then
hitype := "Problem-Visit";
hiname := "Lactating Mother";
hinumber:= "Z39.1"; //"V24.1";//CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hischeme:= "ICD10"; //"ICD9"; //CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hitext := "Created from Patient Profile information. " ;
Func_Create_HI_MLM := mlm {{{SINGLE-QUOTE}}}SCH_Func_Create_Health_Issue{{{SINGLE-QUOTE}}};
void := call Func_Create_HI_MLM with (Active_ClientVisitGUID,hiname,hinumber,hitext,hitype,hischeme);
endif;
endif;
if Selection_Name = "On Dialysis" then
(DialysisHI) := read
{ "select distinct hi.shortname "
|| "from cv3healthissuedeclaration hi with (nolock) "
|| "join CV3CodedHealthIssue chi with (nolock) on chi.GUID = hi.CodedHealthIssueGUID "
|| "where hi.clientguid = " || client_guid || " "
|| "and hi.active = 1 and hi.status = {{{SINGLE-QUOTE}}}Active{{{SINGLE-QUOTE}}} And hi.ICD10Code is not null " //Added By Shivprasad for CSR 23359-ICD9-10 On 16 Sept 2015
|| "and hi.typecode = {{{SINGLE-QUOTE}}}problem-chronic{{{SINGLE-QUOTE}}} and hi.shortname = {{{SINGLE-QUOTE}}}Dialysis Patient{{{SINGLE-QUOTE}}}"};
// 11/21/2018 HD# 2388518 replaced this line with one that joins on client guid || "where hi.clientvisitguid = " || Active_ClientVisitGUID || " "
// ClientVisitGUID, client_guid, chartguid
if not exists DialysisHI then
hitype := "Problem-Chronic";
hiname := "Dialysis Patient";
hinumber:= "Z99.2" ;//"V45.11"; //CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hischeme:= "ICD10"; //"ICD9"; //CSR#23359-ICD9-ICD10 HI Change for Code Scheme ICD10- Added By shivprasad
hitext := "Created from Patient Profile information. " ;
Func_Create_HI_MLM := mlm {{{SINGLE-QUOTE}}}SCH_Func_Create_Health_Issue{{{SINGLE-QUOTE}}};
void := call Func_Create_HI_MLM with (Active_ClientVisitGUID,hiname,hinumber,hitext,hitype,hischeme);
endif;
endif;
// Search for an order related to this selection and create one if it doesn{{{SINGLE-QUOTE}}}t exist
(dup_order_list) := read last
{ " select name "
||" from cv3order "
||" where ClientGUID = " || sql(client_guid)
||" and ClientVisitGUID = " || sql(Active_ClientVisitGUID)
||" and name = {{{SINGLE-QUOTE}}}" || Selection_Name || "{{{SINGLE-QUOTE}}}"
||" and orderstatuslevelnum < 55 "
||" and OrderStatusCode = {{{SINGLE-QUOTE}}}AUA1{{{SINGLE-QUOTE}}} "
||" and active = 1 " };
if not exists dup_order_list
then
try
Catalog_Item_Name := val1[i] ;
order_type := "other";
order_catalog_item := call {{{SINGLE-QUOTE}}}OrderCatalogMasterItem{{{SINGLE-QUOTE}}}.FindByName with Catalog_Item_Name;
Obj_Error_occurred, Obj_error_message := call HI_mod_mlm with
order_type,
client_visit_obj, // ClientVisit ObjectsPlus object
Order_catalog_item, // CatalogMasterItem ObjectsPlus object
order_Creation_Reason, // string CreateReason
WSRequestedBy_obj, // RequestingProvider ObjectsPlus object
WSRequestedBySource, // string requestingSource(must be in dict)
WSSessionType, // string SessionType
WSSessionReason, // string SessionReason
WSLocation_obj;
endtry;
catch Exception ex
error_occurred := true;
error_message := "{{+R}}New General order:{{-R}}\n" ||
ex.Message || "\n\n";
endcatch;
if ( Order_catalog_item is NOT NULL )
then void:= call Order_catalog_item.Dispose;
Order_catalog_item:= null;
endif;
endif; // Does current order exist?
endif; // Is the order name <> ""?
enddo;
;;
priority: 50
;;
evoke: Document_Enter;
Document_Modify;
;;
logic:
if EvokingObject is null
then
conclude false;
endif;
conclude true;
;;
action:
;;
Urgency: 50;;
end: