Loading documentation

Access required

Your account doesn't have access to the documentation. Contact your administrator.

Sign out
Skip to main content

Lower Extremity Functional Scale

Status: stable Category: function Added: 2026-04-20 Last reviewed: 2026-04-21

Summary

The Lower Extremity Functional Scale (LEFS) is Trinity's lower-limb function instrument. Twenty items, each scored 04, summing to a 0–80 total. Higher scores indicate better function. This is the opposite sign convention from oswestry, neck_disability, and quick_dash, where higher means more disability.

⚠ Sign convention: higher = better

Unlike most disability instruments in the catalog, the LEFS is a function instrument — the maximum score (80) represents full function, and 0 represents total loss of function.

This matters for callers who consume multiple function scores and apply rules like "flag subjects whose function score exceeds a threshold." A threshold of 40 against ODI means subjects with severe disability; against LEFS it means subjects with moderate-to-severe disability (since 41–60 is mild on LEFS). Flipping that sign will produce the wrong set.

Read the band field when mixing instruments — band names (minimal, mild, moderate, severe) have consistent meaning across instruments, so they are the safer cross-instrument signal than the raw numeric score.

Resource identity

FieldValue
Categoryfunction
Resourcelower_extremity_function
Instrument IDlower_extremity_function
Rubric version1.0.0
Path prefix/api/function/lower_extremity_function

Operations

OperationMethodPathContract
QuestionsGET/api/function/lower_extremity_function/questionspatterns-questions.md
ScorePOST/api/function/lower_extremity_function/scorepatterns-score.md

Items

Twenty items, each on a 04 scale.

IDPrompt (paraphrased)
item_1Usual work, housework, or school activities.
item_2Usual hobbies, recreational, or sporting activities.
item_3Getting into or out of the bath.
item_4Walking between rooms.
item_5Putting on your shoes or socks.
item_6Squatting.
item_7Lifting an object from the floor.
item_8Performing light activities around the home.
item_9Performing heavy activities around the home.
item_10Getting into or out of a car.
item_11Walking two blocks.
item_12Walking a mile.
item_13Going up or down 10 stairs.
item_14Standing for 1 hour.
item_15Sitting for 1 hour.
item_16Running on even ground.
item_17Running on uneven ground.
item_18Making sharp turns while running fast.
item_19Hopping.
item_20Rolling over in bed.

Answer choices per item (note: 0 is the worst response):

ValueLabel
0Extreme difficulty / unable
1Quite a bit of difficulty
2Moderate difficulty
3A little bit of difficulty
4No difficulty

Scoring

FieldValue
Methodsimple_sum over all twenty items.
Score range080.

Bands

BandRange (inclusive)Clinical meaning
severe020Severe functional limitation.
moderate2140Moderate functional limitation.
mild4160Mild functional limitation.
minimal6180Minimal functional limitation.

Note the band order: severe is at the low end, minimal is at the high end — consistent with the "higher = better function" sign convention.

Required items

All twenty items are required for a strict /score call.

Worked example

Every item answered with 2 ("moderate difficulty"). See quickstart.md for per-language scaffolding and patterns-score.md for the shared /score contract.

Send:

POST /api/function/lower_extremity_function/score HTTP/1.1
Host: engine.tripod-health.com
apikey: $ENGINE_API_KEY
Content-Type: application/json
X-Request-ID: docs-lower_extremity_function-score-basic

{
"responses": {
"item_1": 2, "item_2": 2, "item_3": 2, "item_4": 2, "item_5": 2,
"item_6": 2, "item_7": 2, "item_8": 2, "item_9": 2, "item_10": 2,
"item_11": 2, "item_12": 2, "item_13": 2, "item_14": 2, "item_15": 2,
"item_16": 2, "item_17": 2, "item_18": 2, "item_19": 2, "item_20": 2
}
}

Receive (200 OK):

{
"instrument": "lower_extremity_function",
"category": "function",
"finding": {
"algorithm_id": "lower_extremity_function",
"algorithm_version": "1.0.0",
"score": 40,
"band": "moderate",
"raw": {
"rubric_version": "1.0.0",
"responded_items": 20
},
"context": null,
"imputed": false,
"sd": null,
"prior_source": null
},
"confidence": {
"overall": 1,
"tier": "high",
"breakdown": {
"input_completeness": 1,
"imputation_variance": null,
"model_certainty": null
}
},
"recommendations": null,
"depth": "basic",
"catalog_version": "0.13.0",
"request_id": "docs-lower_extremity_function-score-basic",
"timestamp": "2026-04-21T23:14:55.913104+00:00"
}

Computation: sum = 20 × 2 = 40, top of the moderate band (21–40). Every item at 4 (no difficulty) yields 80 (minimal); every item at 0 yields 0 (severe). Remember LEFS is higher = better; the band semantics invert compared to disability-index instruments.

