R6 Ballot (3rd Draft) FHIR CI-Build

This page is part of the FHIR Specification v6.0.0-ballot3: Release 6 Ballot (3rd Draft) (see Ballot Notes ). The current version is 5.0.0 . For a full list Continuous Integration Build of available versions, see FHIR (will be incorrect/inconsistent at times).
See the Directory of published versions icon

Maturity Level : 3
Responsible Owner: FHIR Infrastructure icon Work Group Standards Status : Trial Use Informative

This page describes several issues around lifecycle management for the resources and the content they contain. Specifically, this page describes:

Many FHIR resources have a status element that represents the lifecycle state of the resource or the clinical process represented by the resource. Work groups can specify status values appropriate to the individual resource. Although consistency between resources is not the primary objective, it is helpful to users and developers to have well-crafted value sets that cover all possible states (since the value sets are typically required and non-extensible).

To understand existing status elements, and to help create extensions and resources involving resource states, we note that status value sets follow one of the following life cycles:

  • Clinical workflow process life cycle
  • Request/Order life cycle
  • Entity status life cycle
  • Clinical status life cycle

For additional information about managing resource life cycles, see:

Describes the lifecycle states of complex activities common in healthcare. Typically, these states follow a chronological life cycle that leads from initiation to the conclusion of the action. A characteristic (but non-exhaustive) set of states for the clinical workflow process life cycle include:

  • planned - resources for the activity are being allocated but the activity has not begun
  • cancelled - the planned activity did not start and will not take place
  • in-progress - the activity has begun
  • on-hold (suspended) - the activity has been temporarily interrupted
  • stopped (aborted, failed) - the activity has not been completed but no future action is planned
  • completed (finished) - the activity has been completed

Examples of the clinical workflow life cycle:

  • Communication.status : preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown
  • Appointment.status : proposed | pending | booked | arrived | fulfilled | cancelled | noshow | entered-in-error | checked-in | waitlist
  • Encounter.status : planned | in-progress | on-hold | discharged | completed | cancelled | discontinued | entered-in-error | unknown
  • Goal.lifecycleStatus : proposed | planned | accepted | cancelled | entered-in-error | rejected
  • MedicationAdministration.status : in-progress | not-done | on-hold | completed | entered-in-error | stopped | unknown
  • MedicationDispense.status : preparation | in-progress | cancelled | on-hold | completed | entered-in-error | stopped unfulfilled | declined | unknown
  • Procedure.status : preparation | in-progress | not-done | on-hold | stopped | completed | entered-in-error | unknown

