eHealth Infrastructure (v2019.5.1)

StructureDefinition: ehealth-plandefinition

Governance principles

PlanDefinitions (subplans), Questionnaires and ActivityDefinitions can be modified independently. Often by people in different organisations. PlanDefinitions (subplans), Questionnaires and ActivityDefinitions, can all be reused in different top level PlanDefinitions.

The folowing principles ensures that the owner of a resource can make controlled updates when resources maintained by other organisations are updated.

These principles are valid for PlanDefinitions, ActivityDefinitions, and Questionnaires. Plan is used as an example in the following principles:

  • Each plan has a version and a status
  • While a plan version is being worked on it should be in status: draft
  • When a plan version is approved it changes status to active and is now ready to be used by Careplans or as a subplan in another plan.
  • A plan with status: active can be retired, but cannot otherwise change. Retired status means that new references to the plan cannot be created. Existing plans may still continue to use the retired version.
  • If a plan needs to be updated, a new version must be created with status: draft. The new version will be a separate resource with a new id and version, but the same name as the previous version.
  • References to plans in FHIR are always to a specific resource id. In practice this means that a reference will identify a specific (Name, Version) combination.
  • If a subplan is available in a new active version, that the parent plan wants to use, then a new version of the parent plan must be created and then the reference can be updated to the new subplan.

Example: A new ActivityDefinition should be added to an existing PlanDefinition.

  1. Read the existing PlanDefinition (Version: 1)
  2. Bump the version to 2, change the status to draft, remove the id.
  3. Add a reference to the new ActivityDefinition in action.definition
  4. Call Create with the modified plan. This will create a new version of the plan in the database with the new ActivityDefinition added.

Update restrictions

These restrictions are valid for PlanDefinitions, ActivityDefinitions, and Questionnaires

  • The owner of the resource can always update the resource
  • The owner can add authors that can also update the resource. Only the owner can modify the list of authors.
  • intendedAudience is a recommendation for use. The system will not enforce any restrictions.

Formal Views of Profile Content

The official URL for this profile is:

http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-plandefinition

This profile builds on PlanDefinition.

This profile was published on Thu May 16 12:32:10 UTC 2019 as a draft by ehealth.sundhed.dk.

Description of Profiles, Differentials, Snapshots, and how the XML and JSON presentations work.

 

Terminology Bindings

PathNameConformanceValueSet
PlanDefinition.languageCommon LanguagesextensibleCommon Languages
PlanDefinition.typePlanDefinitionTypeextensiblePlanDefinitionType
PlanDefinition.statusPublicationStatusrequiredPublicationStatus
PlanDefinition.jurisdictionJurisdiction ValueSetextensibleJurisdiction ValueSet
PlanDefinition.topicTopicTypeexampleTopicType
PlanDefinition.goal.categoryGoalCategoryexampleGoalCategory
PlanDefinition.goal.descriptionSNOMED CT Clinical FindingsexampleSNOMED CT Clinical Findings
PlanDefinition.goal.priorityGoalPrioritypreferredGoalPriority
PlanDefinition.goal.startGoalStartEventexampleGoalStartEvent
PlanDefinition.goal.addressesCondition/Problem/Diagnosis CodesexampleCondition/Problem/Diagnosis Codes
PlanDefinition.goal.target.measureLOINC CodesexampleLOINC Codes
PlanDefinition.action.condition.kindActionConditionKindrequiredActionConditionKind
PlanDefinition.action.relatedAction.relationshipActionRelationshipTyperequiredActionRelationshipType
PlanDefinition.action.participant.typeActionParticipantTyperequiredActionParticipantType
PlanDefinition.action.participant.roleActionParticipantRoleexampleActionParticipantRole
PlanDefinition.action.typeActionTyperequiredActionType
PlanDefinition.action.groupingBehaviorActionGroupingBehaviorrequiredActionGroupingBehavior
PlanDefinition.action.selectionBehaviorActionSelectionBehaviorrequiredActionSelectionBehavior
PlanDefinition.action.requiredBehaviorActionRequiredBehaviorrequiredActionRequiredBehavior
PlanDefinition.action.precheckBehaviorActionPrecheckBehaviorrequiredActionPrecheckBehavior
PlanDefinition.action.cardinalityBehaviorActionCardinalityBehaviorrequiredActionCardinalityBehavior

Constraints

IdPathDetailsRequirements
dom-2PlanDefinitionIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-1PlanDefinitionIf the resource is contained in another resource, it SHALL NOT contain any narrative
: contained.text.empty()
dom-4PlanDefinitionIf a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated
: contained.meta.versionId.empty() and contained.meta.lastUpdated.empty()
dom-3PlanDefinitionIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource
: contained.where(('#'+id in %resource.descendants().reference).not()).empty()
ele-1PlanDefinition.goalAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.goal.targetAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.actionAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.action.conditionAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.action.relatedActionAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.action.participantAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
ele-1PlanDefinition.action.dynamicValueAll FHIR elements must have a @value or children
: hasValue() | (children().count() > id.count())
.