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.

PlanDefinition — Orchestrating clinical actions

The backbone of a protocol, care pathway or order set. Combines ActivityDefinition, ECA (Event-Condition-Action) rules and CQL libraries to dynamically generate a CarePlan or a RequestOrchestration.

Purpose of the resource

PlanDefinition represents a template of ordered actions — protocol, order set, pathway, ECA rule. Its scope is broader than ActivityDefinition: a PlanDefinition can trigger other nested PlanDefinitions, instantiate several ActivityDefinitions in parallel, and carry conditional rules.

Typical use cases:

  • Order set — bundle of medical orders for a given situation (ICU admission, suspected stroke).
  • Clinical protocol — sequence of assessments and treatments to apply.
  • CDS rule — trigger (Observation, MedicationRequest) + condition (CQL) + actions.
  • Care pathway — structured journey for a condition (diabetes, heart failure).

Key fields

FieldTypeCardinalityRole
urluri0..1Stable canonical URL.
identifierIdentifier[]0..*Business identifiers.
versionstring0..1Semantic version.
namestring0..1Technical name.
titlestring0..1Human-readable title.
typeCodeableConcept0..1order-set | clinical-protocol | eca-rule | workflow-definition.
statuscode1..1draft | active | retired | unknown.
subject[x]CodeableConcept | Reference | canonical0..1Default subject.
goalBackboneElement[]0..*Clinical goals to reach.
actorBackboneElement[]0..*Plan actors (role, qualification).
actionBackboneElement[]0..*Actions to execute (see below).
librarycanonical[]0..*CQL libraries.

Action model

The action field is recursive and carries the orchestration logic:

  • trigger — when to fire (TriggerDefinition: named event, data condition, scheduling).
  • condition — CQL/FHIRPath precondition (applicability, start, stop).
  • input / output — required and produced data.
  • relatedAction — dependency with another action (before, after, concurrent).
  • selectionBehaviorany | all | all-or-none | exactly-one | at-most-one | one-or-more.
  • requiredBehaviormust | could | must-unless-documented.
  • cardinalityBehaviorsingle | multiple.
  • definitionCanonical — points to ActivityDefinition, Questionnaire, or another PlanDefinition.
  • Nested action — for sub-protocols.

JSON example

json plandefinition-example.json
{
  "resourceType": "PlanDefinition",
  "id": "low-suicide-risk-order-set",
  "url": "http://example.org/PlanDefinition/low-suicide-risk-order-set",
  "version": "5.0.0",
  "name": "LowSuicideRiskOrderSet",
  "title": "Low Suicide Risk Order Set",
  "type": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/plan-definition-type",
      "code": "order-set",
      "display": "Order Set"
    }]
  },
  "status": "active",
  "experimental": true,
  "date": "2026-05-15",
  "publisher": "HL7 International (Clinical Decision Support WG)",
  "action": [{
    "title": "Suicide Risk Assessment",
    "definitionCanonical": "http://example.org/ActivityDefinition/suicide-risk-assessment"
  }]
}

$apply operation

The $apply operation materialises a PlanDefinition for a subject and context:

  • POST /PlanDefinition/{id}/$apply with subject, encounter, practitioner, organization.
  • The server evaluates trigger, condition and dynamicValue.
  • It returns a CarePlan or a RequestOrchestration aggregating the concrete resources (MedicationRequest, ServiceRequest, Task…).

Common pitfalls

  • Actions without title — clinicians do not know what to tick in the order set.
  • Unversioned CQL — the library must pin a version for reproducibility.
  • Circular relatedAction — evaluation of the plan loops.
  • Missing selectionBehavior on a group — default is any, rarely what is intended.