BMI & BSA Calculator
Overview
Clinical calculator for anthropometric measurements used in health assessment, obesity screening, and chemotherapy dosing calculations.
Key Capabilities:
- BMI Calculation: Standard and adjusted BMI formulas
- BSA Estimation: Multiple validated formulas (DuBois, Mosteller, Haycock)
- Weight Classification: WHO and CDC category assignment
- Dosing Support: Chemotherapy and medication dose calculations
- Pediatric Support: Age-appropriate norms and calculations
- Unit Flexibility: Metric and imperial input support
When to Use
✅ Use this skill when:
- Calculating chemotherapy doses requiring BSA (mg/m²)
- Screening for obesity or underweight in clinical practice
- Adjusting drug doses based on body composition
- Documenting baseline anthropometrics in patient charts
- Teaching medical students clinical calculations
- Quick assessment in resource-limited settings
❌ Do NOT use when:
- BMI alone for clinical diagnosis → Use comprehensive metabolic assessment
- Pregnancy weight assessment → Use gestational weight gain charts
- Pediatric growth evaluation → Use WHO/CDC growth charts with percentiles
- Body composition analysis → Use DEXA or bioimpedance
- Athletic/muscular patients → Consider body fat % instead of BMI
Integration:
- Upstream:
ehr-semantic-compressor(patient data extraction),automated-soap-note-generator(vital signs) - Downstream:
drug-interaction-checker(dose calculation),medication-reconciliation(dosing verification)
Core Capabilities
1. BMI Calculation
Calculate Body Mass Index with classification:
from scripts.calculator import BMIBSACalculator
calc = BMIBSACalculator()
# Calculate BMI
result = calc.calculate_bmi(
weight_kg=70,
height_cm=175,
age=45,
sex="male"
)
print(f"BMI: {result.bmi:.1f} kg/m²")
print(f"Category: {result.category}") # Normal weight
print(f"Ideal weight range: {result.ideal_weight_range}")
BMI Categories (WHO):
| Category | BMI Range | Clinical Significance |
|---|---|---|
| Underweight | < 18.5 | Malnutrition risk |
| Normal | 18.5 - 24.9 | Healthy range |
| Overweight | 25.0 - 29.9 | Increased risk |
| Obese I | 30.0 - 34.9 | High risk |
| Obese II | 35.0 - 39.9 | Very high risk |
| Obese III | ≥ 40.0 | Extremely high risk |
Adjusted BMI:
- BMI Prime: BMI / 25 (obesity severity index)
- Ponderal Index: BMI for tall/short individuals
- Age-adjusted: For elderly patients (>65)
2. BSA Calculation
Multiple formulas for different clinical scenarios:
# Calculate BSA using different formulas
bsa_results = calc.calculate_bsa(
weight_kg=70,
height_cm=175,
formulas=["dubois", "mosteller", "haycock", "gehan_george"]
)
for formula, bsa in bsa_results.items():
print(f"{formula}: {bsa:.2f} m²")
BSA Formulas:
| Formula | Equation | Best For |
|---|---|---|
| DuBois | 0.007184 × W^0.425 × H^0.725 | Adults (most common) |
| Mosteller | √(W × H / 3600) | Adults (simplified) |
| Haycock | 0.024265 × W^0.5378 × H^0.3964 | Pediatrics |
| Gehan-George | 0.0235 × W^0.51456 × H^0.42246 | Oncology |
| Yu | 0.015925 × W^0.5 × H^0.5 | Asian populations |
3. Drug Dosing Calculations
Apply BSA to medication dosing:
# Calculate chemotherapy dose
dose = calc.calculate_dose(
bsa=bsa_results["dubois"],
drug="carboplatin",
dose_per_m2=400, # mg/m²
max_dose=800 # mg cap
)
print(f"Calculated dose: {dose:.0f} mg")
print(f"BSA used: {bsa_results['dubois']:.2f} m²")
Common BSA-Based Doses:
- Carboplatin: AUC-based (Calvert formula)
- 5-FU: 400-600 mg/m²
- Doxorubicin: 60-75 mg/m² (lifetime max 450-550 mg/m²)
- Paclitaxel: 135-175 mg/m²
4. Pediatric Calculations
Age-appropriate calculations for children:
pediatric = calc.pediatric_mode(
weight_kg=25,
height_cm=120,
age_years=8,
sex="female"
)
print(f"BMI-for-age percentile: {pediatric.bmi_percentile}%")
print(f"Weight status: {pediatric.weight_status}")
print(f"BSA (Haycock): {pediatric.bsa:.2f} m²")
Pediatric Considerations:
- BMI percentiles (not absolute values)
- Growth chart integration
- Age-specific BSA formulas
- Body composition changes with development
Common Patterns
Pattern 1: Chemotherapy Dosing
Scenario: Calculate carboplatin dose for cancer patient.
# Calculate BSA and dose
python scripts/main.py \
--weight 70 \
--height 175 \
--drug carboplatin \
--target-auc 5 \
--creatinine-clearance 80 \
--output dose_calculation.txt
Output:
BSA (DuBois): 1.79 m²
Calvert Formula: Dose = Target AUC × (GFR + 25)
= 5 × (80 + 25)
= 525 mg
Maximum dose check: 525 mg ≤ 800 mg ✓
Recommended dose: 525 mg
Pattern 2: Obesity Screening
Scenario: BMI assessment for weight management clinic.
# BMI with full assessment
assessment = calc.assess_bmi(
weight_kg=95,
height_cm=165,
age=52,
sex="female",
waist_cm=98
)
print(f"BMI: {assessment.bmi:.1f} (Obese Class II)")
print(f"Waist-to-height ratio: {assessment.whtr:.2f} (High risk)")
print(f"Comorbidity risk: {assessment.health_risk}")
print(f"Recommended: {assessment.recommendations}")
Pattern 3: Pediatric Growth Assessment
Scenario: Calculate child's BSA for medication dosing.
# Pediatric dosing
child = calc.pediatric_assessment(
weight_kg=20,
height_cm=110,
age_years=6,
sex="male"
)
print(f"BSA: {child.bsa:.2f} m² (Haycock formula)")
print(f"BMI percentile: {child.bmi_percentile}th")
print(f"Doxorubicin dose: {child.bsa * 60:.0f} mg")
Pattern 4: Rapid Clinical Assessment
Scenario: Quick BMI/BSA for admission vital signs.
# Quick calculation
python scripts/main.py --weight 80 --height 180 --quick
# Output:
# BMI: 24.7 kg/m² (Normal)
# BSA: 2.00 m² (DuBois)
# Ideal weight: 65-80 kg
Complete Workflow Example
Comprehensive patient assessment:
from scripts.calculator import BMIBSACalculator
from scripts.reports import ClinicalReport
# Initialize
calc = BMIBSACalculator()
report = ClinicalReport()
# Patient data
patient = {
"weight_kg": 75,
"height_cm": 170,
"age": 55,
"sex": "female",
"waist_cm": 88
}
# Calculate all metrics
bmi = calc.calculate_bmi(**patient)
bsa = calc.calculate_bsa(**patient, formula="dubois")
assessment = calc.comprehensive_assessment(**patient)
# Generate report
report_data = {
"bmi": bmi,
"bsa": bsa,
"assessment": assessment,
"recommendations": assessment.recommendations
}
report.generate(report_data, output="patient_assessment.pdf")
Quality Checklist
Input Validation:
- Weight realistic (2-300 kg range)
- Height realistic (50-250 cm range)
- Units clearly specified (kg/lbs, cm/in)
- Age appropriate for formulas used
Calculation Accuracy:
- Formula selection appropriate for patient
- BSA formula matches clinical context
- Pediatric vs. adult norms correctly applied
- Rounding appropriate (1-2 decimal places)
Clinical Interpretation:
- CRITICAL: BMI is screening tool, not diagnostic
- Ethnicity-specific cutoffs considered
- Muscle mass considered (athletes)
- Age adjustments applied (elderly/children)
Documentation:
- Formula used documented (DuBois vs. Mosteller)
- Units clearly stated
- Date of calculation recorded
- Dose limits verified for chemotherapy
Common Pitfalls
Calculation Errors:
-
❌ Unit confusion → Pounds vs. kg, inches vs. cm
- ✅ Always verify units; convert if necessary
-
❌ Wrong formula → Using adult BSA for infants
- ✅ Use Haycock for children < 12 years
-
❌ BMI over-interpretation → Diagnosing based on BMI alone
- ✅ BMI is screening tool; clinical correlation required
Clinical Misuse:
-
❌ Athletes misclassified → Muscular patients marked obese
- ✅ Consider waist circumference or body fat %
-
❌ Elderly inappropriate norms → Same cutoffs for all ages
- ✅ Use age-adjusted BMI for >65 years
-
❌ Ignoring ethnicity → Universal cutoffs applied
- ✅ Asian populations: lower obesity thresholds
Dosing Errors:
-
❌ BSA rounding → 1.79 m² rounded to 1.8 m²
- ✅ Use precise values for chemotherapy
-
❌ Max dose ignored → Exceeding lifetime limits
- ✅ Always check cumulative doses (doxorubicin)
References
Available in references/ directory:
bsa_formulas_comparison.md- Formula accuracy by populationpediatric_norms.md- Growth charts and percentileschemotherapy_dosing.md- BSA-based drug calculationsethnic_adjustments.md- Population-specific cutoffscalculator_validation.md- Comparison with reference standards
Scripts
Located in scripts/ directory:
main.py- CLI calculator interfacecalculator.py- Core BMI/BSA calculationsformulas.py- Multiple BSA formula implementationspediatric.py- Child-specific calculationsdosing.py- Medication dose calculationsreports.py- Clinical report generation
Limitations
- BMI Limitations: Doesn't distinguish fat from muscle; varies by ethnicity
- BSA Estimation: All formulas are approximations; 10-15% variation normal
- Extreme Values: Very short/tall patients may have inaccurate estimates
- Not for Diagnosis: BMI/BSA are tools, not clinical diagnoses
- Amputees: Standard formulas inaccurate; adjustment needed
- Pregnancy: Special considerations not included
Parameters
| Parameter | Type | Default | Required | Description |
|---|---|---|---|---|
--weight, -w | float | - | Yes | Weight in kilograms |
--height, -H | float | - | Yes | Height in centimeters |
--dose, -d | float | - | No | Standard drug dose per m² in mg (optional) |
--format, -f | string | text | No | Output format (text, json) |
--output, -o | string | - | No | Output file path (optional) |
Usage
Basic Usage
# Calculate BMI and BSA
python scripts/main.py --weight 70 --height 175
# Calculate with drug dosing
python scripts/main.py --weight 70 --height 175 --dose 100
# Output as JSON
python scripts/main.py --weight 70 --height 175 --format json --output results.json
Risk Assessment
| Risk Indicator | Assessment | Level |
|---|---|---|
| Code Execution | Python script executed locally | Low |
| Network Access | No external API calls | Low |
| File System Access | Optional file output only | Low |
| Data Exposure | No sensitive data stored | Low |
| Clinical Risk | Results used for medical decisions | Medium |
Security Checklist
- No hardcoded credentials or API keys
- No unauthorized file system access
- Input validation for weight/height
- Output does not expose sensitive information
- Error messages sanitized
- Script execution in sandboxed environment
Prerequisites
# Python 3.7+
# No additional packages required (uses standard library)
Evaluation Criteria
Success Metrics
- Successfully calculates BMI using standard formula
- Successfully calculates BSA using DuBois formula
- Correctly categorizes BMI (Underweight, Normal, Overweight, Obese)
- Calculates drug doses based on BSA when provided
Test Cases
- Normal Adult: 70kg, 175cm → BMI 22.9 (Normal), BSA ~1.85 m²
- Drug Dosing: 70kg, 175cm, 100mg/m² → Dose 185mg
- JSON Output: Valid JSON with all fields
Lifecycle Status
- Current Stage: Draft
- Next Review Date: 2026-03-06
- Known Issues: None
- Planned Improvements:
- Add additional BSA formulas (Haycock, Mosteller)
- Add pediatric BMI percentiles
- Add unit conversion (lbs, ft/in)
⚕️ Clinical Note: BMI and BSA are screening and calculation tools, not substitutes for clinical judgment. Always correlate with physical examination, patient history, and other assessments. Double-check all chemotherapy calculations independently.