eHealth Infrastructure
2021.3.0 - build

eHealth Infrastructure - Local Development build (v2021.3.0). See the Directory of published versions

Resource Profile: ehealth-provenance

Defining URL:http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-provenance
Version:2021.3.0
Name:ehealth-provenance
Status:Active as of 2021-11-25T09:32:14+00:00
Publisher:Systematic | Trifork
Source Resource:XML / JSON / Turtle

The official URL for this profile is:

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

Introduction

Provenance of a resource is a record that describes entities and processes involved in producing and delivering or otherwise influencing that resource. Provenance provides a critical foundation for assessing authenticity, enabling trust, and allowing reproducibility. Provenance assertions are a form of contextual metadata and can themselves become important records with their own provenance. Provenance statement indicates clinical significance in terms of confidence in authenticity, reliability, and trustworthiness, integrity, and stage in lifecycle (e.g. Document Completion - has the artifact been legally authenticated), all of which may impact security, privacy, and trust policies.

Scope and Usage

In scope of the eHealth Infrastructure, Provenance resources are used for a number of different purposes. Some of these purposes are purely internal to the infrastructure, whereas others are of relevance to clients of the infrastructure.

The details of different usages of Provenance resources relevant to clients are described in the following sections together with the resources and operations they are supporting.

Reuse of measurements

When a client submits measurements in the form of Observation, QuestionnaireResponse and/or Media, the client can submit one or more of these as reused resources, provided that reuse requirements have been met. For each resource where data is reused, the client must construct a Provenance that:

  • identifies the resource containing reused data through the target element
  • identifies the resource from where data was reused through the entity[0].what element
  • identifies a policy which states reuse

Each such Provenance must be submitted along with the resources containing reused data.

See eHealth-observation for further details.

Tracking measurements submitted in the same bundle

Provenance resources are created internally by the eHealth infrastructure to link correlated resources which are submitted together in one bundle:

See eHealth-observation for further details.

Provenance resources are submitted by a client for creation when an EpisodeOfCare (in profile ehealth-episodeofcare) is created using the create-episode-of-care operation.

Some of these provenance resources hold information about which legal frame the EpisodeOfCare is created under through the Provenance element policy. This could be for instance the health law (in Danish: “Sundhedsloven”) or other relevant legal frameworks.

Other of these provenance resources define which data privacy regulations are applicable to data concerning patient, practitioners, and suppliers under the episode of care. This, too, is captured in policy.

See create-episode-of-care for further details.

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraintsdoco
.. Provenance 0..*ProvenanceWho, What, When for a set of resources
... id Σ0..1stringLogical id of this artifact
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... text 0..1NarrativeText summary of the resource, for human interpretation
... contained 0..*ResourceContained, inline Resources
... extension 0..*ExtensionAdditional content defined by implementations
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... target Σ1..*Reference(Resource)Target Reference(s) (usually version specific)
... occurred[x] 0..1When the activity occurred
.... occurredPeriodPeriod
.... occurredDateTimedateTime
... recorded Σ1..1instantWhen the activity was recorded / updated
... policy 1..*uriPolicy or plan the activity was defined by
Binding: Policies for provenances (required)
... location 0..1Reference(Location)Where the activity occurred, if relevant
... reason 0..*CodeableConceptReason the activity is occurring
Binding: PurposeOfUse (extensible): The reason the activity took place.


... activity 0..1CodeableConceptActivity that occurred
Binding: ProvenanceActivityType (extensible): The activity that took place.

... agent 1..*BackboneElementActor involved
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... type Σ0..1CodeableConceptHow the agent participated
Binding: ProvenanceParticipantType (extensible): The type of participation that a provenance agent played with respect to the activity.

.... role 0..*CodeableConceptWhat the agents role was
Binding: SecurityRoleType (example): The role that a provenance agent played with respect to the activity.


.... who Σ1..1Reference(ehealth-practitioner | ehealth-relatedperson | ehealth-patient | ehealth-device | ehealth-organization)Who participated
.... onBehalfOf 0..1Reference(ehealth-practitioner | ehealth-relatedperson | ehealth-patient | ehealth-device | ehealth-organization)Who the agent is representing
... entity 0..*BackboneElementAn entity used in this activity
.... id 0..1stringUnique id for inter-element referencing
.... Slices for extension 0..*ExtensionExtension
Slice: Unordered, Open by value:url
.... ehealth-provenance-dateTimeOfReusedEntity 0..1dateTime, PeriodContains date and time of Reused Entity
URL: http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-provenance-dateTimeOfReusedEntity
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... role Σ1..1codederivation | revision | quotation | source | removal
Binding: ProvenanceEntityRole (required): How an entity was used in an activity.

.... what Σ1..1Reference(Resource)Identity of entity
.... agent 0..*See agent (Provenance)Entity is attributed to this agent
... signature 0..*SignatureSignature on target

doco Documentation for this format

Snapshot View

