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: Location

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

Each line of the Location File is a minified JSON object that conveys a physical location where appointments are available.

Example Usage Scenarios

The following are example usage scenarios for the SMART Scheduling Links Location profile:

  • Find physical or virtual locations where appointments are available
  • Find physical & virtual locations where appointments are available

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 Location Must Have:

  • id
  • name
  • telecom

Each Location Must Support:

  • status
  • description
  • address
  • physical type
  • position

Profile Specific Implementation Guidance:

The visit modality is represented using Location.physicalType data element (Location.form in R5). Implementers can use this data element to represent a virtual (#vi) or physical (#ph). To convey a slot that can be both virtual OR physical, implementers should model it as two separate location resources: one virtual and one physical.

Each identifier object includes a system and a value

  • If a Location is associated with organization-specific identifiers (such as facility numbers, site codes, or store numbers), Slot Publishers SHOULD include these.§sched-22 The system should be a URL that identifies the identifier system, preferably a page on the publisher's web site (e.g. {"system": "https://healthsystem.example.com/facility-directory", "value": "FAC-123"})
  • If a Location participates in external registry programs that assign location identifiers, Slot Publishers MAY include these identifiers using the appropriate system URL for the registry.§sched-23
  • Any number of additional identifiers MAY be included.§sched-24 Each should populate system and value as appropriate, following FHIR identifier conventions.

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: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id SΣ 1..1 id Logical id of this artifact
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
Constraints: ext-1
... status ?!Σ 0..1 code active | suspended | inactive
Binding: LocationStatus (required): Indicates whether the location is still in use.
... name SΣ 1..1 string Name of the location as used by humans
... description SΣ 0..1 string Additional details about the location that could be displayed as further information to identify the location beyond its name
... telecom S 1..* ContactPoint Contact details of the location
.... system SΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
.... value SΣ 1..1 string The actual contact point details
.... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
... address S 0..1 Address Physical location
... physicalType SΣ 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Location.status Base required LocationStatus 📍4.0.1 FHIR Std.
Location.telecom.system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Location.telecom.use Base required ContactPointUse 📍4.0.1 FHIR Std.
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG

Constraints

Id Grade Path(s) Description Expression
dom-2 error Location If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Location 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 Location 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 Location If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Location 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()

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id S 1..1 id Logical id of this artifact
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
... name S 1..1 string Name of the location as used by humans
... telecom S 1..* ContactPoint Contact details of the location
.... system S 1..1 code phone | fax | email | pager | url | sms | other
.... value S 1..1 string The actual contact point details
... address S 0..1 Address Physical location
... physicalType S 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG
NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id SΣ 1..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
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
Constraints: ext-1
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier Unique code or number identifying the location to its users
... status ?!Σ 0..1 code active | suspended | inactive
Binding: LocationStatus (required): Indicates whether the location is still in use.
... operationalStatus Σ 0..1 Coding The operational status of the location (typically only for a bed/room)
Binding: hl7VS-bedStatus (preferred): The operational status if the location (where typically a bed/room).
... name SΣ 1..1 string Name of the location as used by humans
... alias 0..* string A list of alternate names that the location is known as, or was known as, in the past
... description SΣ 0..1 string Additional details about the location that could be displayed as further information to identify the location beyond its name
... mode Σ 0..1 code instance | kind
Binding: LocationMode (required): Indicates whether a resource instance represents a specific location or a class of locations.
... type Σ 0..* CodeableConcept Type of function performed
Binding: ServiceDeliveryLocationRoleType (extensible): Indicates the type of function performed at the location.
... telecom S 1..* ContactPoint Contact details of the location
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... system SΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
.... value SΣ 1..1 string The actual contact point details
.... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
.... rank Σ 0..1 positiveInt Specify preferred order of use (1 = highest)
.... period Σ 0..1 Period Time period when the contact point was/is in use
... address S 0..1 Address Physical location
... physicalType SΣ 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum
.... altitude 0..1 decimal Altitude with WGS84 datum
... managingOrganization Σ 0..1 Reference(Organization) Organization responsible for provisioning and upkeep
... partOf 0..1 Reference(Location) Another Location this one is physically a part of
... hoursOfOperation 0..* BackboneElement What days/times during a week is this location usually open
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... daysOfWeek 0..* code mon | tue | wed | thu | fri | sat | sun
Binding: DaysOfWeek (required): The days of the week.
.... allDay 0..1 boolean The Location is open all day
.... openingTime 0..1 time Time that the Location opens
.... closingTime 0..1 time Time that the Location closes
... availabilityExceptions 0..1 string Description of availability exceptions
... endpoint 0..* Reference(Endpoint) Technical endpoints providing access to services operated for the location

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Location.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Location.status Base required LocationStatus 📍4.0.1 FHIR Std.
Location.operationalStatus Base preferred hl7VS-bedStatus 📦3.0.0 THO v7.4
Location.mode Base required LocationMode 📍4.0.1 FHIR Std.
Location.type Base extensible ServiceDeliveryLocationRoleType 📦3.0.0 THO v7.4
Location.telecom.system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Location.telecom.use Base required ContactPointUse 📍4.0.1 FHIR Std.
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG
Location.hoursOfOperation.​daysOfWeek Base required DaysOfWeek 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Location If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Location 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 Location 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 Location If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Location 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()

Summary

Mandatory: 5 elements
Must-Support: 11 elements

Extensions

This structure refers to these extensions:

Maturity: 2

Key Elements View

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id SΣ 1..1 id Logical id of this artifact
... implicitRules ?!Σ 0..1 uri A set of rules under which this content was created
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
Constraints: ext-1
... status ?!Σ 0..1 code active | suspended | inactive
Binding: LocationStatus (required): Indicates whether the location is still in use.
... name SΣ 1..1 string Name of the location as used by humans
... description SΣ 0..1 string Additional details about the location that could be displayed as further information to identify the location beyond its name
... telecom S 1..* ContactPoint Contact details of the location
.... system SΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
.... value SΣ 1..1 string The actual contact point details
.... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
... address S 0..1 Address Physical location
... physicalType SΣ 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Location.status Base required LocationStatus 📍4.0.1 FHIR Std.
Location.telecom.system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Location.telecom.use Base required ContactPointUse 📍4.0.1 FHIR Std.
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG

Constraints

Id Grade Path(s) Description Expression
dom-2 error Location If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Location 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 Location 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 Location If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Location 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

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id S 1..1 id Logical id of this artifact
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
... name S 1..1 string Name of the location as used by humans
... telecom S 1..* ContactPoint Contact details of the location
.... system S 1..1 code phone | fax | email | pager | url | sms | other
.... value S 1..1 string The actual contact point details
... address S 0..1 Address Physical location
... physicalType S 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum

doco Documentation for this format

Terminology Bindings (Differential)

Path Status Usage ValueSet Version Source
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG

Snapshot ViewView

NameFlagsCard.TypeDescription & Constraints    Filter: Filtersdoco
.. Location 0..* Location Details and position information for a physical place
... id SΣ 1..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
... Slices for extension 0..* Extension Extension
Slice: Unordered, Open by value:url
.... extension:virtualService 0..* (Complex) R5: Connection details of a virtual service (e.g. conference call) (new)
URL: http://hl7.org/fhir/5.0/StructureDefinition/extension-Location.virtualService
Constraints: ext-1
... modifierExtension ?! 0..* Extension Extensions that cannot be ignored
... identifier Σ 0..* Identifier Unique code or number identifying the location to its users
... status ?!Σ 0..1 code active | suspended | inactive
Binding: LocationStatus (required): Indicates whether the location is still in use.
... operationalStatus Σ 0..1 Coding The operational status of the location (typically only for a bed/room)
Binding: hl7VS-bedStatus (preferred): The operational status if the location (where typically a bed/room).
... name SΣ 1..1 string Name of the location as used by humans
... alias 0..* string A list of alternate names that the location is known as, or was known as, in the past
... description SΣ 0..1 string Additional details about the location that could be displayed as further information to identify the location beyond its name
... mode Σ 0..1 code instance | kind
Binding: LocationMode (required): Indicates whether a resource instance represents a specific location or a class of locations.
... type Σ 0..* CodeableConcept Type of function performed
Binding: ServiceDeliveryLocationRoleType (extensible): Indicates the type of function performed at the location.
... telecom S 1..* ContactPoint Contact details of the location
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
Slice: Unordered, Open by value:url
.... system SΣC 1..1 code phone | fax | email | pager | url | sms | other
Binding: ContactPointSystem (required): Telecommunications form for contact point.
.... value SΣ 1..1 string The actual contact point details
.... use ?!Σ 0..1 code home | work | temp | old | mobile - purpose of this contact point
Binding: ContactPointUse (required): Use of contact point.
.... rank Σ 0..1 positiveInt Specify preferred order of use (1 = highest)
.... period Σ 0..1 Period Time period when the contact point was/is in use
... address S 0..1 Address Physical location
... physicalType SΣ 0..1 CodeableConcept Physical form of the location
Binding: Location Physical Type ValueSet (preferred)
... position S 0..1 BackboneElement The absolute geographic location
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... longitude S 1..1 decimal Longitude with WGS84 datum
.... latitude S 1..1 decimal Latitude with WGS84 datum
.... altitude 0..1 decimal Altitude with WGS84 datum
... managingOrganization Σ 0..1 Reference(Organization) Organization responsible for provisioning and upkeep
... partOf 0..1 Reference(Location) Another Location this one is physically a part of
... hoursOfOperation 0..* BackboneElement What days/times during a week is this location usually open
.... id 0..1 string Unique id for inter-element referencing
.... extension 0..* Extension Additional content defined by implementations
.... modifierExtension ?!Σ 0..* Extension Extensions that cannot be ignored even if unrecognized
.... daysOfWeek 0..* code mon | tue | wed | thu | fri | sat | sun
Binding: DaysOfWeek (required): The days of the week.
.... allDay 0..1 boolean The Location is open all day
.... openingTime 0..1 time Time that the Location opens
.... closingTime 0..1 time Time that the Location closes
... availabilityExceptions 0..1 string Description of availability exceptions
... endpoint 0..* Reference(Endpoint) Technical endpoints providing access to services operated for the location

doco Documentation for this format

Terminology Bindings

Path Status Usage ValueSet Version Source
Location.language Base preferred Common Languages 📍4.0.1 FHIR Std.
Location.status Base required LocationStatus 📍4.0.1 FHIR Std.
Location.operationalStatus Base preferred hl7VS-bedStatus 📦3.0.0 THO v7.4
Location.mode Base required LocationMode 📍4.0.1 FHIR Std.
Location.type Base extensible ServiceDeliveryLocationRoleType 📦3.0.0 THO v7.4
Location.telecom.system Base required ContactPointSystem 📍4.0.1 FHIR Std.
Location.telecom.use Base required ContactPointUse 📍4.0.1 FHIR Std.
Location.physicalType Base preferred Location Physical Type ValueSet 📦1.0.0 This IG
Location.hoursOfOperation.​daysOfWeek Base required DaysOfWeek 📍4.0.1 FHIR Std.

Constraints

Id Grade Path(s) Description Expression
dom-2 error Location If the resource is contained in another resource, it SHALL NOT contain nested Resources contained.contained.empty()
dom-3 error Location 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 Location 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 Location If a resource is contained in another resource, it SHALL NOT have a security label contained.meta.security.empty()
dom-6 best practice Location 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()

Summary

Mandatory: 5 elements
Must-Support: 11 elements

Extensions

This structure refers to these extensions:

Maturity: 2

 

Other representations of profile: CSV, Excel, Schematron

Notes:

Discussed modeling approaches within the SSL Workgroup. See notes in confluence that discusses the modeling approaches and pro/cons for choosing this modeling direction

Representing virtual locations that are licensed

In the Location resource, address has a 0..1 cardinality. Within that data element, state is also 0..1. A use case we need to account for is the concept of showing available slots that patients can book for, usually, the state that they live in. Usually, the superset of states here is based on the practitioner's license. However, that concept is orthogonal to which slot is available because a practitioner may not necessarily want to offer appointments in a given state. There are multiple ways of modeling this with some of them described below:

  • Option 1: extend the native Location.address.state data element to have a 0..* cardinality
  • Option 2: use multiple Location resources to represent the available slots for a particular state
  • Option 3: introduce an extension on Location that denotes the states in which this slot can be offered.

For this PR, we're opting for Option 3 since Location.address semantically represents a physical location and this use case primarily addresses virtual visits. Thus, favor an extension that explicitly describes this use case.

Discussed on 8/3/26 to do the following:

  • remove combined code for physical & virtual; encourage implementers to use two locations instead of one when modeling a location that can be both virtual & location.
  • for licensed states, an alternative data model was proposed to use PractitionerRole.location instead of modeling multiple states directly in location as licensedStates extension. However, in doing the modeling, the concepts likely should be a bit more coupled as slot discovery clients would want to filter on a state, but also whether or not that location is virtual. Suggestion to keep on Location. Options thus are:
    • Option 1: keep existing licensedStates extension on Location. Slot discovery clients can use that to filter on states, but also the visit modaility to further filter on whether a slot is virtual or physical or both
    • Option 2: model multiple states on PractitionerRole.location[]. Slot discovery clients will need to reconcile PractitionerRole.location[] with Schedule.location[] to determine which slots are available in which states and what modalilities. We could also use the same location A in that PractitionerRole.locationA and Schedule.locationA to make that easier.

    Discussed 8/13/26 - internally w/ stakeholders. We agreed to remove the licensed state extension, which also allows us to remove the virtual location sub profile, given that this is a universal realm (UV) FHIR IG. Licensed state is a US-centric concept. We discussed an extension that may be more applicable like licensedJurisdiction, but ultimately landed on removing it entirely and considering a future US-centric SMART Scheduling Links FHIR IG to profile the extension against a state-specific binding like the US Core 2-letter state value set. In the interim, we'll defer constraints to US-centric groups that are working on scheduling to define an extension that can be used to represent US-states.