maintenance: title: FORM_SET_SHOULDER_POST_OP;; mlmname: FORM_SET_SHOULDER_POST_OP;; arden: version 2;; version: 5.50;; institution: St Clair Admissions;; author: Juliet Law, Eclipsys Corp Ext 7461;; specialist: Michele Carter-Payne, Eclipsys Corp Ext 7445;; date: 2011-09-02;; validation: testing;; library: purpose: Used for Post Op Shoulder Order Set ;; explanation: Used for Post Op Shoulder Order Set Change history 09.02.2011 JMLaw Created. 09.07.2018 JMLaw CSR 37062: Logic added to support annual Order Set Revisions project. Concurrently implementing anticoagulant check (previously documented in service ticket# 3260474) ;; keywords: Called MLMs, Shoulder, Post Op ;; knowledge: type: data-driven;; data: // This MLM is passed three arguments, of types // communication_type, form_type and client info object respectively. (this_communication, // Communication object this_form, // Form object client_info_obj //Arden ClientInfo object ) := argument; /*******************Make Changes To Spelling And Flags In This Section*******************/ // Initialize error message error_message:=""; // Assigns fields passed in the Form object to the Field object field_list:= this_form.fields; client_guid := this_communication.ClientGUID; visit_guid := this_communication.ClientVisitGUID; chart_guid := this_communication.ChartGuid; CallingEvent := this_communication.CallingEvent; CallingField := this_communication.CallingFieldName; standard_libs := MLM {{{SINGLE-QUOTE}}}std_include_libs{{{SINGLE-QUOTE}}}; include standard_libs; using "ObjectsPlusXA.SCM.Forms"; using namespace "ObjectsPlusXA.SunriseClinicalManager.Forms"; //Need to implicitly call the generic MLM ONLY for the Anticoagulant Grids anticoagulant_conflict := MLM {{{SINGLE-QUOTE}}}FORM_FUNC_ANTICOAGULANT_CONFLICT_CHECK{{{SINGLE-QUOTE}}}; // Retrieve field list of Nursing Assessment Grid NursingAssessments := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 12); NursingAssessments_List := NursingAssessments.Value; //Retrieve field list of Conditional Order Grid ConditionalOrders := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 31); ConditionalOrders_List := ConditionalOrders.Value; // Retrieve field list of Bowel Regimen Order Grid BowelOrders := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 7); BowelOrders_List := BowelOrders.Value; // Retrieve field list of Anti-Emetic Order Grid AntiEmeticOrders := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 6); AntiEmeticOrders_List := AntiEmeticOrders.Value; //Retrieve field list of Moderate Pain Order Grid ModPainOrders := last of (field_list where field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 5); ModPainOrders_List := ModPainOrders.Value; //Retrieve field list of Severe Pain Order Grid SeverePainOrders := last of (field_list where field_list.DataItemname = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 4); SeverePainOrders_List := SeverePainOrders.Value; Lovenox_AntiCoag_Orders := last of ( field_list WHERE field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 9 ); Lovenox_AntiCoag_List := Lovenox_AntiCoag_Orders.Value; Aspirin_AntiCoag_Orders := last of ( field_list WHERE field_list.DataItemName = "MultiOrderGrid" AND field_list.Control_MultiFieldOccNum = 41 ); Aspirin_AntiCoag_List := Aspirin_AntiCoag_Orders.Value; if (CallingField = "MultiOrderGrid|12") then InstrFld := first of (NursingAssessments_List where NursingAssessments_List.Name = "Nurse Instruction:"); if (InstrFld.IsSelected = true) then ConditionalOrders_List.IsSelected := (true,true); else ConditionalOrders_List.IsSelected := (false,false); endif; endif; if (CallingField = "MultiOrderGrid|7") then Found_MofM := first of (BowelOrders_List where BowelOrders_List.Name = "Magnesium Hydroxide Susp"); Found_Senna := first of (BowelOrders_List where BowelOrders_List.Name = "Senna Tab"); if (Found_MofM.IsSelected = true) then Found_Senna.IsSelected := false; Found_Senna.IsReadOnly := true; elseif (Found_Senna.IsSelected = true) then Found_MofM.IsSelected := false; Found_MofM.IsReadOnly := true; else Found_Senna.IsSelected := false; Found_MofM.IsSelected := false; Found_Senna.IsReadOnly := false; Found_MofM.IsReadOnly := false; endif; endif; if (CallingField = "MultiOrderGrid|6") then FirstThree := (AntiEmeticOrders_List.IsSelected[1], AntiEmeticOrders_List.IsSelected[2], AntiEmeticOrders_List.IsSelected[3]); if true in Firstthree then NewReadOnly := (); NewSelected := (); for k in (1 seqto (count AntiEmeticOrders_List.IsSelected)) do if k <= 3 then if AntiEmeticOrders_List.IsSelected[k] = true then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected,true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; endif; elseif k = 4 then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected,AntiEmeticOrders_List.IsSelected[k]; elseif (k <= 8) then NewReadOnly := NewReadOnly, true; NewSelected:= NewSelected, AntiEmeticOrders_List.IsSelected[4]; else NewReadOnly := NewReadOnly, AntiEmeticOrders_List.IsReadOnly[k]; NewSelected := NewSelected, AntiEmeticOrders_List.IsSelected[k]; endif; enddo; AntiEmeticOrders_List.IsReadOnly := NewReadOnly; AntiEmeticOrders_List.IsSelected := NewSelected; else NewReadOnly := (); DeselectAll := (); for k in (1 seqto (count AntiEmeticOrders_List.IsSelected)) do if k <= 3 then NewReadOnly := NewReadOnly, false; DeselectAll := DeselectAll ,false; elseif k>8 then NewReadOnly := NewReadOnly, AntiEmeticOrders_List.IsReadOnly[k]; DeselectAll := DeselectAll, AntiEmeticOrders_List.IsSelected[k]; else NewReadOnly := NewReadOnly, true; DeselectAll := DeselectAll, false; endif; enddo; AntiEmeticOrders_List.IsReadOnly := NewReadOnly; AntiEmeticOrders_List.IsSelected := DeselectAll; endif; endif; if (CallingField = "MultiOrderGrid|5") then LastThree := (ModPainOrders_List.IsSelected[2], ModPainOrders_List.IsSelected[3], ModPainOrders_List.IsSelected[4]); if true IN LastThree then NewReadOnly := (); NewSelected := (); for k in (1 seqto (count ModPainOrders_List.IsSelected)) do if (k = 1) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, ModPainOrders_List.IsSelected[k]; elseif (k > 1) then if (ModPainOrders_List.IsSelected[k] = true) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; endif; else NewReadOnly := NewReadOnly, ModPainOrders_List.IsReadOnly[k]; NewSelected := NewSelected, ModPainOrders_List.IsSelected[k]; endif; enddo; ModPainOrders_List.IsSelected := NewSelected; ModPainOrders_List.IsReadOnly := NewReadOnly; else NewReadOnly := (); DeSelectAll := (); for k in (1 seqto (count ModPainOrders_List.IsSelected)) do if (k=1) then NewReadOnly := NewReadOnly, false; DeSelectAll := DeSelectAll, ModPainOrders_List.IsSelected[k]; elseif (k > 1) then NewReadOnly := NewReadOnly, false; DeSelectAll := DeSelectAll, false; else NewReadOnly := NewReadOnly, ModPainOrders_List.IsReadOnly[k]; DeSelectAll := DeSelectAll, ModPainOrders_List.IsSelected[k]; endif; enddo; ModPainOrders_List.IsSelected := DeSelectAll; ModPainOrders_List.IsReadOnly := NewReadOnly; endif; endif; if (CallingField = "MultiOrderGrid|4") then severe_pain_meds := ("Oxycodone 5mg Tab", "Acetaminophen 500mg/Hydrocodon 7.5mg Tab", "PCA - Hydromorphone Order Set", "PCA - Morphine Order Set"); if (true IN SeverePainOrders_List.IsSelected) then NewReadOnly := (); NewSelected := (); for k IN (1 seqto (count SeverePainOrders_List.IsSelected)) do if (SeverePainOrders_List.Name[k] IN severe_pain_meds) then if (SeverePainOrders_List.IsSelected[k] = true) then NewReadOnly := NewReadOnly, false; NewSelected := NewSelected, true; else NewReadOnly := NewReadOnly, true; NewSelected := NewSelected, false; endif; else NewReadOnly := NewReadOnly, SeverePainOrders_List.IsReadOnly[k]; NewSelected := NewSelected, SeverePainOrders_List.IsSelected[k]; endif; enddo; SeverePainOrders_List.IsSelected := NewSelected; SeverePainOrders_List.IsReadOnly := NewReadOnly; else NewReadOnly := (); DeSelectAll := (); for k in (1 seqto (count SeverePainOrders_List.IsSelected)) do if (SeverePainOrders_List.Name[k] IN severe_pain_meds) then NewReadOnly := NewReadOnly, false; DeSelectAll := DeSelectAll, false; else NewReadOnly := NewReadOnly, SeverePainOrders_List.IsReadOnly[k]; DeSelectAll := DeSelectAll, SeverePainOrders_List.IsSelected[k]; endif; enddo; SeverePainOrders_List.IsSelected := DeSelectAll; SeverePainOrders_List.IsReadOnly := NewReadOnly; endif; endif; //CSR 37062: Begin Change if ( CallingField = "MultiOrderGrid|9" OR CallingField = "MultiOrderGrid|41" ) then Enoxaparin_Select := first of ( Lovenox_AntiCoag_List WHERE Lovenox_AntiCoag_List.Name matches pattern "Enoxaparin%" ); Aspirin_Select := first of ( Aspirin_AntiCoag_List WHERE Aspirin_AntiCoag_List.Name matches pattern "Aspirin%" ); if ( Enoxaparin_Select.IsSelected = true )then Aspirin_Select.IsSelected := false; Aspirin_Select.IsReadonly := true; (stop, stop_message, severity) := call anticoagulant_conflict WITH (this_communication, this_form, client_info_obj, Enoxaparin_Select.Name); if ( stop = true ) then if ( severity = "high" ) then dialogRes := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with stop_message, "Anticoagulant Order Conflict", "OK" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}, "Exclamation" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}}; Enoxaparin_Select.IsSelected := false; Aspirin_Select.IsReadonly := false; else dialogRes := call {{{SINGLE-QUOTE}}}MessageBox{{{SINGLE-QUOTE}}}.Show with stop_message, "Anticoagulant Order Conflict", "YesNo" as {{{SINGLE-QUOTE}}}MessageBoxButtons{{{SINGLE-QUOTE}}}, "Question" as {{{SINGLE-QUOTE}}}MessageBoxIcon{{{SINGLE-QUOTE}}}; if ( ( dialogRes as String ) = "No" ) then Enoxaparin_Select.IsSelected := false; Aspirin_Select.IsReadonly := false; endif; endif; endif; elseif ( Aspirin_Select.IsSelected = true ) then Enoxaparin_Select.IsSelected := false; Enoxaparin_Select.IsReadonly := true; else Enoxaparin_Select.IsSelected := false; Enoxaparin_Select.IsReadonly := false; Aspirin_Select.IsSelected := false; Aspirin_Select.IsReadonly := false; endif; endif; //CSR 37062: End Change ;; evoke: // No evoke statement ;; logic: conclude true; ;; action: // This MLM returns two parameters, of types communication_type and form_type respectively. return this_communication, this_form; ;; end: