EventDefinition — detail: CDS triggers
Reusable trigger definition: named, shared across PlanDefinition, Subscription, CDS Hooks. Cornerstone of event-driven clinical orchestration.
Role of named triggers
EventDefinition publishes a trigger like an exportable CQL function: canonical name, condition, filter. Several PlanDefinitions can reference the same EventDefinition instead of duplicating trigger logic. Same for Subscriptions: subscribers register against the EventDefinition, and any change propagates.
Key fields
| Field | Cardinality | Role |
|---|---|---|
url | 0..1 | Canonical URL for cross-referencing. |
version | 0..1 | Semantic version. |
status | 1..1 | draft | active | retired | unknown. |
trigger | 1..* | TriggerDefinition(s). |
TriggerDefinition type
Sub-types of TriggerDefinition.type:
named-event— arbitrary named event.periodic— regular time-based trigger.data-changed— any change to the data point.data-added,data-modified,data-removed.data-accessed,data-access-ended.
Example: ICU admission
{
"resourceType": "EventDefinition",
"id": "icu-admission-event",
"url": "http://example.org/fhir/EventDefinition/icu-admission",
"version": "1.0.0",
"name": "ICUAdmissionEvent",
"title": "ICU Admission Event",
"status": "active",
"experimental": false,
"date": "2026-05-18",
"publisher": "Hospital CDS Team",
"description": "Triggered when an Encounter with class=ICU is created or updated to active.",
"trigger": [{
"type": "named-event",
"name": "encounter-icu-active",
"data": [{
"type": "Encounter",
"codeFilter": [{
"path": "class",
"code": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActCode",
"code": "ACUTE"
}]
}]
}],
"condition": {
"language": "text/fhirpath",
"expression": "Encounter.status = 'in-progress' and Encounter.serviceType.coding.exists(code = 'ICU')"
}
}]
} Common pitfalls
- No FHIRPath
condition— an over-broad EventDefinition floods Subscriptions with noise. - Mutable canonical URL — the URL must not change between versions; use
version. - Confusion with MessageHeader.event — MessageHeader.event describes a wire event, EventDefinition.trigger describes a CDS rule.