eHealth Infrastructure - Local Development build (v2021.3.0). See the Directory of published versions
Defining URL: | http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-patient |
Version: | 2021.3.0 |
Name: | ehealth-patient |
Status: | Active as of 2021-11-25T09:32:14+00:00 |
Publisher: | Systematic | Trifork |
Source Resource: | XML / JSON / Turtle |
The official URL for this profile is:
http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-patient
An ehealth-patient is a central entity, which is referenced by many other entities in the FUT infrastructure.
In the eHealth Infrastructure the Patient resource is primarily used in conjunction with the following resources:
Certain data on an ehealth-patient are automatically updated based on the CPR system. This includes official name, address, and of course the CPR number itself.
When adding/updating an address (non-home address), the service will by default “wash” the address using DAWA (Danmarks Adressers Web API).
See https://dawadocs.dataforsyningen.dk/dok/api/adresse#datavask.
A client may overrule the default validation strategy by setting a request header x-address-validation-strategy
with the value “STRICT”, “WASH” or “NONE”.
If “STRICT” is used the request will fail if the address does not match strictly an address in DAWA.
If “WASH” is used (the default strategy) the client may want to verify that the wash outcome was as expected.
If “NONE” is used no validation/modification is performed (the address is stored as is).
An ehealth-patient may be PATCH updated on paths complying with the regular expressions below.
Path | Description |
---|---|
/implicitRules.* | |
/language.* | |
/contained.* | |
/identifier.* | CPR number may not be changed, but addition of other identifiers are allowed |
/name.* | The official name (use=official) may not be changed, as it is automatically synchronized with the CPR system |
/address.* | The home address may not be changed (use=home), as it is automatically synchronized with the CPR system |
/maritalStatus.* | |
/multipleBirth.* | |
/photo.* | |
/contact.* | |
/telecom.* | |
/communication.* | |
/link.* | |
/itcompetencelevel.* | |
/interpreterRequired.* | |
/generalHealthCondition.* | |
/functionalCapacity.* | |
/extension.* |
Patients with name and address protection are marked with security label ‘restricted’ (R in http://hl7.org/fhir/v3/Confidentiality).
The period of the name and address protection is expressed in an extention with url: http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-nameandaddressprotection”
When creating and updating a patient, the infrastructure gets information about the patients general practitioner. The information about the general practitioner origins from the provider registry (Yderregister: https://sundhedsdatastyrelsen.dk/da/registre-og-services/om-de-nationale-sundhedsregistre/personoplysninger-og-sundhedsfaglig-beskaeftigelse/yderregisteret) and results in a provider identifier. Under normal circumstances, the provider identifier identifies an organization in SOR registry (Sundhedsvæsenets Organisationsregister: https://sundhedsdatastyrelsen.dk/da/registre-og-services/om-sor) which resolves to an organization in the Organization service in the infrastructure. If the organization cannot be identified as an organization in the Organization service, the reference on the general practitioner remains as an logical reference (http://hl7.org/fhir/STU3/references.html#logical) containing the provider identifier.
Description of Profiles, Differentials, Snapshots and how the different presentations work.
Other representations of profile: CSV, Excel, Schematron
Path | Conformance | ValueSet / Code |
Patient.language | preferred | CommonLanguages Max Binding: AllLanguages |
Patient.name:official.use | required | Fixed Value: official |
Patient.telecom:NemSMS.system | required | Pattern: other |
Patient.telecom:eBoks.system | required | Pattern: other |
Patient.gender | required | AdministrativeGender |
Patient.address.use | required | AddressUse |
Patient.address.type | required | AddressType |
Patient.address:officialHomeAddress.use | required | Fixed Value: home |
Patient.address:officialHomeAddress.type | required | AddressType |
Patient.maritalStatus | extensible | DK Marital Status Codes |
Patient.contact.relationship | extensible | PatientContactRelationship |
Patient.contact.address.use | required | AddressUse |
Patient.contact.address.type | required | AddressType |
Patient.contact.gender | required | AdministrativeGender |
Patient.communication.language | preferred | CommonLanguages Max Binding: AllLanguages |
Patient.generalPractitioner:referencedSORUnit.type | extensible | ResourceType |
Patient.link.type | required | LinkType |
Id | Path | Details | Requirements |
dom-2 | Patient | If the resource is contained in another resource, it SHALL NOT contain nested Resources : contained.contained.empty() | |
dom-3 | Patient | 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 | Patient | 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 | Patient | If a resource is contained in another resource, it SHALL NOT have a security label : contained.meta.security.empty() | |
dom-6 | Patient | A resource should have narrative for robust management : text.`div`.exists() | |
marital-status-unknown-usage | Patient | Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK : maritalStatus.coding.where(code = 'P' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() or maritalStatus.coding.where(code = 'A' and system = 'http://terminology.hl7.org/CodeSystem/v3-MaritalStatus').empty() | Marital status is legally unknown in Denmark |
ele-1 | Patient.meta | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.implicitRules | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.language | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.extension:itCompetenceLevel | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.extension:itCompetenceLevel | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.extension:interpreterRequired | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.extension:interpreterRequired | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.extension:generalHealthCondition | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.extension:generalHealthCondition | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.extension:nameAndAddressProtection | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.extension:nameAndAddressProtection | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.identifier | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.identifier:cpr | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.active | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.name:official.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.name:official.use | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.family | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.given | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.prefix | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.suffix | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.name:official.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:NemSMS | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:NemSMS.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.telecom:NemSMS.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.telecom:NemSMS.system | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:NemSMS.value | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:NemSMS.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:eBoks | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:eBoks.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.telecom:eBoks.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.telecom:eBoks.system | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:eBoks.value | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.telecom:eBoks.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.gender | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.birthDate | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.deceased[x] | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address.extension:municipalityCode | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address.extension:municipalityCode | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address.extension:regionalSubDivisionCodes | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address.extension:regionalSubDivisionCodes | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address.use | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.line | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.city | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.district | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.state | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.postalCode | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.country | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address:officialHomeAddress.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address:officialHomeAddress.extension:municipalityCode | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address:officialHomeAddress.extension:municipalityCode | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address:officialHomeAddress.extension:regionalSubDivisionCodes | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.address:officialHomeAddress.extension:regionalSubDivisionCodes | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.address:officialHomeAddress.use | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.line | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.city | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.district | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.state | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.postalCode | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.country | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.maritalStatus | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.multipleBirth[x] | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.photo | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
pat-1 | Patient.contact | SHALL at least contain a contact's details or a reference to an organization : name.exists() or telecom.exists() or address.exists() or organization.exists() | |
ele-1 | Patient.contact.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.extension:patientContactnote | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.extension:patientContactnote | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.relationship | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.name | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.telecom | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.address.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.address.extension:municipalityCodes | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.address.extension:municipalityCodes | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.address.extension:regionalSubDivisionCodes | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.contact.address.extension:regionalSubDivisionCodes | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.address.use | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.line | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.city | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.district | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.state | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.postalCode | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.country | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.address.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.gender | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.organization | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.contact.period | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.communication.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.communication.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.communication.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.communication.language | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.communication.language.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.communication.language.coding | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.coding.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.communication.language.coding.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.communication.language.coding.system | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.coding.version | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.coding.code | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.coding.display | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.coding.userSelected | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.language.text | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.communication.preferred | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner:referencedSORUnit | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner:referencedSORUnit.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.generalPractitioner:referencedSORUnit.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.generalPractitioner:referencedSORUnit.reference | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner:referencedSORUnit.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner:referencedSORUnit.identifier | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.generalPractitioner:referencedSORUnit.display | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.managingOrganization | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.link | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.link.extension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.link.extension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.link.modifierExtension | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ext-1 | Patient.link.modifierExtension | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.link.other | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) | |
ele-1 | Patient.link.type | All FHIR elements must have a @value or children : hasValue() or (children().count() > id.count()) |