SMART Scheduling Links
1.0.0 - STU 1 International flag

SMART Scheduling Links, published by HL7 International / Patient Administration. This guide is not an authorized publication; it is the continuous build for version 1.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/smart-scheduling-links/ and changes regularly. See the Directory of published versions

Resource Profile: Schedule

Official URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/smart-scheduling-schedule Version: 1.0.0
Standards status: Trial-use Maturity Level: 2 Computable Name: SmartSchedulingSchedule
Other Identifiers: OID:2.16.840.1.113883.4.642.40.91.42.9

Each line of the Schedule File is a minified JSON object that conveys information about a Schedule to which slots are attached. The Schedule represents a particular healthcare service (e.g., primary care appointments, specialist consultations, or procedures) offered at a specific location or by a specific practitioner role.

Example Usage Scenarios

Schedules can reference multiple actors in the actor array to provide more specific context about the healthcare service. Common patterns include:

  • Location-only schedules: Reference only a Location resource, indicating that appointments are available at that location but not tied to a specific practitioner role.
  • PractitionerRole-only schedules: Reference only a PractitionerRole resource, indicating appointments with that specific practitioner role regardless of location.
  • Location and PractitionerRole schedules: Reference both Location and PractitionerRole resources, indicating appointments for a specific practitioner role at a specific location. This is useful for:
    • Multi-location practices where practitioner roles work at different sites
    • Specialty clinics where specific practitioner roles provide services at designated locations
    • Healthcare systems where practitioner role schedules vary by location

When multiple actors are specified, all referenced resources apply to the schedule and its associated slots.

Mandatory and Must Support Data Elements

The following data elements must always be present or must be supported if the data is present in the sending system. They are presented below in a simple human-readable explanation. Profile specific guidance and examples are provided as well. The Formal Views below provides the formal summary, definitions, and terminology requirements.

Each Schedule Must Have:

  • a serviceType
  • at least one actor

Each Schedule Must Support:

  • a display for the actor

Profile Specific Implementation Guidance:

Each Schedule object may optionally include extension JSON objects in the Schedule's extension array to provide additional context about the healthcare services offered. Common extensions might include:

Extensions should follow FHIR extension conventions and use appropriate extension URLs. Implementers may define custom extensions as needed for their specific use cases, following FHIR extension guidelines.

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

Description Differentials, Snapshots, and other representations.

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
Schedule.active This element is a modifier element. This element is included in summaries. 0..1 boolean Whether this schedule is in active use
Schedule.serviceType This element must be supported. This element is included in summaries. 1..* CodeableConcept Specific service
Binding: ServiceType (example)
Schedule.actor This element must be supported. This element is included in summaries. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.reference This element must be supported. This element is included in summaries. C 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.display This element must be supported. This element is included in summaries. 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.serviceType Base example Service type 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Schedule If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Schedule If 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-4 error Schedule If 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-5 error Schedule If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Schedule A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

This structure is derived from Schedule

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.serviceType This element must be supported. 1..* CodeableConcept Specific service
Schedule.actor This element must be supported. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.reference This element must be supported. 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.display This element must be supported. 0..1 string Text alternative for the resource

doco Documentation for this format
NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.id This element is included in summaries. 0..1 id Logical id of this artifact
Schedule.meta This element is included in summaries. 0..1 Meta Metadata about the resource
Schedule.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
Schedule.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
Schedule.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
Schedule.contained 0..* Resource Contained, inline Resources
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
Schedule.identifier This element is included in summaries. 0..* Identifier External Ids for this item
Schedule.active This element is a modifier element. This element is included in summaries. 0..1 boolean Whether this schedule is in active use
Schedule.serviceCategory This element is included in summaries. 0..* CodeableConcept High-level category
Binding: ServiceCategory (example)
Schedule.serviceType This element must be supported. This element is included in summaries. 1..* CodeableConcept Specific service
Binding: ServiceType (example)
Schedule.specialty This element is included in summaries. 0..* CodeableConcept Type of specialty needed
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
Schedule.actor This element must be supported. This element is included in summaries. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.id 0..1 string Unique id for inter-element referencing
Schedule.actor.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Schedule.actor.reference This element must be supported. This element is included in summaries. C 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.type This element is included in summaries. 0..1 uri Type the reference refers to (e.g. "Patient")
Binding: ResourceType (extensible): Aa resource (or, for logical models, the URI of the logical model).
Schedule.actor.identifier This element is included in summaries. 0..1 Identifier Logical reference, when literal reference is not known
Schedule.actor.display This element must be supported. This element is included in summaries. 0..1 string Text alternative for the resource
Schedule.planningHorizon This element is included in summaries. 0..1 Period Period of time covered by schedule
Schedule.comment 0..1 string Comments on availability

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Schedule.serviceCategory Base example Service category 📍4.0.1 FHIR Std.
Schedule.serviceType Base example Service type 📍4.0.1 FHIR Std.
Schedule.specialty Base preferred Practice Setting Code Value Set 📍4.0.1 FHIR Std.
Schedule.actor.type Base extensible ResourceType 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Schedule If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Schedule If 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-4 error Schedule If 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-5 error Schedule If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Schedule A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
Schedule.active This element is a modifier element. This element is included in summaries. 0..1 boolean Whether this schedule is in active use
Schedule.serviceType This element must be supported. This element is included in summaries. 1..* CodeableConcept Specific service
Binding: ServiceType (example)
Schedule.actor This element must be supported. This element is included in summaries. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.reference This element must be supported. This element is included in summaries. C 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.display This element must be supported. This element is included in summaries. 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.serviceType Base example Service type 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Schedule If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Schedule If 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-4 error Schedule If 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-5 error Schedule If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Schedule A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

