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://dawa.aws.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.
The official URL for this profile is:
http://ehealth.sundhed.dk/fhir/StructureDefinition/ehealth-patient
This profile holds the patient information needed in the danish eHealth context. Patients models the concept of a real person in a careplan process.
Patients can only be created using the operation defined for the Patient resource (see the createPatient operation). The operation ensure that patients are created with the proper demographics data delivered by national registers. There can only be a single patient pr. actual person.
This profile builds on Patient.
This profile was published on Thu Jan 07 13:26:31 UTC 2021 as a draft by ehealth.sundhed.dk.
Description of Profiles, Differentials, Snapshots, and how the XML and JSON presentations work.
Path | Conformance | ValueSet / Code |
Patient.language | extensible | Common Languages Max Binding: All Languages |
Patient.telecom:NemSMS.system | required | Fixed Value: other |
Patient.telecom:eBoks.system | required | Fixed Value: other |
Patient.gender | required | AdministrativeGender |
Patient.maritalStatus | extensible | Marital Status Codes |
Patient.contact.relationship | extensible | v2 Contact Role |
Patient.contact.gender | required | AdministrativeGender |
Patient.animal.species | example | AnimalSpecies |
Patient.animal.breed | example | AnimalBreeds |
Patient.animal.genderStatus | example | GenderStatus |
Patient.communication.language | extensible | Common Languages Max Binding: All Languages |
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-1 | Patient | If the resource is contained in another resource, it SHALL NOT contain any narrative : contained.text.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-3 | Patient | If the resource is contained in another resource, it SHALL be referred to from elsewhere in the resource : contained.where(('#'+id in %resource.descendants().reference).not()).empty() | |
ele-1 | Patient.extension:itcompetencelevel | All FHIR elements must have a @value or children : hasValue() | (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() | (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() | (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() | (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.identifier:dk-civil-registration-number | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
ele-1 | Patient.address:officialHomeAddress | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
ele-1 | Patient.contact | All FHIR elements must have a @value or children : hasValue() | (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:contactNote | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
ext-1 | Patient.contact.extension:contactNote | Must have either extensions or value[x], not both : extension.exists() != value.exists() | |
ele-1 | Patient.contact.address | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
ele-1 | Patient.communication | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) | |
ele-1 | Patient.link | All FHIR elements must have a @value or children : hasValue() | (children().count() > id.count()) |