Calling in your language

curl

curl -sS -X POST "https://engine.tripod-health.com/api/function/lower_extremity_function/score" \
-H "apikey: $ENGINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"responses":{"item_1":2,"item_2":2,"item_3":2,"item_4":2,"item_5":2,"item_6":2,"item_7":2,"item_8":2,"item_9":2,"item_10":2,"item_11":2,"item_12":2,"item_13":2,"item_14":2,"item_15":2,"item_16":2,"item_17":2,"item_18":2,"item_19":2,"item_20":2}}'

Python (requests)

# Uses the call() helper from quickstart.md.
responses = {f"item_{i}": 2 for i in range(1, 21)}
result = call("POST", "/api/function/lower_extremity_function/score",
{"responses": responses})
print(result["finding"]["score"], result["finding"]["band"])

Node.js (native fetch)

// Uses the call() helper from quickstart.md.
const responses = Object.fromEntries(
Array.from({ length: 20 }, (_, i) => [`item_${i + 1}`, 2]),
);
const result = await call(
"POST",
"/api/function/lower_extremity_function/score",
{ responses },
);
console.log(result.finding.score, result.finding.band);

TypeScript

// Uses the typed call<T>() helper from quickstart.md.
const responses = Object.fromEntries(
Array.from({ length: 20 }, (_, i) => [`item_${i + 1}`, 2]),
);
const result = await call<ScoreResponse>(
"POST",
"/api/function/lower_extremity_function/score",
{ responses },
);

Go

// Uses the call() helper from quickstart.md.
responses := make(map[string]int, 20)
for i := 1; i <= 20; i++ {
responses[fmt.Sprintf("item_%d", i)] = 2
}
result, err := call("POST", "/api/function/lower_extremity_function/score",
map[string]any{"responses": responses}, 3)
if err != nil {
panic(err)
}
finding := result["finding"].(map[string]any)
fmt.Printf("LEFS: %v (%v)\n", finding["score"], finding["band"])

Java

// Uses the call() helper from quickstart.md.
StringBuilder body = new StringBuilder("{\"responses\":{");
for (int i = 1; i <= 20; i++) {
if (i > 1) body.append(",");
body.append("\"item_").append(i).append("\":2");
}
body.append("}}");
String result = call("POST",
"/api/function/lower_extremity_function/score", body.toString(), 3);
System.out.println(result);

C# (.NET HttpClient)

// Uses the Call() helper from quickstart.md.
var responses = Enumerable.Range(1, 20)
.ToDictionary(i => $"item_{i}", _ => 2);
var result = await Call(HttpMethod.Post,
"/api/function/lower_extremity_function/score",
new { responses });
var finding = result.GetProperty("finding");
Console.WriteLine($"LEFS: {finding.GetProperty("score").GetDouble()} ({finding.GetProperty("band").GetString()})");

PowerShell

# Uses the Invoke-Engine helper from quickstart.md.
$responses = @{}
1..20 | ForEach-Object { $responses["item_$_"] = 2 }
$result = Invoke-Engine -Method Post -Path "/api/function/lower_extremity_function/score" -Body @{ responses = $responses }
"LEFS: $($result.finding.score) ($($result.finding.band))"

Clinical interpretation

  • What it measures. Difficulty with twenty lower-extremity- dependent activities. Total score reflects the sum of remaining function across those activities.
  • Score range. 0–80, with 80 representing no limitation.
  • Percentage conversion. Some clinical reports express LEFS as a percentage (score / 80 × 100%). Trinity does not compute this; do it client-side if your UI needs it.

Intended use

  • Lower-extremity outcome tracking for hip, knee, ankle, or foot conditions.
  • Baseline vs. follow-up after intervention targeting the lower limb.
  • Feeding the CDRI composite as the lower-extremity function signal.

Mistaken use

  • Do not apply an "ODI-like" threshold convention. If you are flagging "function below threshold X," remember that LEFS goes up as function improves. An analogous threshold for concerning function on LEFS is score < 40, not score > 40.
  • Do not use for lumbar, cervical, or upper-extremity complaints. Those have their own instruments.
  • Do not convert LEFS to ODI-equivalent by subtraction. While 80 - LEFS produces a value between 0 and 80, it does not correspond to any standardized disability scale.
  • Do not confuse with LEFS 2.0 or regional short forms. The Trinity implements the original 20-item LEFS.

Debugging

  1. Capture request_id. Present in every response body.
  2. Scores look inverted compared to other function instruments. Expected — see the sign-convention note above. Consume band for cross-instrument comparisons.
  3. 400 ValidationError with missing_items. Send all twenty items.
  4. finding.raw.responded_items is less than 20 but the request succeeded. Not possible under the current strict rubric; investigate a proxy between client and API stripping items.

Change history

DateChange
2026-04-20Initial publication.