Netherlands - Generic Functions for data exchange Implementation Guide
0.1.0 - ci-build

Netherlands - Generic Functions for data exchange Implementation Guide, published by Ministerie van Volksgezondheid, Welzijn en Sport. This guide is not an authorized publication; it is the continuous build for version 0.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/minvws/generiekefuncties-docs/ and changes regularly. See the Directory of published versions

## Resource Profile: NL Generic Functions PractitionerRole Profile

Official URL: http://minvws.github.io/generiekefuncties-docs/StructureDefinition/nl-gf-practitionerrole | Version: 0.1.0
Draft as of 2026-02-24 | Computable Name: NlGfPractitionerRole

The details of a healthcare practitioner's role within an organization.

Usages:

- Examples for this Profile: PractitionerRole/5fa4c91a-a12f-48ae-a4c7-92971dc7ab53, PractitionerRole/ad1-pr1, PractitionerRole/ad2-pr1, PractitionerRole/ad3-pr1... Show 2 more, PractitionerRole/d60525bd-5caf-4437-8f4b-4156300a27de and PractitionerRole/f051d3bd-26ff-4030-a5b6-fc4ef2be83ba
- CapabilityStatements using this Profile: Administration Directory for Administration Client, Administration Directory for Update Client, Query Directory for Query Client for only Read operations and Query Directory for Query Client

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.

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

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
Slices for identifier | Σ | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId | Σ | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
practitioner | Σ | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization | Σ | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code | Σ | 1..* | CodeableConcept | Roles which this practitioner may perform Binding: PractitionerRole (example): The role a person plays representing an organization.
Slices for specialty | Σ | 0..* | CodeableConcept | Specific specialty of the practitioner Slice: Unordered, Open by value:$this Binding: PracticeSettingCodeValueSet (preferred): Specific specialty associated with the agency.
specialty:specialty | Σ | 0..1 | CodeableConcept | Specialty Binding: SpecialismeCodelijsten (required): Specific specialty associated with the agency.
Slices for telecom | Σ | 0..* | ContactPoint | ContactInformation Slice: Unordered, Open by profile:$this
telecom:telephoneNumbers | Σ C N | 0..* | NlcoreContactInformationTelephoneNumbers | TelephoneNumbers Constraints: cpt-2
telecom:emailAddresses | Σ C N | 0..* | NlcoreContactInformationEmailAddresses | EmailAddresses Constraints: cpt-2
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
PractitionerRole.code | Base | example | Practitioner role | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty | Base | preferred | Practice Setting Code Value Set | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty:specialty | Base | required | SpecialismeCodelijsten | 📦2020-09-01T00:00:00 | FHIR implementation of zibs 2020 v0.12

#### Constraints