Some resources in FHIR represent orders or requests. The request lifecycle can be generalized in terms of four stages: creating the request, sending the request, receiving acceptance or refusal of the request, and fulfillment of the request. A characteristic (but non-exhaustive) set of states for the request/order pattern include:

  • proposed: An actor (e.g. (e.g., a clinical decision support system) has proposed an action to be requested
  • draft: The request is in preliminary form, prior to being requested
  • requested: The request has been made
  • rejected: The request receiver has declined the request
  • accepted: The request receiver has accepted the request
  • in-progress: Work to fulfill the request has begun
  • on-hold (suspended): Work on the request has been interrupted
  • stopped (aborted): The activity has not been completed but no future action is planned
  • completed: Work on the requested task has been completed, and no further action is required
  • cancelled: The request has been withdrawn

Examples of the request/order life cycle:

The entity availability life cycle indicates if the resource, or the entity described by the resource, is ready for use, not yet ready for use, or has been retired from use. A characteristic (but non-exhaustive) set of states for the entity availability life cycle include:

  • draft: The entity is being prepared but is not yet in use
  • active: The entity is in use
  • suspended: The entity is not in use at the moment, but may return to active status
  • amended: The entity has undergone a revision but is still active
  • retired (superseded): The entity is no longer in use.

Examples of the entity availability life cycle:

Clinical status is somewhat different than the previous status values, since it does not deal with workflow or lifecycle. Instead, it indicates how evidence is affecting a clinical interpretation. Here are two examples:


Many clinical systems maintain The section regarding current lists of some kind of resources for a patient. Some of the commonly maintained lists include: Current Problem List: a list of the problems that are of concern for care of the patient Current Medication List: a list of the medications that a patient is known to be on at the current time Because of the way that resources are used, there is no simple way to determine, from examination of a resource, whether it is 'current' or not. Take, as an example, the Condition resource. In a typical EHR, condition resources might be published on the RESTful interface for the following reasons: to represent an item in a patient's curated problem list to represent a complaint or a diagnosis from an encounter record has been removed due to represent a problem for investigation provided by a diagnostic system as part of a ServiceRequest / DiagnosticReport pair the resources were received from another system as part lack of a referral package, implementation experience and were current for that system when they were received There is no element on the Condition resource that can convey the difference between these usages. In particular, feedback. If there can be no way to differentiate between current and past resources without having to retrospectively alter resources, which is problematic with regard to integrity and digital signatures. One consequence of this is that searching the condition resource for a given patient will return more than just the patient's current problems. Though this is somewhat counter-intuitive to some implementers, restricting searches on Condition to only include the patient's current curated problem list excludes all the other - important - uses of the Condition resource. Determining whether a Condition is an entry on a patient's current problem list is done by checking with the Condition resource is referenced from the correct list. On the RESTful API, this is done using the list search mechanism : GET [base]/AllergyIntolerance?patient=42&_list=$current-allergies This is a request to fetch all the allergies continued interest in the patient 42's "Current Allergy List". Note that the server is not required to actually make a resource representation of the current allergy list available, though doing so assists clients this topic, it may be reintroduced in their audit/integrity tasks. See List Operation "Find" for further information. In a document, current lists are determined by the code on a Composition section. API Incubator icon FHIR defines the following names for functional lists: .

List ResourceType Description Possible LOINC codes in documents / sections $current-problems Condition The "Current Problem List" - A list of current and active diagnoses as well as past diagnoses relevant to the current care of the patient 46105-3 (Problem conditions Set) $current-medications MedicationStatement / MedicationRequest A list of all medications that the patient is taking. The 'current medications list' sometimes may include a mix of prescribed and over-the-counter medications - or only some of them. The list may contain a mix of prescriptions and more general statements , or only one of the two. The list may also correspond to a formal reconciled medication administration schedule, but more often does not 57828-6 (Prescription list), 10160-0 (History of medication) $current-allergies AllergyIntolerance A list of known or suspected propensities to medications, foods, or environmental agents that is provided to help prevent reactions while care is occurring 18716-1 (Allergy studies (set)), 52472-8 (Allergies and Adverse Drug Reactions), and 48765-2 (Allergies and adverse reactions Document) $current-drug-allergies AllergyIntolerance A list of known or suspected propensities to medications that is provided to help prevent reactions while care is occurring. This list is a subset of the full allergies list (same as above?)

The entered-in-error state indicates the resource was created accidentally and should be ignored. This state can apply to resources created by manual entry. It is usually not associated with the Clinical Workflow Process life cycle, but can be associated with the Request/Order and the Entity Availability life cycles.

Handling of erroneous data is tightly tied to business processes and thus there are no generic rules for what to do when data is flagged as erroneous. Implementation Guides may define additional guidance about what actions should be taken, such as data redaction, sending of notifications, etc.

This table summarizes what is expected to happen for each resource in the case that the data it contains is subsequently found to be an erroneous entry.

.operationalStatus
Resource Status
Account .status = entered-in-error
ActivityDefinition .status = retired
ActorDefinition .status = retired
AdministrableProductDefinition .status=entered-in-error
AdverseEvent .status = entered-in-error
AllergyIntolerance .verificationStatus = entered-in-error
Appointment .status=entered-in-error
AppointmentResponse .participantStatus=entered-in-error
ArtifactAssessment .workflowStatus = entered-in-error
AuditEvent Audit Events are recorded, there is no update or delete.
Basic There are no fixed arrangements for Basic - profiles should describe how this works as arrangements will depend on the 'type' of Basic resource
Binary n/a (This would be handled where the binary is linked from)
BiologicallyDerivedProduct .verificationStatus = entered-in-error
BiologicallyDerivedProductDispense .status = entered-in-error BodyStructure .active = false
Bundle Depends on the type: document - see for Composition; message - see for MessageHeader; transaction / transaction-response / history / searchset - not expected to be stored; collection: just delete it if it's stored, and in error
CapabilityStatement .status = retired
CarePlan .status = entered-in-error
CareTeam .status = entered-in-error
ChargeItem .status = entered-in-error ChargeItemDefinition .status = retired Citation .status = retired Claim .status = entered-in-error
ClaimResponse .status = entered-in-error
ClinicalAssessment .status = entered-in-error
ClinicalUseDefinition .status=entered-in-error
CodeSystem .status = retired
Communication .status = entered-in-error
CommunicationRequest .status = entered-in-error
CompartmentDefinition .status = retired
Composition .status = entered-in-error
ConceptMap .status = retired
Condition .verificationStatus = entered-in-error
ConditionDefinition .status = retired
Consent .status = entered-in-error
Contract .status = entered-in-error
Coverage .status = entered-in-error
CoverageEligibilityRequest .status = entered-in-error
CoverageEligibilityResponse .status = entered-in-error
DetectedIssue .status = entered-in-error
Device .status = entered-in-error
DeviceAlert .status = entered-in-error
DeviceAssociation .status = entered-in-error
DeviceDefinition .operationalStatus = entered-in-error
DeviceDispense .status = entered-in-error DeviceMetric .status = entered-in-error
DeviceRequest .status = entered-in-error
DeviceUsage .status = entered-in-error DiagnosticReport .status = entered-in-error
DocumentReference .status = entered-in-error
Encounter .status=entered-in-error
EncounterHistory .status=entered-in-error Endpoint .status=entered-in-error
EnrollmentRequest .status = entered-in-error
EnrollmentResponse .status = entered-in-error
EpisodeOfCare .status=entered-in-error
EventDefinition .status = retired
Evidence .status = retired
EvidenceVariable Delete the instance if it is in error
ExampleScenario .status = retired
ExplanationOfBenefit .status = entered-in-error
FamilyMemberHistory .status = entered-in-error
Flag .status = entered-in-error
FormularyItem .status = entered-in-error
GenomicStudy .status = entered-in-error
Goal .status = entered-in-error
GraphDefinition .status = retired Group .active = false
GuidanceResponse .status = entered-in-error
HealthcareService .active = false
ImagingSelection .status = entered-in-error
ImagingStudy .status = entered-in-error
Immunization .status = entered-in-error
ImmunizationEvaluation .status = entered-in-error ImmunizationRecommendation Immunization recommendations are generated on "just in time" and typically are not retained by the system generating them so there isn't an expected workflow where a previous recommendation would be re-evaluated and found to be "in error". ImplementationGuide .status = retired
Ingredient .status=entered-in-error
InsurancePlan .status = retired
InsuranceProduct .status = retired
InventoryItem .status = entered-in-error InventoryReport .status = entered-in-error Invoice .status = entered-in-error
Library .status = retired
Linkage .active = false
List .status = entered-in-error
Location .status = inactive
ManufacturedItemDefinition .status=entered-in-error
Measure Delete the instance if it is in error
MeasureReport Delete the instance if it is in error
Medication .status = entered-in-error
MedicationAdministration .status = entered-in-error
MedicationDispense .status = entered-in-error
MedicationKnowledge .status = entered-in-error
MedicationRequest .status = entered-in-error
MedicationStatement .status = entered-in-error
MedicinalProductDefinition .status=entered-in-error
MessageDefinition mostly n/a, but in the cases where messages are stored in error, they would simply be deleted
MessageHeader mostly n/a, but in the cases where messages are stored in error, they would simply be deleted
MolecularDefinition .status = entered-in-error
MolecularSequence .status = entered-in-error NamingSystem .status = retired
NutritionIntake .status = entered-in-error
NutritionOrder .status = entered-in-error
NutritionProduct .status = entered-in-error
Observation .status = entered-in-error
ObservationDefinition .status = retired
OperationDefinition .status = retired
OperationOutcome n/a - this resource is not expected to be stored
Organization .active = false
OrganizationAffiliation .active = false
PackagedProductDefinition .status=entered-in-error
Patient .active = false
PaymentNotice .status = entered-in-error
PaymentReconciliation .status = entered-in-error
Permission .status = entered-in-error
Person .active = false
PersonalRelationship PlanDefinition .status = retired
Practitioner .active = false
PractitionerRole .active = false
Procedure .status = entered-in-error
Provenance Provenance are recorded, there is no update or delete.
Questionnaire .status = retired
QuestionnaireResponse .status = entered-in-error
RegulatedAuthorization .status=entered-in-error
RelatedPerson .active = false
RequestOrchestration .status = entered-in-error
Requirements .status = retired
ResearchStudy .status = entered-in-error
ResearchSubject .status = entered-in-error
RiskAssessment .status = entered-in-error
Schedule .active = false
SearchParameter .status = retired
ServiceRequest .status = entered-in-error
Slot .status = entered-in-error
Specimen .status = entered-in-error
SpecimenDefinition .status = retired
StructureDefinition .status = retired
StructureMap .status = retired
Subscription .status = entered-in-error
SubscriptionStatus .status = entered-in-error
SubscriptionTopic .status = off (just turn it off, maybe update the error message)
Substance .status = entered-in-error
SubstanceDefinition .status=entered-in-error
SubstanceNucleicAcid SubstancePolymer .status=entered-in-error SubstanceProtein SubstanceReferenceInformation SubstanceSourceMaterial SupplyDelivery .status = entered-in-error SupplyRequest .status = entered-in-error Task .status = entered-in-error
TerminologyCapabilities .status = retired
TestPlan .status = entered-in-error TestReport .status = entered-in-error TestScript .status = retired Transport .status = entered-in-error ValueSet .status = retired
VerificationResult .status = entered-in-error VisionPrescription .status = entered-in-error

Note: Resources that are not listed in this table do not have any explicit documentation with regard to being entered in error.