ediverse Explore the platform

Spotlight PEPPOL BIS Billing 3.0 The EU e-invoicing mandate is here — France Sept 2026, Belgium Jan 2026, Germany 2025.

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

FieldCardinalityRole
url0..1Canonical URL for cross-referencing.
version0..1Semantic version.
status1..1draft | active | retired | unknown.
trigger1..*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

json eventdefinition-icu-admission.json
{
  "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.