Loading documentation

Access required

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

Sign out
Skip to main content

QuickDASH

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

Summary

QuickDASH is Trinity's upper-extremity function instrument — an 11-item short form of the DASH (Disabilities of the Arm, Shoulder, and Hand). Each item scores 1–5, and the score is converted to a 0–100 disability measure. Higher score means more disability.

⚠ Scoring-formula note

QuickDASH uses a mean-and-offset scaling so the response scale maps to 0–100:

score = (mean_of_responded_items + offset) × multiplier
= (mean - 1) × 25

with multiplier = 25 and offset = -1. Responses live on the clinical 1–5 scale; the -1 offset shifts the mean to a 0–4 range before the ×25 multiplier maps to 0–100.

A caller who thinks of QuickDASH as mean × 25 (without the offset) produces scores 25 points too high. A caller who uses sum × 25 / 11 without the offset sees the same error. Trinity does the offset for you; do not apply it client-side.

Resource identity

FieldValue
Categoryfunction
Resourcequick_dash
Instrument IDquick_dash
Rubric version1.0.0
Path prefix/api/function/quick_dash

Operations

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

Items

Eleven items, each on a 1–5 scale.

IDPrompt (paraphrased)
item_1Open a tight or new jar.
item_2Do heavy household chores.
item_3Carry a shopping bag or briefcase.
item_4Wash your back.
item_5Use a knife to cut food.
item_6Recreational activities requiring force.
item_7Interference with social activities.
item_8Limitation in work or other regular activities.
item_9Arm, shoulder or hand pain.
item_10Tingling in the arm, shoulder, or hand.
item_11Difficulty sleeping because of arm / shoulder / hand pain.

Answer choices per item:

ValueLabel
1No difficulty
2Mild difficulty
3Moderate difficulty
4Severe difficulty
5Unable

Scoring

FieldValue
Methodresponse_mean_scaled with multiplier = 25, offset = -1. Formula: (mean - 1) × 25.
Score range0100.

Bands

BandRange (inclusive)Clinical meaning
minimal025Minimal disability.
mild2650Mild disability.
moderate5175Moderate disability.
severe76100Severe disability.

Required items

All eleven items are required today. (The published QuickDASH permits computing a score with ≥ 10 of 11 items answered; the Trinity's current strict posture does not implement that relaxation. Callers needing partial-input scoring should use /cdri/compute, which tolerates missing instruments.)

Worked example

Every item answered with 3. See quickstart.md for per-language scaffolding and patterns-score.md for the shared /score contract.

Send:

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

{
"responses": {
"item_1": 3, "item_2": 3, "item_3": 3, "item_4": 3, "item_5": 3,
"item_6": 3, "item_7": 3, "item_8": 3, "item_9": 3, "item_10": 3,
"item_11": 3
}
}

Receive (200 OK):

{
"instrument": "quick_dash",
"category": "function",
"finding": {
"algorithm_id": "quick_dash",
"algorithm_version": "1.0.0",
"score": 50,
"band": "mild",
"raw": {
"rubric_version": "1.0.0",
"responded_items": 11
},
"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-quick_dash-score-basic",
"timestamp": "2026-04-21T23:14:55.079524+00:00"
}

Computation: mean of responses = 3.0, then (3.0 - 1) × 25 = 50.0 — upper edge of the mild band (26–50). Every item at 1 yields 0.0 (minimal); every item at 5 yields 100.0 (severe).

Calling in your language

curl

curl -sS -X POST "https://engine.tripod-health.com/api/function/quick_dash/score" \
-H "apikey: $ENGINE_API_KEY" \
-H "Content-Type: application/json" \
-d '{"responses":{"item_1":3,"item_2":3,"item_3":3,"item_4":3,"item_5":3,"item_6":3,"item_7":3,"item_8":3,"item_9":3,"item_10":3,"item_11":3}}'

Python (requests)

# Uses the call() helper from quickstart.md.
responses = {f"item_{i}": 3 for i in range(1, 12)}
result = call("POST", "/api/function/quick_dash/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: 11 }, (_, i) => [`item_${i + 1}`, 3]),
);
const result = await call("POST", "/api/function/quick_dash/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: 11 }, (_, i) => [`item_${i + 1}`, 3]),
);
const result = await call<ScoreResponse>(
"POST",
"/api/function/quick_dash/score",
{ responses },
);

Go

// Uses the call() helper from quickstart.md.
responses := make(map[string]int, 11)
for i := 1; i <= 11; i++ {
responses[fmt.Sprintf("item_%d", i)] = 3
}
result, err := call("POST", "/api/function/quick_dash/score",
map[string]any{"responses": responses}, 3)
if err != nil {
panic(err)
}
finding := result["finding"].(map[string]any)
fmt.Printf("quick_dash: %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 <= 11; i++) {
if (i > 1) body.append(",");
body.append("\"item_").append(i).append("\":3");
}
body.append("}}");
String result = call("POST", "/api/function/quick_dash/score", body.toString(), 3);
System.out.println(result);

C# (.NET HttpClient)

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

PowerShell

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

Clinical interpretation

  • What it measures. Symptom-related functional limitation of the arm, shoulder, and hand.
  • Higher is worse. Disability increases with score.
  • Short form of DASH. The full 30-item DASH is not exposed as a separate Trinity instrument today; QuickDASH is used throughout.

Intended use

  • Upper-extremity outcome tracking for shoulder, elbow, wrist, or hand conditions.
  • Baseline vs. follow-up after an intervention targeting the upper limb.
  • Feeding the CDRI composite as the upper-extremity function signal.

Mistaken use

  • Do not use for low-back or neck disability. Use oswestry or neck_disability.
  • Do not apply the -1 offset client-side. Trinity applies it. Double-offset halves (approximately) the effective score.
  • Do not conflate QuickDASH with DASH. Scores are not interchangeable across the two instruments.

Debugging

  1. Capture request_id. Present in every response body.
  2. Every score is 25 higher than expected. Likely a client-side offset being applied on top of Trinity's. Send raw 1–5 values, not pre-shifted 0–4 values.
  3. 400 ValidationError with missing_items. Send all eleven items. If your UI allows skipping item 10 or 11 (tingling, sleep), collect them explicitly before submitting.
  4. Score falls exactly on a band boundary (e.g. 50, 75). Band ranges are inclusive on both ends; 50 is mild, 51 is moderate.

Change history

DateChange
2026-04-20Initial publication.