maintenance: title: St.Clair Direct info to AdminInstructions;; mlmname: FORM_Direct_Info_to_AdminInstructions;; arden: version 2;; version: 4.50;; institution: St Clair Hospital;; author: Claudia Benson, Claudia.Benson@stclair.org, (412) 942-1307;; specialist: Eclipsys Corporation;; date: 2006-10-11;; validation: testing;; library: purpose: To add selected meds to the Comments field ;; explanation: This generic MLM can be called from several order forms: - RESP SA IPPB - RESP Contin Bronch - RESP Med-Artif Airwy - RESP Spont Aerosol - (others?) If a particular form is used, specified in the configuration list below, then other field labels and values, also in the list, will be made appended to the Administration Instructions. Change History 03.27.2007 DW Added to Atrovent 0.25 list of meds that are added to Admin Instructions field 05.22.2008 DW Added RESP_Arformoterol 15mcg to list of meds that are added to Admin Instructions field 05.28.2008 DW Added Arfomoterol, Racepinephrine, and Pulmocort 1 mg to the Administration Instructions 08.27.2008 RS Added logic to summarize data to the field MLM_Manual Rep Forms for Resp Page instructions 02.21.2013 TMS Added logic to clear stop after field for one time and STAT frequencies. CSR 26557 01.14.2015 TMS Added new form map for "RESP Spont Aerosol" CSR 32176 09.26.2016 JML CSR 33723: Changed all wording references from {{{SINGLE-QUOTE}}}Xopenex{{{SINGLE-QUOTE}}} to {{{SINGLE-QUOTE}}}Levalbuterol{{{SINGLE-QUOTE}}} 04.07.2017 JML CSR 34699: Added new Levalbuterol data items to Continuous Bronchodilator OS Rules: Trigger on formopen or fieldchange. Use list of forms, delimiter to be used between appended values, fields to append to the Admin Instructions. This MLM calls 2 other MLMs: UTIL_STRING_PARSE: A utility for parsing the config list of forms and fields. FORM_GENERIC_Display: A form-called MLM for displaying other, dependent fields. ;; keywords: Called MLMs, Form fields, Respiratory Meds ;; knowledge: type: data-driven;; data: /***********************Make Changes To Spelling And Flags In This Section***********************/ //NOTE: THE RELATIVE ORDER OF ITEMS MUST BE MAINTAINED WITHIN LISTS!!! //MUST HAVE THE FOLLOWING ORDER FOR EACH ELEMENT ITEM: //"FORM_NAME|DELIMITER|FIELDS_TO_APPEND_TO_ADMIN_INSTRUCTIONS" form_map_list := ("RESP SA IPPB|:|RESP_Albuterol 2.5mg/3ml NSS,RESP_Arformoterol 15mcg,RESP_Albuterol 1.25mg/3ml NSS,"|| "RESP_Albuterol Dose,RESP_Alupent 0.2mg/2.5ml NSS,RESP_Alupent 0.3mg/2.5ml NSS,"|| "RESP_Atrovent 0.25 mg/3 ml NSS,RESP_Atrovent 0.5mg/3ml NSS,RESP_Atrovent Dose,RESP_Lidocaine Volume,"|| "RESP_Mucomyst volume,RESP_Mucomyst %,RESP_NSS 2.5cc,RESP_NSS 3cc,RESP NSS amount,RESP_Pentamidine 600mg,"|| "RESP_Pentamidine Dose,RESP_Pulmicort 0.5mg,RESP_Pulmicort 1mg,"|| "RESP_Racepinephrine 0.5ml (Vaponephrine),RESP_Xopenex,RESP_Xopenex 0.63mg/3ml NSS,"|| //(20070110) Change requested by Claudia Benson: remove "IsPRN,RESP_PRN" from admin instruc. // "RESP_Xopenex 1.25mg/3ml NSS,IsPRN,RESP_PRN Reasons,UseWakingHourOnly" "RESP_Xopenex 1.25mg/3ml NSS,UseWakingHourOnly" //End of change (20070110) ,"RESP Contin Bronch|:|RESP_Albuterol 10mg/hr,RESP_Albuterol Dose- mg/hr,RESP_Albuterol 15mg/hr,"|| "RESP_Atrovent mg/hr,RESP_Atrovent 1 mg/hr,RESP_Xopenex 5 mg/hr,RESP_Xopenex 7.5mg/hr" ,"RESP Spont Aerosol|:|RESP_Albuterol 2.5mg/3ml NSS,RESP_Arformoterol 15mcg,RESP_Albuterol 1.25mg/3ml NSS,"|| "RESP_Albuterol Dose,RESP_Alupent 0.2mg/2.5ml NSS,RESP_Alupent 0.3mg/2.5ml NSS,"|| "RESP_Atrovent 0.25 mg/3 ml NSS,RESP_Atrovent 0.5mg/3ml NSS,RESP_Atrovent Dose,RESP_Lidocaine Volume,"|| "RESP_Mucomyst volume,RESP_Mucomyst %,RESP_NSS 2.5cc,RESP_NSS 3cc,RESP NSS amount,RESP_Pentamidine 600mg,"|| "RESP_Pentamidine Dose,RESP_Pulmicort 0.5mg,RESP_Pulmicort 1mg,"|| "RESP_Racepinephrine 0.5ml (Vaponephrine),RESP_Xopenex,RESP_Xopenex 0.63mg/3ml NSS,"|| "RESP_Xopenex 1.25mg/3ml NSS,UseWakingHourOnly" ,"RESP Med-Artif Airwy|:|RESP_Mucomyst volume,RESP NSS amount,Resp Instruction_Lines5" ,"YOUR_FORM_NAME_HERE|YOUR_DELIM|APPEND_FIELD_1,APPEND_FIELD_2,APPEND_FIELD_3,...etc." ); // data item name for Admin Instructions admin_instr_din := "AdminInstructions"; OneTimeFreq := ("STAT", "ONCE"); /************************************************************************************************/ // 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; //Initialize MLM pointers: str_parse := mlm {{{SINGLE-QUOTE}}}UTIL_STRING_PARSE{{{SINGLE-QUOTE}}}; gen_dsply := mlm {{{SINGLE-QUOTE}}}FORM_GENERIC_Display{{{SINGLE-QUOTE}}}; // Display any realated fields first: (this_communication, this_form) := call gen_dsply with this_communication, this_form, client_info_obj; // Initialize messages error_message:=""; admin_instr_msg := ""; page_text_msg := ""; // Assigns fields passed in the Form object to the Field object field_list:= this_form.fields; CallingForm := this_form.name; CallingEvent := this_communication.CallingEvent; CallingField := this_communication.CallingFieldName; FrequencyCode := first of (field_list WHERE field_list.DataItemName="FrequencyCode") ; FrequencyCode_value := FrequencyCode.value; StopAfter := first of (field_list WHERE field_list.DataItemName="StopAfter" AND field_list.Label= "Stop After"); StopAfter_Value := StopAfter.Value; if called_by_editor then CallingForm := "RESP Med-Artif Airwy"; endif; // remove Stop After value for one time frequencies if ((CallingField = "StopAfter" or CallingEvent = "FormClose"))and FrequencyCode_value.FrequencySummary in OneTimeFreq then StopAfter_Value.NUMBER := NULL; StopAfter_Value.Option := ""; endif; for i in 1 seqto count form_map_list do // parse the form mapper: form_element_list := call str_parse with form_map_list[i], "|"; test_form_name := form_element_list[1]; //Lookup form name from map list // Test for proper form if CallingForm = test_form_name then //Find admin instruc field: admin_instr := last of (field_list where field_list.DataItemName = admin_instr_din); page_text := last of (field_list where field_list.DataItemName = "MLM_Manual Resp Forms"); if exists admin_instr then admin_instr.value := admin_instr_msg; page_text.value := page_text_msg; page_del := "" ; dlm := form_element_list[2]; //lookup delimeter //Lookup appending fields, from map list test_append_field_list := call str_parse with form_element_list[3], ","; for k in 1 seqto count test_append_field_list do // Test for proper field test_append_field := test_append_field_list[k]; append_field := first of (field_list where field_list.DataItemName = test_append_field); if exists append_field and (append_field.value is not null and append_field.value <> FALSE) then // Add selected meds to the Special Instructions field admin_instr.value := admin_instr.value || append_field.label; If append_field.label matches pattern "Albuterol%" then If page_text.value matches pattern "Albuterol%" then DoNaught := True; else page_text.value := page_text.value || "Albuterol;"; endif; elseif append_field.label matches pattern "%Atrovent%" then If page_text.value matches pattern "%Atrovent%" then DoNaught := True; else page_text.value := page_text.value || "Atrovent;"; endif; elseif append_field.label matches pattern "%Alupent%" then If page_text.value matches pattern "%Alupent%" then DoNaught := True; else page_text.value := page_text.value || "Alupent;"; endif; elseif append_field.label matches pattern "%Arformoterol%" then If page_text.value matches pattern "%Arformoterol%" then DoNaught := True; else page_text.value := page_text.value || "Arformoterol;"; endif; elseif append_field.label matches pattern "%Alupent%" then If page_text.value matches pattern "%Alupent%" then DoNaught := True; else page_text.value := page_text.value || "Alupent;"; endif; elseif append_field.label matches pattern "%Racepinephrine%" then If page_text.value matches pattern "%Racepinephrine%" then DoNaught := True; else page_text.value := page_text.value || "Racepinephrine;"; endif; elseif append_field.label matches pattern "%Pulmicort%" then If page_text.value matches pattern "%Pulmicort%" then DoNaught := True; else page_text.value := page_text.value || "Pulmicort;"; endif; elseif append_field.label matches pattern "%Pentamidine%" then If page_text.value matches pattern "%Pentamidine%" then DoNaught := True; else page_text.value := page_text.value || "Pentamidine;"; endif; elseif append_field.label matches pattern "Levalbuterol%" then If page_text.value matches pattern "%Levalbuterol%" then DoNaught := True; else page_text.value := page_text.value || "Levalbuterol;"; endif; elseif append_field.label matches pattern "%Lidocaine%" then If page_text.value matches pattern "%Lidocaine%" then DoNaught := True; else page_text.value := page_text.value || "Lidocaine;"; endif; elseif append_field.label matches pattern "%Mucomyst%" then If page_text.value matches pattern "%Mucomyst%" then DoNaught := True; else page_text.value := page_text.value || "Mucomyst;"; endif; elseif append_field.label matches pattern "%NSS%" then If page_text.value matches pattern "%NSS%" then DoNaught := True; else page_text.value := page_text.value || "NSS;"; endif; endif; if append_field.datatype <> "checkbox" then if append_field.dataitemname = "RESP_PRN Reasons" then admin_instr.value := admin_instr.value || " - " || append_field.value; else admin_instr.value := admin_instr.value || " " || append_field.value; endif; endif; // append_field.datatype <> "checkbox" admin_instr.value := admin_instr.value || " " || dlm || " " ; /* // FOR DEBUGGING PURPOSES: display a message to the user this_communication.Message := "callingform = "|| callingform || "\nCallingEvent = " || CallingEvent || "\ntest_form_name = " || test_form_name || "\ntest_field = " || test_field || "\ntest_append_field = " || test_append_field || "\nappend_field = " || append_field.dataitemname || "\nadmin_instr_din = " || admin_instr_din || "\nadmin_instr.value = " || admin_instr.value; this_communication.MessageType := "Informational"; */ endif; // exists append_field and ... enddo; // for k in 1 seq to count test_manditory_field_list endif; // exists admin_instr endif; // CallingForm = test_form_name enddo; // for i in 1 seqto count form_map_list ;; 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: