diff --git a/input/fsh/DkCoreBasicParameter.fsh b/input/fsh/DkCoreBasicParameter.fsh index 6f984d178..efb46de6e 100644 --- a/input/fsh/DkCoreBasicParameter.fsh +++ b/input/fsh/DkCoreBasicParameter.fsh @@ -164,21 +164,21 @@ Description: "An example of TOBS (Danish: Tidlig opsporing af begyndende sygdom) Usage: #example * type = #collection * timestamp = "2023-09-12T17:45:00.000Z" -* entry[+].fullUrl = "Patient/else" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Patient/else" * entry[=].resource = else -* entry[+].fullUrl = "Observation/ElseConsciousness" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElseConsciousness" * entry[=].resource = ElseConsciousness -* entry[+].fullUrl = "Observation/ElseBloodPressure" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElseBloodPressure" * entry[=].resource = ElseBloodPressure -* entry[+].fullUrl = "Observation/ElseBodyTemperature" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElseBodyTemperature" * entry[=].resource = ElseBodyTemperature -* entry[+].fullUrl = "Observation/ElseHeartRate" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElseHeartRate" * entry[=].resource = ElseHeartRate -* entry[+].fullUrl = "Observation/ElseRespirationRate" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElseRespirationRate" * entry[=].resource = ElseRespirationRate -* entry[+].fullUrl = "Observation/ElsesTOBSscore" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/ElsesTOBSscore" * entry[=].resource = ElsesTOBSscore -* entry[+].fullUrl = "Practitioner/SidselSygeplejerske" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Practitioner/SidselSygeplejerske" * entry[=].resource = SidselSygeplejerske /* ************** @@ -293,19 +293,19 @@ Description: "An example of TOBS (Danish: Tidlig opsporing af begyndende sygdom) Usage: #example * type = #collection * timestamp = "2023-08-08T13:30:00.000Z" -* entry[+].fullUrl = "Patient/Max" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Patient/Max" * entry[=].resource = Max -* entry[+].fullUrl = "Observation/MaxConsciousness" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxConsciousness" * entry[=].resource = MaxConsciousness -* entry[+].fullUrl = "Observation/MaxBloodPressure" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxBloodPressure" * entry[=].resource = MaxBloodPressure -* entry[+].fullUrl = "Observation/MaxBodyTemperature" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxBodyTemperature" * entry[=].resource = MaxBodyTemperature -* entry[+].fullUrl = "Observation/MaxHeartRate" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxHeartRate" * entry[=].resource = MaxHeartRate -* entry[+].fullUrl = "Observation/MaxRespirationRate" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxRespirationRate" * entry[=].resource = MaxRespirationRate -* entry[+].fullUrl = "Observation/MaxGlasgowComaScale" +* entry[+].fullUrl = "http://hl7.dk/fhir/core/Observation/MaxGlasgowComaScale" * entry[=].resource = MaxGlasgowComaScale /* ************** diff --git a/input/fsh/DkCoreCondition.fsh b/input/fsh/DkCoreCondition.fsh index 5e77deb6b..c47dd21fd 100644 --- a/input/fsh/DkCoreCondition.fsh +++ b/input/fsh/DkCoreCondition.fsh @@ -39,7 +39,7 @@ Description: "HL7 Denmark core profile for professionally asserted conditions, a * system 1.. * system = "urn:oid:1.2.208.176.2.31" * subject only Reference(DkCorePatient) -* recorder only Reference(DkCorePractitioner or PractitionerRole or DkCorePatient or RelatedPerson) +* recorder only Reference(DkCorePractitioner or PractitionerRole or DkCorePatient or DkCoreRelatedPerson) * asserter only Reference(DkCorePractitioner or PractitionerRole) Instance: ConditionPressureUlcer diff --git a/input/fsh/DkCoreObservation.fsh b/input/fsh/DkCoreObservation.fsh index 638bb12e5..84d4ca427 100644 --- a/input/fsh/DkCoreObservation.fsh +++ b/input/fsh/DkCoreObservation.fsh @@ -46,7 +46,7 @@ Description: "HL7 Denmark core profile for observations" * code 1.. * subject only Reference(DkCorePatient or Group or Location or Device) * subject 1.. -* performer only Reference(DkCorePractitioner or DkCoreOrganization or DkCorePatient or PractitionerRole or CareTeam or RelatedPerson) +* performer only Reference(DkCorePractitioner or DkCoreOrganization or DkCorePatient or PractitionerRole or CareTeam or DkCoreRelatedPerson) * device ^short = "The device used for the measurement. It is recommended that when information about the device is sent, it is contained in the same Bundle as the Observation the device measured." * valueQuantity.system = $ucum * component.code.coding ^slicing.discriminator.type = #value @@ -626,54 +626,54 @@ Description: """ Usage: #example * type = #transaction * entry[+] - * fullUrl = "Patient/Poul" + * fullUrl = "http://hl7.dk/fhir/core/Patient/Poul" * request * method = #POST * url = "Patient" * ifNoneExist = "identifier=urn:oid:1.2.208.176.1.2|3001749995" * resource = Poul * entry[+] - * fullUrl = "Device/Telma.FEEDDADADEADBEEF" + * fullUrl = "http://hl7.dk/fhir/core/Device/Telma.FEEDDADADEADBEEF" * request * method = #POST * url = "Device" * ifNoneExist = "identifier=urn:oid:1.2.840.10004.1.1.1.0.0.1.0.0.1.2680|FE-ED-DA-DA-DE-AD-BE-EF" * resource = Telma.FEEDDADADEADBEEF * entry[+] - * fullUrl = "Device/BPMonitor.C4F312FFFE53F2C9" + * fullUrl = "http://hl7.dk/fhir/core/Device/BPMonitor.C4F312FFFE53F2C9" * request * method = #POST * url = "Device" * ifNoneExist = "identifier=urn:oid:1.2.840.10004.1.1.1.0.0.1.0.0.1.2680|C4-F3-12-FF-FE-53-F2-C9" * resource = BPMonitor.C4F312FFFE53F2C9 * entry[+] - * fullUrl = "Observation/BatteryLevel.0944" + * fullUrl = "http://hl7.dk/fhir/core/Observation/BatteryLevel.0944" * request * method = #POST * url = "Observation" * resource = BatteryLevel.0944 * entry[+] - * fullUrl = "Observation/CoincidentTimeStamp.0222" + * fullUrl = "http://hl7.dk/fhir/core/Observation/CoincidentTimeStamp.0222" * request * method = #POST * url = "Observation" * resource = CoincidentTimeStamp.0222 * entry[+] - * fullUrl = "Observation/BloodPressure.Poul.643992" + * fullUrl = "http://hl7.dk/fhir/core/Observation/BloodPressure.Poul.643992" * request * method = #POST * url = "Observation" * ifNoneExist = "identifier=C4F312FFFE53F2C9-3001749995-urn:oid:1.2.208.176.1.2-150020-118-266016-87-266016-99-266016-20230223T102408.00" * resource = BloodPressure.Poul.643992 * entry[+] - * fullUrl = "Observation/HeartRate.Poul.1974654" + * fullUrl = "http://hl7.dk/fhir/core/Observation/HeartRate.Poul.1974654" * request * method = #POST * url = "Observation" * ifNoneExist = "identifier=C4F312FFFE53F2C9-3001749995-urn:oid:1.2.208.176.1.2-149546-93-{beat}/min-20230223T102408.00" * resource = HeartRate.Poul.1974654 * entry[+] - * fullUrl = "Observation/BloodPressureStatus.Poul.133527" + * fullUrl = "http://hl7.dk/fhir/core/Observation/BloodPressureStatus.Poul.133527" * request * method = #POST * url = "Observation" diff --git a/input/fsh/DkCoreOrganization.fsh b/input/fsh/DkCoreOrganization.fsh index 02276c733..d312128e2 100644 --- a/input/fsh/DkCoreOrganization.fsh +++ b/input/fsh/DkCoreOrganization.fsh @@ -15,7 +15,8 @@ Description: "HL7 Denmark core profile for a danish health organization" Ydernummer 0..1 and CVR-ID 0..1 and Kommunekode 0..1 and - Regionskode 0..1 + Regionskode 0..1 and + ProducentID 0..1 * identifier[EAN-ID] only GLNIdentifier * ^short = "GLN identifier, [DA] EAN-nummer" * identifier[SOR-ID] only SORIdentifier @@ -37,6 +38,8 @@ Description: "HL7 Denmark core profile for a danish health organization" * system 1.. * system = "http://hl7.dk/fhir/core/CodeSystem/dk-core-regional-subdivision-codes" (exactly) * value 1.. +* identifier[ProducentID] only ProducentId + * ^short = "[DA] Producent Id" * type from $sor-organization-type (preferred) Instance: CenterForDiabetes @@ -115,7 +118,18 @@ Usage: #example * identifier[=].value = "urn:uuid:a107fd1e-9f35-422c-9d1e-add097bbf4a6" * type = $sct#264372000 +Instance: 154b8c96-a061-45bf-9ce4-1947c7c3c283 +InstanceOf: DkCoreOrganization +Title: "Producer Test Organization" +Description: "Producer of Lab Results Test Organization" +Usage: #example +* identifier[0].system = "urn:oid:1.2.208.176.1.1" +* identifier[=].value = "12345678901" +* identifier[+].system = "http://medcomfhir.dk/ig/terminology/CodeSystem/MedComProducentID" +* identifier[=].value = "KAF" +* type = $sct#264361005 + Invariant: dk-core-organization-mandatory-identifier Description: "Minimum one identifier shall be of type SOR-ID, KOMBIT-ORG-ID or CVR-ID" Severity: #error -Expression: "identifier.where(system='urn:oid:1.2.208.176.1.1' or system='https://kombit.dk/sts/organisation' or system='urn:oid:2.16.840.1.113883.2.24.1.1').exists()" \ No newline at end of file +Expression: "identifier.where(system='urn:oid:1.2.208.176.1.1' or system='https://kombit.dk/sts/organisation' or system='urn:oid:2.16.840.1.113883.2.24.1.1').exists()" diff --git a/input/fsh/DkCorePatient.fsh b/input/fsh/DkCorePatient.fsh index 0bb8573a4..a0fb35fc7 100644 --- a/input/fsh/DkCorePatient.fsh +++ b/input/fsh/DkCorePatient.fsh @@ -39,6 +39,8 @@ Description: "HL7 Denmark core profile for a patient" * generalPractitioner contains referencedSORUnit 0..* * generalPractitioner[referencedSORUnit] ^short = "[DA] Praktiserende læges SOR-id på sundhedsinstistutionsniveau" * identifier only SORIdentifier +* contact.relationship from RelatedPersonRelationshipTypes (extensible) +* link.other only Reference(DkCorePatient or DkCoreRelatedPerson) Instance: 283 InstanceOf: DkCorePatient @@ -71,8 +73,8 @@ Usage: #example Instance: Confidential InstanceOf: DkCorePatient -Title: "Example of a patient with confidential adress and name" -Description: "Example of a patient with confidential adress and name" +Title: "Example of a patient with confidential address and name" +Description: "Example of a patient with confidential address and name" Usage: #example * text.div = "
This instance is an example of a Danish citizen who has requested name and address protection (Navne- og adressebeskyttelse), why the instance is marked with a security label. Only personnel using systems in public/official affairs are allowed to see name and address for the citizen, why these information are included in the profile.