Id | Grade | Path(s) | Description | Expression
cpt-2 | error | PractitionerRole.telecom:telephoneNumbers, PractitionerRole.telecom:emailAddresses | A system is required if a value is provided. | `value.empty() or system.exists()`
dom-2 | error | PractitionerRole | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | PractitionerRole | 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 | PractitionerRole | 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 | PractitionerRole | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | PractitionerRole | 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())`

This structure is derived from NlcoreHealthProfessionalPractitionerRole

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
implicitRules |  | 0..0 |  | A set of rules under which this content was created
modifierExtension |  | 0..0 |  | Extension
Slices for identifier |  | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId |  | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
practitioner |  | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization |  | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code |  | 1..* | CodeableConcept | Roles which this practitioner may perform
Documentation for this format

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
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 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
Slices for identifier | Σ | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId | Σ | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
active | Σ | 0..1 | boolean | Whether this practitioner role record is in active use
period | Σ | 0..1 | Period | The period during which the practitioner is authorized to perform in these role(s)
practitioner | Σ | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization | Σ | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code | Σ | 1..* | CodeableConcept | Roles which this practitioner may perform Binding: PractitionerRole (example): The role a person plays representing an organization.
Slices for specialty | Σ | 0..* | CodeableConcept | Specific specialty of the practitioner Slice: Unordered, Open by value:$this Binding: PracticeSettingCodeValueSet (preferred): Specific specialty associated with the agency.
specialty:specialty | Σ | 0..1 | CodeableConcept | Specialty Binding: SpecialismeCodelijsten (required): Specific specialty associated with the agency.
location | Σ | 0..* | Reference(Location | nl core HealthcareProvider) | The location(s) at which this practitioner provides care
healthcareService |  | 0..* | Reference(HealthcareService) | The list of healthcare services that this worker provides for this role's Organization/Location(s)
Slices for telecom | Σ | 0..* | ContactPoint | ContactInformation Slice: Unordered, Open by profile:$this
telecom:telephoneNumbers | Σ C N | 0..* | NlcoreContactInformationTelephoneNumbers | TelephoneNumbers Constraints: cpt-2
telecom:emailAddresses | Σ C N | 0..* | NlcoreContactInformationEmailAddresses | EmailAddresses Constraints: cpt-2
availableTime |  | 0..* | BackboneElement | Times the Service Site is available
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 | Always available? e.g. 24 hour service
availableStartTime |  | 0..1 | time | Opening time of day (ignored if allDay = true)
availableEndTime |  | 0..1 | time | Closing time of day (ignored if allDay = true)
notAvailable |  | 0..* | BackboneElement | Not available during this time due to provided reason
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
description |  | 1..1 | string | Reason presented to the user explaining why time not available
during |  | 0..1 | Period | Service not available from this date
availabilityExceptions |  | 0..1 | string | Description of availability exceptions
endpoint |  | 0..* | Reference(Endpoint) | Technical endpoints providing access to services operated for the practitioner with this role
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
PractitionerRole.language | Base | preferred | Common Languages | 📦4.0.1 | FHIR Std.
PractitionerRole.code | Base | example | Practitioner role | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty | Base | preferred | Practice Setting Code Value Set | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty:specialty | Base | required | SpecialismeCodelijsten | 📦2020-09-01T00:00:00 | FHIR implementation of zibs 2020 v0.12
PractitionerRole.availableTime.​daysOfWeek | Base | required | DaysOfWeek | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
cpt-2 | error | PractitionerRole.telecom:telephoneNumbers, PractitionerRole.telecom:emailAddresses | A system is required if a value is provided. | `value.empty() or system.exists()`
dom-2 | error | PractitionerRole | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | PractitionerRole | 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 | PractitionerRole | 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 | PractitionerRole | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | PractitionerRole | 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 NlcoreHealthProfessionalPractitionerRole

Summary

Mandatory: 5 elements
Prohibited: 2 elements

Structures

This structure refers to these other structures:

- Author Assigned Identifier (http://minvws.github.io/generiekefuncties-docs/StructureDefinition/nl-gf-authorassignedidentifier)
- NL Generic Functions Organization Profile (http://minvws.github.io/generiekefuncties-docs/StructureDefinition/nl-gf-organization)

Slices

This structure defines the following Slices:

- The element 1 is sliced based on the value of PractitionerRole.identifier

Key Elements View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
Slices for identifier | Σ | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId | Σ | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
practitioner | Σ | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization | Σ | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code | Σ | 1..* | CodeableConcept | Roles which this practitioner may perform Binding: PractitionerRole (example): The role a person plays representing an organization.
Slices for specialty | Σ | 0..* | CodeableConcept | Specific specialty of the practitioner Slice: Unordered, Open by value:$this Binding: PracticeSettingCodeValueSet (preferred): Specific specialty associated with the agency.
specialty:specialty | Σ | 0..1 | CodeableConcept | Specialty Binding: SpecialismeCodelijsten (required): Specific specialty associated with the agency.
Slices for telecom | Σ | 0..* | ContactPoint | ContactInformation Slice: Unordered, Open by profile:$this
telecom:telephoneNumbers | Σ C N | 0..* | NlcoreContactInformationTelephoneNumbers | TelephoneNumbers Constraints: cpt-2
telecom:emailAddresses | Σ C N | 0..* | NlcoreContactInformationEmailAddresses | EmailAddresses Constraints: cpt-2
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
PractitionerRole.code | Base | example | Practitioner role | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty | Base | preferred | Practice Setting Code Value Set | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty:specialty | Base | required | SpecialismeCodelijsten | 📦2020-09-01T00:00:00 | FHIR implementation of zibs 2020 v0.12

#### Constraints

Id | Grade | Path(s) | Description | Expression
cpt-2 | error | PractitionerRole.telecom:telephoneNumbers, PractitionerRole.telecom:emailAddresses | A system is required if a value is provided. | `value.empty() or system.exists()`
dom-2 | error | PractitionerRole | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | PractitionerRole | 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 | PractitionerRole | 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 | PractitionerRole | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | PractitionerRole | 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())`

Differential View

This structure is derived from NlcoreHealthProfessionalPractitionerRole

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
implicitRules |  | 0..0 |  | A set of rules under which this content was created
modifierExtension |  | 0..0 |  | Extension
Slices for identifier |  | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId |  | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
practitioner |  | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization |  | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code |  | 1..* | CodeableConcept | Roles which this practitioner may perform
Documentation for this format

Snapshot View