Differential View

This structure is derived from Schedule

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.serviceType This element must be supported. 1..* CodeableConcept Specific service
Schedule.actor This element must be supported. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.reference This element must be supported. 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.display This element must be supported. 0..1 string Text alternative for the resource

doco Documentation for this format

Snapshot ViewView

NameFlagsCard.TypeDescription & Constraints    Filter: doco
Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
Schedule.id This element is included in summaries. 0..1 id Logical id of this artifact
Schedule.meta This element is included in summaries. 0..1 Meta Metadata about the resource
Schedule.implicitRules This element is a modifier element. This element is included in summaries. 0..1 uri A set of rules under which this content was created
Schedule.language 0..1 code Language of the resource content
Binding: CommonLanguages (preferred): A human language.
Additional BindingsPurpose
AllLanguages Max Binding
Schedule.text 0..1 Narrative Text summary of the resource, for human interpretation
This profile does not constrain the narrative in regard to content, language, or traceability to data elements
Schedule.contained 0..* Resource Contained, inline Resources
Schedule.Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url

Slicing Note: The rules on this element (including its children) apply to all the slices, but are not repeated in them
Schedule.Slices for extension.extension:specialty 0..* Coding Schedule Specialty
URL: http://hl7.org/fhir/uv/smart-scheduling-links/StructureDefinition/schedule-specialty
Schedule.modifierExtension This element is a modifier element. 0..* Extension Extensions that cannot be ignored
Schedule.identifier This element is included in summaries. 0..* Identifier External Ids for this item
Schedule.active This element is a modifier element. This element is included in summaries. 0..1 boolean Whether this schedule is in active use
Schedule.serviceCategory This element is included in summaries. 0..* CodeableConcept High-level category
Binding: ServiceCategory (example)
Schedule.serviceType This element must be supported. This element is included in summaries. 1..* CodeableConcept Specific service
Binding: ServiceType (example)
Schedule.specialty This element is included in summaries. 0..* CodeableConcept Type of specialty needed
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
Schedule.actor This element must be supported. This element is included in summaries. 1..* Reference(Practitioner | PractitionerRole | Healthcare Service | Location | Patient | RelatedPerson | Device) Resource(s) that availability information is being provided for
Schedule.actor.id 0..1 string Unique id for inter-element referencing
Schedule.actor.extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
Schedule.actor.reference This element must be supported. This element is included in summaries. C 1..1 string Literal reference, Relative, internal or absolute URL
Schedule.actor.type This element is included in summaries. 0..1 uri Type the reference refers to (e.g. "Patient")
Binding: ResourceType (extensible): Aa resource (or, for logical models, the URI of the logical model).
Schedule.actor.identifier This element is included in summaries. 0..1 Identifier Logical reference, when literal reference is not known
Schedule.actor.display This element must be supported. This element is included in summaries. 0..1 string Text alternative for the resource
Schedule.planningHorizon This element is included in summaries. 0..1 Period Period of time covered by schedule
Schedule.comment 0..1 string Comments on availability

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Schedule.serviceCategory Base example Service category 📍4.0.1 FHIR Std.
Schedule.serviceType Base example Service type 📍4.0.1 FHIR Std.
Schedule.specialty Base preferred Practice Setting Code Value Set 📍4.0.1 FHIR Std.
Schedule.actor.type Base extensible ResourceType 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Schedule If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Schedule If 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-4 error Schedule If 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-5 error Schedule If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Schedule A resource should have narrative for robust management text.`div`.exists()
ele-1 error **ALL** elements All FHIR elements must have a @value or children hasValue() or (children().count() > id.count())
ext-1 error **ALL** extensions Must have either extensions or value[x], not both extension.exists() != value.exists()

 

Other representations of profile: CSV, Excel, Schematron