Resource \"Confidential\"

Profile: Danish Core Patient Profile

Security Labels: http://terminology.hl7.org/CodeSystem/v3-Confidentiality

identifier: id: 1502779995

name: Hans Hansen (OFFICIAL)

gender: male

birthDate: 1976-08-09

address: Julianevej 22 6000 Kolding (HOME)

" * text.status = #additional diff --git a/input/fsh/DkCoreRelatedPerson.fsh b/input/fsh/DkCoreRelatedPerson.fsh new file mode 100644 index 000000000..65c98e262 --- /dev/null +++ b/input/fsh/DkCoreRelatedPerson.fsh @@ -0,0 +1,65 @@ +Profile: DkCoreRelatedPerson +Parent: RelatedPerson +Id: dk-core-related-person +Title: "Danish Core Related Person Profile" +Description: "HL7 Denmark core profile for a related person" + +// Allow CPR and eCPR numbers as identifiers +* identifier 0.. + * ^slicing.discriminator.type = #value + * ^slicing.discriminator.path = "system" + * ^slicing.rules = #open +* identifier contains + cpr 0..1 and + x-ecpr 0..1 and + d-ecpr 0..1 +* identifier[cpr] only DkCoreCprIdentifier + * ^short = "[DA] cpr-nummer, som det fremgår af CPR registeret" +* identifier[x-ecpr] only DkCoreXeCprIdentifier + * ^short = "[DA] X-eCPR, tildelt fra den nationale eCPR service" +* identifier[d-ecpr] only DkCoreDeCprIdentifier + * ^short = "[DA] D-eCPR, decentral eCPR" + +* patient only Reference(DkCorePatient) + +* name ^slicing.discriminator.type = #value + * ^slicing.discriminator.path = "use" + * ^slicing.rules = #open +* name contains official 0..1 +* name[official] ^short = "[DA] Officielt navn, som det fremgår af CPR registeret" + * use 1.. + * use = #official (exactly) + * family 1.. + +* relationship from RelatedPersonRelationshipTypes (extensible) + +Instance: Child +InstanceOf: DkCoreRelatedPerson +Title: "Example of child as related person" +Description: "Example of child as related person" +Usage: #example +* identifier.system = "urn:oid:1.2.208.176.1.2" +* identifier.value = "1502799995" +* name.use = #official +* name.family = "Mosebryggersen" +* name.given = "Odd Haugen Test" +* gender = #male +* birthDate = "1979-02-15" +* patient.reference = "Patient/283" +* relationship = $v3-RoleCode#CHILD + +Instance: TwoRelations +InstanceOf: DkCoreRelatedPerson +Title: "Example of a related person with two relations" +Description: "Example of a person that has relations as both neighbor and primary caretaker" +Usage: #example +* identifier.system = "urn:oid:1.2.208.176.1.2" +* identifier.value = "0201919996" +* name.use = #official +* name.family = "Lauridsen" +* name.given = "Ellen Louise Test" +* gender = #female +* birthDate = "1991-01-02" +* patient.reference = "Patient/283" +* relationship[0] = $v3-RoleCode#NBOR +* relationship[1] = DkRelatedPersonRelationshipCodes#PRICARE diff --git a/input/fsh/KombitOrgIdentifier.fsh b/input/fsh/KombitOrgIdentifier.fsh index 7e895f371..cc53f92c7 100644 --- a/input/fsh/KombitOrgIdentifier.fsh +++ b/input/fsh/KombitOrgIdentifier.fsh @@ -1,7 +1,7 @@ Profile: KombitOrgIdentifier Parent: Identifier Id: dk-core-kombit-org-identifier -Title: "Kombit Org Identifier" +Title: "Kombit Organsation Identifier" Description: "Identifier holding the organization code issued by KOMBIT" * use = #official (exactly) * system 1.. diff --git a/input/fsh/ProducentId.fsh b/input/fsh/ProducentId.fsh new file mode 100644 index 000000000..1e1625784 --- /dev/null +++ b/input/fsh/ProducentId.fsh @@ -0,0 +1,9 @@ +Profile: ProducentId +Parent: Identifier +Id: dk-core-producent-id +Title: "Producent Id" +Description: "Offical MedCom code describing the producer of lab results" +* use = #official (exactly) +* system 1.. +* system = "http://medcomfhir.dk/ig/terminology/CodeSystem/MedComProducentID" (exactly) +* value 1.. diff --git a/input/fsh/SORIdentifier.fsh b/input/fsh/SORIdentifier.fsh index 03a53fe77..b16d0e859 100644 --- a/input/fsh/SORIdentifier.fsh +++ b/input/fsh/SORIdentifier.fsh @@ -10,7 +10,7 @@ Description: "Identifier holding the official SOR identifier for a danish health * obeys min-digits-sor Invariant: min-digits-sor -Description: "SOR Identifiers are at minimum 11 digits long. See https://sundhedsdatastyrelsen.dk/-/media/sds/filer/rammer-og-retningslinjer/organisationsregistrering/adgang-til-sor/info-om-opbygningen-af-sor-ider.pdf" +Description: "SOR Identifiers are at minimum 11 digits long. See https://sundhedsdatastyrelsen.dk/da/rammer-og-retningslinjer/organisationsregistrering" Severity: #error Expression: "matches('^([0-9]){11,}$')" -* requirements = "SOR Identifiers are at minimum 11 digits long" \ No newline at end of file +* requirements = "SOR Identifiers are at minimum 11 digits long" diff --git a/input/fsh/aliases.fsh b/input/fsh/aliases.fsh index 9d1e23ba3..077f28550 100644 --- a/input/fsh/aliases.fsh +++ b/input/fsh/aliases.fsh @@ -24,4 +24,5 @@ Alias: $observation-bodyweight = http://hl7.org/fhir/StructureDefinition/bodywei Alias: $observation-heartrate = http://hl7.org/fhir/StructureDefinition/heartrate Alias: $observation-bp = http://hl7.org/fhir/StructureDefinition/bp Alias: $LOINC-vitalsigns = http://hl7.org/fhir/ValueSet/observation-vitalsignresult -Alias: $v3-Confidentiality = http://terminology.hl7.org/CodeSystem/v3-Confidentiality \ No newline at end of file +Alias: $v3-Confidentiality = http://terminology.hl7.org/CodeSystem/v3-Confidentiality +Alias: $v3-RoleCode = http://terminology.hl7.org/CodeSystem/v3-RoleCode diff --git a/input/fsh/codeSystems.fsh b/input/fsh/codeSystems.fsh index f43b707ca..786c422b5 100644 --- a/input/fsh/codeSystems.fsh +++ b/input/fsh/codeSystems.fsh @@ -716,4 +716,85 @@ Description: "DK " * #urn:oid:1.2.208.176.1.6.1.3.179 "D-eCPR fra Region Nordjylland" * #urn:oid:1.2.208.176.1.6.1.3.181 "D-eCPR fra Region Midtjylland" * #urn:oid:1.2.208.176.1.6.1.3.183 "D-eCPR fra Region Syddanmark" -* #urn:oid:1.2.208.176.1.6.1.3.187 "D-eCPR fra Region Hovedstaden" \ No newline at end of file +* #urn:oid:1.2.208.176.1.6.1.3.187 "D-eCPR fra Region Hovedstaden" + +CodeSystem: RoleCodeDkSupplement +Id: role-code-dk-supplement +Description: "CodeSystem supplement with danish translations for RoleCode" +Title: "DK Role Code" +* ^experimental = false +* ^content = #supplement +* ^supplements = "http://terminology.hl7.org/CodeSystem/v3-RoleCode" +* #FAMMEMB + * ^designation.language = #da + * ^designation.value = "Familiemedlem" +* #CHILD + * ^designation.language = #da + * ^designation.value = "Barn" +* #DAUC + * ^designation.language = #da + * ^designation.value = "Datter" +* #SONC + * ^designation.language = #da + * ^designation.value = "Søn" +* #GRNDCHILD + * ^designation.language = #da + * ^designation.value = "Barnebarn" +* #CHLDINLAW + * ^designation.language = #da + * ^designation.value = "Svigerbarn" +* #PRN + * ^designation.language = #da + * ^designation.value = "Forælder" +* #FTH + * ^designation.language = #da + * ^designation.value = "Far" +* #MTH + * ^designation.language = #da + * ^designation.value = "Mor" +* #SIB + * ^designation.language = #da + * ^designation.value = "Søskende" +* #DOMPART + * ^designation.language = #da + * ^designation.value = "Registreret partner" +* #SPS + * ^designation.language = #da + * ^designation.value = "Ægtefælle" +* #FRND + * ^designation.language = #da + * ^designation.value = "Ven (ikke-beslægtet)" +* #NBOR + * ^designation.language = #da + * ^designation.value = "Nabo" +* #ROOM + * ^designation.language = #da + * ^designation.value = "Samboende" +* #GUARD + * ^designation.language = #da + * ^designation.value = "Værge" +* #NOK + * ^designation.language = #da + * ^designation.value = "Pårørende" +* #POWATT + * ^designation.language = #da + * ^designation.value = "Fuldmagtshaver" + +CodeSystem: DkRelatedPersonRelationshipCodes +Id: dk-relatedperson-relationshipcodes +Title: "DK Related Person Relationship Codes" +Description: "DK Related Person Relationship Codes" +* ^experimental = false +* ^url = "http://hl7.dk/fhir/core/CodeSystem/dk-relatedperson-relationshipcodes" +* ^name = "DkRelatedPersonRelationshipCodes" +* ^caseSensitive = false +* ^status = #active +* ^content = #complete +* #PARAUTH "Parental authority" + * ^definition = "The player of the role holds parental authority over the scoping person." + * ^designation.language = #da + * ^designation.value = "Forældremyndighedsindehaver" +* #PRICARE "Primary caretaker" + * ^definition = "The player of the role is the primary caretaker of the scoping person." + * ^designation.language = #da + * ^designation.value = "Primær omsorgsperson" diff --git a/input/fsh/instances.fsh b/input/fsh/instances.fsh index 1e01994f7..677ab058f 100644 --- a/input/fsh/instances.fsh +++ b/input/fsh/instances.fsh @@ -3,7 +3,7 @@ InstanceOf: NamingSystem Title: "cpr" Description: "The Danish civil registration system (\"CPR\") encompasses basic personal data about anyone with a civil registration number. A civil registration number shall be allocated to anyone who: 1) is registered in the national register in Denmark on the grounds of birth or relocation from abroad; 2) is included under Arbejdsmarkedets TillægsPension (ATP); 3) according to the tax authorities, is required to have a civil registration number for the purpose of tax processing in Denmark." Usage: #definition -* name = "DkCoreDanishCivilRegistrationSystem" +* name = "DK Central Person Registry (CPR)" * status = #active * kind = #identifier * date = "1968-04-02" @@ -11,7 +11,7 @@ Usage: #definition * contact.name = "HL7 Denmark" * contact.telecom.system = #url * contact.telecom.value = "https://www.hl7.dk/" -* responsible = "CPR-kontoret, Økonomi- og Indenrigsministeriets departement" +* responsible = "CPR-kontoret, Indenrigs- og Sundhedsministeriets departement" * description = "The Danish civil registration system (\"CPR\") encompasses basic personal data about anyone with a civil registration number. A civil registration number shall be allocated to anyone who: 1) is registered in the national register in Denmark on the grounds of birth or relocation from abroad; 2) is included under Arbejdsmarkedets TillægsPension (ATP); 3) according to the tax authorities, is required to have a civil registration number for the purpose of tax processing in Denmark." * jurisdiction = urn:iso:std:iso:3166#DK * uniqueId[0].type = #oid @@ -24,7 +24,7 @@ InstanceOf: NamingSystem Title: "sor" Description: "SOR is provided by the Danish Health Data Authority under the Danish Ministry of Health. The register holds organizations within the Danish health sector, their geographical and virtual addresses as well as codes for their identification and for EDI-communication. Danish Health Data Authority is responsible for issuing and publishing codes to identify organizations across health care sectors and related public and private services. SOR includes organizational data on hospitals, the primary care sector (physiotherapists, general practitioners, dentists etc.) and municipal health service organizations as well as non-health care organizations that need to be able to receive data from the former." Usage: #definition -* name = "DkCoreSor" +* name = "DK Central Healthcare Organization Registry (SOR)" * status = #active * kind = #identifier * date = "2021-03-14T16:56:07+01:00" diff --git a/input/fsh/valueSets.fsh b/input/fsh/valueSets.fsh index 0b8820220..b76059a2c 100644 --- a/input/fsh/valueSets.fsh +++ b/input/fsh/valueSets.fsh @@ -43,7 +43,7 @@ Description: "LOINC codes describing Basic Observations usable in Denmark." ValueSet: SCTBasicObservation Id: dk-core-SCTBasicObservation -Title: "Dk Core SNOMED CT Basic Observation" +Title: "DK Core SNOMED CT Basic Observation" Description: "SNOMED CT codes for Basic Observations usable in Denmark" * ^experimental = false //Vital signs @@ -205,7 +205,7 @@ the observation was performed. ValueSet: NPUBasicObservation Id: dk-core-NPUBasicObservation -Title: "Dk Core NPU Basic Observation" +Title: "DK Core NPU Basic Observation" Description: "NPU codes for Basic Observations usable in Denmark" * ^experimental = false * $NPU#NPU03011 "Hb(Fe; O₂-bind.;aB)—Oxygen(O₂); sat. = ?" @@ -223,7 +223,7 @@ Description: "NPU codes for Basic Observations usable in Denmark" ValueSet: UCUMBasicUnits Id: dk-core-UCUM-BasicUnits -Title: "Dk Core UCUM Basic Units" +Title: "DK Core UCUM Basic Units" Description: "UCUM codes to represent units for basic Observations usable in Denmark" * ^experimental = false * $ucum#% "percent" @@ -256,3 +256,29 @@ Description: "DK D-eCPR OID values" * ^experimental = false * ^status = #active * include codes from system DkCoreDeCPRCodes + +ValueSet: RelatedPersonRelationshipTypes +Id: dk-core-RelatedPersonRelationshipTypes +Title: "DK Related Person Relationship Types" +Description: "DK Related Person Relationship Types" +* ^experimental = false +* ^status = #active +* $v3-RoleCode#FAMMEMB // "family member" +* $v3-RoleCode#CHILD // "child" +* $v3-RoleCode#DAUC // "daughter" +* $v3-RoleCode#SONC // "son" +* $v3-RoleCode#GRNDCHILD // "grandchild" +* $v3-RoleCode#CHLDINLAW // "child-in-law" +* $v3-RoleCode#PRN // "parent" +* $v3-RoleCode#FTH // "father" +* $v3-RoleCode#MTH // "mother" +* $v3-RoleCode#SIB // "sibling" +* $v3-RoleCode#DOMPART // "domestic partner" +* $v3-RoleCode#SPS // "spouse" +* $v3-RoleCode#FRND // "unrelated friend" +* $v3-RoleCode#NBOR // "neighbor" +* $v3-RoleCode#ROOM // "Roommate" +* $v3-RoleCode#GUARD // "guardian" +* $v3-RoleCode#NOK // "next of kin" +* $v3-RoleCode#POWATT // "power of attorney" +* include codes from system DkRelatedPersonRelationshipCodes \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-dk-core-basic-observation-intro.md b/input/pagecontent/StructureDefinition-dk-core-basic-observation-intro.md index 6d7738fc9..ece8d763a 100644 --- a/input/pagecontent/StructureDefinition-dk-core-basic-observation-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-basic-observation-intro.md @@ -1,12 +1,12 @@ ### Scope and usage The Danish Core Basic Observation profile is intended to represent basis observations performed on a subject. The purpose of this profile is to ensure a common structure of frequently measured and shared observations. A basic observation is, in a Danish context, a measurable and often used value. This can be observations such as vital signs and basic observations like height and weight. -The profile is a further profiling of DkCoreObservation and in most cases it complies to [HL7's Vital Signs profile](http://hl7.org/fhir/R4/vitalsigns.html). Since there is an expansion of one code to each of the LOINC ValueSet and the UCUM ValueSet, it means when using these codes, the instance will not be compliant. +The profile is a further profiling of DkCoreObservation and in most cases it complies to [HL7's Vital Signs profile](http://hl7.org/fhir/R4/vitalsigns.html). Instances will not be compliant with HL7's Vital Signs profile when using the code `59408-5 (Oxygen saturation in Arterial blood by Pulse oximetry)` from the LOINC ValueSet and the unit `{fraction} (fraction)` from the UCUM ValueSet, as these codes are not included in the ValueSets in the Vital Signs profile. #### Codes It is required to include a LOINC code at Observation.code. The [LOINC ValueSet](http://hl7.org/fhir/R4/valueset-observation-vitalsignresult.html) used in the HL7's Vital Signs profile is expanded with the code `59408-5 "Oxygen saturation in Arterial blood by Pulse oximetry"` because it is an often used, measurable parameter in Denmark. -Further, [Dk Core NPU Basic Observation](./ValueSet-dk-core-NPUBasicObservation.html), [Dk Core IEEE Basic Observation](./ValueSet-dk-core-IEEEBasicObservation.html), and [Dk Core SNOMED CT Basic Observation](./ValueSet-dk-core-SCTBasicObservation.html) ValueSets are added to the given slices, and codes from these ValueSets are optional to include. +Further, [DK Core NPU Basic Observation](./ValueSet-dk-core-NPUBasicObservation.html), [DK Core IEEE Basic Observation](./ValueSet-dk-core-IEEEBasicObservation.html), and [DK Core SNOMED CT Basic Observation](./ValueSet-dk-core-SCTBasicObservation.html) ValueSets are added to the given slices, and codes from these ValueSets are optional to include. An overall guidance of using the ValueSets follows the guidance of DkCoreObservation and is further specified here: * NPU codes can be used when communicating observations from the laboratory area. NPU also covers codes concerning basic observations. For this reason, NPU is included. @@ -21,9 +21,9 @@ The codes in the three ValueSets are selected to best represent the codes includ If a measurement is documented in a system or device e.g. with a SNOMED CT or IEEE code, but no LOINC code. The system must map the SNOMED CT or IEEE code to the LOINC code before exchanging it. Otherwise, it will not accommodate the requirements of the DkCoreBasicObservation profile, since a LOINC code is required. #### Units -The [UCUM ValueSet](http://hl7.org/fhir/ValueSet/ucum-vitals-common) used in HL7's Vital Signs profile is extended in the [Dk Core UCUM Basic Units ValueSet](./ValueSet-dk-core-UCUM-BasicUnits.html) to include a code for fraction `{fraction} fraction`. In the NPU ValueSet, this unit is used for the code `NPU27280 Hb(Fe; O2-bind.;aB)—Oxygen(O2); sat.(Pulse oximetry) = ?`, why it is included. However, using the fraction unit is not compliant with [HL7's Vital Signs profile](http://hl7.org/fhir/R4/vitalsigns.html), here the unit `% percent` is used for the LOINC code `"2708-6 "Oxygen saturation in Arterial blood"`. The example [John's oxygen saturation measurement (Observation)](./Observation-ObservationOxySatObservation.html) illustrates how this can be handled by deriving the instance with the NPU code from an instance with a LOINC and IEEE code. +The [UCUM ValueSet](http://hl7.org/fhir/ValueSet/ucum-vitals-common) used in HL7's Vital Signs profile is extended in the [DK Core UCUM Basic Units ValueSet](./ValueSet-dk-core-UCUM-BasicUnits.html) to include a code for fraction `{fraction} fraction`. In the NPU ValueSet, this unit is used for the code `NPU27280 Hb(Fe; O2-bind.;aB)—Oxygen(O2); sat.(Pulse oximetry) = ?`, why it is included. However, using the fraction unit is not compliant with [HL7's Vital Signs profile](http://hl7.org/fhir/R4/vitalsigns.html), here the unit `% percent` is used for the LOINC code `"2708-6 "Oxygen saturation in Arterial blood"`. The example [John's oxygen saturation measurement (Observation)](./Observation-ObservationOxySatObservation.html) illustrates how this can be handled by deriving the instance with the NPU code from an instance with a LOINC and IEEE code. -The Dk Core UCUM Basic Units ValueSet is added to the elements Observation.valueQuantity and Observation.component.valueQuantity. +The DK Core UCUM Basic Units ValueSet is added to the elements Observation.valueQuantity and Observation.component.valueQuantity. #### Examples The table below includes instances of the DkCoreBasicObservation used to represent observations used to evaluate the patient based on different procedures used in Denmark. diff --git a/input/pagecontent/StructureDefinition-dk-core-condition-intro.md b/input/pagecontent/StructureDefinition-dk-core-condition-intro.md index ac15eef6d..7a7ea5341 100644 --- a/input/pagecontent/StructureDefinition-dk-core-condition-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-condition-intro.md @@ -7,6 +7,7 @@ This way of constraining the Condition profile is within the boundaries of what We use the Condition profile for describing both conditions that are true for an encounter, and for conditions that are true for a periode of time. "In FHIR, we distinguish between the two using the Condition.category that can take the two values problem-list-item og encounter-diagnosis. In this list, examples of use is compiled: * LPR3 conditions are encounter-diagnosis +* Regional care-pathway diagnosis (Regionale forløbsdiagnoser) are problem-list-items * General practioners can code each encounter with an ICPC code. This is an encounter-diagnosis * Municipality conditions i.e. FSIII-conditions and FFB-subthemes are problem-list-items * General practitioners, in some cases, follow a patient condition for a longer periode of time (e.g. high blood pressure, high cholesterol, COPD), and some systems support care pathways for these conditions. These conditions may be categorized as problem-list-items. @@ -17,7 +18,7 @@ Given that we have a condition, which is a problem-list-item, ending the conditi * The Condition.category looses its "problem-list-item" flag. The idea is to state that from a patient viewpoint the condition has not changed, but in this professional context it is no longer in focus. * The Condition.extension.NotFollowedAnymore is populated with the date that it lost focus in a specific professional context. -The status attributes controls the context of a condition. clinicalStatus should be populated with the value “active” if the patient has the condition, and inactive if the patient no longer have the condition. Condition.verificationStatus should be set to “confirmed” if the condition have been established as true by someone with authority (e.g. a diagnosis is confirmed by a doctor). A condition is “unconfirmed”, if the patient is suspected of having a condition, and "refuted" if it has been confirmed that the condition is not present. An example of an unconfirmed condition can be found here [John Melanoma](Condition-JohnMelanoma.html)https://hl7.dk/fhir/core/. +The status attributes controls the context of a condition. clinicalStatus should be populated with the value “active” if the patient has the condition, and inactive if the patient no longer have the condition. Condition.verificationStatus should be set to “confirmed” if the condition have been established as true by someone with authority (e.g. a diagnosis is confirmed by a doctor). A condition is “unconfirmed”, if the patient is suspected of having a condition, and "refuted" if it has been confirmed that the condition is not present. An example of an unconfirmed condition can be found here [John Melanoma](Condition-JohnMelanoma.html). Note that "unconfirmed" is not the same as a risk of developing a condition. The risk of developing a certain condition may be recorded in (at least) two ways in FHIR i.e. as a familyMemberHistory or by populating Condition.code with a code that expresses a risk e.g. the SNOMED CT code ´395112001 At increased risk for cardiovascular event (finding)´. The first would typically be used if recording a family history, the second, if you want to use an increased risk as the reason for starting a prophylactic treatment. diff --git a/input/pagecontent/StructureDefinition-dk-core-observation-intro.md b/input/pagecontent/StructureDefinition-dk-core-observation-intro.md index 71f1aa76e..f48dba739 100644 --- a/input/pagecontent/StructureDefinition-dk-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-observation-intro.md @@ -29,7 +29,7 @@ None of the specified CodeSystems are required since each use case may call for #### Subjects and performers The primary use of this profile is to describe an observation performed on a patient. The patient must be represented using the [DkCorePatient](StructureDefinition-dk-core-patient.html) profile. However, it is still possible to select Observation.subject to be a Group, Device or Location. This is chosen to enable different uses of the profile e.g. a device calibration result is an observation of the device, not of the person that usually uses the device. -The performer of the observation may be different kinds of actors depending on the use case. The performer may be represented using [DkCorePractitioner](StructureDefinition-dk-core-practitioner.html), [DkCoreOrganization](StructureDefinition-dk-core-organization.html), [DkCorePatient](StructureDefinition-dk-core-patient.html), PractitionerRole, CareTeam or RelatedPerson. +The performer of the observation may be different kinds of actors depending on the use case. The performer may be represented using [DkCorePractitioner](StructureDefinition-dk-core-practitioner.html), [DkCoreOrganization](StructureDefinition-dk-core-organization.html), [DkCorePatient](StructureDefinition-dk-core-patient.html), PractitionerRole, CareTeam or [DkCoreRelatedPerson](StructureDefinition-dk-core-related-person.html). #### Quality of the Observation If known, information about the method used for the observation can be included, in the element Observation.method, as this might affect the interpretation of the observation. In DkCoreObservation profile, a slice is added which includes an extensible ValueSet of commonly used SNOMED CT methods; `Estimation technique`, `Measurement technique`, and `Reported`. If a different method is used the ValueSet may be extended with SNOMED CT codes, or a new slice may be added. diff --git a/input/pagecontent/StructureDefinition-dk-core-organization-intro.md b/input/pagecontent/StructureDefinition-dk-core-organization-intro.md index 4ef976176..ab29a6215 100644 --- a/input/pagecontent/StructureDefinition-dk-core-organization-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-organization-intro.md @@ -9,6 +9,7 @@ Please notice, that an organization shall always have at least one identifier. S - *CVR identifier*: an official company identifier for Danish companies. - *Kommunal identifier*: the official identifier for a Danish municipality. - *Regional identifier*: the official organization identifier for a Danish region. +- *Producent identifier*: the identifier used for the producer of laboratory result, maintained by MedCom. #### Representing a general practitioner diff --git a/input/pagecontent/StructureDefinition-dk-core-patient-intro.md b/input/pagecontent/StructureDefinition-dk-core-patient-intro.md index e86e8a439..7d867ddfe 100644 --- a/input/pagecontent/StructureDefinition-dk-core-patient-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-patient-intro.md @@ -1,5 +1,5 @@ ### Scope and usage -The Danish Core Patient profile is intended to encapsulate the most common and basic data model of patients in Danish healthcare systems covering both primary sector, secondary sector (specialty doctors and hospitals) and municipality cases. As such the profile should be usable in most Danish contexts. Note that the profile is usable for those that recieve health and social care in municipalities, even in contexts where they are more commonly known as citizens ([DA] borgere). +The Danish Core Patient profile is intended to encapsulate the most common and basic data model of patients in Danish healthcare systems covering both primary sector, secondary sector (specialty doctors and hospitals) and municipality cases. As such the profile should be usable in most Danish contexts. Note that the profile is usable for those that receive health and social care in municipalities, even in contexts where they are more commonly known as citizens ([DA] borgere). ### Patient identifiers This patient profile currently only reflects the use of the established national danish patient identifiers called [CPR](https://cpr.dk/) and (for patients without or with unknown CPR number) the use of replacement CPR numbers ([DA] Erstatnings-CPR-numre eller eCPR). Both national [X-eCPR](https://sundhedsdatastyrelsen.dk/da/registre-og-services/ecpr) numbers issued by the Danish Health Data Authority ([DA] Sundhedsdatastyrelsen) and [D-eCPR](https://sundhedsdatastyrelsen.dk/da/rammer-og-retningslinjer/om-patientregistrering/patientregistrering-feallesindhold) numbers primarily issued locally by one of the five danish regions are supported by this profile. More official identifiers are expected to be used and profiled in the future, eg: @@ -14,11 +14,30 @@ The element identifier.type describes the specific purpose of an identifier. It #### eCPR-identifier The element Patient.identifier includes two slices to represent eCPR. Each slice includes an identifier with requirements for the specific eCPR: -* For X-eCPR, the [DkCoreXeCprIdentifier](./StructureDefinition-dk-core-x-ecpr-identifier.html) must be use, which includes an OID as system and an invariant describing the requirements for the structure of the identifier, [based on guidelines from Danish Health Data Authority](https://www.nspop.dk/pages/viewpage.action?pageId=226757583#eCPRFormater(XeCPRogDeCPR)-Formatetfornationaleerstatningspersonnumre-X-eCPR). An example of usage can be seen in [here](./Patient-ukendt-X-eCPR.html). +* For X-eCPR, the [DkCoreXeCprIdentifier](./StructureDefinition-dk-core-x-ecpr-identifier.html) must be used, which includes an OID as system and an invariant describing the requirements for the structure of the identifier, [based on guidelines from Danish Health Data Authority](https://www.nspop.dk/pages/viewpage.action?pageId=226757583#eCPRFormater(XeCPRogDeCPR)-Formatetfornationaleerstatningspersonnumre-X-eCPR). An example of usage can be seen in [here](./Patient-ukendt-X-eCPR.html). * For D-eCPR, the [DkCoreDeCprIdentifier](./StructureDefinition-dk-core-d-ecpr-identifier.html) must be used, which includes a ValueSet of OID's that may be used as system. The OIDs represent the D-eCPR in general and D-eCPR for each of the five regions. Further, the identifier includes an invariant describing the requirements for the structure of the identifier, [based on guidelines from Danish Health Data Authority](https://www.nspop.dk/pages/viewpage.action?pageId=226757583#eCPRFormater(XeCPRogDeCPR)-Formatetfordecentraleerstatningspersonnumre-D-eCPR). An example of usage can be seen in [here](./Patient-ukendt-D-eCPR.html). In case it is necessary to include an eCPR which is not an X-eCPR or a D-eCPR, it is recommended to add a new slice with the relevant other system and the eCPR identifier from that system. This may be necessary for small practices or due to legacy reasons. An example of this can be seen [here](./Patient-ukendt.html). +### Handling CPR registry civilstand and status values +In the Danish CPR registry, a civilstand and a status attribute exist. The civilstand attribute contains information about marital status as well as deceased status. The status value contains information about a persons whereabouts e.g. living in Denmark or Greenland with known or unknown address, disappearance, and death. Most of the status values are used to inform about the reason for a CPR identifier being inactive. + + In FHIR, this information is separated into different attributes. As a consequence the following decisions have been made: + * CPR status values except for deceased status are not represented. Data in the health sector is typically not communicated, relating to inactive CPR-identifiers. If information about whether people live in Denmark or Greenland is important, this can be represented in the Patient.addresss attribute. Deceased status is represented in Patient.deceased + * Civilstand values are represented in Patient.maritalStatus except for the value 'D' død (dead). Death is registered in Patient.deceased. Patient.maritalStatus uses a standard FHIR ValueSet. However a few of the Danish civilstatus values cannot be converted (P and O). Here the FHIR ValueSet is extended with the CPR-registry values. + +The tabel below shows how to convert between CPR-registry civilstand/status and FHIR representation. + +{:class="grid"} +| CPR-registry civilstand/status | FHIR representation | +| ------------- |-------------| +|status = 90 and civilstand = D indicating a dead person |Patient.deceasedBoolean = true| +|civilstand = U indicating an unmarried person | Patient.maritalStatus = U| +|civilstand = F indicating a divorced person |Patient.maritalStatus = D| +|civilstand = E indicating a widow |Patient.maritalStatus = W| +|civilstand = P indicating 'registreret partner'/registered partner which is a marriage-like status according to Danish law |Patient.maritalStatus = P| +|civilstand = O indicating 'ophørt registreret partner'/disolved partnership. When the marriage-like partnership is disolved (parallel to a divorce) |Patient.maritalStatus = O| +|civilstand = L indicating that the registrered partner of the person is dead (parallel to a widow) |Patient.maritalStatus = W| ### Use of security label on patients Danish citizens that have requested name and address protection ([Navne- og adressebeskyttelse](https://www.retsinformation.dk/eli/lta/2017/646#idee1fb7b6-c7e7-429d-a738-881c5e486fa6)) should be labeled with the security label as follows: @@ -36,7 +55,7 @@ In case it is necessary to include an eCPR which is not an X-eCPR or a D-eCPR, i ``` -Use of this label should be interpreted according to the law, rouhgly meaning that only personnel using systems in public/official affairs are allowed to see name and address for the patient/citizen. +Use of this label should be interpreted according to the law, roughly meaning that only personnel using systems in public/official affairs are allowed to see name and address for the patient/citizen. ### Unknown values or Absent values There may be scenarios where it is not possible to supply all values as required by this profile. For such cases it is possible to specify a Data Absent Reason ([DAR](https://hl7.org/fhir/R4/extension-data-absent-reason.html)) extension which enables data fields to be supplied where data is not available. An example of this can be seen [here](./Patient-ukendt.html). The use of DAR is not restricted to the patient profile. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-dk-core-related-person-intro.md b/input/pagecontent/StructureDefinition-dk-core-related-person-intro.md new file mode 100644 index 000000000..0278bc194 --- /dev/null +++ b/input/pagecontent/StructureDefinition-dk-core-related-person-intro.md @@ -0,0 +1,39 @@ +### Scope and usage +The Danish Core Related Person profile is intended to encapsulate the most common and basic data model of persons related to patients/persons in Danish healthcare systems covering both primary sector, secondary sector (specialty doctors and hospitals) and municipality cases. As such the profile should be usable in most Danish contexts. Note that the profile is usable for related persons to those that receive health and social care in municipalities, even in contexts where receivers of care are more commonly known as citizens ([DA] borgere). + +Note also, that the intended use of Related Person is to describe a relationship in itself and that privileges which might be associated to a relationship (e.g. power of attorney) should be expressed by other means. + +### Identifiers for related persons +This related person profile currently reflects the use of the established national Danish citizen identifiers called [CPR](https://cpr.dk/) and (where relevant) the use of replacement CPR numbers ([DA] Erstatnings-CPR-numre eller eCPR). + +#### CPR-identifier + +The element identifier.type describes the specific purpose of an identifier. It is desired to use the code 'NNDNK' from the CodeSystem [IdentifierType](https://terminology.hl7.org/4.0.0/CodeSystem-v2-0203.html) as the type for [DkCoreCprIdentifier](https://hl7.dk/fhir/core/StructureDefinition-dk-core-cpr-identifier.html). However, it is currently not recommended to use this code, due to known problems with the validation tool when validating the code 'NNDNK'. + +#### eCPR-identifier + +The element RelatedPerson.identifier includes two slices to represent eCPR. Each slice includes an identifier with requirements for the specific eCPR: +* For X-eCPR, the [DkCoreXeCprIdentifier](./StructureDefinition-dk-core-x-ecpr-identifier.html) must be used, which includes an OID as system and an invariant describing the requirements for the structure of the identifier, [based on guidelines from Danish Health Data Authority](https://www.nspop.dk/pages/viewpage.action?pageId=226757583#eCPRFormater(XeCPRogDeCPR)-Formatetfornationaleerstatningspersonnumre-X-eCPR). +* For D-eCPR, the [DkCoreDeCprIdentifier](./StructureDefinition-dk-core-d-ecpr-identifier.html) must be used, which includes a ValueSet of OID's that may be used as system. The OIDs represent the D-eCPR in general and D-eCPR for each of the five regions. Further, the identifier includes an invariant describing the requirements for the structure of the identifier, [based on guidelines from Danish Health Data Authority](https://www.nspop.dk/pages/viewpage.action?pageId=226757583#eCPRFormater(XeCPRogDeCPR)-Formatetfordecentraleerstatningspersonnumre-D-eCPR). + +### Relationship codes +The relationships in [DK Core Related Person Relationship Types](ValueSet-dk-core-RelatedPersonRelationshipTypes.html) are intended to cover the most common use cases within the Danish healthcare sector. For the relationship codes that are included from the general relationship codes [danish translations](CodeSystem-role-code-dk-supplement.html) are provided. In cases when other relationships need to be expressed, codes from the general [Related Person Relationship Type](http://hl7.org/fhir/R4/valueset-relatedperson-relationshiptype.html) should be used when possible. + +### Use of security label on related persons +Danish citizens that have requested name and address protection ([Navne- og adressebeskyttelse](https://www.retsinformation.dk/eli/lta/2017/646#idee1fb7b6-c7e7-429d-a738-881c5e486fa6)) should be labeled with the security label as follows: + + ``` + + + + + + + + +... [snip] ... + + ``` + +Use of this label should be interpreted according to the law, roughly meaning that only personnel using systems in public/official affairs are allowed to see name and address for the related person/citizen. +