Work Ability Index
Status:
stableCategory:occupationalAdded:2026-04-20Last reviewed:2026-04-21
Summary
The Work Ability Index (WAI) is Trinity's measure of perceived
current work ability. Seven items, each scored 1–7, summing to
7–49 and mapping to four tiers from poor to excellent. Higher
scores indicate better work ability.
⚠ Work ability ≠ return-to-work readiness
Work ability and return-to-work readiness are often conflated but are different constructs. Work ability is the current match between a person's capacities and their job's demands. Return-to-work readiness is whether they are ready to resume the job right now, which depends on ability, motivation, logistics, permission, and context.
The WAI measures the former. It does not produce a verdict on RTW
readiness. Use
recovery_expectation for
belief about future work, and let the caller's own workflow
integrate those signals with the broader context for RTW decisions.
Resource identity
| Field | Value |
|---|---|
| Category | occupational |
| Resource | work_ability |
| Instrument ID | work_ability |
| Rubric version | 1.0.0 |
| Path prefix | /api/occupational/work_ability |
Operations
| Operation | Method | Path | Contract |
|---|---|---|---|
| Questions | GET | /api/occupational/work_ability/questions | patterns-questions.md |
| Score | POST | /api/occupational/work_ability/score | patterns-score.md |
Items
Seven items, each on a 1–7 scale.
| ID | Prompt (paraphrased) |
|---|---|
item_1 | Current work ability compared with lifetime best. |
item_2 | Work ability in relation to physical demands. |
item_3 | Work ability in relation to mental demands. |
item_4 | Number of currently diagnosed diseases. |
item_5 | Estimated work impairment due to diseases. |
item_6 | Sick leave in the past year. |
item_7 | Own prognosis of work ability in 2 years. |
Answer choices per item are integers 1 through 7. Trinity
uses the numeric value directly; the original WAI scoring maps
item text to these integers differently per item (for example,
item 4 maps "no diseases" to 7 and multiple diseases to lower
values). The /questions response gives the accepted values
with generic 1–7 labels; callers implementing the WAI should
translate between the published WAI scoring rules and the integer
values expected before submitting.
Scoring
| Field | Value |
|---|---|
| Method | simple_sum over all seven items. |
| Score range | 7 – 49. |
Bands (tiers)
| Tier | Range (inclusive) | Clinical meaning |
|---|---|---|
poor | 7 – 27 | Poor work ability. Consider restoration / intervention. |
moderate | 28 – 36 | Moderate work ability. Consider improvement. |
good | 37 – 43 | Good work ability. Support to maintain. |
excellent | 44 – 49 | Excellent work ability. Support to maintain. |
These tier cutoffs align with the commonly-published WAI categorization (poor / moderate / good / excellent) for the full seven-item WAI total.
Required items
All seven items are required for a strict /score call.
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/occupational/work_ability/score HTTP/1.1
Host: engine.tripod-health.com
apikey: $ENGINE_API_KEY
Content-Type: application/json
X-Request-ID: docs-work_ability-score-basic
{
"responses": {
"item_1": 3, "item_2": 3, "item_3": 3, "item_4": 3,
"item_5": 3, "item_6": 3, "item_7": 3
}
}
Receive (200 OK):
{
"instrument": "work_ability",
"category": "occupational",
"finding": {
"algorithm_id": "work_ability",
"algorithm_version": "1.0.0",
"score": 21,
"band": "poor",
"raw": {
"rubric_version": "1.0.0",
"responded_items": 7
},
"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-work_ability-score-basic",
"timestamp": "2026-04-21T23:15:02.589456+00:00"
}
Computation: 7 × 3 = 21 → poor tier (7–27). Every item at 5
yields 35 (moderate, 28–36); every item at 7 yields 49
(excellent); every item at 1 yields 7 (poor).
Calling in your language
curl
curl -sS -X POST "https://engine.tripod-health.com/api/occupational/work_ability/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}}'
Python (requests)
# Uses the call() helper from quickstart.md.
responses = {f"item_{i}": 3 for i in range(1, 8)}
result = call("POST", "/api/occupational/work_ability/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: 7 }, (_, i) => [`item_${i + 1}`, 3]),
);
const result = await call("POST",
"/api/occupational/work_ability/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: 7 }, (_, i) => [`item_${i + 1}`, 3]),
);
const result = await call<ScoreResponse>(
"POST",
"/api/occupational/work_ability/score",
{ responses },
);
Go
// Uses the call() helper from quickstart.md.
responses := make(map[string]int, 7)
for i := 1; i <= 7; i++ {
responses[fmt.Sprintf("item_%d", i)] = 3
}
result, err := call("POST",
"/api/occupational/work_ability/score",
map[string]any{"responses": responses}, 3)
if err != nil {
panic(err)
}
finding := result["finding"].(map[string]any)
fmt.Printf("WAI: %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 <= 7; i++) {
if (i > 1) body.append(",");
body.append("\"item_").append(i).append("\":3");
}
body.append("}}");
String result = call("POST",
"/api/occupational/work_ability/score",
body.toString(), 3);
System.out.println(result);
C# (.NET HttpClient)
// Uses the Call() helper from quickstart.md.
var responses = Enumerable.Range(1, 7)
.ToDictionary(i => $"item_{i}", _ => 3);
var result = await Call(HttpMethod.Post,
"/api/occupational/work_ability/score",
new { responses });
var finding = result.GetProperty("finding");
Console.WriteLine($"WAI: {finding.GetProperty("score").GetDouble()} ({finding.GetProperty("band").GetString()})");
PowerShell
# Uses the Invoke-Engine helper from quickstart.md.
$responses = @{}
1..7 | ForEach-Object { $responses["item_$_"] = 3 }
$result = Invoke-Engine -Method Post -Path "/api/occupational/work_ability/score" -Body @{ responses = $responses }
"WAI: $($result.finding.score) ($($result.finding.band))"
Clinical interpretation
- What it measures. Self-assessed work ability now and short-term prognosis, including health-related impairment to work.
- Reading the tiers. "Poor" is an intervention flag — the subject perceives their work capacity is significantly below their job demands. "Excellent" is a protective signal — the subject perceives strong alignment between capacity and demands.
- Four tiers, not a continuous gradient. The tier matters more
than small within-tier differences; a score of
36and37fall on either side of a tier boundary but clinically mean similar things.
Intended use
- Occupational-health surveillance — periodic WAI administration tracks work ability over time.
- Matching job demands to capacity. A
poorWAI alongside specific low-scoring items (item 2 for physical, item 3 for mental) points to where demand-modification may help. - Feeding the CDRI composite as the occupational-health signal.
Mistaken use
- Do not conflate WAI tier with return-to-work verdict. See the note above.
- Do not use the WAI in contexts where the subject has no job to reference. Every item anchors on current work. In pre- employment or long-term-unemployed contexts, responses become interpretively hollow.
- Do not compare WAI tiers across culturally or occupationally different populations without considering context. "Poor" in a physically-demanding industry often reflects different realities than "poor" in a sedentary role.
Debugging
- Capture
request_id. Present in every response body. - Sum seems off by one or two. Check whether your client is
sending
0-indexed values — the WAI uses1-based values. 400 ValidationErrorwithmissing_items. Send all seven items.- Tier reads
moderatefor a subject with clear intervention need. The moderate band spans28–36; a subject scoring29is close topoor. Inspect individual item responses to understand which sub-areas (physical, mental, disease-related) are driving the total.
Related
- patterns-questions.md, patterns-score.md — shared contracts.
- instruments-recovery_expectation.md — single-item expectation of future work ability.
- instruments-fear_avoidance_beliefs.md — FABQ-W; work-related beliefs complement WAI's work-ability focus.
- composite-cdri-compute.md — composite.
Change history
| Date | Change |
|---|---|
| 2026-04-20 | Initial publication. |