0.1.0 - ci-build

PatientScheduling - Local Development build (v0.1.0) built by the FHIR (HL7® FHIR® Standard) Build Tools. See the Directory of published versions

Resource Profile: SMART Schedule

Official URL: http://example.org/StructureDefinition/smart-schedule Version: 0.1.0
Draft as of 2025-12-23 Computable Name: SMARTSchedule

This profile sets minimum expectations for the Schedule resource to enable SMART Schedule Links use cases

Example usage scenarios:

The following are example usage scenarios for this profile:

  • Represent a schedule for healthcare services that is tied to a specific location
  • Represent a schedule for healthcare services that is tied to specific practitioner, regardess of location
  • Represent a schedule for healthcare services that is tied to a specific practitioner and location
  • Represent a schedule for healthcare services that is tied to a specific practitioner and visits can be either in-person at a specific location or virtual

Mandatory and Must Support Data Elements

The following data elements must always be present (Mandatory) or must be supported if the data is present in the sending system (Must Support). These requirements are derived from the SMART Scheduling Links specification, aligned with US Core Schedule guidance, and adapted to support scheduling and coordination workflows.

Each Schedule Must Have:

  • an actor
  • a serviceType

Each Schedule Must Support:

  • an actor that references a HealthcareService, PractitionerRole, or Location

Additional Guidance for Implementers

  • Virtual visits: The 80/20 of schedules will represent an in-person visit and a Schedule with an actor.reference(Location) is expected. However, to accommodate virtual visits, we align with the idea that Locations in R5 can also be used to represent virtual/telemedicine visits and opt to profile Virtual Locations with location.physicalType=vi. Implementers can denote a Schedule offers in-person visits (default) and *additionally** virtual visits by using the SMART Location profile that requires address. Further, virtual-only visits can be specified by profiling against the Virtual Location profile.

  • HealthcareService: In light of R5 promoting serviceType to be a codeableReference to HealthcareService, we'd suggest thinking of that as the primary 'healthcare service' field. Further, for R4 implementation, we'd suggest using Schedule.actor.reference(HealthcareService) as a way to represent Schedule.serviceType - which should also make it easier to transition from R4 to R5 in the future. (TODO - check FHIR version extensions)

Usages:

You can also check for usages in the FHIR IG Statistics

Formal Views of Profile Content

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

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... active ?!Σ 0..1 boolean Whether this schedule is in active use
... actor Σ 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... reference SΣC 0..1 string Literal reference, Relative, internal or absolute URL
.... display SΣ 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.serviceType Base preferred Common Service Types for Scheduling 📦0.1.0 This IG

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: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... serviceType S 1..* CodeableConcept Specific service
Binding: Common Service Types for Scheduling (preferred)
... actor 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... reference S 0..1 string Literal reference, Relative, internal or absolute URL
.... display S 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Schedule.serviceType Base preferred Common Service Types for Scheduling 📦0.1.0 This IG
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... 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
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier External Ids for this item
... active ?!Σ 0..1 boolean Whether this schedule is in active use
... serviceCategory Σ 0..* CodeableConcept High-level category
Binding: ServiceCategory (example)
... serviceType SΣ 1..* CodeableConcept Specific service
Binding: Common Service Types for Scheduling (preferred)
... specialty Σ 0..* CodeableConcept Type of specialty needed
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
... actor Σ 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... reference SΣC 0..1 string Literal reference, Relative, internal or absolute URL
.... type Σ 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).
.... identifier Σ 0..1 Identifier Logical reference, when literal reference is not known
.... display SΣ 0..1 string Text alternative for the resource
... planningHorizon Σ 0..1 Period Period of time covered by 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 preferred Common Service Types for Scheduling 📦0.1.0 This IG
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: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... active ?!Σ 0..1 boolean Whether this schedule is in active use
... actor Σ 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... reference SΣC 0..1 string Literal reference, Relative, internal or absolute URL
.... display SΣ 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Schedule.serviceType Base preferred Common Service Types for Scheduling 📦0.1.0 This IG

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: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... serviceType S 1..* CodeableConcept Specific service
Binding: Common Service Types for Scheduling (preferred)
... actor 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... reference S 0..1 string Literal reference, Relative, internal or absolute URL
.... display S 0..1 string Text alternative for the resource

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Schedule.serviceType Base preferred Common Service Types for Scheduling 📦0.1.0 This IG

Snapshot View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Schedule 0..* Schedule A container for slots of time that may be available for booking appointments
... id Σ 0..1 id Logical id of this artifact
... meta Σ 0..1 Meta Metadata about the resource
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... 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
... contained 0..* Resource Contained, inline Resources
... extension 0..* Extension Additional content defined by implementations
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier External Ids for this item
... active ?!Σ 0..1 boolean Whether this schedule is in active use
... serviceCategory Σ 0..* CodeableConcept High-level category
Binding: ServiceCategory (example)
... serviceType SΣ 1..* CodeableConcept Specific service
Binding: Common Service Types for Scheduling (preferred)
... specialty Σ 0..* CodeableConcept Type of specialty needed
Binding: PracticeSettingCodeValueSet (preferred): Additional details about where the content was created (e.g. clinical specialty).
... actor Σ 1..* Reference(SMART Location | SMART PractitionerRole | Virtual Location | SMART Healthcare Service) Resource(s) that availability information is being provided for
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... reference SΣC 0..1 string Literal reference, Relative, internal or absolute URL
.... type Σ 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).
.... identifier Σ 0..1 Identifier Logical reference, when literal reference is not known
.... display SΣ 0..1 string Text alternative for the resource
... planningHorizon Σ 0..1 Period Period of time covered by 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 preferred Common Service Types for Scheduling 📦0.1.0 This IG
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