{
  "schemaVersion": 1,
  "slug": "body-surface-area-calculator",
  "category": "health",
  "kind": "implementation",
  "independentValidation": false,
  "implementationHash": "bc423ac87aa01aff01654e8b81bf414a6710026716dd914e12a4200b5287bf29",
  "provenance": "Generated from the calculation contract used by the published page. Publication is not external validation.",
  "sourceFiles": [
    "data/calculators/body-surface-area-calculator.json",
    "src/engine.js"
  ],
  "runtimeSource": "/sources/engine.txt",
  "runtimeHash": "5c888d8898afbdee36267bb9977829e1e2ac568f6677c8ee87469c139864645c",
  "scope": "The compute function records implemented equations, constants, lookup tables and custom rules. Inputs record defaults and allowed values; outputs record precision and units. Defaults are examples, not recommendations. General background references are not evidence for this specific algorithm.",
  "publishedFormula": {
    "formula": "BSA = √(h·w/3600) [Mosteller]; 0.007184·h^0.725·w^0.425 [DuBois]; 0.024265·h^0.3964·w^0.5378 [Haycock]",
    "vars": [
      [
        "h",
        "Height (cm)"
      ],
      [
        "w",
        "Weight (kg)"
      ],
      [
        "BSA",
        "Body surface area (m²)"
      ]
    ],
    "note": "This calculator estimates body surface area from height and weight using the selected formula. Mosteller, Du Bois and Haycock can produce different estimates, so use the formula specified by a clinical protocol when one is required. This tool does not measure burn area or calculate medication doses. Units: cm / kg ↔ in / lb."
  },
  "externalEvidence": {
    "reviewedAt": "2026-10-18",
    "domain": "health",
    "sources": [
      {
        "name": "Body surface assessment with 3D laser-based anthropometry",
        "url": "https://pmc.ncbi.nlm.nih.gov/articles/PMC5313586/"
      },
      {
        "name": "Haycock et al. — Geometric method for measuring body surface area",
        "url": "https://pubmed.ncbi.nlm.nih.gov/650346/"
      }
    ],
    "implementationHash": "bc423ac87aa01aff01654e8b81bf414a6710026716dd914e12a4200b5287bf29",
    "basis": "Metric inputs use centimetres and kilograms. Imperial height is multiplied by 2.54 and weight by 0.45359237 before all three equations are calculated. The formula selector controls the headline BSA; the other estimates remain available for comparison. The comparison table reports 100 × (other estimate − selected estimate) / selected estimate. Values are displayed in square metres and rounded to three decimals, so displayed agreement is not proof that the underlying estimates are identical. The field bounds are input limits, not clinical reference intervals or proof of formula validity for every accepted body size.",
    "limitations": "This calculator estimates body surface area from height and weight using the selected formula. Mosteller, Du Bois and Haycock can produce different estimates, so use the formula specified by a clinical protocol when one is required. This tool does not measure burn area or calculate medication doses. Units: cm / kg ↔ in / lb."
  },
  "contract": {
    "compute": "const invalid={bsa:null,mosteller:null,dubois:null,haycock:null,formulaName:null,heightCm:null,weightKg:null,__error:'inputError'};\nif(!['metric','imperial'].includes(unitSystem)||![1,2,3].includes(Number(formula))||!Number.isFinite(height)||!Number.isFinite(weight))return invalid;\nconst h=height*(unitSystem==='imperial'?2.54:1),w=weight*(unitSystem==='imperial'?0.45359237:1);if(h<30-1e-7||h>280+1e-7||w<1-1e-7||w>500+1e-7)return invalid;\nconst mosteller=Math.sqrt(h*w/3600),dubois=0.007184*Math.pow(h,0.725)*Math.pow(w,0.425),haycock=0.024265*Math.pow(h,0.3964)*Math.pow(w,0.5378),sel=Number(formula),bsa=sel===2?dubois:sel===3?haycock:mosteller;\nconst names=['Mosteller','Du Bois','Haycock'],values=[mosteller,dubois,haycock];return{bsa,mosteller,dubois,haycock,formulaName:names[sel-1],heightCm:h,weightKg:w,__formulaRows:values.map((v,i)=>({name:names[i],value:v,delta:(v-bsa)/bsa*100}))};",
    "inputs": [
      {
        "name": "unitSystem",
        "type": "select",
        "default": "metric",
        "options": [
          {
            "value": "metric"
          },
          {
            "value": "imperial"
          }
        ]
      },
      {
        "name": "height",
        "type": "number",
        "default": 175,
        "min": 30,
        "max": 280,
        "step": "any",
        "requiredValue": true,
        "strictRange": true,
        "unitField": "unitSystem",
        "minByUnit": {
          "metric": 30,
          "imperial": 11.811023622047244
        },
        "maxByUnit": {
          "metric": 280,
          "imperial": 110.23622047244095
        },
        "unitScales": {
          "metric": 1,
          "imperial": 2.54
        },
        "unitPrecision": 8,
        "unitLabels": {
          "metric": "cm",
          "imperial": "in"
        }
      },
      {
        "name": "weight",
        "type": "number",
        "default": 70,
        "min": 1,
        "max": 500,
        "step": "any",
        "requiredValue": true,
        "strictRange": true,
        "unitField": "unitSystem",
        "minByUnit": {
          "metric": 1,
          "imperial": 2.2046226218487757
        },
        "maxByUnit": {
          "metric": 500,
          "imperial": 1102.311310924388
        },
        "unitScales": {
          "metric": 1,
          "imperial": 0.45359237
        },
        "unitPrecision": 8,
        "unitLabels": {
          "metric": "kg",
          "imperial": "lb"
        }
      },
      {
        "name": "formula",
        "type": "select",
        "default": 1,
        "options": [
          {
            "value": 1
          },
          {
            "value": 2
          },
          {
            "value": 3
          }
        ]
      }
    ],
    "outputs": [
      {
        "name": "bsa",
        "precision": 3,
        "unit": "m²"
      },
      {
        "name": "mosteller",
        "precision": 3,
        "unit": "m²"
      },
      {
        "name": "dubois",
        "precision": 3,
        "unit": "m²"
      },
      {
        "name": "haycock",
        "precision": 3,
        "unit": "m²"
      },
      {
        "name": "formulaName",
        "precision": 0,
        "unit": "",
        "type": "text"
      },
      {
        "name": "heightCm",
        "precision": 2,
        "unit": "",
        "trimTrailingZeros": true
      },
      {
        "name": "weightKg",
        "precision": 2,
        "unit": "",
        "trimTrailingZeros": true
      }
    ],
    "interpret": null
  }
}
