Finnish Base Profiles
2.0.0 - release

Publication Build: This will be filled in by the publication tooling

## Resource Profile: FI Base Schedule

Official URL: https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-schedule | Version: 2.0.0
Active as of 2025-10-05 | Computable Name: FiBaseSchedule

This is the Finnish base profile for the Schedule resource.

### Scope and Usage

This implementation guide does not profile scheduling related resources.

However, references to Appointment, Schedule, and Slot resources are included here in order to draw the readers attention to another implementation guide published by HL7 Finland:

- Finnish Scheduling

In addition to implementation guides published by HL7 Finland, there is also ongoing work on FHIR APIs for scheduling in the national Kanta system.

Do note also the older implementation guides by HL7 Finland:

- Finnish Appointment
- Finnish Scheduling

The contents of both of these older implementation guides are now considered outdated.

The concepts and resources have been used, most notably by Omaolo symptom assessment services, Palveluohjain service (previously known ajanvaraus ja palveluohjain -sovellus AVPH) scheduling service, and the scheduling API of the OMNI360 electronic health record system.

Implementers should read these implementation guides with caution and verify the latest state of the art from their customers or from vendors of real world implementations.

HL7 Finland is currently considering updating the published implementation guides.

Usages:

- Refer to this Profile: FI Base Slot and FI Base Slot
- Examples for this Profile: Schedule/ScheduleExample

### Formal Views of Profile Content

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

- Key Elements Table
- Differential Table
- Snapshot Table
- Statistics/References
- All

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources dom-3: 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 dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated dom-5: If a resource is contained in another resource, it SHALL NOT have a security label dom-6: A resource should have narrative for robust management
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created ele-1: All FHIR elements must have a @value or children
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored ele-1: All FHIR elements must have a @value or children ext-1: Must have either extensions or value[x], not both
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use ele-1: All FHIR elements must have a @value or children
actor | Σ | 1..* | Reference(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for ele-1: All FHIR elements must have a @value or children
Documentation for this format

#### Constraints

Id | Grade | Path(s) | Details | Requirements
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

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  |  | Schedule |
actor |  | 1..* | Reference(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for
Documentation for this format

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
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
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation
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 | Σ | 0..* | CodeableConcept | Specific service Binding: ServiceType (example)
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(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for
planningHorizon | Σ | 0..1 | Period | Period of time covered by schedule
comment |  | 0..1 | string | Comments on availability
Documentation for this format

#### Terminology Bindings

Path | Conformance | ValueSet | URI
Schedule.language | preferred | CommonLanguages `http://hl7.org/fhir/ValueSet/languages` From the FHIR Standard
Additional Bindings | Purpose
AllLanguages | Max Binding
Schedule.serviceCategory | example | ServiceCategory `http://hl7.org/fhir/ValueSet/service-category` From the FHIR Standard
Schedule.serviceType | example | ServiceType `http://hl7.org/fhir/ValueSet/service-type` From the FHIR Standard
Schedule.specialty | preferred | PracticeSettingCodeValueSet `http://hl7.org/fhir/ValueSet/c80-practice-codes` From the FHIR Standard

#### Constraints

Id | Grade | Path(s) | Details | Requirements
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

Summary

Structures

This structure refers to these other structures:

- FI Base Patient (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-patient)
- FI Base Practitioner (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-practitioner)
- FI Base PractitionerRole (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-practitioner-role)
- FI Base HealthcareService (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-healthcare-service)
- FI Base Location (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-location)

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  | 0..* | Schedule | A container for slots of time that may be available for booking appointments dom-2: If the resource is contained in another resource, it SHALL NOT contain nested Resources dom-3: 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 dom-4: If a resource is contained in another resource, it SHALL NOT have a meta.versionId or a meta.lastUpdated dom-5: If a resource is contained in another resource, it SHALL NOT have a security label dom-6: A resource should have narrative for robust management
implicitRules | ?!Σ | 0..1 | uri | A set of rules under which this content was created ele-1: All FHIR elements must have a @value or children
modifierExtension | ?! | 0..* | Extension | Extensions that cannot be ignored ele-1: All FHIR elements must have a @value or children ext-1: Must have either extensions or value[x], not both
active | ?!Σ | 0..1 | boolean | Whether this schedule is in active use ele-1: All FHIR elements must have a @value or children
actor | Σ | 1..* | Reference(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for ele-1: All FHIR elements must have a @value or children
Documentation for this format

#### Constraints

Id | Grade | Path(s) | Details | Requirements
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

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
Schedule |  |  | Schedule |
actor |  | 1..* | Reference(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for
Documentation for this format

Snapshot View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
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
language |  | 0..1 | code | Language of the resource content Binding: CommonLanguages (preferred): A human language.
Additional Bindings | Purpose
AllLanguages | Max Binding
text |  | 0..1 | Narrative | Text summary of the resource, for human interpretation
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 | Σ | 0..* | CodeableConcept | Specific service Binding: ServiceType (example)
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(FI Base Patient(2.0.0) | FI Base Practitioner(2.0.0) | FI Base PractitionerRole(2.0.0) | RelatedPerson | Device | FI Base HealthcareService(2.0.0) | FI Base Location(2.0.0)) | Resource(s) that availability information is being provided for
planningHorizon | Σ | 0..1 | Period | Period of time covered by schedule
comment |  | 0..1 | string | Comments on availability
Documentation for this format

#### Terminology Bindings

Path | Conformance | ValueSet | URI
Schedule.language | preferred | CommonLanguages `http://hl7.org/fhir/ValueSet/languages` From the FHIR Standard
Additional Bindings | Purpose
AllLanguages | Max Binding
Schedule.serviceCategory | example | ServiceCategory `http://hl7.org/fhir/ValueSet/service-category` From the FHIR Standard
Schedule.serviceType | example | ServiceType `http://hl7.org/fhir/ValueSet/service-type` From the FHIR Standard
Schedule.specialty | preferred | PracticeSettingCodeValueSet `http://hl7.org/fhir/ValueSet/c80-practice-codes` From the FHIR Standard

#### Constraints

Id | Grade | Path(s) | Details | Requirements
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

Summary

Structures

This structure refers to these other structures:

- FI Base Patient (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-patient)
- FI Base Practitioner (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-practitioner)
- FI Base PractitionerRole (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-practitioner-role)
- FI Base HealthcareService (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-healthcare-service)
- FI Base Location (https://hl7.fi/fhir/finnish-base-profiles/StructureDefinition/fi-base-location)

Other representations of profile: CSV, Excel, Schematron