maintenance: title: Calculate Body Surface Area (BSA);; mlmname: SYS_CALC_BSA;; arden: version 2.5;; version: 18.4;; institution: Allscripts, System 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: Calculates a patient{{{SINGLE-QUOTE}}}s BSA. ;; explanation: Calculates the BSA using the following rules: 1. If the formula preference = Standard or Pediatric and if the patient{{{SINGLE-QUOTE}}}s age can be calculated, then: - For patients <= 18.0 years, the standard pediatric BSA formula is used. pediatric BSA = SQRT(HeightCm * (WeightKg/3600)) - For patient{{{SINGLE-QUOTE}}}s > 18.0 years, the standard BSA formula is used. standard BSA = (WeightKg^0.425) * (HeightCm^0.725) * 0.007184) 2. If the formula preference = Standard or Pediatric and if the patient{{{SINGLE-QUOTE}}}s age cannot be calculated, then - The facility{{{SINGLE-QUOTE}}}s preference for BSAFormula in the Enterprise Profile is used. If the preference is not set, then the Standard BSA formula will be used. 3. If the formula preference = Ideal, then the ideal weight is used in the calculation. 4. If the formula preference = Adjusted, then the adjusted weight is used in the calculation. Facility may customize this MLM to use their own formulas for BSA calculations. ;; keywords: BSA Calculation; Age ; ;; knowledge: type: data-driven;; data: /* Arguments are passed in from the calling C++ program or MLM */ (BSA_formula_preference, //string - valid strings are Standard, Pediatric, Ideal, or Adjusted ht_val, //number in centimeters (cm) wt_val, //number in kilograms (kg) client_info_obj //Arden ClientInfo object ) := argument; /*******************Make Changes To Spelling And Flags In This Section*******************/ /* Set to true if a decision.log is needed.*/ log_execution_info := false; /* What is the Upper AGE limit for using the Pediatric BSA calculation? */ /* The calculation will use LESS THAN OR EQUAL TO this number listed below */ pediatric_BSA_upper_age_limit:= 18; /* years */ /***************************************************************************************/ /* MLM to calculate weight. */ func_calc_weight := MLM {{{SINGLE-QUOTE}}}SYS_CALC_WT{{{SINGLE-QUOTE}}}; calculate_actual := "Standard"; calculate_pediatric := "Pediatric"; calculate_ideal := "Ideal"; calculate_adjusted := "Adjusted"; /* initialize values to be returned */ BSA_number := 0; BSA_formula := ""; weight_used:= 0; /*----------------------------------------------------------------*/ /* Convert a string representation of a number to an Arden number */ /*----------------------------------------------------------------*/ ht_val := ht_val as number; wt_val := wt_val as number; /* Retrieves birthdate and gender from ClientInfo Object that is passed as an argument */ if exist client_info_obj then (birthdate, birth_year, patient_gender ):= read last {ClientInfo: birthdate, BirthYearNum, GenderTypeIntlCode REFERENCING client_info_obj}; endif; ;; evoke: ;; logic: /*------------------------------*/ /* Save original BSA preference */ /*------------------------------*/ original_BSA_formula_preference := BSA_formula_preference; /*-----------------------------------------------------*/ /* Calculate a patient{{{SINGLE-QUOTE}}}s age and */ /* Reset BSA preference based on the patient{{{SINGLE-QUOTE}}}s age */ /* Reset only if preference is Standard or Pediatric */ /*-----------------------------------------------------*/ if exist birthdate and birth_year > 0 and birthdate is time and (BSA_formula_preference = "Pediatric" OR BSA_formula_preference = "Standard") then patient_age:= (NOW - birthdate) / (1 year); if patient_age <= pediatric_BSA_upper_age_limit then BSA_formula_preference := "Pediatric"; else BSA_formula_preference := "Standard"; endif; /* if patient_age */ endif; /* if exist birthdate */ /*-----------------------------------*/ /* Calculate Body Surface Area (BSA) */ /*-----------------------------------*/ if exist ht_val and ht_val > 0 then /*-----------------------------------------------------------------------------------------------*/ /* Pediatric BSA calculation */ /*-----------------------------------------------------------------------------------------------*/ IF BSA_formula_preference = "Pediatric" and exist wt_val and wt_val > 0 then BSA_number := SQRT(ht_val * (wt_val/3600)); BSA_formula := "BSA calculated using formula: SQRT(HeightCm * (WeightKg/3600))"; weight_used := wt_val; /*-----------------------------------------------------------------------------------------------*/ /* Standard BSA calculation */ /*-----------------------------------------------------------------------------------------------*/ ELSEIF (BSA_formula_preference = "Standard" ) and exist wt_val and wt_val > 0 then BSA_number := (ht_val**0.725) * (wt_val**0.425) * 0.007184; BSA_formula := "BSA calculated using formula: (WeightKg^0.425) * (HeightCm^0.725) * 0.007184)"; weight_used := wt_val; /*-----------------------------------------------------------------------------------------------*/ /* Ideal Weight BSA calculation */ /*-----------------------------------------------------------------------------------------------*/ ELSEIF (BSA_formula_preference = "Ideal" ) then (IdealWeightKg, Tooltip_formula, display_message) := call func_calc_weight with (BSA_formula_preference, ht_val, wt_val, client_info_obj); if exist IdealWeightKg and IdealWeightKg > 0 then BSA_number := IdealWeightKg**0.425 * (ht_val)**0.725 * 0.007184; BSA_formula := "BSA formula: (IdealWeightKg^0.425 * (HeightCm^0.725) * 0.007184)"; weight_used := IdealWeightKg; else BSA_number := 0; endif; //if exist IdealWeightKg and IdealWeightKg > 0 /*-----------------------------------------------------------------------------------------------*/ /* Adjusted Weight BSA calculation */ /*-----------------------------------------------------------------------------------------------*/ ELSEIF (BSA_formula_preference = "Adjusted") then (AdjustedWeightKg, Tooltip_formula, display_message) := call func_calc_weight with (BSA_formula_preference, ht_val, wt_val, client_info_obj ); if exist AdjustedWeightKg and AdjustedWeightKg > 0 then BSA_number := AdjustedWeightKg**0.425 * (ht_val)**0.725 * 0.007184; BSA_formula := "BSA formula: (AdjustedWeightKg^0.425 * (HeightCm^0.725) * 0.007184)"; weight_used := AdjustedWeightKg; else BSA_number := 0; endif; //if exist AdjustedWeightKg and AdjustedWeightKg > 0 ENDIF; /* if BSA_formula_preference */ /*-----------------------------------------------------------------------------------------------*/ /* Rounds the BSA to two decimal points */ /*-----------------------------------------------------------------------------------------------*/ BSA_number_rounded:= (int ((BSA_number + 0.005) * 100))/100; conclude TRUE; else /* The Object Layer will convert an Arden NULL to a zero or -1 */ conclude FALSE; endif; /* if exist ht_val */ ;; action: /* Returns the BSA */ return ( BSA_number_rounded, BSA_formula, weight_used ) ; ;; end: