TaskList — Materialized worklist
TaskList is not a native FHIR resource. It is a pattern: the materialization of a Task worklist for an actor, via Bundle or List.
Pattern purpose
A worklist is the typical unit of organization for a healthcare actor: laboratory,
pharmacy, operating room, nursing team. FHIR R5 does not define a
TaskList resource: the convention is to materialize the list via a
search on Task filtered and sorted, whose result is a
Bundle of type
searchset.
Materialization options
- Bundle
searchset— dynamic result of a queryGET [base]/Task?owner=Organization/lab&status=ready,in-progress&_sort=priority,-lastModified. Real-time view, no explicit storage. - List —
Listresource withentry[].itempointing to each Task. Persistent, shareable across actors, supportsnote. - Composition — for signed lists (end-of-shift activity report).
Bundle example
Central lab worklist, two active tasks:
{
"resourceType": "Bundle",
"id": "worklist-lab-2026-05-15",
"type": "searchset",
"timestamp": "2026-05-15T09:00:00+02:00",
"total": 3,
"link": [{
"relation": "self",
"url": "https://fhir.example.org/Task?owner=Organization/lab-central&status=ready,in-progress&_sort=priority,-lastModified"
}],
"entry": [
{
"fullUrl": "https://fhir.example.org/Task/01",
"resource": {
"resourceType": "Task",
"id": "01",
"status": "ready",
"intent": "order",
"priority": "stat",
"focus": { "reference": "ServiceRequest/sr-troponin-001" },
"for": { "reference": "Patient/doe-john" },
"owner": { "reference": "Organization/lab-central" }
},
"search": { "mode": "match" }
},
{
"fullUrl": "https://fhir.example.org/Task/02",
"resource": {
"resourceType": "Task",
"id": "02",
"status": "in-progress",
"intent": "order",
"priority": "routine",
"focus": { "reference": "ServiceRequest/sr-cbc-001" },
"for": { "reference": "Patient/martin-anne" },
"owner": { "reference": "Organization/lab-central" }
},
"search": { "mode": "match" }
}
]
} Common pitfalls
- Looking for a
TaskListresource — doesn't exist in R5. It's a pattern, not a resourceType. - Forgetting pagination — on a 1000+ Task worklist, without
_countandnextlinks, the client loads everything in RAM. - Unstable ordering —
_sort=priorityalone isn't enough: add-lastModifiedfor stable order. - No Subscription — manual refresh every 30s = high server load. Prefer a Subscription on the same query.
- Search vs List resource — use List if the user must pin/check items manually; otherwise Bundle is enough.
Related resources
- Task — the listed resource.
- Bundle — typical container (type=searchset).
- Subscription — for real-time worklist refresh.
- Composition — signed alternative.