NameFlagsCard.TypeDescription & Constraintsdoco
.. Provenance 0..*ProvenanceWho, What, When for a set of resources
... id Σ0..1stringLogical id of this artifact
... meta Σ0..1MetaMetadata about the resource
... implicitRules ?!Σ0..1uriA set of rules under which this content was created
... text 0..1NarrativeText summary of the resource, for human interpretation
... contained 0..*ResourceContained, inline Resources
... extension 0..*ExtensionAdditional content defined by implementations
... modifierExtension ?!0..*ExtensionExtensions that cannot be ignored
... target Σ1..*Reference(Resource)Target Reference(s) (usually version specific)
... occurred[x] 0..1When the activity occurred
.... occurredPeriodPeriod
.... occurredDateTimedateTime
... recorded Σ1..1instantWhen the activity was recorded / updated
... policy 1..*uriPolicy or plan the activity was defined by
Binding: Policies for provenances (required)
... location 0..1Reference(Location)Where the activity occurred, if relevant
... reason 0..*CodeableConceptReason the activity is occurring
Binding: PurposeOfUse (extensible): The reason the activity took place.


... activity 0..1CodeableConceptActivity that occurred
Binding: ProvenanceActivityType (extensible): The activity that took place.

... agent 1..*BackboneElementActor involved
.... id 0..1stringUnique id for inter-element referencing
.... extension 0..*ExtensionAdditional content defined by implementations
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... type Σ0..1CodeableConceptHow the agent participated
Binding: ProvenanceParticipantType (extensible): The type of participation that a provenance agent played with respect to the activity.

.... role 0..*CodeableConceptWhat the agents role was
Binding: SecurityRoleType (example): The role that a provenance agent played with respect to the activity.


.... who Σ1..1Reference(ehealth-practitioner | ehealth-relatedperson | ehealth-patient | ehealth-device | ehealth-organization)Who participated
.... onBehalfOf 0..1Reference(ehealth-practitioner | ehealth-relatedperson | ehealth-patient | ehealth-device | ehealth-organization)Who the agent is representing
... entity 0..*BackboneElementAn entity used in this activity
.... id 0..1stringUnique id for inter-element referencing
.... Slices for extension 0..*ExtensionExtension
Slice: Unordered, Open by value:url
.... ehealth-provenance-dateTimeOfReusedEntity 0..1dateTime, PeriodContains date and time of Reused Entity
URL: http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-provenance-dateTimeOfReusedEntity
.... modifierExtension ?!Σ0..*ExtensionExtensions that cannot be ignored even if unrecognized
.... role Σ1..1codederivation | revision | quotation | source | removal
Binding: ProvenanceEntityRole (required): How an entity was used in an activity.

.... what Σ1..1Reference(Resource)Identity of entity
.... agent 0..*See agent (Provenance)Entity is attributed to this agent
... signature 0..*SignatureSignature on target

doco Documentation for this format

 

Other representations of profile: CSV, Excel, Schematron

Terminology Bindings

PathConformanceValueSet
Provenance.languagepreferredCommonLanguages
Max Binding: AllLanguages
Provenance.policyrequiredPolicies for provenances
Provenance.reasonextensiblePurposeOfUse
Provenance.activityextensibleProvenanceActivityType
Provenance.agent.typeextensibleProvenanceParticipantType
Provenance.agent.roleexampleSecurityRoleType
Provenance.entity.rolerequiredProvenanceEntityRole

Constraints

IdPathDetailsRequirements
dom-2ProvenanceIf the resource is contained in another resource, it SHALL NOT contain nested Resources
: contained.contained.empty()
dom-3ProvenanceIf the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource or SHALL refer to the containing resource
: contained.where((('#'+id in (%resource.descendants().reference | %resource.descendants().as(canonical) | %resource.descendants().as(uri) | %resource.descendants().as(url))) or descendants().where(reference = '#').exists() or descendants().where(as(canonical) = '#').exists() or descendants().where(as(canonical) = '#').exists()).not()).trace('unmatched', id).empty()
dom-4ProvenanceIf 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-5ProvenanceIf a resource is contained in another resource, it SHALL NOT have a security label
: contained.meta.security.empty()
dom-6ProvenanceA resource should have narrative for robust management
: text.`div`.exists()
ele-1Provenance.metaAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.implicitRulesAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.languageAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.textAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.modifierExtensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.modifierExtensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.targetAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.occurred[x]All FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.recordedAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.policyAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.locationAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.reasonAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.activityAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.agentAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.agent.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.agent.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.agent.modifierExtensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.agent.modifierExtensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.agent.typeAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.agent.roleAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.agent.whoAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.agent.onBehalfOfAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.entityAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.entity.extensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.entity.extensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.entity.extension:dateTimeOfReusedEntityAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.entity.extension:dateTimeOfReusedEntityMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.entity.modifierExtensionAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ext-1Provenance.entity.modifierExtensionMust have either extensions or value[x], not both
: extension.exists() != value.exists()
ele-1Provenance.entity.roleAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.entity.whatAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.entity.agentAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())
ele-1Provenance.signatureAll FHIR elements must have a @value or children
: hasValue() or (children().count() > id.count())