diff --git a/ig.ini b/ig.ini index 25c9a8803..82644d7d4 100644 --- a/ig.ini +++ b/ig.ini @@ -1,4 +1,4 @@ [IG] ig = fsh-generated/resources/ImplementationGuide-hl7.fhir.dk.core.json -;template = https://github.com/hl7dk/dk-ig-template -template = fhir.base.template#current \ No newline at end of file +template = https://github.com/hl7dk/dk-ig-template +;template = fhir.base.template#current \ No newline at end of file diff --git a/input/fsh/AuthorizationIdentifier.fsh b/input/fsh/AuthorizationIdentifier.fsh index 6c904a030..5f59b7e21 100644 --- a/input/fsh/AuthorizationIdentifier.fsh +++ b/input/fsh/AuthorizationIdentifier.fsh @@ -8,11 +8,8 @@ Description: "Identifier holding the official [authorization identifier](https:/ * value 1.. * obeys authorization-id-format * ^maxLength = 5 -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.source = "https://stps.dk/da/autorisation/om-autorisationer/autorisations-id/" - + Invariant: authorization-id-format -Description: "Authorization ID consists of exactly 5 consonants and Y and or numbers in any order" +Description: "Authorization ID consists of exactly 5 consonants and Y and or numbers in any order. See https://stps.dk/da/autorisation/om-autorisationer/autorisations-id/" Severity: #error -Expression: "matches('^([b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z0-9]){5}$')" \ No newline at end of file +Expression: "matches('^([b-df-hj-np-tv-zB-DF-HJ-NP-TV-Z0-9]){5}$')" diff --git a/input/fsh/CVRIdentifier.fsh b/input/fsh/CVRIdentifier.fsh index 547036e5a..3eaf5e1bf 100644 --- a/input/fsh/CVRIdentifier.fsh +++ b/input/fsh/CVRIdentifier.fsh @@ -12,9 +12,9 @@ Description: "Identifier holding a danish [CVR](https://datacvr.virk.dk/data/) n Invariant: CVR-length Description: "CVR must be exactly 8 numeric characters long" Severity: #error -Expression: "value.matches('^[0-9]{8}$')" +Expression: "matches('^[0-9]{8}$')" Invariant: CVR-modulus-11 Description: "CVR must pass the modulus 11 check" Severity: #error -Expression: "((\n (value.substring(0,1).toInteger()*2)+\n (value.substring(1,1).toInteger()*7)+\n (value.substring(2,1).toInteger()*6)+\n (value.substring(3,1).toInteger()*5)+\n (value.substring(4,1).toInteger()*4)+\n (value.substring(5,1).toInteger()*3)+\n (value.substring(6,1).toInteger()*2)+\n (value.substring(7,1).toInteger()*1)) mod(11)=0)" \ No newline at end of file +Expression: "((\n (substring(0,1).toInteger()*2)+\n (substring(1,1).toInteger()*7)+\n (substring(2,1).toInteger()*6)+\n (substring(3,1).toInteger()*5)+\n (substring(4,1).toInteger()*4)+\n (substring(5,1).toInteger()*3)+\n (substring(6,1).toInteger()*2)+\n (substring(7,1).toInteger()*1)) mod(11)=0)" \ No newline at end of file diff --git a/input/fsh/DkCoreCondition.fsh b/input/fsh/DkCoreCondition.fsh index 52eebe2c8..5e77deb6b 100644 --- a/input/fsh/DkCoreCondition.fsh +++ b/input/fsh/DkCoreCondition.fsh @@ -84,6 +84,22 @@ Usage: #example * clinicalStatus = $condition-clinical#active * verificationStatus = $condition-ver-status#confirmed +Instance: JohnFracture +InstanceOf: DkCoreCondition +Title: "John fraktur" +Description: "Johns fraktur-diagnose, udskrivningsdiagnose fra hospitalet med tillægskode" +Usage: #example +* code.coding[SKS-D] = urn:oid:1.2.208.176.2.4.12#DS721+TUL1 "Pertrokantær femurfraktur, højresidig" +* subject.reference = "Patient/john" +* asserter.reference = "Practitioner/AbrahamLaege" +* recorder.reference = "Practitioner/AbrahamLaege" +* category = $condition-category#encounter-diagnosis +* onsetDateTime = "2022-04-26" +* recordedDate = "2022-04-27" +* clinicalStatus = $condition-clinical#active +* verificationStatus = $condition-ver-status#confirmed + + Instance: JohnMelanoma InstanceOf: DkCoreCondition Title: "John mistanke om Modermærkekræft" diff --git a/input/fsh/DkCoreCprIdentifier.fsh b/input/fsh/DkCoreCprIdentifier.fsh index 5f9605cfb..7cde1471b 100644 --- a/input/fsh/DkCoreCprIdentifier.fsh +++ b/input/fsh/DkCoreCprIdentifier.fsh @@ -9,15 +9,10 @@ Description: "This structure holds the danish [CPR](https://cpr.dk/) identifier" * value 1.. * obeys cpr * ^maxLength = 10 -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.source = "https://cpr.dk/cpr-systemet/opbygning-af-cpr-nummeret/#:~:text=5%20%2D%206%20position%20angiver%20personens,i%20personnummeret%20angiver%20personens%20k%C3%B8n." -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.requirements = "Requirement of danish civil registration numbers" * ^mustSupport = false Invariant: cpr -Description: "Requirement of danish civil registration numbers" +Description: "Requirement of danish civil registration numbers. See https://cpr.dk/cpr-systemet/opbygning-af-cpr-nummeret/#:~:text=5%20%2D%206%20position%20angiver%20personens,i%20personnummeret%20angiver%20personens%20k%C3%B8n." Severity: #error -Expression: "value.matches('^((((0[1-9]|1[0-9]|2[0-9]|3[0-1])(01|03|05|07|08|10|12))|((0[1-9]|1[0-9]|2[0-9]|30)(04|06|09|11))|((0[1-9]|1[0-9]|2[0-9])(02)))[0-9]{6})$')" +Expression: "matches('^((((0[1-9]|1[0-9]|2[0-9]|3[0-1])(01|03|05|07|08|10|12))|((0[1-9]|1[0-9]|2[0-9]|30)(04|06|09|11))|((0[1-9]|1[0-9]|2[0-9])(02)))[0-9]{6})$')" +* requirements = "Requirement of danish civil registration numbers" diff --git a/input/fsh/DkCoreObservation.fsh b/input/fsh/DkCoreObservation.fsh index 825cb65f5..45439a641 100644 --- a/input/fsh/DkCoreObservation.fsh +++ b/input/fsh/DkCoreObservation.fsh @@ -22,7 +22,7 @@ Description: "HL7 Denmark core profile for observations" * code.coding[SNOMEDCT] * ^short = "SNOMED CT code for the observation" * system 1.. - * system = "https://www.snomed.org/" (exactly) + * system = "http://snomed.info/sct" (exactly) * code 1.. * code.coding[NPU] * ^short = "NPU code for the observation. NPU codes are administred by the Danish Health Data Authority." @@ -67,7 +67,7 @@ Description: "HL7 Denmark core profile for observations" * component.code.coding[SNOMEDCT] * ^short = "SNOMED CT code for the observation" * system 1.. - * system = "https://www.snomed.org/" (exactly) + * system = "http://snomed.info/sct" (exactly) * code 1.. * component.code.coding[NPU] * ^short = "NPU code for the observation. NPU codes are administred by the Danish Health Data Authority." @@ -102,7 +102,7 @@ Description: "HL7 Denmark core profile for observations" Invariant: dk-core-observation-mandatory-units Description: "If value is specified then unit and/or code must be specified" Severity: #error -Expression: "Observation.valueQuantity.value.exists() implies Observation.valueQuantity.unit.exists() or Observation.valueQuantity.code.exists()" +Expression: "value.ofType(Quantity).value.exists() implies value.ofType(Quantity).unit.exists() or value.ofType(Quantity).code.exists()" @@ -166,13 +166,14 @@ Instance: ObservationRespiratoryVitalSigns InstanceOf: DkCoreObservation Title: "John's Respiratory rate measurement, Vital Signs" Usage: #example -* category = #vital-signs +* category = $observation-category#vital-signs * status = #final * code.coding[LOINC] = $LOINC#9279-1 "Respiratory rate" * valueQuantity.value = 50 -* valueQuantity.code = #{Breaths}/min +* valueQuantity.code = #/min * valueQuantity.system = $ucum * valueQuantity.unit = "Breaths / minute" +* effectiveDateTime = 2023-11-01T12:00:00+01:00 * subject = Reference(john) * performer = Reference(AbrahamLaege) @@ -183,8 +184,9 @@ Usage: #inline * status = #final * code.coding = $NPU#NPU03011 "Iltmætning" * valueQuantity.value = 0.97 -* valueQuantity.code = #{1} +* valueQuantity.code = #1 * valueQuantity.system = $ucum +* effectiveDateTime = 2023-11-01T12:00:00+01:00 * subject = Reference(john) * performer = Reference(AbrahamLaege) @@ -192,13 +194,14 @@ Instance: ObservationOxySatVitalSigns InstanceOf: DkCoreObservation Title: "John's oxygen saturation measurement, Vital Signs" Usage: #example -* category = #vital-signs +* category = $observation-category#vital-signs * status = #final * code.coding[LOINC] = $LOINC#2708-6 "Oxygen saturation in Arterial blood" * valueQuantity.value = 97.0 * valueQuantity.code = #% * valueQuantity.system = $ucum * valueQuantity.unit = "%" +* effectiveDateTime = 2023-11-01T12:00:00+01:00 * subject = Reference(john) * performer = Reference(AbrahamLaege) * contained[0] = ObservationOxySat diff --git a/input/fsh/DkCorePatient.fsh b/input/fsh/DkCorePatient.fsh index 73c4f15a8..91f0fb6f9 100644 --- a/input/fsh/DkCorePatient.fsh +++ b/input/fsh/DkCorePatient.fsh @@ -4,12 +4,6 @@ Id: dk-core-patient Title: "Danish Core Patient Profile" Description: "HL7 Denmark core profile for a patient" * obeys marital-status-unknown-usage -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. -* . ^constraint.source = "https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/" -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.requirements = "Marital status is legally unknown in Denmark" * identifier 1.. * ^slicing.discriminator.type = #value * ^slicing.discriminator.path = "system" @@ -151,6 +145,7 @@ Usage: #example * birthDate = "1983-06-07" Invariant: marital-status-unknown-usage -Description: "Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK" +Description: "Status in maritalStatus is unknown in a danish context. Consider mapping the value to UNK. See https://cpr.dk/borgere/hvad-staar-der-om-mig-i-cpr-registerindsigt/hvad-og-hvem-er-registreret-i-cpr-og-hvem-opdaterer-oplysninger-om-dig-i-cpr/" Severity: #warning -Expression: "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()" \ No newline at end of file +Expression: "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()" +* requirements = "Marital status is legally unknown in Denmark" \ No newline at end of file diff --git a/input/fsh/GLNIdentifier.fsh b/input/fsh/GLNIdentifier.fsh index fcaf86303..14f24899e 100644 --- a/input/fsh/GLNIdentifier.fsh +++ b/input/fsh/GLNIdentifier.fsh @@ -12,9 +12,9 @@ Description: "Identifier holding a 13 digit GLN" Invariant: gln-length Description: "GLN must be exactly 13 characters long" Severity: #error -Expression: "value.matches('^[0-9]{13}$')" +Expression: "matches('^[0-9]{13}$')" Invariant: gln-modulus-10 Description: "GLN must pass the modulus 10 check - https://www.gs1.org/services/how-calculate-check-digit-manually" Severity: #error -Expression: "((\n(10-((value.substring(0,1).toInteger()*1)+\n(value.substring(1,1).toInteger()*3)+\n(value.substring(2,1).toInteger()*1)+\n(value.substring(3,1).toInteger()*3)+\n(value.substring(4,1).toInteger()*1)\n+(value.substring(5,1).toInteger()*3)\n+(value.substring(6,1).toInteger()*1)\n+(value.substring(7,1).toInteger()*3)\n+(value.substring(8,1).toInteger()*1)\n+(value.substring(9,1).toInteger()*3)\n+(value.substring(10,1).toInteger()*1)\n+(value.substring(11,1).toInteger()*3))mod(10))mod(10))=value.substring(12,1).toInteger())" \ No newline at end of file +Expression: "((\n(10-((substring(0,1).toInteger()*1)+\n(substring(1,1).toInteger()*3)+\n(substring(2,1).toInteger()*1)+\n(substring(3,1).toInteger()*3)+\n(substring(4,1).toInteger()*1)\n+(substring(5,1).toInteger()*3)\n+(substring(6,1).toInteger()*1)\n+(substring(7,1).toInteger()*3)\n+(substring(8,1).toInteger()*1)\n+(substring(9,1).toInteger()*3)\n+(substring(10,1).toInteger()*1)\n+(substring(11,1).toInteger()*3))mod(10))mod(10))=substring(12,1).toInteger())" \ No newline at end of file diff --git a/input/fsh/KombitOrgIdentifier.fsh b/input/fsh/KombitOrgIdentifier.fsh index 75fed7ac0..7e895f371 100644 --- a/input/fsh/KombitOrgIdentifier.fsh +++ b/input/fsh/KombitOrgIdentifier.fsh @@ -12,4 +12,4 @@ Description: "Identifier holding the organization code issued by KOMBIT" Invariant: uuid Description: "General UUID expression" Severity: #error -Expression: "value.matches('urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')" \ No newline at end of file +Expression: "matches('urn:uuid:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}')" \ No newline at end of file diff --git a/input/fsh/Lpr3Identifier.fsh b/input/fsh/Lpr3Identifier.fsh index 0210f8247..cb63f6f3c 100644 --- a/input/fsh/Lpr3Identifier.fsh +++ b/input/fsh/Lpr3Identifier.fsh @@ -1,4 +1,4 @@ -Profile: Lpr3Identifier +/* Profile: Lpr3Identifier Parent: Identifier Id: lpr3-Identifier Title: "LPR3 Identifier" @@ -7,14 +7,11 @@ Description: "Identifier holding a LPR3 identifier for an organization" * system = "https://www.esundhed.dk/Registre/Landspatientsregisteret" (exactly) * value 1.. * obeys uuidv5 -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.source = "https://scandihealth.github.io/lpr3-docs/" -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.requirements = "LPR3 episode of care identifiers must conform to a UUIDv5" Invariant: uuidv5 Description: "LPR3 episode of care identifiers must conform to a UUIDv5" Severity: #error -Expression: "value.matches('urn:uuid:[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[5][a-fA-F0-9]{3}-[89aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}')" \ No newline at end of file +Expression: "matches('urn:uuid:[a-fA-F0-9]{8}-[a-fA-F0-9]{4}-[5][a-fA-F0-9]{3}-[89aAbB][a-fA-F0-9]{3}-[a-fA-F0-9]{12}')" +* requirements = "LPR3 episode of care identifiers must conform to a UUIDv5" +* source = "https://scandihealth.github.io/lpr3-docs/" + */ \ No newline at end of file diff --git a/input/fsh/SORIdentifier.fsh b/input/fsh/SORIdentifier.fsh index e47fd2dd8..03a53fe77 100644 --- a/input/fsh/SORIdentifier.fsh +++ b/input/fsh/SORIdentifier.fsh @@ -8,11 +8,9 @@ Description: "Identifier holding the official SOR identifier for a danish health * system = "urn:oid:1.2.208.176.1.1" (exactly) * value 1.. * obeys min-digits-sor -// WARNING: The constraint index in the following rule (e.g., constraint[0]) may be incorrect. -// Please compare with the constraint array in the original definition's snapshot and adjust as necessary. - * ^constraint.requirements = "SOR Identifiers are at minimum 11 digits long" 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" Severity: #error -Expression: "matches('^([0-9]){11,}$')" \ No newline at end of file +Expression: "matches('^([0-9]){11,}$')" +* requirements = "SOR Identifiers are at minimum 11 digits long" \ No newline at end of file diff --git a/input/fsh/aliases.fsh b/input/fsh/aliases.fsh index 8d01b894b..56440b845 100644 --- a/input/fsh/aliases.fsh +++ b/input/fsh/aliases.fsh @@ -14,7 +14,7 @@ Alias: $sor-organization-type = http://hl7.dk/fhir/core/ValueSet/sor-organizatio Alias: $dk-marital-status_1 = http://hl7.dk/fhir/core/ValueSet/dk-marital-status Alias: $ucum = http://unitsofmeasure.org Alias: $NPU = urn:oid:1.2.208.176.2.1 -Alias: $Medcom = https://terminology.medcom.dk/fhir/observation-code +Alias: $Medcom = http://medcomfhir.dk/ig/terminology/CodeSystem/medcom-observation-codes Alias: $SKS = urn:oid:1.2.208.176.2.4 Alias: $LOINC = http://loinc.org Alias: $IEEEx73 = urn:iso:std:iso:11073:10101 diff --git a/input/fsh/extensions.fsh b/input/fsh/extensions.fsh index c194ba6be..4d1d7be6f 100644 --- a/input/fsh/extensions.fsh +++ b/input/fsh/extensions.fsh @@ -2,10 +2,11 @@ Extension: ConditionLastAssertedDate Id: ConditionLastAssertedDate Title: "ConditionLastAssertedDate" Description: "Extension for the last date a Condition-instance was confirmed valid in its current state. E.g. with its current clinical- and verification status, stage and severity. Typically the last performed follow-up" - * . ^short = "ConditionLastAssertedDate" * ^definition = "Extension for the last date a Condition-instance was confirmed valid in its current state. E.g. with its current clinical- and verification status, stage and severity. Typically the last performed follow-up" * value[x] only dateTime +* ^context.type = http://hl7.org/fhir/extension-context-type#element +* ^context.expression = "Condition" Extension: NotFollowedAnymore Id: NotFollowedAnymore @@ -14,6 +15,8 @@ Description: "Extension for the date where a condition lost focus in a specific * . ^short = "NotFollowedAnymore" * ^definition = "Extension for the date where a condition lost focus in a specific clinical context" * value[x] only dateTime +* ^context.type = http://hl7.org/fhir/extension-context-type#element +* ^context.expression = "Condition" Extension: RegionalSubDivisionCodes Id: dk-core-RegionalSubDivisionCodes diff --git a/input/pagecontent/StructureDefinition-dk-core-condition-intro.md b/input/pagecontent/StructureDefinition-dk-core-condition-intro.md index 600b7c671..ac15eef6d 100644 --- a/input/pagecontent/StructureDefinition-dk-core-condition-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-condition-intro.md @@ -17,4 +17,8 @@ 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 Condition profile cover both primary sector, secondary sector (medical specialists ([DA] speciallæger) and hospitals) and municipality cases. As such the profile should be usable in most Danish contexts. +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/. + +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. + +Condition profile cover both primary sector, secondary sector (medical specialists ([DA] speciallæger) and hospitals) and municipality cases. As such the profile should be usable in most Danish contexts. diff --git a/input/pagecontent/StructureDefinition-dk-core-observation-intro.md b/input/pagecontent/StructureDefinition-dk-core-observation-intro.md index d3ddae51e..5b354f4af 100644 --- a/input/pagecontent/StructureDefinition-dk-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-dk-core-observation-intro.md @@ -4,9 +4,9 @@ The Danish Core Observation profile is intended to represent observations for a * results of using clinical assessment tools such as APGAR * device measurements such as Pulse Oximetry data * observations obtained in clinical assesments such as abdominal tenderness -* general health status +* general health status such as pregnancy +* social history and anamnesis (Please be aware, an Observation must only include more than one code, if each code is true for the observation that actually happened, and not several observation as a result of an investigation. In this case, the ClinicalImpression resource should be used.) -> Note: HL7-Denmark are working on an Observation profile for vital signs. Expected release is in Q4 2023. #### Codes In a Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding and Observation.component.code.coding. In these elements, multiple CodeSystems are specified to ensure similar use of relevant CodeSystems in a Danish context. Some observations may need to be grouped together to document critical observations, e.g. systolic and diastolic bloodpressure, which can be supported by the element Observation.component. [Click here for more information about Observation Grouping](http://hl7.org/fhir/observation.html#obsgrouping). @@ -17,12 +17,12 @@ Two or more Observation.code.coding may be assigned in the same Observation.code If the codings and units does not represent the same meaning, one instance of an Observation can be derived from another, as described in section [Observation derived from other Observation](#observation-derived-from-other-observation). None of the specified CodeSystems are required since each use case may call for different codes to represent the observations. The specified CodeSystems are included based on the [standard catalogue from the Danish Health Data Agency](https://sundhedsdatastyrelsen.dk/da/rammer-og-retningslinjer/om-referencearkitektur-og-standarder/standardkatalog), and Danish practice. In the following, some overall recommendations about the use of the code systems are provided: -* NPU codes are the preferred first choice in official Danish health IT-systems. NPU mostly have laboratory codes. -* LOINC codes are generally not recommended, for clinical areas that NPU covers, because they are overlapping without being modelled in exactly the same way. For clinical areas not covered by NPU, LOINC can be used. LOINC is an international code system, and is the first choice for many FHIR-observations around the world. This also means that Observation standard-profiles often use LOINC codes, and that interoperability use cases using equipment/wearables intended for markets intentionally, very well may have build-in LOINC codes. -* IEEE codes are the internal codes of many devices see [https://www.iso.org/standard/37890.html](https://www.iso.org/standard/37890.html). If an original observation from a device is represented, HL7-DK recommends using its original layout including the IEEE codes. Read more in IHE Personal Connected Health [https://wiki.ihe.net/index.php/Personal_Connected_Health](https://wiki.ihe.net/index.php/Personal_Connected_Health). -* SKS does have a few observation codes in use, most are found in the 'R' Hierarchy - see e.g. [https://medinfo.dk/sks/brows.php](https://medinfo.dk/sks/brows.php). HL7-DK does not recommend the use of SKS codes from the 'ZZ' hierarchy as FHIR observation-codes as they are codes for procedures. -* MedCom codes are Danish codes, that are not part of SKS, but have been necessary in Danish interoperability projects through time. They are sometimes referred to as kiap-codes or MCS codes. They can be found here: [https://medcom.dk/standarder/koder/laboratorieomraadet/](https://medcom.dk/standarder/koder/laboratorieomraadet/) or here: [https://kiap.dk/kiap/praksis/services/koder/iupackoder.php](https://kiap.dk/kiap/praksis/services/koder/iupackoder.php) -* SNOMED CT codes are accepted in Denmark. SNOMED CT codes are relevant, for areas that NPU does not cover. Additionally, SNOMED CT is often used as a reference terminology, to give a common language of retrieval for data that have originally been defined or coded in some other way. If SNOMED CT is used as a reference terminology, it is often relevant to provide a SNOMED CT code, in addition to the original coding. This is also acceptable if the SNOMED CT concept is less granular than the original code, if each code is true for the observation that happened. +* NPU codes are the preferred first choice when communicating observations from the laboratory area. NPU contains few codes outside the laboratory area. NPU is recommended to use in the standard catalogue from the Danish Health Data Agency. +* LOINC codes are generally not recommended, for clinical areas that NPU covers, because they are overlapping without being modelled in exactly the same way. For clinical areas not covered by NPU, LOINC can be used. LOINC is an international code system, and is the first choice for many FHIR-observations around the world. This also means that Observation standard-profiles often use LOINC codes, and that interoperability use cases using equipment/wearables intended for markets intentionally, very well may have build-in LOINC codes. LOINC is not recommended to use by the Danish Health Data Agency, but is included to support interoperability across countries in projects such as European Helath Data Space (EHDS). +* IEEE codes are the internal codes of many devices see [https://www.iso.org/standard/37890.html](https://www.iso.org/standard/37890.html). If an original observation from a device is represented, HL7-DK recommends using its original layout including the IEEE codes. Read more in IHE Personal Connected Health [https://wiki.ihe.net/index.php/Personal_Connected_Health](https://wiki.ihe.net/index.php/Personal_Connected_Health). IEEE is recommended to use in the standard catalogue from the Danish Health Data Agency. +* SKS does have a few observation codes in use, most are found in the 'R' Hierarchy - see e.g. [https://medinfo.dk/sks/brows.php](https://medinfo.dk/sks/brows.php). HL7-DK does not recommend the use of SKS codes from the 'ZZ' hierarchy as FHIR observation-codes as they are codes for procedures. SKS is recommended to use in the standard catalogue from the Danish Health Data Agency. +* MedCom codes are Danish codes, that are not part of SKS, but have been necessary in Danish interoperability projects through time. They are sometimes referred to as kiap-codes or MCS codes. They can be found here: [https://medcom.dk/standarder/koder/laboratorieomraadet/](https://medcom.dk/standarder/koder/laboratorieomraadet/) or here: [https://kiap.dk/kiap/praksis/services/koder/iupackoder.php](https://kiap.dk/kiap/praksis/services/koder/iupackoder.php). MedCom codes are not recommended to use by the Danish Health Data Agency, but are included as they are often used in MedComs standards. +* SNOMED CT codes are accepted in Denmark. SNOMED CT codes are relevant, for areas that NPU does not cover. Additionally, SNOMED CT is often used as a reference terminology, to give a common language of retrieval for data that have originally been defined or coded in some other way. If SNOMED CT is used as a reference terminology, it is often relevant to provide a SNOMED CT code, in addition to the original coding. This is also acceptable if the SNOMED CT concept is less granular than the original code, if each code is true for the observation that happened. SNOMED CT is stated to be usefull in the standard catalogue from the Danish Health Data Agency. #### 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. diff --git a/release-notes.md b/release-notes.md index e27045bd3..f3723e209 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1,8 +1,12 @@ -DK-core version 2.2.0 has been approved by HL7 Denmark. During spring, 2023, this version will go through the needed evaluations to be approved for the national catalogue. +Dk-core version 3.0.0 has been approved by HL7 Denmark. This version is the result of external consultation of Dk-core v. 2.2.0. -The changes between 2.1.0 and 2.2.0 is: - -* Addition of Observation profile with associated documentation and instances. -* Updated all CPR-identifiers of the Patient instances. -* Added experimental-status = false to all CodeSystems and ValueSets -* Removed draft-status from identifiers. \ No newline at end of file +The changes between 2.2.0 and 3.0.0 are: +* Update of the introduction of DkCoreCondition +* Addition of the DkCoreCondition instance JohnFracture which illustrates the use of SKS tillægskode. +* Update of the introduction of DkCoreObservation, including information about which CodeSystems are recommended in the standard catalogue from the Danish Health Data Agency. +* Update of the Observation.code.coding:SNOMEDCT and Observation.component.code.coding:SNOMEDCT to http://snomed.info/sct +* Update of the Observation.code.coding:MedCom and Observation.component.code.coding: MedCom to http://medcomfhir.dk/ig/terminology/CodeSystem/medcom-observation-codes +* Added context on extension ConditionLastAssertedDate and NotFollowedAnymore +* Bug update of invariants by changing constraint.requirements to requirements and removing of constraint.source where relevant. +* Bug update of invariants by removing the ‘value.’ and ‘Observation.’ where relevant +* Update of DkCoreObservations instances with a LOINC code corresponding to the codes in the international VitalSigns profile, due to update of FHIR validator. Missing effective timestamp were included. diff --git a/sushi-config.yaml b/sushi-config.yaml index 1f09a8bb3..94bbc9138 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -7,12 +7,12 @@ canonical: http://hl7.dk/fhir/core name: DKCore title: "HL7 FHIR Implementation Guide: DK Core" description: A FHIR Implementation Guide for the Danish common needs across healthcare sectors -status: active -version: 2.2.0 +status: draft +version: 3.0.0 fhirVersion: 4.0.1 copyrightYear: 2021+ license: CC0-1.0 -releaseLabel: release +releaseLabel: ci-build publisher: name: HL7 Denmark url: http://www.hl7.dk