Name | Flags | Card. | Type | Description & Constraints Filter: Bindings Constraints Obligations
--- | --- | --- | --- | ---
PractitionerRole |  | 0..* | NlcoreHealthProfessionalPractitionerRole | HealthProfessional This profile also complies with the profile mCSD PractitionerRole
id | Σ | 0..1 | id | Logical id of this artifact
meta | Σ | 0..1 | Meta | Metadata about the resource
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 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
Slices for identifier | Σ | 1..* | Identifier | Business Identifiers that are specific to a role/location Slice: Unordered, Open by value:$this
identifier:AssignedId | Σ | 1..1 | AuthorAssignedIdentifier | Business Identifiers that are specific to a role/location
active | Σ | 0..1 | boolean | Whether this practitioner role record is in active use
period | Σ | 0..1 | Period | The period during which the practitioner is authorized to perform in these role(s)
practitioner | Σ | 1..1 | Reference(Practitioner | nl core HealthProfessional Practitioner) | Practitioner that is able to provide the defined services for the organization
organization | Σ | 1..1 | Reference(NL Generic Functions Organization Profile) | HealthcareProvider
code | Σ | 1..* | CodeableConcept | Roles which this practitioner may perform Binding: PractitionerRole (example): The role a person plays representing an organization.
Slices for specialty | Σ | 0..* | CodeableConcept | Specific specialty of the practitioner Slice: Unordered, Open by value:$this Binding: PracticeSettingCodeValueSet (preferred): Specific specialty associated with the agency.
specialty:specialty | Σ | 0..1 | CodeableConcept | Specialty Binding: SpecialismeCodelijsten (required): Specific specialty associated with the agency.
location | Σ | 0..* | Reference(Location | nl core HealthcareProvider) | The location(s) at which this practitioner provides care
healthcareService |  | 0..* | Reference(HealthcareService) | The list of healthcare services that this worker provides for this role's Organization/Location(s)
Slices for telecom | Σ | 0..* | ContactPoint | ContactInformation Slice: Unordered, Open by profile:$this
telecom:telephoneNumbers | Σ C N | 0..* | NlcoreContactInformationTelephoneNumbers | TelephoneNumbers Constraints: cpt-2
telecom:emailAddresses | Σ C N | 0..* | NlcoreContactInformationEmailAddresses | EmailAddresses Constraints: cpt-2
availableTime |  | 0..* | BackboneElement | Times the Service Site is available
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 | Always available? e.g. 24 hour service
availableStartTime |  | 0..1 | time | Opening time of day (ignored if allDay = true)
availableEndTime |  | 0..1 | time | Closing time of day (ignored if allDay = true)
notAvailable |  | 0..* | BackboneElement | Not available during this time due to provided reason
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
description |  | 1..1 | string | Reason presented to the user explaining why time not available
during |  | 0..1 | Period | Service not available from this date
availabilityExceptions |  | 0..1 | string | Description of availability exceptions
endpoint |  | 0..* | Reference(Endpoint) | Technical endpoints providing access to services operated for the practitioner with this role
Documentation for this format

#### Terminology Bindings

Path | Status | Usage | ValueSet | Version | Source
PractitionerRole.language | Base | preferred | Common Languages | 📦4.0.1 | FHIR Std.
PractitionerRole.code | Base | example | Practitioner role | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty | Base | preferred | Practice Setting Code Value Set | 📦4.0.1 | FHIR Std.
PractitionerRole.specialty:specialty | Base | required | SpecialismeCodelijsten | 📦2020-09-01T00:00:00 | FHIR implementation of zibs 2020 v0.12
PractitionerRole.availableTime.​daysOfWeek | Base | required | DaysOfWeek | 📍4.0.1 | FHIR Std.

#### Constraints

Id | Grade | Path(s) | Description | Expression
cpt-2 | error | PractitionerRole.telecom:telephoneNumbers, PractitionerRole.telecom:emailAddresses | A system is required if a value is provided. | `value.empty() or system.exists()`
dom-2 | error | PractitionerRole | If the resource is contained in another resource, it SHALL NOT contain nested Resources | `contained.contained.empty()`
dom-3 | error | PractitionerRole | 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 | PractitionerRole | 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 | PractitionerRole | If a resource is contained in another resource, it SHALL NOT have a security label | `contained.meta.security.empty()`
dom-6 | best practice | PractitionerRole | 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 NlcoreHealthProfessionalPractitionerRole

Summary

Mandatory: 5 elements
Prohibited: 2 elements

Structures

This structure refers to these other structures:

- Author Assigned Identifier (http://minvws.github.io/generiekefuncties-docs/StructureDefinition/nl-gf-authorassignedidentifier)
- NL Generic Functions Organization Profile (http://minvws.github.io/generiekefuncties-docs/StructureDefinition/nl-gf-organization)

Slices

This structure defines the following Slices:

- The element 1 is sliced based on the value of PractitionerRole.identifier

Other representations of profile: CSV, Excel, Schematron