Files
St.Clair/MLMStripper/bin/Debug/DOC/DOC_SCH_SMP_SURGICAL_CASE.mlm

1272 lines
53 KiB
Plaintext

maintenance:
title: Document Surgical Case Fields;;
mlmname: DOC_SCH_SMP_SURGICAL_CASE;;
arden: version 2.5;;
version: 16.3 ;;
institution: St Claire ;;
author: Allscripts;;
specialist: Gail G. ;;
date: 2017-04-05;;
validation: testing;;
library:
purpose: Demonstrates the ability to pull surgical case info into the structured note when the document is opened and when it is saved.
;;
explanation: Demonstrates the ability to pull surgical case info.
//// Change History for SHC /////////////////////////////////////////////
10/14/16 - Allscripts - updated fetch and display for insertion of Implant Tissue section
into the new_case_info_value for writing to case_info_parameter_name
02/07/17 - update for Reload Surgery observation from Gail G.
04/05/17 - initial update to SHC configuration for init deploy- and update Tissue- Implant fetch/display
04/07/17 - details reload observation
04/13/17 Add call to Meds MLM for load
08/16/17 Add call to "DOC_CALL_SPECIMEN_PATHOLOGY"
12/08/17 - updated for Rita J. to fetch /display for Procedure Dxs
12/15/17 - now for Post Op and Pre Op - and into PRocedures grids
01/03/18 - update to adjust for width of paper on preview - and the extra column for Pre Post Dx
01/22/18 - updated Dispostion for SCH config
01/23/18 - update to put Level infront of the number
02/05/18 - addition for displaying the edited Name from the Supplemental FORm
02/23/18 - update to pull only Active case Items ci.Active = 1
04/19/18 - update to put ASA infront of the number for the ASA into the Grid
04/23/18 - change back to Read disposition from config of order for Dispo of Implant
07/24/19 - STH - CSR#: 37676 - Add new "Physical Status" value that is now used for ASA score to the Surgical Case information section.
***08/01/16 - Allscripts - try fix for Participants to use external_participant_name if no Staff/CV3User configuration
///////////////////////////////////////////////////////////////////////////////
To use this mlm the following needs to be done:
1) Create two Observation Items.
For example, name them "Surgical Case Number" and "Surgical Case Info".
Name - "Surgical Case Number"
Data Definition - Data Type: Free text; Maximum Input Length: 500; Maximum Number of Lines: 1;
Field Height: 1; Field Width: 200; (or it could be anything you want)1
Enable Formatting Text: Unchecked
Row Label Definition - Left Justified: Surgical Case Number; Modify Parameter/Filter: Surgical Case Number;
Security - No Editing: true; Add some rights
Name - "Surgical Case Info"
Data Definition - Data Type: Free text; Maximum Input Length: 50000; Maximum Number of Lines: 9999;
Field Height: 100; Field Width: 100; (or it could be anything you want)
Enable Formatting Text: Checked
Row Label Definition - Left Justified: Surgical Case Info; Modify Parameter/Filter: Surgical Case Info;
Security - No Editing: true; Add some rights
2) Create one Observation Set.
For example, name it "Surgical Case Details Set".
Set Type: Unbordered
Add Set Items and add the two Observation Items from above.
3) Create one Observation Group.
For example, name it "Surgical Case Details Group".
Add Items and add the Unbordered Observation Set, "Surgical Case Details Set".
Positioning - Set the row numbers and column numbers.
4) Create a Structured Note.
For example, name it "Surgical Case Structured Note".
Add Attributes: Select the Observation Group: "Surgical Case Details Group".
Click on the Surgical Case Number and in Called MLM, select <Available to Any>
Click on the Surgical Case Info and in Called MLM, select <Available to Any>
5) Create a Document.
For example, name it "Surgical Case Document".
Opening MLM and Closing MLM: DOC_SMP_SURGICAL_CASE
Data Collection: Structured Note
Search and select "Surgical Case Structured Note".
Security - Add some rights
6) Set the variables, case_number_parameter_name and case_info_parameter, on this MLM with the Observation Items names created on Step 1 above.
For example,
case_number_parameter_name := "Surgical Case Number";
case_info_parameter_name := "Surgical Case Info";
7) Set the variable, is_display_message, on this MLM if a message should display when opening the document.
For example,
is_display_message := true;
8) Ensure that the user has the right "Can Add Document Topic to SN".
9) Set the Environment Profile - Documents > Structured Notes > DocumentTopic to TRUE. When viewing the document, the Document Topic will
contain the Case Number. Also, the document name will be appended with the Case Number.
10) From Gateway, select a Surgical Case. From the Document Entry Worksheet, enter "Surgical Case Document". The document
should display with the case number and case details of the case in context. User can edit the Surgical Case from the Case Details tab/window.
On saving the document, the latest case details will be saved on the document.
;;
keywords: RTF, Document Called MLM , Surgical Case
;;
knowledge:
type: data-driven;;
data:
(this_documentCommunication) := argument;
/*******************Make Changes To Spelling And Flags In This Section******************/
// References the LOCAL SESSION object
/// 01/12/17 - for Medication section
local_session := cds_session.local;
/* Set to true if a decision.log is needed.*/
log_execution_info := false;
/* Set to parameter name of the free text observation item representing the case number. */
case_number_parameter_name := "Surgical Case Number"; //"OR Surgical Case Number FT";
/* Set to parameter name of the free text observation item representing the case info. */
case_info_parameter_name := "Surgical Case Info"; // FT"; //"OR Surgical Case Info FT";
/* Set to true if displaying a message when opening the document. */
is_display_message := false;
// 02/07/17 - med reload observation
med_load:= "Reload surg details" ;
////////////////////////////////////////////////////////
/***************************************************************************************/
/*** Variable and Constant Declaration ***/
(this_structuredNoteDoc) := this_documentCommunication.DocumentConfigurationObj;
(this_parameters) := this_structuredNoteDoc.ParametersList;
(this_chartedObservationsList) := this_structuredNoteDoc.ChartedObservationsList;
(this_eventType) :=this_documentCommunication.EventType;
(this_currentObj) := this_documentCommunication.CurrentObservationObj;
(this_DocumentName) := this_documentCommunication.DocumentName;
current_parameter := FIRST OF (this_Parameters
WHERE this_parameters.ParameterGUID = this_CurrentObj.ParameterGUID);
current_parameter_name := current_parameter.name ;
cur_obs:= FIRST OF (this_parameters WHERE this_parameters.name = current_parameter_name) ;
cur_obj:= FIRST OF (this_Parameters
WHERE this_parameters.ParameterGUID = cur_obs.ParameterGUID);
cur_val_obj := cur_obj.valueobj;
cur_val_text := this_currentObj.ValueObj.Value; //cur_val_obj.value;
get_vals:= this_currentObj.ValueObj.Records__ ;
get_val_list:= get_vals.ListItemsList.IsSelected; //Value; //Records__; //this_currentObj.ValueObj.ListValue ;
ct_lst:= count get_val_list;
//break;
if called_by_editor then
client_guid := read last {ClientInfo: GUID};
client_visit_guid := read last {ClientVisit: GUID};
chart_guid := read last{ClientVisit: ChartGUID};
///testin /// CONVERT(varchar, CONVERT(datetime, cpt.InDateTimeUTC)),
case_id:= 569; //492; // 569; //356;
(it_ItemID, it_Item, it_catno, it_desc, it_supNotes, it_Dispodtm, it_Manu, it_Charge,
it_serial, it_lot, it_site, it_quant, it_ExpMM, it_expDD, it_expYYYY,
it_DispoID,
it_Intact, it_Stored, it_Follow, it_PrepStart , it_PrepStop, it_user, it_tnotes ):= read // it_xml,
{" select sdi.ItemID, sdi.ItemName,csi.CatalogNumber, csi.ItemMasterDescription, csi.Notes, "
|| " CONVERT(varchar, CONVERT(datetime, csi.DispositionDateUTC)), inv.SourceName, cc.Code, "
||" csid.SerialNumber, csid.LotNumber, csid.SiteName, csid.Quantity, csid.ExpirationMonth, csid.ExpirationDay, csid.ExpirationYear, "
||" csid.DispositionID,"
||" csit.IsIntact, csit.CorrectTemperatureStoredType, csit.ManufacturerInstructFollowType, "
||" CONVERT(varchar, CONVERT(datetime, csit.PreparationStartedDateTimeUTC)), CONVERT (varchar, CONVERT(datetime, csit.PreparationEndedDateTimeUTC)), "
|| " u.DisplayName, csit.Notes " // csit.DetailXML,
||" from sxasrgcase c "
||" left join SXASRGCaseItem ci on ci.CaseID = c.CaseID "
||" inner join sxasrgdepartmentsurgicalitem sdi on sdi.ItemID = ci.ItemID "
||" left join SXASRGCaseItemSupplementalInfo csi on csi.CaseItemID = ci.CaseItemID "
||" left outer join SXASRGCaseItemSupplementalInfoDtl csid on csid.CaseItemSupplementalInfoID = csi.CaseItemSupplementalInfoID "
||" left join SXASRGInvSource inv on inv.SourceID = csi.SourceID "
||" left join SXASRGChargeCode cc on cc.ChargeCodeID = csi.ChargeCodeID "
||" left outer join SXASRGCaseItemTissue csit on (csit.CaseItemSupplementalInfoDtlID = csid.CaseItemSupplementalInfoDtlID and csit.Active = 1 ) "
||" left outer join SXASRGCaseItemTissueSurgeryStaffXRef itst on itst.CaseItemTissueID = csit.CaseItemTissueID "
||" left outer join SXASRGSurgeryStaff sss on sss.SurgeryStaffID = itst.SurgeryStaffID "
||" left outer join cv3user u on u.guid = sss.userguid "
||" where c.CaseID = " || SQL(case_id) };
// || " and csit.Active = 1 " } ;//
ct_item_check:= count it_item where it_intact <> "null" ; //it_user;
ct_item:= count it_item ;
//break;
///////////////////////////////////////////////
endif;
/*** RTF Formatting variables ***/
HEADER1_ON:="\f1\fs28 \b1";
HEADER1_OFF:="\b0 \fs0";
HEADER2_ON:="\f1\fs24 \b1";
HEADER2_OFF:="\b0 \fs0";
BODY_TAG:="\fs20";
BOLD_ON:="\b1";
BOLD_OFF:="\b0";
ITALIC_ON:="\i";
ITALIC_OFF:="\i0";
TAB:="\tab";
/// 03/23/17 - addition for formatting
SP:= 32 formatted with "%c";
SP2:= SP||SP; //||SP||SP||SP;
SP3:= SP||SP||SP;
SP5:= SP2||SP3;
/*** RTF Grid Formatting variables ***/
GRID_START:="\par";
ROW_START := "\trowd\trgaph144";
CELL_BORDER := "\clbrdrt\brdrs\clbrdrl\brdrs\clbrdrb\brdrs\clbrdrr\brdrs";
CELL_START := "\cellx";
CELL_END := "\intbl\cell";
ROW_END := "\row";
GRID_END:="\pard";
called_dom_mlm := MLM {{{SINGLE-QUOTE}}}CALLED_RPM_DOM_MLM{{{SINGLE-QUOTE}}} ;
///12/27/16 - for inital section of charting Specimen and fetching PreOp Dx
// Get the case id of the case in context
case_id := this_documentCommunication.CaseId ;
/// 12/08/17 - change for Rita J - to get into grid
IF this_eventType = "DocumentOpening"
///01/03/18 - addition for closing // this_eventType = "ChartObservation"
or this_eventType = "DocumentClosing"
//AND
// (current_parameter_name IN specimen_param or current_parameter_name IN frozen_param)
//AND exists cur_val_text
then
if exists case_id then
(case_number, anesthesia_type, case_status):= read last{"SELECT c.CaseIdentifier FROM SXASRGCase c "
// LEFT JOIN SXASRGAnesthesiaType at ON c.AnesthesiaTypeID = at.AnesthesiaTypeID
// INNER JOIN SXASRGCaseStatus cs ON c.CaseStatusID = cs.CaseStatusID
||" WHERE c.CaseID = " || SQL(case_id)};
/// 01/19/17 - updated SQL to get only the PreOp (planned procedure) diagnosis
// with this:
// || " where ((cai.HasBeenPerformed = 1 and cai.AssociatedCaseProcedureID is not null) "
// ||" OR cai.HasBeenPerformed = 0 )and cai.Active = 1 and cai.IsPrimary = 1 "
/* (dx_scheme_0,dx_code_0, dx_desc_0, ca_desc, ca_pre, ca_post) := read
{ "select cad. codingscheme, cad.Code, cad.Description, cai.HealthIssueCodeDescription, pre.CasePreOpInfoID, post.CasePostOpInfoID "
|| " from SXASRGCase ca "
|| " Join SXASRGCaseProcedure cai on cai.CaseID = ca.CaseID "
|| " left outer join SXASRGCaseProcedureDiagnosis cad on cad.CaseProcedureID = cai.CaseProcedureID "
||" left outer join SXASRGCasePreOpInfo pre on pre.caseID = ca.CaseID "
||" left outer join SXASRGCasePostOpInfo post on post.caseID = ca.CaseID "
|| " where ((cai.HasBeenPerformed = 1 and cai.AssociatedCaseProcedureID is not null) "
||" OR cai.HasBeenPerformed = 0 )and "
|| " cai.Active = 1 and cai.IsPrimary = 1 AND cad.Active = 1 "
|| " AND ca.CaseIDentifier = " || SQL(case_number)};
*/
/// 12/15/17 - replace above with SQL for each pre/post
// pre op diagnosis for planned procedures
(dx_scheme_0,dx_code_0, dx_desc_0, ca_desc ) := read last
{ " select cpd.codingscheme, cpd.Code, cpd.Description, cp.HealthIssueCodeDescription "
||" from SXASRGCase c "
||" inner join SXASRGCaseProcedure cp on cp.CaseID = c.CaseID "
||" left join SXASRGCaseProcedureDiagnosis cpd on cpd.CaseProcedureID = cp.CaseProcedureID "
||" where (cp.HasBeenPerformed = 0 or (cp.HasBeenPerformed = 1 and cp.AssociatedCaseProcedureID is not null))"
||" and cp.Active = 1 "
||" and cpd.Active = 1 "
||" and c.CaseIdentifier = " || SQL(case_number)
};
// post op diagnosis for performed procedures
(dx_scheme_1,dx_code_1, dx_desc_1, ca_desc1) := read last
{ "select cpd.codingscheme, cpd.Code, cpd.Description, cp.HealthIssueCodeDescription "
||" from SXASRGCase c "
||" inner join SXASRGCaseProcedure cp on cp.CaseID = c.CaseID "
||" left join SXASRGCaseProcedureDiagnosis cpd on cpd.CaseProcedureID = cp.CaseProcedureID "
||" where cp.HasBeenPerformed = 1 "
||" and cp.AssociatedCaseProcedureID is null "
||" and cp.Active = 1 "
||" and cpd.Active = 1"
||" and c.CaseIdentifier = " || SQL(case_number)
};
dx_code:= //first of
dx_code_0;
//dx_desc::= ""; //=// first of
//dx_desc_0;
ct_dxd:= count dx_desc_0;
ct_dxd1:= count dx_desc_1;
/// PRE process
if ct_dxd > 0 then
hold_cd:= "";
for i in 1 seqto count dx_desc_0 DO
dxcs:= dx_scheme_0[i];
dxc:= dx_code_0[i];
dxd:= dx_desc_0[i];
dx_comb:= dxcs||" "||dxc||" "||dxd;
if dxc in hold_cd
then
stop:=1;
elseif
/// 01/18/17 - to not value nulls int he string
dx_comb matches pattern "null%"
then
stop :=1;
else
hold_cd:= hold_cd, dxc;
if i=1 then
dx_desc:= dx_comb; //dxc||" "||dxd;
else
dx_desc:= dx_desc||";\n"|| dx_comb; //dxc||" "||dxd;
endif;
endif;
enddo;
endif;
/// POST process
if ct_dxd1 > 0 then
hold_cd1:= "";
for i in 1 seqto count dx_desc_1 DO
dxcs1:= dx_scheme_1[i];
dxc1:= dx_code_1[i];
dxd1:= dx_desc_1[i];
dx_comb1:= dxcs1||" "||dxc1||" "||dxd1;
if dxc1 in hold_cd1
then
stop:=1;
elseif
/// 01/18/17 - to not value nulls int he string
dx_comb1 matches pattern "null%"
then
stop :=2;
else
hold_cd1:= hold_cd1, dxc1;
if i=1 then
dx_desc1:= dx_comb1; //dxc||" "||dxd;
else
dx_desc1:= dx_desc1||";\n"|| dx_comb1; //dxc||" "||dxd;
endif;
endif;
enddo;
endif;
endif; // exists caseid
/// 01/05/17 - now here do loop
if current_parameter_name IN specimen_param then
get_chart:= specimen_param;
get_write:= spec_dx;
elseif
current_parameter_name IN frozen_param then
get_chart:= frozen_param;
get_write:= froz_dx;
endif;
FOR i in 1 seqto count get_chart DO
ch_param:= get_chart[i];
wr_param:= get_write[i];
if current_parameter_name = ch_param then
/// 02/21/17 - here for Order logic?
target_param:= wr_param;
//else
//target_param:= froz_dx;
endif;
ENDDO;
//break;
///
// break;
ENDIF; // then if cur_parameter name n...
//////////// and of charting specimens/////////////////////////
/// add "ELSE" to the orignal "IF" below
/// 01/17/17 - update for Reload medications
// Chart the case number and case info observation items when opening and closing the document
// ELSE
if this_eventType = "DocumentOpening" or this_eventType = "DocumentClosing" //then
OR (this_eventType = "ChartObservation"
AND
(current_parameter_name IN med_load) )
then
stop_it:= 0;
/// 02/07/17 - n0w null out Re-load observation
if this_eventType = "ChartObservation"
AND
(current_parameter_name IN med_load)
then
this_documentCommunication := call called_dom_mlm with
(this_documentCommunication, current_parameter_name, null, sugg_txt_value, update_type);
endif;
/// 04/13/17 Add call to Meds MLM for load
/// - here for call Med MLM to load any meds
get_med_sed:= MLM {{{SINGLE-QUOTE}}}DOC_SCH_SMP_MEDS_SURGICAL_CASE{{{SINGLE-QUOTE}}} ;
retn_val := call get_med_sed with this_documentCommunication ;
///////////////////////////////////////////////////////////////////////
//ENDIF; /// chart observation or DOc Open and chart observation
///////////////////////////////////////////////////
/// 01/16/17 - re-arrange for opening again - after work above with re-load
//IF this_eventType = "DocumentOpening" or this_eventType = "DocumentClosing" then
case_number_parameter:= first of (this_parameters WHERE this_parameters.Name = case_number_parameter_name);
case_info_parameter:= first of (this_parameters WHERE this_parameters.Name = case_info_parameter_name);
// Ensure that the case number and case info observation items are on the structured note
if exists case_number_parameter and exists case_info_parameter then
// Get the case id of the case in context
case_id := this_documentCommunication.CaseId ;
if exists case_id then
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get the case
//////////////////////////////////////////////////////////////////////////////////////////////////////////
(case_number, anesthesia_type, case_status, asa_physical_status):= read last{"SELECT top 1 c.CaseIdentifier, at.Code, cs.Code, PhysicalStatus FROM SXASRGCase c
LEFT JOIN SXASRGAnesthesiaType at ON c.AnesthesiaTypeID = at.AnesthesiaTypeID
INNER JOIN SXASRGCaseStatus cs ON c.CaseStatusID = cs.CaseStatusID
WHERE c.CaseID = " || SQL(case_id)};
// Add the case number observation item value
new_case_number_value := "Case Number: " || case_number;
// Create the title and grid to contain the case info observation item value for the case status and anesthesia type
new_case_info_value := "\n" || HEADER1_ON || "Surgical Case Information:" || HEADER1_OFF || "\n" || BODY_TAG;
new_case_info_value := new_case_info_value || GRID_START || ROW_START;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 2500 || BOLD_ON || "Case Status" || BOLD_OFF || CELL_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 4500 || case_status|| CELL_END;
new_case_info_value := new_case_info_value || ROW_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 2500 || BOLD_ON || "Anesthesia Type" || BOLD_OFF || CELL_END;
if anesthesia_type is null then
anesthesia_type := "";
endif;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 4500 || anesthesia_type || CELL_END;
new_case_info_value := new_case_info_value || ROW_END;
/// 12/08/17 - for Rita J. to fetch /display for Procedure Dxs
/* If exists dx_desc and not(dx_desc matches pattern "null%" )
then
new_case_info_value := new_case_info_value || ROW_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 2000 || BOLD_ON || "Pre-OP Diagnoses" || BOLD_OFF || CELL_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 4000 || dx_desc || CELL_END;
endif;
/// 12/15/17 - now for Post Op
If exists dx_desc1 and not(dx_desc1 matches pattern "null%" )
then
new_case_info_value := new_case_info_value || ROW_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 2000 || BOLD_ON || "Post-OP Diagnoses" || BOLD_OFF || CELL_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 4000 || dx_desc1 || CELL_END;
endif;
*/
////////////////////////////////////////////////////////////////////
//new_case_info_value := new_case_info_value || ROW_END || GRID_END;
if(asa_physical_status is null OR asa_physical_status = "") then
asa_physical_status := "";
endif;
//new_case_info_value := new_case_info_value || GRID_START || ROW_START;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 2500 || BOLD_ON || "Physical Status(ASA)" || BOLD_OFF || CELL_END;
new_case_info_value := new_case_info_value || CELL_BORDER || CELL_START || 4500 || asa_physical_status || CELL_END;
new_case_info_value := new_case_info_value || ROW_END;
new_case_info_value := new_case_info_value || GRID_END;
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get the case planned procedures
//////////////////////////////////////////////////////////////////////////////////////////////////////////
planned_procedures := GRID_START || BOLD_ON || "Planned Procedures: " || "\n" || BOLD_OFF;
(procedure_name_list,
surgery_staff_name_list,
preference_card_name_list,
procedure_description_list,
is_primary_procedure_list
):= read {"SELECT
p.Name as ProcedureName,
u.DisplayName as SurgeryStaffFullName,
pc.Name as PreferenceCardName,
cp.Description,
cp.IsPrimary
FROM SXASRGCaseProcedure cp
LEFT JOIN SXASRGCasePreferenceCard cpc ON (cp.CaseProcedureId = cpc.CaseProcedureId AND cp.CaseId = cpc.CaseId AND ( cpc.Active IS NULL OR cpc.Active = 1 ))
LEFT JOIN SXASRGPreferenceCard pc ON cpc.PreferenceCardId = pc.PreferenceCardId
INNER JOIN SXASRGSurgeryStaff staff ON (cp.SurgeryStaffID = staff.SurgeryStaffID)
INNER JOIN CV3User u ON staff.UserGUID = u.GUID
INNER JOIN SXASRGProcedure p ON (cp.ProcedureID = p.ProcedureID)
WHERE cp.CaseID = " || SQL(case_id) ||
"AND cp.Active = 1
AND ((cp.HasBeenPerformed = 0) OR (cp.HasBeenPerformed = 1 AND cp.AssociatedCaseProcedureID > 0))
ORDER BY cp.SequenceNumber "
};
ii := 0;
/// 12/15/17
column_count := 6;
column_index := 1;
column_header_list := ("Name", "Provider", "Preference Card", "Description", "Primary", "Pre-Op Dx" );
// add grid header
planned_procedures := planned_procedures || ROW_START;
while (column_index <= column_count) do
column_width:= column_index * 2000;
/// 01/03/18 - to adjust for width of paper on preview
if column_index = 5 then
column_width:= 9100 ;
elseif
column_index = 6 then
column_width:= 10600 ;
endif;
//////////////////////////////////////////////////////
planned_procedures := planned_procedures || CELL_BORDER || CELL_START || column_width || BOLD_ON || column_header_list[column_index] || BOLD_OFF || CELL_END;
column_index := column_index + 1;
enddo;
planned_procedures := planned_procedures || ROW_END;
// add grid content
for procedure_name in procedure_name_list do
ii := ii + 1;
surgery_staff_name := last(first ii from surgery_staff_name_list);
preference_card_name := last(first ii from preference_card_name_list);
procedure_description := last(first ii from procedure_description_list);
is_primary_procedure := last(first ii from is_primary_procedure_list);
/// 12/15/17
If exists dx_desc and not(dx_desc matches pattern "null%" )
then
is_pre_dx:= dx_desc;
else
is_pre_dx:= "";
endif;
/////////////////////
if preference_card_name is null then
preference_card_name := "";
endif;
if procedure_description is null then
procedure_description := "";
endif;
column_index := 1;
/// 12/15/17
column_content_list := (procedure_name, surgery_staff_name, preference_card_name, procedure_description, is_primary_procedure, is_pre_dx);
planned_procedures := planned_procedures || ROW_START;
// fill each cell
while (column_index <= column_count) do
column_width:= column_index * 2000;
/// 01/03/18 - to adjust for width of paper on preview
if column_index = 5 then
column_width:= 9100 ;
elseif
column_index = 6 then
column_width:= 10600 ;
endif;
//////////////////////////////////////////////////////
planned_procedures := planned_procedures || CELL_BORDER || CELL_START || column_width || column_content_list[column_index] || CELL_END;
column_index := column_index + 1;
enddo;
planned_procedures := planned_procedures || ROW_END;
enddo;
new_case_info_value := new_case_info_value || planned_procedures || GRID_END || "\n";
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get the case performed procedures
//////////////////////////////////////////////////////////////////////////////////////////////////////////
performed_procedures := GRID_START || BOLD_ON || "Performed Procedures: \n" || BOLD_OFF;
(procedure_name_list,
surgery_staff_name_list,
preference_card_name_list,
procedure_description_list,
is_primary_procedure_list
):= read {"SELECT
p.Name as ProcedureName,
u.DisplayName as SurgeryStaffFullName,
pc.Name as PreferenceCardName,
cp.Description,
cp.IsPrimary
FROM SXASRGCaseProcedure cp
LEFT JOIN SXASRGCasePreferenceCard cpc ON (cp.CaseProcedureId = cpc.CaseProcedureId AND cp.CaseId = cpc.CaseId AND ( cpc.Active IS NULL OR cpc.Active = 1 ))
LEFT JOIN SXASRGPreferenceCard pc ON cpc.PreferenceCardId = pc.PreferenceCardId
INNER JOIN SXASRGSurgeryStaff staff ON (cp.SurgeryStaffID = staff.SurgeryStaffID)
INNER JOIN CV3User u ON staff.UserGUID = u.GUID
INNER JOIN SXASRGProcedure p ON (cp.ProcedureID = p.ProcedureID)
WHERE cp.CaseID = " || SQL(case_id) ||
"AND cp.Active = 1
AND cp.HasBeenPerformed = 1
AND (cp.AssociatedCaseProcedureID = 0 OR cp.AssociatedCaseProcedureID IS NULL)
ORDER BY cp.SequenceNumber "
};
ii := 0;
/// 12/15/17
column_count := 6;
column_index := 1;
column_header_list := ("Name", "Provider", "Preference Card", "Description", "Primary", "Post-Op Dx" );
// add grid header
performed_procedures := performed_procedures || ROW_START;
while (column_index <= column_count) do
column_width:= column_index * 2000;
/// 01/03/18 - to adjust for width of paper on preview
if column_index = 5 then
column_width:= 9100 ;
elseif
column_index = 6 then
column_width:= 10600 ;
endif;
//////////////////////////////////////////////////////
performed_procedures := performed_procedures || CELL_BORDER || CELL_START || column_width || BOLD_ON || column_header_list[column_index] || BOLD_OFF || CELL_END;
column_index := column_index + 1;
enddo;
performed_procedures := performed_procedures || ROW_END;
// add grid content
for procedure_name in procedure_name_list do
ii := ii + 1;
surgery_staff_name := last(first ii from surgery_staff_name_list);
preference_card_name := last(first ii from preference_card_name_list);
procedure_description := last(first ii from procedure_description_list);
is_primary_procedure := last(first ii from is_primary_procedure_list);
/// 12/15/17
If exists dx_desc1 and not(dx_desc1 matches pattern "null%" )
then
is_pre_dx1:= dx_desc1;
else
is_pre_dx1:= "";
endif;
/////////////////////
if preference_card_name is null then
preference_card_name := "";
endif;
if procedure_description is null then
procedure_description := "";
endif;
column_index := 1;
/// 12/15/17
column_content_list := (procedure_name, surgery_staff_name, preference_card_name, procedure_description, is_primary_procedure, is_pre_dx1);
performed_procedures := performed_procedures || ROW_START;
// fill each cell
while (column_index <= column_count) do
column_width:= column_index * 2000;
/// 01/03/18 - to adjust for width of paper on preview
if column_index = 5 then
column_width:= 9100 ;
elseif
column_index = 6 then
column_width:= 10600 ;
endif;
//////////////////////////////////////////////////////
performed_procedures := performed_procedures || CELL_BORDER || CELL_START || column_width || column_content_list[column_index] || CELL_END;
column_index := column_index + 1;
enddo;
performed_procedures := performed_procedures || ROW_END;
enddo;
new_case_info_value := new_case_info_value || performed_procedures || GRID_END || "\n";
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get the case participants
//////////////////////////////////////////////////////////////////////////////////////////////////////////
participants := GRID_START || BOLD_ON || "Participants: \n" || BOLD_OFF;
(participant_id_list,
external_participant_name_list,
role_list,
comments_list,
surgery_staff_name_list
):= read {
"SELECT
cp.CaseParticipantID,
cp.ExternalParticipantName,
role.Code,
cp.Comments,
u.DisplayName AS SurgeryStaffFullName
FROM SXASRGCaseParticipant cp
LEFT JOIN SXASRGSurgeryRole role ON cp.SurgeryRoleID = role.SurgeryRoleID
LEFT JOIN SXASRGSurgeryStaff staff ON (cp.SurgeryStaffID = staff.SurgeryStaffID)
LEFT JOIN CV3User u ON staff.UserGUID = u.GUID
WHERE cp.CaseID = " || SQL(case_id) ||
"AND cp.Active = 1
ORDER BY cp.SortSequenceNum "
};
(participant_time_id_list,
participant_time_participant_id_list,
time_in_list,
time_out_list
):= read {
"SELECT
cpt.CaseParticipantTimeID,
cpt.CaseParticipantID,
CONVERT(varchar, CONVERT(datetime, cpt.InDateTimeUTC)),
CONVERT(varchar, CONVERT(datetime, cpt.OutDateTimeUTC))
FROM SXASRGCaseParticipantTime cpt
INNER JOIN SXASRGCaseParticipant cp ON (cpt.CaseParticipantID = cp.CaseParticipantID)
WHERE cp.CaseID = " || SQL(case_id) ||
"AND cp.Active = 1
AND cpt.Active = 1
ORDER BY cpt.CaseParticipantID, cpt.InDateTimeUTC "
};
tstcaseid := case_id;
ii := 0;
column_count := 5;
column_index := 1;
column_header_list := ("Role", "Name", "Comments", "Time In", "Time Out");
// add grid header
participants := participants || ROW_START;
while (column_index <= column_count) do
column_width:= column_index * 2000;
participants := participants || CELL_BORDER || CELL_START || column_width || BOLD_ON || column_header_list[column_index] || BOLD_OFF || CELL_END;
column_index := column_index + 1;
enddo;
participants := participants || ROW_END;
for participant_id in participant_id_list do
ii := ii + 1;
external_participant_name := last(first ii from external_participant_name_list);
role := last(first ii from role_list);
comments := last(first ii from comments_list);
surgery_staff_name := last(first ii from surgery_staff_name_list);
/// 08/1/16 - use external_participant_name if no Staff CV3User configuration
if not exists surgery_staff_name AND (exists external_participant_name) then //and external_participant_name <> "") then
surgery_staff_name := trim (string external_participant_name) ;
/// 01/23/18 - update to put Level infront of the number
if role = "Level" then
surgery_staff_name := string ("Level "||surgery_staff_name);
endif;
/// 04/19/18 - update to put ASA infront of the number for the ASA into the Grid
if role = "ASA" then
surgery_staff_name := trim (string ("ASA: "||surgery_staff_name)) ;
endif;
endif;
////////////////////////////////////////
if external_participant_name is null then
external_participant_name := "";
endif;
if role is null then
role := "";
endif;
if comments is null then
comments := "";
endif;
if surgery_staff_name is null then
surgery_staff_name := "";
endif;
if not exists surgery_staff_name then
surgery_staff_name := trim (string external_participant_name) ;
endif;
column_index := 1;
column_content_list := (role, surgery_staff_name, comments );
participants := participants || ROW_START;
// fill each cell
column_count := 3;
while (column_index <= column_count) do
column_width:= column_index * 2000;
participants := participants || CELL_BORDER || CELL_START || column_width || column_content_list[column_index] || CELL_END;
column_index := column_index + 1;
enddo;
// add time for participant, same participant could have multiple times
jj := 0;
is_same_participant := false;
for participant_time_id in participant_time_id_list do
jj := jj + 1;
participant_time_participant_id := last(first jj from participant_time_participant_id_list);
if(participant_time_participant_id = participant_id) then
time_in := last(first jj from time_in_list);
time_out := last(first jj from time_out_list);
if time_in is null then
time_in := ".";
endif;
if time_out is null then
time_out := ".";
endif;
column_content_time_list := (" " || time_in, " " || time_out);
// add new row with empty cells for role, staff and comments if the time is for the same participant
if is_same_participant = true then
column_count := 3;
column_index := 1;
participants := participants || ROW_END || ROW_START;
while (column_index <= column_count) do
column_width:= column_index * 2000;
participants := participants || CELL_BORDER || CELL_START || column_width || " " || CELL_END;
column_index := column_index + 1;
enddo;
endif;
// fill the time in and time out cells
column_count := 5;
while (column_index <= column_count) do
column_width:= column_index * 2000;
participants := participants || CELL_BORDER || CELL_START || column_width || column_content_time_list[column_index - 3] || CELL_END;
column_index := column_index + 1;
enddo;
is_same_participant := true;
else
is_same_participant := false;
endif;
enddo;
participants := participants || ROW_END;
enddo;
new_case_info_value := new_case_info_value || participants || GRID_END || "\n";
//////////////////////////////////////////////////////////////////////////////////////////////////////////
// Get the case event times
//////////////////////////////////////////////////////////////////////////////////////////////////////////
case_events := GRID_START || BOLD_ON || "Times: \n" || BOLD_OFF;
(event_id_list,
event_date_time_list,
event_time_label_list
):= read {
"SELECT
e.CaseEventID,
CONVERT(varchar, CONVERT(datetime, et.EventDateTimeUTC)),
et.EventTimeLabel
FROM SXASRGCaseEvent e
INNER JOIN SXASRGCaseEventTime et ON e.CaseEventID = et.CaseEventID
WHERE e.CaseID = " || SQL(case_id) ||
"AND e.Active = 1
ORDER BY et.SortSequenceNum "
};
ii := 0;
column_count := 2;
column_index := 1;
column_header_list := ("Type", "Time");
// add grid header
case_events := case_events || ROW_START;
while (column_index <= column_count) do
column_width:= column_index * 3500;
case_events := case_events || CELL_BORDER || CELL_START || column_width || BOLD_ON || column_header_list[column_index] || BOLD_OFF || CELL_END;
column_index := column_index + 1;
enddo;
case_events := case_events || ROW_END;
// add grid content
for event_id in event_id_list do
ii := ii + 1;
event_date_time := last(first ii from event_date_time_list);
event_time_label := last(first ii from event_time_label_list);
if event_date_time is null then
event_date_time := "";
endif;
column_index := 1;
column_content_list := (event_time_label, " " || event_date_time);
case_events := case_events || ROW_START;
// fill each cell
while (column_index <= column_count) do
column_width:= column_index * 3500;
case_events := case_events || CELL_BORDER || CELL_START || column_width || column_content_list[column_index] || CELL_END;
column_index := column_index + 1;
enddo;
case_events := case_events || ROW_END;
enddo;
new_case_info_value := new_case_info_value || case_events || GRID_END || "\n";
/// 07/13/16 - for insertion of Implant Tissue section into the new_case_info_value ////////////////////////
standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}};
include standard_libs;
IT_Header:= "";
rtn_str:= "";
hold_it:= "";
/// 02/23/18 - update to pull only Active case Items ci.Active = 1
(it_ItemID, it_Item, it_catno, it_desc, it_supNotes, it_itemname, it_Dispodtm, it_Manu, it_Charge,
it_serial, it_lot, it_site, it_siteg, it_quant, it_ExpMM, it_expDD, it_expYYYY,
it_DispoID, it_DtlID, ti_DtlID,
it_Intact, it_Stored, it_Follow, it_PrepStart , it_PrepStop, it_user, it_tnotes ):= read // it_xml,
{" select sdi.ItemID, sdi.ItemName,csi.CatalogNumber, csi.ItemMasterDescription, csi.Notes, csi.ItemName, "
|| " CONVERT(varchar, CONVERT(datetime, csi.DispositionDateUTC)), inv.SourceName, cc.Code, "
||" csid.SerialNumber, csid.LotNumber, csid.SiteName, csid.SiteGUID, csid.Quantity, csid.ExpirationMonth, csid.ExpirationDay, csid.ExpirationYear, "
||" csid.DispositionID, csid.CaseItemSupplementalInfoDtlID, csit.CaseItemSupplementalInfoDtlID, "
||" csit.IsIntact, csit.CorrectTemperatureStoredType, csit.ManufacturerInstructFollowType, "
||" CONVERT(varchar, CONVERT(datetime, csit.PreparationStartedDateTimeUTC)), CONVERT(varchar, CONVERT(datetime, csit.PreparationEndedDateTimeUTC)), "
|| " u.DisplayName, csit.Notes " // csit.DetailXML,
||" from sxasrgcase c "
||" left join SXASRGCaseItem ci on ci.CaseID = c.CaseID "
||" inner join sxasrgdepartmentsurgicalitem sdi on sdi.ItemID = ci.ItemID "
||" left join SXASRGCaseItemSupplementalInfo csi on csi.CaseItemID = ci.CaseItemID "
||" left outer join SXASRGCaseItemSupplementalInfoDtl csid on csid.CaseItemSupplementalInfoID = csi.CaseItemSupplementalInfoID "
||" left join SXASRGInvSource inv on inv.SourceID = csi.SourceID "
||" left join SXASRGChargeCode cc on cc.ChargeCodeID = csi.ChargeCodeID "
||" left outer join SXASRGCaseItemTissue csit on (csit.CaseItemSupplementalInfoDtlID = csid.CaseItemSupplementalInfoDtlID and csit.Active = 1 ) "
||" left outer join SXASRGCaseItemTissueSurgeryStaffXRef itst on itst.CaseItemTissueID = csit.CaseItemTissueID "
||" left outer join SXASRGSurgeryStaff sss on sss.SurgeryStaffID = itst.SurgeryStaffID "
||" left outer join cv3user u on u.guid = sss.userguid "
||" where c.CaseID = " || SQL(case_id)
|| " and ci.Active = 1 " } ;//
// ||" and c.ClientVisitGUID = {{{SINGLE-QUOTE}}}1052700270{{{SINGLE-QUOTE}}} "
// ||" where c.CaseID = 356 "
ct_item_check:= count it_item where it_dispoID is not null ; //<> "null" ; //it_user;
ct_item:= count it_item ;
if ct_item > 0 then //exists it_user then
IT_Header := " Implant-Tissue: " ;
IT_Head:= HEADER2_ON||IT_Header||HEADER2_OFF||"\n"||Body_tag; //:="\b0 \fs0";
//rtn_str:= IT_Head;
not_in:= "<","/",">" ;
FOR i in 1 seqto ct_item DO
/// format certain data
/* if it_dispoID[i] = 1 then it_dispoID[i] := "Explanted"; endif;
if it_dispoID[i] = 2 then it_dispoID[i] := "Implanted"; endif;
if it_dispoID[i] = 3 then it_dispoID[i] := "Implanted and Removed"; endif;
if it_dispoID[i] = 6 then it_dispoID[i] := "Wasted"; endif;
if it_intact[i] then it_intact[i] := "Intact"; elseif not( it_intact[i]) then it_intact[i] := "Not Intact"; endif;
if it_stored[i] = 1 then it_stored[i] := "Yes"; elseif it_stored[i] = 2 then it_stored[i] := "No"; else it_stored[i] := "N/A"; endif;
if it_follow[i] = 1 then it_follow[i] := "Yes"; elseif it_follow[i] = 2 then it_follow[i] := "No"; else it_follow[i] := "N/A"; endif;
*/
/// 12/02/16 - change the display of notes_comments
/* if exists it_tnotes[i] then
note_comment := it_tnotes[i];
else
note_comment := "";
endif;
*/
//:= tab||"\b1 Notes/Comments: \b0 "||it_tnotes[i]||"\n" ; else note_comment:= "\n"; endif;
crtab:= "\n"||tab||tab||" ";
/// 02/02/18 - addition for displaying the edited Name from the Supplemental FORm
IF it_item[i] matches pattern "Generic%"
then
if exists it_itemname[i] then
it_item[i] := it_itemname[i] ;
endif;
ENDIF;
///////////////////////////////////////////////////////////////////
if exists it_xml[i] then
it_xml[i] := string (it_xml[i]);
it_xml0:= call (it_xml[i] as {{{SINGLE-QUOTE}}}String{{{SINGLE-QUOTE}}}).Replace with "<Fields>", "" as string;
it_xml1:= call (it_xml0 as {{{SINGLE-QUOTE}}}String{{{SINGLE-QUOTE}}}).Replace with "<Field DataItemCode=", "" as string;
it_xml2:= call (it_xml1 as {{{SINGLE-QUOTE}}}String{{{SINGLE-QUOTE}}}).Replace with "><Value>", " = " as string;
it_xml3:= call (it_xml2 as {{{SINGLE-QUOTE}}}String{{{SINGLE-QUOTE}}}).Replace with "</Value></Field>", crtab as string; //"\n"
it_xml4:= call (it_xml3 as {{{SINGLE-QUOTE}}}String{{{SINGLE-QUOTE}}}).Replace with "</Fields>", "\n" as string;
endif;
if it_dispoId[i] is not null then // <> "null" then // it_dispoId
if not (it_itemID[i] in hold_it) then
/// 03/07/17 - for it_serial, it_lot, it_site, it_quant, it_ExpMM, it_expDD, it_expYYYY, it_DispoID,
get_ser_0:= it_serial where it_itemID = it_itemID[i];
get_lot_0:= it_lot where it_itemID = it_itemID[i];
get_site_0:= it_site where it_itemID = it_itemID[i];
get_siteg_0:= it_siteg where it_itemID = it_itemID[i];
get_quant_0:= it_quant where it_itemID = it_itemID[i];
get_dispo_0:= it_DispoID where it_itemID = it_itemID[i];
get_expMM_0:= it_ExpMM where it_itemID = it_itemID[i];
get_expDD_0:= it_ExpDD where it_itemID = it_itemID[i];
get_expYYYY_0:= it_ExpYYYY where it_itemID = it_itemID[i];
get_it_dtl:= it_DtlID where it_itemID = it_itemID[i];
get_ti_dtl:= ti_DtlID where it_itemID = it_itemID[i];
/// supp details
get_user0:= it_user where it_itemID = it_itemID[i];
get_PrepStart0:= it_PrepStart where it_itemID = it_itemID[i];
get_PrepStop0:= it_PrepStop where it_itemID = it_itemID[i];
get_Intact0:= it_Intact where it_itemID = it_itemID[i];
get_stored0:= it_stored where it_itemID = it_itemID[i];
get_follow0:= it_follow where it_itemID = it_itemID[i];
get_notes0:= it_tnotes where it_itemID = it_itemID[i];
//// 03/08/17 for tissue details
//////////////////////////
/// 04/23/18 - for duplicates
hld_det:= "";
hld_dtl:= ""; //"";
for m in 1 seqto count get_lot_0 DO
////////////////////////////////////////////
/// 01/22/18 - updated for SCH config
/// 04/23/18 - change back to Explanted second - Implanted first and others in order for Dispo of Implant
// update to read from SXASRGDispistion
if exists get_dispo_0[m] then
s_dispo:= get_dispo_0[m];
get_dispo_m:= read last { " select Code from SXASRGDisposition where Active = 1 and DispositionID = " || sql (s_dispo) };
/* if get_dispo_0[m] = 1 then get_dispo_0[m] := "Implanted"; endif;
// "Explanted"; endif;
if get_dispo_0[m] = 9 then get_dispo_0[m] := "Explanted"; endif;
// "Implanted"; endif;
if get_dispo_0[m] = 6 then get_dispo_0[m] := "Implanted and Removed"; endif;
if get_dispo_0[m] = 8 then get_dispo_0[m] := "Wasted"; endif;
*/
else
get_dispo_m := "";
endif;
/////////////////////////////////////////
/// 03/13/17 - for site from Dictionary if not free text
IF get_site_0[m] is null and exists get_siteg_0[m]
then
get_dict_g:= get_siteg_0[m] ;
get_val:= read last { " select value from CV3UserDictionaryValue uv "
||" where uv.guid = " || sql (get_dict_g) };
if exists get_val then
get_site_0d := get_val;
endif;
else
get_site_0d:= get_site_0[m];
ENDIF;
/////////////////////////////////////////////////////////////////////////
/////////////////////////////////////////////////////////////////////////
/// 04/23/18- fix dupl details
if get_ser_0[m] not in hold_det
/// 09/06/17 - to pick up "null " serial numbers
OR (get_ser_0[m] is null OR get_ser_0[m] = "null")
then
if hld_dtl = "" then
hld_dtl:= "\b1 Serial #: \b0 "||get_ser_0[m]||" "||"\b1 Lot #: \b0 "||get_lot_0[m]||" "||"\b1 Qty: \b0 "||get_quant_0[m]
// ||" "||"\b1 Site: \b0 "||get_site_0d ||" "||"\b1 Dispo: \b0 "||get_dispo_0[m]||" "||
||" "||"\b1 Site: \b0 "||get_site_0d ||"\n"||tab||"\b1 Disposition: \b0 "||get_dispo_m||" "||
"\b1 Expiry Dt: \b0 "||get_expMM_0[m]||"/"||get_expDD_0[m]||"/"||get_expyyyy_0[m]||"\n"; //||tab ;
else
hld_dtl:= hld_dtl||"\b1 Serial #: \b0 "||get_ser_0[m]||" "||"\b1 Lot #: \b0 "||get_lot_0[m]||" "||"\b1 Qty: \b0 "||get_quant_0[m]
// ||" "||"\b1 Site: \b0 "||get_site_0d ||" "||"\b1 Dispo: \b0 "||get_dispo_0[m]||" "||
||" "||"\b1 Site: \b0 "||get_site_0d ||"\n"||tab||"\b1 Disposition: \b0 "||get_dispo_m||" "||
"\b1 Expiry Dt: \b0 "||get_expMM_0[m]||"/"||get_expDD_0[m]||"/"||get_expyyyy_0[m]||"\n"; //||tab ;
endif;
hold_det:= hold_det, get_ser_0[m] ;
ENDIF;
/* original SCH pre 04/23/18
hld_dtl:= hld_dtl||"\b1 Serial #: \b0 "||get_ser_0[m]||" "||"\b1 Lot #: \b0 "||get_lot_0[m]||" "||"\b1 Qty: \b0 "||get_quant_0[m]
// ||" "||"\b1 Site: \b0 "||get_site_0d ||" "||"\b1 Dispo: \b0 "||get_dispo_0[m]||" "||
||" "||"\b1 Site: \b0 "||get_site_0d ||"\n"||tab||"\b1 Disposition: \b0 "|| get_dispo_0[m]||" "||
"\b1 Expiry Dt: \b0 "||get_expMM_0[m]||"/"||get_expDD_0[m]||"/"||get_expyyyy_0[m]||"\n"; //||tab ;
*/
//////////////////////////////////
/// for tissue details for each supp details
get_user:= null;
get_PrepStart:= null;
get_PrepStop:= null;
get_Intact:= null;
get_stored:= null;
get_follow:= null;
get_notes:= null;
get_sup_d:= null;
if get_ti_dtl[m] = get_it_dtl[m] then
get_Intact:=get_Intact0[m]; // first of (get_Intact0 where get_ti_dtl[m] = get_it_dtl[m] ); // it_itemID = it_itemID[i] AND
if get_Intact then get_Intact := "Intact"; elseif not( get_Intact ) then get_Intact := "Not Intact"; endif;
get_Stored:= get_Stored0[m]; //first of (get_Stored0 where get_ti_dtl[m] = get_it_dtl[m] );
if get_Stored = 1 then get_Stored := "Yes"; elseif get_Stored = 2 then get_Stored := "No"; else get_Stored := "N/A"; endif;
get_follow:= get_follow0[m];//first of (get_follow0 where get_ti_dtl[m] = get_it_dtl[m] );
if get_follow = 1 then get_follow := "Yes"; elseif get_follow = 2 then get_follow := "No"; else get_follow := "N/A"; endif;
get_PrepStart := get_PrepStart0[m]; //first of (get_PrepStart0 where get_ti_dtl[m] = get_it_dtl [m] );
get_PrepStop := get_PrepStop0[m];//first of (get_PrepStop0 where get_ti_dtl[m] = get_it_dtl[m] );
// it_user
get_user := get_user0[m]; //first of (get_user0 where get_ti_dtl[m] = get_it_dtl[m] );
get_notes := get_notes0[m];// first of (get_notes0 where get_ti_dtl[m] = get_it_dtl[m] );
if exists get_user or exists get_PrepStart or exists get_Intact // or get_stored or exists get_follow
then
/// tab||"
get_sup_d:= tab||" \b1 State of package: \b0 "||get_Intact ||"\n"||tab||"\b1 Stored at Temp: \b0 "||get_Stored ||"\n"
||tab||"\b1 Manufacturer Instructions followed: \b0 "||get_follow ||"\n"
//||tab||"\b1 Tissue Reconstitution/Note: \b0 "||"\n"||tab||tab||" "||it_xml4[i]||"\n"||note_comment //||"\n"
||tab||"\b1 Tissue Reconstitution/Note: \b0 "||"\n"||tab||tab||" "||get_notes ||"\n"
||tab||"\b1 Prepared By: \b0 "||get_user ||"\n"
||tab||"\b1 Prep Start: \b0 "||get_PrepStart ||" "||"\b1 Prep Stop: \b0 "||get_PrepStop ||"\n\n";
else
get_sup_d := "\n"; //||tab||"\n";
endif;
else
get_sup_d := "\n"; //||tab||"\n";
endif;
///////////////////////////////
if exists get_sup_d then
hld_dtl:= hld_dtl||get_sup_d;
endif;
enddo;
///////////////////////////////////////////////////////////////////////
//get_item:= "\b1 Item: \b0 "||it_item[i]||tab||"\b1 Catalog #: \b0 "||it_catno[i]||" "||"\b1 Charge Code: \b0 "||it_charge[i]||"\n\n";
get_item:= "\b1 Item: \b0 "||it_item[i]||tab||"\b1 Cat #: \b0 "||it_catno[i]||" "||"\b1 Chrg Code: \b0 "||it_charge[i]||"\n\n";
get_sup:= tab||"\b1 Item ID: \b0 "||it_itemID[i]||tab||tab||"\b1 Description: \b0 "||it_desc [i]||"\n"
||tab||"\b1 Notes: \b0 "||it_supNotes[i]||"\n"
||tab||"\b1 Manufacturer: \b0 "||it_manu[i]||"\n"
||tab||"\b1 Disposition Dt: \b0 "||it_dispodtm[i]||"\n\n"//tab||tab||"\b1 Expiration: \b0 "||it_expMM[i]||"/"||it_expDD[i]||"/"||it_expyyyy[i]||"\n"
|| hld_dtl||"\n\n" ;
/// 03/07/17 - Update for building multi details on Supplemental Item details
hold_it:= hold_it, it_itemID[i];
rtn_str:= rtn_str||get_item||get_sup ; //||get_sup_d ;
endif;/// not item in hold_it
endif; // if It_dispoID
ENDDO;
if rtn_str <> "" then
rtn_str:= IT_Head||rtn_str;
endif;
/// for testing
user_guid:= this_documentCommunication.UserGuid;
userid:= read last {" select IDCode from cv3user where guid = "|| sql (user_guid) };
if userid matches pattern "service%"
then
ray:=1;
//break;
endif;
////////////////
new_case_info_value := new_case_info_value || rtn_str; //IT_Head;
Endif; /// exists it user
/// /// 03/17/17 - for insertion of Chargeable Item section into the new_case_info_value ////////////////////////
/// 07/12/17 - Place for Items - removed out per meeting
//////////////////////////////// end of items //////////////////////////////////////////////////////
/// for testing
user_guid:= this_documentCommunication.UserGuid;
userid:= read last {" select IDCode from cv3user where guid = "|| sql (user_guid) };
if userid matches pattern "service%"
then
ray:=1;
endif;
////////////////
//////////////////////////////////////////////////////////////////////////////////////
// Set the Document Topic with the Case Number so that the Case Number appears beside the Document Name on the structured note
this_structuredNoteDoc.DocumentTopic := case_number;
// Chart the free text observation items for case number and case info on the structured note
this_documentCommunication := call called_dom_mlm with (this_documentCommunication, case_number_parameter_name, new_case_number_value, sugg_txt_value, update_type);
this_documentCommunication := call called_dom_mlm with (this_documentCommunication, case_info_parameter_name, new_case_info_value, sugg_txt_value, update_type);
endif; //exists case_id then
endif; // exists target_parameter
endif; // this_eventType = "DocumentOpening"
/// for testing
user_guid:= this_documentCommunication.UserGuid;
userid:= read last {" select IDCode from cv3user where guid = "|| sql (user_guid) };
if userid matches pattern "rlatimer%"
then
ray:=1;
break;
endif;
////////////////
Debug := is_display_message; // Set Debug := TRUE to see Message in document
document_communication_message := "Parameter Name " || case_number_parameter_name || " Event " || this_eventType || " Case Number " || case_number;
this_documentCommunication.DisplayMessage := is_display_message;
this_documentCommunication.Message := document_communication_message ;
/*
if(this_eventType = "DocumentClosing" and this_DocumentName = "Endo Intraoperative Nursing")
then
DOC_CALL_SPECIMEN_PATHOLOGY := MLM {{{SINGLE-QUOTE}}}DOC_CALL_SPECIMEN_PATHOLOGY{{{SINGLE-QUOTE}}};
(this_documentCommunication) := CALL DOC_CALL_SPECIMEN_PATHOLOGY with this_documentCommunication;
break;
endif;
break;
*/
;;
evoke:
;;
logic:
conclude true;
;;
action:
return this_documentCommunication;
;;
Urgency: 50;;
end: