From b9bd2374dabe92e16b4c8542223860c1151d7878 Mon Sep 17 00:00:00 2001 From: SGA-MedCom <61416377+SGA-MedCom@users.noreply.github.com> Date: Mon, 17 Nov 2025 13:49:11 +0100 Subject: [PATCH 01/40] Update MedComCorePractitionerRole.fsh --- input/fsh/MedComCorePractitionerRole.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index e61ef87..13b8a2b 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -1,5 +1,5 @@ Profile: MedComCorePractitionerRole -Parent: PractitionerRole +Parent: DkCorePractitionerRole //PractitionerRole Id: medcom-core-practitionerrole Description: "PractitionerRole resource used to describe the role of a healthcare professional or another actor involved in citizen or patient care." * id MS From 47de9e08380965a58399f1ee1b3496702344481a Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 18 Nov 2025 09:12:15 +0100 Subject: [PATCH 02/40] Edited version --- publication-request.json | 2 +- sushi-config.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/publication-request.json b/publication-request.json index 2373825..e2cd2ef 100644 --- a/publication-request.json +++ b/publication-request.json @@ -1,6 +1,6 @@ { "package-id": "medcom.fhir.dk.core", - "version": "3.0.1", + "version": "3.0.2-dev", "path": "http://medcomfhir.dk/ig/core/3.0.1", "status": "release", "sequence": "Release 3.x.x", diff --git a/sushi-config.yaml b/sushi-config.yaml index 548eaee..1d372a0 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -4,7 +4,7 @@ name: MedComCore title: "DK MedCom Core" description: This IG includes core profiles defined by MedCom. These profiles are used in MedCom's FHIR standards status: active -version: 3.0.1 +version: 3.0.2-dev fhirVersion: 4.0.1 copyrightYear: 2021+ releaseLabel: release From 75243d46d514055e5e89bb134178766227b17c6b Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 18 Nov 2025 12:38:20 +0100 Subject: [PATCH 03/40] Added 1.. on id --- _build.bat | 2 +- input/fsh/MedComCoreOrganization.fsh | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/_build.bat b/_build.bat index 2bf0d79..99d0e1f 100644 --- a/_build.bat +++ b/_build.bat @@ -89,7 +89,7 @@ echo --------------------------------------------------------------- echo. echo Please select an option: -echo 1. Download or upload publisher +echo 1. Download or update publisher echo 2. Build IG echo 3. Build IG - no sushi echo 4. Build IG - force no TX server diff --git a/input/fsh/MedComCoreOrganization.fsh b/input/fsh/MedComCoreOrganization.fsh index c88ba92..28fc869 100644 --- a/input/fsh/MedComCoreOrganization.fsh +++ b/input/fsh/MedComCoreOrganization.fsh @@ -2,14 +2,15 @@ Profile: MedComCoreOrganization Parent: DkCoreOrganization Id: medcom-core-organization Description: "A formally recognized organizations within danish healthcare, registered with a SOR identifier issued by The Danish Health Data Authority" -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS +* identifier MS * identifier[SOR-ID] ^short = "Sundhedsvæsenets Organisationsregister (SOR) identifier" * identifier[SOR-ID] 1.. -* identifier[SOR-ID] MS SU +* identifier[SOR-ID] MS * name MS * name ^definition = "Name of the organization. Shall be present if known by the sender." * insert ProducerShallPutInNarrative(id) From 3a9f980ae9f49c99883c473951b65fbf3116679d Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Fri, 21 Nov 2025 13:21:33 +0100 Subject: [PATCH 04/40] Updated to DkCorePatient in DiagnosticReport --- input/fsh/MedComCoreDiagnosticRepport.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index a16ca44..f8b57a1 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -13,7 +13,7 @@ Description: "Report containing all observation results." * code MS * code from $DiagnosticReportCode * subject 1..1 MS -* subject only Reference(MedComCorePatient) +* subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled * issued 1..1 MS * result MS From 98aa182cfb52571f45688610302cbbf3b295423b Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 25 Nov 2025 09:04:32 +0100 Subject: [PATCH 05/40] Added obligations for MedComCoreContactExtension --- input/fsh/MedComCoreContactExtension.fsh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/input/fsh/MedComCoreContactExtension.fsh b/input/fsh/MedComCoreContactExtension.fsh index d1f185d..f069097 100644 --- a/input/fsh/MedComCoreContactExtension.fsh +++ b/input/fsh/MedComCoreContactExtension.fsh @@ -10,7 +10,9 @@ Description: "Extension that contains the contact information" * valueContactPoint.value ^short = "Shall contain a relevant telephone number." * valueContactPoint.system = #phone * valueContactPoint.system MS - +* insert ProducerShallPutInNarrative(valueContactPoint.system) +* insert ProducerShallPutInNarrative(valueContactPoint.value) +* insert ProducerShallPutInNarrative(valueContactPoint.use) Invariant: medcom-core-contact Description: "The telephone number may include + and numbers from 0-9" From f6eead9b7273f532a4a971d66313a8af64ce52ec Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 26 Nov 2025 09:37:16 +0100 Subject: [PATCH 06/40] Updated observation.subject to reference only DkCorePatient --- input/fsh/MedComCoreObservation.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 87b15c3..aa0a95e 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -16,7 +16,7 @@ Description: "Observation profile intended to be used in MedComHomeCareObservati * code.coding.code MS * code.coding.system MS * subject 1..1 MS -* subject only Reference(MedComCorePatient) +* subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled * note MS * note ^short = "A comment on the individual result (Danish: Analysekommentar)" From 2da07438366f0e3454c2ad6e2abff97e39ddf923 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 26 Nov 2025 14:05:26 +0100 Subject: [PATCH 07/40] Corrected observation --- input/fsh/MedComCoreObservation.fsh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index aa0a95e..daa9a29 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -10,8 +10,8 @@ Description: "Observation profile intended to be used in MedComHomeCareObservati * status 1..1 MS * status from $ObsStatusCodes * status ^short = "registered | partial | preliminary | final | corrected | cancelled | entered-in-error" -* effectiveDateTime MS -* effectiveDateTime ^short = "The date and time the sample was taken (Danish: prøvetegningstidspunkt)." +* effective[x] MS +* effective[x] ^short = "The date and time of the observation." * code MS * code.coding.code MS * code.coding.system MS @@ -19,4 +19,4 @@ Description: "Observation profile intended to be used in MedComHomeCareObservati * subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled * note MS -* note ^short = "A comment on the individual result (Danish: Analysekommentar)" +* note ^short = "A comment on the individual result." From 527480f310865ab01aa7524cbebba7303849564c Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 26 Nov 2025 14:30:43 +0100 Subject: [PATCH 08/40] Removed comment --- input/fsh/MedComCorePractitionerRole.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index 13b8a2b..9e963af 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -1,5 +1,5 @@ Profile: MedComCorePractitionerRole -Parent: DkCorePractitionerRole //PractitionerRole +Parent: DkCorePractitionerRole Id: medcom-core-practitionerrole Description: "PractitionerRole resource used to describe the role of a healthcare professional or another actor involved in citizen or patient care." * id MS From edba78a04cab1e460a52d3922d61088372c6f601 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 26 Nov 2025 15:10:43 +0100 Subject: [PATCH 09/40] Removed MS og all individual code choises in Observation --- input/fsh/MedComCoreObservation.fsh | 2 -- 1 file changed, 2 deletions(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index daa9a29..0d8a06b 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -13,8 +13,6 @@ Description: "Observation profile intended to be used in MedComHomeCareObservati * effective[x] MS * effective[x] ^short = "The date and time of the observation." * code MS -* code.coding.code MS -* code.coding.system MS * subject 1..1 MS * subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled From f5ecefdf3cad655de04238f7a135068d7fb86902 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 26 Nov 2025 15:29:40 +0100 Subject: [PATCH 10/40] Removed identifier requirement that it has to be UUIDv4 --- input/fsh/MedComCoreObservation.fsh | 1 - 1 file changed, 1 deletion(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 0d8a06b..f7babe7 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -5,7 +5,6 @@ Title: "MedComCoreObservation" Description: "Observation profile intended to be used in MedComHomeCareObservation and MedCom's Laboratory standards." * identifier 1..1 MS * identifier.value 1..1 MS -* identifier.value obeys medcom-uuidv4 * identifier ^short = "The Observation identifier" * status 1..1 MS * status from $ObsStatusCodes From 7d20000a693c1ae5b52846c345a357254d53c518 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Fri, 28 Nov 2025 15:21:48 +0100 Subject: [PATCH 11/40] Updated --- input/fsh/MedComCoreDiagnosticRepport.fsh | 5 ++++ input/fsh/MedComCoreMedia.fsh | 5 ++++ input/fsh/MedComCoreObservation.fsh | 24 +++++++++++++++---- input/fsh/MedComCorePatient.fsh | 9 ++++--- input/fsh/aliases.fsh | 5 +++- ...efinition-medcom-core-observation-intro.md | 15 +++++++----- sushi-config.yaml | 1 + 7 files changed, 49 insertions(+), 15 deletions(-) diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index f8b57a1..bb735c4 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -3,6 +3,11 @@ Parent: DiagnosticReport Id: medcom-core-diagnosticreport Title: "MedComCoreDiagnosticReport" Description: "Report containing all observation results." +* id MS +* text MS +* text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." +* text.status MS +* text.div MS * identifier 1..1 MS * identifier.value 1..1 MS * identifier.value obeys medcom-uuidv4 diff --git a/input/fsh/MedComCoreMedia.fsh b/input/fsh/MedComCoreMedia.fsh index f3b328b..9324a5a 100644 --- a/input/fsh/MedComCoreMedia.fsh +++ b/input/fsh/MedComCoreMedia.fsh @@ -3,6 +3,11 @@ Parent: Media Id: medcom-core-media Title: "MedComMedia" Description: "Profile to capture relevant images,audio, video and document as part of the healthcare process" +* id MS +* text MS +* text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." +* text.status MS +* text.div MS * status MS * identifier 1..1 MS * identifier only MedComAssignedIdentifier diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index f7babe7..4da5d7d 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -3,17 +3,31 @@ Parent: DkCoreObservation Id: medcom-core-observation Title: "MedComCoreObservation" Description: "Observation profile intended to be used in MedComHomeCareObservation and MedCom's Laboratory standards." +* id MS +* text MS +* text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." +* text.status MS +* text.div MS * identifier 1..1 MS -* identifier.value 1..1 MS -* identifier ^short = "The Observation identifier" +* identifier.value 1..1 MS +* identifier.system 1..1 MS +* identifier ^short = "Globally unique, stable identifier for this resource. The same identifier SHALL be used when this resource is recreated from the same source data." * status 1..1 MS * status from $ObsStatusCodes * status ^short = "registered | partial | preliminary | final | corrected | cancelled | entered-in-error" -* effective[x] MS * effective[x] ^short = "The date and time of the observation." * code MS * subject 1..1 MS * subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled -* note MS -* note ^short = "A comment on the individual result." +* performer MS +* performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam) + +Reference(| Danish Core Patient Profile | Danish Core Related Person Profile) +// --- R5 valueAttachment via official cross-version extension --- +* extension contains + $obsExtValueAttachment named valueAttachmentR5 0..* +* extension[valueAttachmentR5].value[x] only Attachment +* insert ProducerShallPutInNarrative(id) +* insert ProducerShallPutInNarrative(status) +* insert ProducerShallPutInNarrative(subject) diff --git a/input/fsh/MedComCorePatient.fsh b/input/fsh/MedComCorePatient.fsh index 6da45ac..76a154d 100644 --- a/input/fsh/MedComCorePatient.fsh +++ b/input/fsh/MedComCorePatient.fsh @@ -34,9 +34,12 @@ Description: "Patient/citizen resource to use as subject in MedCom communication * managingOrganization ^definition = "Organization that is the custodian of the patient record. This can e.g. be the sender of a message or responsable for the patients treatment. One of these organizations will always be included in the bundle, why this element is not mandatory to include." * identifier and name and telecom and address MS * insert ProducerShallPutInNarrative(id) -* insert ProducerShallPutInNarrative(identifier[cpr]) -* insert ProducerShallPutInNarrative(identifier[x-ecpr]) -* insert ProducerShallPutInNarrative(identifier[d-ecpr]) +* insert ProducerShallPutInNarrative(identifier[cpr].value) +* insert ProducerShallPutInNarrative(identifier[cpr].system) +* insert ProducerShallPutInNarrative(identifier[x-ecpr].value) +* insert ProducerShallPutInNarrative(identifier[x-ecpr].system) +* insert ProducerShallPutInNarrative(identifier[d-ecpr].value) +* insert ProducerShallPutInNarrative(identifier[d-ecpr].system) * insert ProducerShallPutInNarrative(name[official].family) * insert ProducerShallPutInNarrative(name[official].given) * insert ProducerShallPutInNarrative(telecom) diff --git a/input/fsh/aliases.fsh b/input/fsh/aliases.fsh index 8133854..b0cbb6b 100644 --- a/input/fsh/aliases.fsh +++ b/input/fsh/aliases.fsh @@ -14,4 +14,7 @@ Alias: $DiagnosticReportCodeSystem = http://medcomfhir.dk/ig/terminology/CodeSys Alias: $DiagnosticReportCode = http://medcomfhir.dk/ig/terminology/ValueSet/MedComDiagnosticReportCodesValueset Alias: $mediastatus = http://hl7.org/fhir/event-status Alias: $ProducenID = http://medcomfhir.dk/ig/terminology/CodeSystem/MedComProducentID -Alias: $obligation = http://hl7.org/fhir/StructureDefinition/obligation \ No newline at end of file +Alias: $obligation = http://hl7.org/fhir/StructureDefinition/obligation + +// ValueAttachment R5 extension used in Observation +Alias: $obsExtValueAttachment = http://hl7.org/fhir/5.0/StructureDefinition/extension-Observation.value[x] diff --git a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md index c8e8ec2..c33cfe0 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md @@ -1,16 +1,15 @@ ->Note: This profile is developed to be part of a production trial of the communication between the general practitioner and municipal acute care team. - ### Scope and use -This profile is a MedCom Core profile for observations and is intended to represent observations for a variety cases including: +This profile is a MedCom Core profile for observations and is intended to represent observations for a variety cases including for example: * laboratory observations -* observations performed by a municipal acute care team +* observations performed by a municipal acute care team +* EKG study data #### Status -The MedComCoreObservation resource require an indication of the observation status. To indicate the observation status a code from ValueSet defined by MedCom shall be used. Click here se the status codes. +The MedComCoreObservation resource require an indication of the observation status. To indicate the observation status, a code from this valueSet defined by MedCom **MUST** be used. Click here se the status codes. #### Codes -In a Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding. In the element Observation.code.coding six CodeSystem are specified. +In a Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding. In the element Observation.code.coding six possible CodeSystem are specified. * NPU codes are the most used codes in Danmark to express analysis performed at the laboratory. * LOINC codes is an international Codsystem for health measurements, observations, and documents. LOINC codes are less stricted then NPU codes. * IEEE codes are internationaly codes for devices and can be used to express an original observation from a device. @@ -18,3 +17,7 @@ In a Observation resource, codes from CodeSystems are used to describe what is o * MedCom codes are Danish codes, that have been necessary in Danish interoperability projects through time and are used to express analysis performed at the laboratory. * SNOMED CT codes are the world's most comprehensive clinical terminology.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 +#### extension:valueAttachmentR5 +This extension is a cross-version backport of the official R5 extension on the element `Observation.value[x]`. + +It provides support in FHIR R4 for representing `Observation.value[x]` as an `attachment` type, which is not natively supported in FHIR R4. By enabling the inclusion of base64 binary content within a MedComCoreObservation, the extension allows implementers to represent attachments such as documents, images, or other supporting materials. \ No newline at end of file diff --git a/sushi-config.yaml b/sushi-config.yaml index 1d372a0..af44e37 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -16,6 +16,7 @@ jurisdiction: urn:iso:std:iso:3166#DK "Denmark" dependencies: hl7.fhir.dk.core: 3.4.0 medcom.fhir.dk.terminology: 2.0.1 + hl7.fhir.extensions.r5: 4.0.1 menu: Home: index.html From 57bb97f6d763bfa5eea2de87d3807502bba98019 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Fri, 28 Nov 2025 21:44:07 +0100 Subject: [PATCH 12/40] Updated --- input/fsh/MedComCoreObservation.fsh | 13 +++++-------- ...efinition-medcom-core-practitioner-intro.md | 2 +- ...ition-medcom-core-practitionerrole-intro.md | 2 +- input/pagecontent/index.md | 18 +++++------------- 4 files changed, 12 insertions(+), 23 deletions(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 4da5d7d..addf3ab 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -2,16 +2,12 @@ Profile: MedComCoreObservation Parent: DkCoreObservation Id: medcom-core-observation Title: "MedComCoreObservation" -Description: "Observation profile intended to be used in MedComHomeCareObservation and MedCom's Laboratory standards." +Description: "Observation profile." * id MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS -* identifier 1..1 MS -* identifier.value 1..1 MS -* identifier.system 1..1 MS -* identifier ^short = "Globally unique, stable identifier for this resource. The same identifier SHALL be used when this resource is recreated from the same source data." * status 1..1 MS * status from $ObsStatusCodes * status ^short = "registered | partial | preliminary | final | corrected | cancelled | entered-in-error" @@ -20,14 +16,15 @@ Description: "Observation profile intended to be used in MedComHomeCareObservati * subject 1..1 MS * subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled -* performer MS -* performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam) +* performer 1.. MS +* performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or DkCorePatient or DkCoreRelatedPerson) -Reference(| Danish Core Patient Profile | Danish Core Related Person Profile) // --- R5 valueAttachment via official cross-version extension --- * extension contains $obsExtValueAttachment named valueAttachmentR5 0..* * extension[valueAttachmentR5].value[x] only Attachment + * insert ProducerShallPutInNarrative(id) * insert ProducerShallPutInNarrative(status) * insert ProducerShallPutInNarrative(subject) +* insert ProducerShallPutInNarrative(performer) diff --git a/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md b/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md index 9ce6a33..a966365 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md @@ -5,4 +5,4 @@ The MedComCorePractitioner is inherited from the [DkCorePractitioner](https://hl MedComCorePractitioner is broardly defined (just as it is in the original FHIR ressource and DkCorePractitioner), and may be used to define all the professionals involved directly or indirectly in citizen and patient care and well-being. -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCorePractitioner. \ No newline at end of file +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCorePractitioner. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md b/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md index fc2afca..8e3ae4f 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md @@ -7,4 +7,4 @@ Just as it is in the original FHIR ressource, the MedComCorePractitionerRole is It is prefered to use a code from [MedComCorePractitionerRoles](https://medcomfhir.dk/ig/terminology/ValueSet-medcom-core-PractitionerRoles.html). If these does not cover the needs, the roles can be included in a string at PractitionerRole.code.text. -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCorePractitionerRole. \ No newline at end of file +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCorePractitionerRole. \ No newline at end of file diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index 7f915aa..39ae038 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -4,13 +4,8 @@ This Implementation Guide (IG) is provided by MedCom to describe MedCom FHIR &re As the MedComCore profiles only specify the base expectations, they are in general made open for additional adjustments. This is chosen to allow further profiling for specific purposes defined by the communicating parties. The purpose of this IG is to: -* Define MedComCore profiles that constraints the FHIR resources and datatype for use in MedCom standards: - * [MedComCorePatient](StructureDefinition-medcom-core-patient.html) - * [MedComCoreOrganization](StructureDefinition-medcom-core-organization.html) - * [MedComCoreEncounter](StructureDefinition-medcom-core-encounter.html) - * [MedComCoreCareTeam](StructureDefinition-medcom-core-careteam.html) - * [MedComCorePractitioner](StructureDefinition-medcom-core-practitioner.html) - * [MedComCorePractitionerRole](StructureDefinition-medcom-core-practitionerrole.html) +* Define MedComCore profiles that constraints the FHIR resources and datatype for use in MedCom standards. See all MedComCore profiles in the "Profiles" tab in the menu. + * Define extensions necessary for local use covering needed Danish concepts, such as a personal identification number for Danish citizens called Central Person Register (CPR-number). The MedComCore profiles only constitutes a part of a standard. To exchange a complete MedCom standard, profiles from the MedComMessaging, MedComCareCommunication or MedComHospitalNotification shall be used, depended on the purpose of the standard. @@ -19,18 +14,15 @@ The MedComCore profiles only constitutes a part of a standard. To exchange a com On [MedCom Terminology IG](http://medcomfhir.dk/ig/terminology/) all referenced CodeSystem and ValueSets developed by MedCom can be found. #### Dependencies - -This IG has a dependency to [DK-core](https://hl7.dk/fhir/core/) v. 2.0.0, defined by [HL7 Denmark](https://hl7.dk/). This is currently reflected in the MedComCorePatient, MedComCoreOrganization and MedComCorePractitioner which inherit from DkCorePatient, DkCoreOrganization and DkCorePractitioner, respectively. +This IG has a dependency to [DK-core](https://hl7.dk/fhir/core/), defined by [HL7 Denmark](https://hl7.dk/). This is currently reflected in the profiles that inherit from DkCore profiles. ### Documentation - -[More information about MedCom Core](https://medcomdk.github.io/dk-medcom-core/) can be found here. As mentioned, MedCom Core does not alone constitute a standard, why the extra documentation is limited. +[More information about MedCom Core](https://medcomdk.github.io/dk-medcom-core/) can be found here. As mentioned, MedCom Core does not alone constitute a standard, why the documentation is limited. ### Governance - FHIR profiles are managed under MedCom: [Source code](https://github.com/medcomdk/dk-medcom-core). -A description of [governance concerning change management and versioning](https://medcomdk.github.io/MedComLandingPage/#4-change-managment-and-versioning) of MedComs FHIR artefacts, can be found on the link. +A description of [governance concerning change management and versioning](https://medcomdk.github.io/MedComLandingPage) of MedComs FHIR artefacts, can be found on the link. #### Quality Assurance Report From 50dbd3dde39748812c0cdd8bcbeca2e79fbab9fb Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 1 Dec 2025 10:44:03 +0100 Subject: [PATCH 13/40] Updated PractitionerRole --- input/fsh/MedComCorePractitionerRole.fsh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index 9e963af..eb57b0f 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -9,13 +9,14 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * text.div MS * practitioner only Reference(MedComCorePractitioner) * practitioner MS -* code MS +* code 1.. MS * code from $PractitionerRoles (example) * code.coding MS * code.text MS * organization MS * organization only Reference(MedComCoreOrganization) * organization ^type.aggregation = #bundled +* obeys medcom-core-practitionerrole-code-xor-text * insert ProducerShallPutInNarrative(id) * insert ProducerShallPutInNarrative(practitioner) * insert ProducerShallPutInNarrative(organization) @@ -23,6 +24,11 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * insert ProducerShallPutInNarrative(code.text) +Invariant: medcom-core-practitionerrole-code-xor-text +Description: "There shall exist a practitioner role code or text." +Severity: #error +Expression: "code.coding.code.exists() xor code.text.exists()" + Instance: 6057686e-666c-11ed-9022-0242ac120002 InstanceOf: MedComCorePractitionerRole Title: "Example of a PractitionerRole" From 5afe5a8b80c65326b3a8b67479210bcefcbbfcfe Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 1 Dec 2025 11:27:59 +0100 Subject: [PATCH 14/40] Adde MS to SOR identififer value + system --- input/fsh/MedComCoreOrganization.fsh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/input/fsh/MedComCoreOrganization.fsh b/input/fsh/MedComCoreOrganization.fsh index 28fc869..f9ec3d6 100644 --- a/input/fsh/MedComCoreOrganization.fsh +++ b/input/fsh/MedComCoreOrganization.fsh @@ -11,6 +11,8 @@ Description: "A formally recognized organizations within danish healthcare, regi * identifier[SOR-ID] ^short = "Sundhedsvæsenets Organisationsregister (SOR) identifier" * identifier[SOR-ID] 1.. * identifier[SOR-ID] MS +* identifier[SOR-ID].system MS +* identifier[SOR-ID].value MS * name MS * name ^definition = "Name of the organization. Shall be present if known by the sender." * insert ProducerShallPutInNarrative(id) From 6e9110654a4a95fad575c0efc7bef9af39d2486b Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 1 Dec 2025 21:39:50 +0100 Subject: [PATCH 15/40] Added medcom local value attachment extension --- input/fsh/MedComCoreObservation.fsh | 8 ++++++-- ...ComObservationValueAttachmentExtension.fsh | 19 +++++++++++++++++++ input/fsh/aliases.fsh | 2 ++ 3 files changed, 27 insertions(+), 2 deletions(-) create mode 100644 input/fsh/MedComObservationValueAttachmentExtension.fsh diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index addf3ab..0758107 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -1,3 +1,5 @@ + + Profile: MedComCoreObservation Parent: DkCoreObservation Id: medcom-core-observation @@ -18,11 +20,13 @@ Description: "Observation profile." * subject ^type.aggregation = #bundled * performer 1.. MS * performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or DkCorePatient or DkCoreRelatedPerson) +* extension contains + $MedComObsExtValueAttachment named valueAttachment 0..* -// --- R5 valueAttachment via official cross-version extension --- +/* // --- R5 valueAttachment via official cross-version extension --- * extension contains $obsExtValueAttachment named valueAttachmentR5 0..* -* extension[valueAttachmentR5].value[x] only Attachment +* extension[valueAttachmentR5].value[x] only Attachment */ * insert ProducerShallPutInNarrative(id) * insert ProducerShallPutInNarrative(status) diff --git a/input/fsh/MedComObservationValueAttachmentExtension.fsh b/input/fsh/MedComObservationValueAttachmentExtension.fsh new file mode 100644 index 0000000..76d8ad5 --- /dev/null +++ b/input/fsh/MedComObservationValueAttachmentExtension.fsh @@ -0,0 +1,19 @@ +Profile: MedComObservationValueAttachmentExtension +Parent: Extension +Id: medcom-observation-value-attachment-extension +Title: "MedCom Observation ValueAttachment Extension" +Description: "Generic extension for Observation value as Attachment type." + +// Canonical URL for extensionen +* ^url = "http://medcomfhir.dk/ig/core/StructureDefinition/medcom-observation-value-attachment-extension" +* ^status = #active + +// Hvor extensionen må bruges +* ^context[0].type = #element +* ^context[0].expression = "Observation" +* ^context[+].type = #element +* ^context[=].expression = "Observation.extension" +* . ^short = "Observation value as attachment." +* url 1..1 +* url = "http://medcomfhir.dk/ig/core/StructureDefinition/medcom-observation-value-attachment-extension" (exactly) +* value[x] only Attachment \ No newline at end of file diff --git a/input/fsh/aliases.fsh b/input/fsh/aliases.fsh index b0cbb6b..1850247 100644 --- a/input/fsh/aliases.fsh +++ b/input/fsh/aliases.fsh @@ -18,3 +18,5 @@ Alias: $obligation = http://hl7.org/fhir/StructureDefinition/obligation // ValueAttachment R5 extension used in Observation Alias: $obsExtValueAttachment = http://hl7.org/fhir/5.0/StructureDefinition/extension-Observation.value[x] + +Alias: $MedComObsExtValueAttachment = http://medcomfhir.dk/ig/core/StructureDefinition/medcom-observation-value-attachment-extension \ No newline at end of file From 9d9e55356a232fcf93b800221dafc6410dbe89ee Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 2 Dec 2025 13:50:01 +0100 Subject: [PATCH 16/40] Updated texts in index and profiles. --- input/fsh/MedComCoreEncounter.fsh | 2 +- ...ureDefinition-medcom-core-careteam-intro.md | 4 ++-- ...reDefinition-medcom-core-encounter-intro.md | 8 ++++---- ...uctureDefinition-medcom-core-media-intro.md | 18 ++++-------------- ...Definition-medcom-core-observation-intro.md | 8 +++----- ...efinition-medcom-core-organization-intro.md | 4 ++-- ...tureDefinition-medcom-core-patient-intro.md | 10 +++++----- ...efinition-medcom-core-practitioner-intro.md | 2 +- input/pagecontent/index.md | 18 ++++++++++++------ 9 files changed, 34 insertions(+), 40 deletions(-) diff --git a/input/fsh/MedComCoreEncounter.fsh b/input/fsh/MedComCoreEncounter.fsh index 6917d67..223da0e 100644 --- a/input/fsh/MedComCoreEncounter.fsh +++ b/input/fsh/MedComCoreEncounter.fsh @@ -23,7 +23,7 @@ Description: "An interaction between a patient/citizen and healthcare provider(s * episodeOfCare[lpr3identifier].identifier only Lpr3Identifier * episodeOfCare[lpr3identifier].identifier ^definition = "Shall contain the id of the episode of care reported to the Danish National Patient Registry if known" * subject 1.. MS -* subject only Reference(MedComCorePatient) +* subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled * account ..0 * serviceProvider only Reference(MedComCoreOrganization) diff --git a/input/pagecontent/StructureDefinition-medcom-core-careteam-intro.md b/input/pagecontent/StructureDefinition-medcom-core-careteam-intro.md index a8646fc..629ad5d 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-careteam-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-careteam-intro.md @@ -1,5 +1,5 @@ ### Scope and usage -This profile describes a MedComCoreCareTeam. A CareTeam is one or more professionals who plan to participate in the coordination and delivery of care for a patient or citizen. A MedComCoreCareTeam shall include a name and it may include a reference to an MedComCoreOrganization or MedComMessagingOrganization, as the managing organisation for the careteam. +This profile describes a MedComCoreCareTeam. A CareTeam is one or more professionals who plan to participate in the coordination and delivery of care for a patient or citizen. A MedComCoreCareTeam **SHALL** include a name and it may include a reference to an Organization, as the managing organisation for the careteam. -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCoreOrganization. \ No newline at end of file +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCoreOrganization. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md b/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md index 771485e..ccfbf66 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md @@ -2,13 +2,13 @@ This profile describes the MedComCoreEncounter. An encounter describes the interaction between a patient and one or more healthcare providers for the purpose of providing healthcare services or assessing the health status of a patient. An encounter can take place in an ambulatory, an emergency, at the citizen's home, virtually and so on. -The base expectations when describing an encounter in a Danish context is to include the subject of the encounter which shall be a [MedComCorePatient](https://medcomfhir.dk/ig/core/StructureDefinition-medcom-core-patient.html) as well as a status and class, which are described below. For some specific purposes, such as [HospitalNotification](https://medcomfhir.dk/ig/hospitalnotification/), there is a need for a specialization of the MedComCoreEncounter. In these cases, it will be explicitly described which encounter to use and which changed are applied. +The base expectations when describing an encounter in a Danish context is to include the subject of the encounter as well as a status and class, which are described below. -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCoreEncounter. +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCoreEncounter. #### Status and class -A status and class shall be included MedComCoreEncounter. +A status and class **SHALL** be included in a MedComCoreEncounter. The status refers to the current state of the encounter. This will most often change due to the nature an encounter, as it will pass through many statuses which follows the workflow of the encounter. A status can be 'in-progress' describing that the patient is present or the meeting has begun, or 'finished' describing that the encounter is finished. @@ -22,4 +22,4 @@ The EpisodeOfCare identifier is used to technically connect several encounters c It is both possible to use a [Landspatientregisteret](https://www.esundhed.dk/Registre/Landspatientregisteret)-identifier (called LPR3-identifier) and a locally defined identifier as the EpisodeOfCare-identifier. -Whether a LPR3-identifier or a locally defined identifier is used, it shall be an UUID. The LPR3-identifier shall obey a rule stating that the UUID shall be of version 5, [here more information about the LPR3-identifier can be found](https://scandihealth.github.io/lpr3-docs/). Using a locally defined identifier, a system for the identifier shall be added. +Whether a LPR3-identifier or a locally defined identifier is used, it **SHALL** be an UUID. The LPR3-identifier **SHALL** obey a rule stating that the UUID **SHALL** be of version 5, [here more information about the LPR3-identifier can be found](https://scandihealth.github.io/lpr3-docs/). Using a locally defined identifier, a system for the identifier **SHALL** be added. diff --git a/input/pagecontent/StructureDefinition-medcom-core-media-intro.md b/input/pagecontent/StructureDefinition-medcom-core-media-intro.md index f5ca357..541c640 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-media-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-media-intro.md @@ -1,5 +1,3 @@ ->Note: This profile is developed to be part of a production trial of the communication between the general practitioner and municipal acute care team. - ### Scope and use This profile is a MedCom Core profile for media and is intended to represent relevant attachments for a variety cases including: * laboratory observations @@ -8,15 +6,7 @@ This profile is a MedCom Core profile for media and is intended to represent rel Only an attachment of the permitted formats must be included. [Click here to see the permitted formats of an attachment](https://medcomfhir.dk/ig/terminology/ValueSet-medcom-core-attachmentMimeTypes.html) - - -The attached file shall be base64-encoded and added to the element MedComCoreMedia.content.data -If the attached file is sent, it is a requirement that the ID and title of the attached file shall be sent. -The ID of the attachment shall be expressed using Media.identifier element. -The Media.content.titel element shall be used to express the titel of the attachment. \ No newline at end of file +The attached file **SHALL** be base64-encoded and added to the element MedComCoreMedia.content.data +If the attached file is sent, it is a requirement that the ID and title of the attached file **SHALL** be sent. +The ID of the attachment **SHALL** be expressed using Media.identifier element. +The Media.content.titel element **SHALL** be used to express the titel of the attachment. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md index c33cfe0..ee0ac1c 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md @@ -9,7 +9,7 @@ The MedComCoreObservation resource require an indication of the observation stat #### Codes -In a Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding. In the element Observation.code.coding six possible CodeSystem are specified. +In an Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding. In the element Observation.code.coding six possible CodeSystem are specified. * NPU codes are the most used codes in Danmark to express analysis performed at the laboratory. * LOINC codes is an international Codsystem for health measurements, observations, and documents. LOINC codes are less stricted then NPU codes. * IEEE codes are internationaly codes for devices and can be used to express an original observation from a device. @@ -17,7 +17,5 @@ In a Observation resource, codes from CodeSystems are used to describe what is o * MedCom codes are Danish codes, that have been necessary in Danish interoperability projects through time and are used to express analysis performed at the laboratory. * SNOMED CT codes are the world's most comprehensive clinical terminology.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 -#### extension:valueAttachmentR5 -This extension is a cross-version backport of the official R5 extension on the element `Observation.value[x]`. - -It provides support in FHIR R4 for representing `Observation.value[x]` as an `attachment` type, which is not natively supported in FHIR R4. By enabling the inclusion of base64 binary content within a MedComCoreObservation, the extension allows implementers to represent attachments such as documents, images, or other supporting materials. \ No newline at end of file +#### Use of the valueAttachment Extension +This profile contains a FHIR extension designed to hold an attachment encoded in Base64. The `valueAttachment` element is implemented as an extension because the base `value[x]` element does not support the `Attachment` type. The extension can also capture essential metadata for the attachment. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-organization-intro.md b/input/pagecontent/StructureDefinition-medcom-core-organization-intro.md index 22695e1..5682d9d 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-organization-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-organization-intro.md @@ -1,8 +1,8 @@ ### Scope and usage -This profile describes the MedComCoreOrganization. The MedComCorePractitioner is inherited from the [DkCoreOrganization](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-organization.html) profile defined by HL7 Denmark. +This profile describes the MedComCoreOrganization. The MedComCoreOrganization is inherited from the [DkCoreOrganization](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-organization.html) profile defined by HL7 Denmark. The base expectations when describing an organisation in a Danish context is to include an identifier, in terms of a Sundhundsvæsenets Organisations Register (SOR)-identifier. This profile is used to describe e.g. the organisation responsible for an encounter. When using an organisation for exchange purposes, such as a sender, receiver or carbon-copy, please refer to the [MedComMessagingOrganization](http://medcomfhir.dk/ig/messaging/StructureDefinition-medcom-messaging-organization.html). -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCoreOrganization. \ No newline at end of file +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCoreOrganization. \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-patient-intro.md b/input/pagecontent/StructureDefinition-medcom-core-patient-intro.md index bdc8ed1..900673e 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-patient-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-patient-intro.md @@ -1,14 +1,14 @@ ### Scope and usage MedComCorePatient profile describes information about a patient or citizen in a MedCom standard. -The MedComCorePatient is inherited from the [DkCorePatient](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-patient.html) profile defined by HL7 Denmark. An identifier and the patients official family name ('efternavn' in Danish) shall both be present, when exchanging patient related information. +The MedComCorePatient is inherited from the [DkCorePatient](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-patient.html) profile defined by HL7 Denmark. An identifier and the patients official family name ('efternavn' in Danish) **SHALL** both be present, when exchanging patient related information. -Please refer to the tab "Snapshot Table(Must support)" below for the definition of the required content of a MedComCorePatient. +Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCorePatient. #### Patient identifiers -A MedComCorePatient shall include an identifier, containing a value which is the actual id and a system which is used to identify a set of unique values. +A MedComCorePatient **SHALL** include an identifier, containing a value which is the actual id and a system which is used to identify a set of unique values. -When a patient has an official civil person register (CPR)-number this shall be used. To represent a CPR-number, the identifier [DkCoreCprIdentifier](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-cpr-identifier.html) shall be used. In the identifier the system is used to describes that value is an official CPR-number, as described on [cpr.dk](https://cpr.dk/). +When a patient has an official civil person register (CPR)-number this **SHALL** be used. To represent a CPR-number, the identifier [DkCoreCprIdentifier](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-cpr-identifier.html) **SHALL** be used. In the identifier the system is used to describes that value is an official CPR-number, as described on [cpr.dk](https://cpr.dk/). -Only in cases where the patient does not have an official CPR-number, a replacement person identifier (Danish: Erstatningspersonnummer) (eCPR)-number shall be used. More information concerning the use of eCPR-numbers can be found on [DkCorePatient](https://hl7.dk/fhir/core/StructureDefinition-dk-core-patient.html#ecpr-identifier). \ No newline at end of file +Only in cases where the patient does not have an official CPR-number, a replacement person identifier (Danish: Erstatningspersonnummer) (eCPR)-number **SHALL** be used. More information concerning the use of eCPR-numbers can be found on [DkCorePatient](https://hl7.dk/fhir/core/StructureDefinition-dk-core-patient.html#ecpr-identifier). \ No newline at end of file diff --git a/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md b/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md index a966365..adef224 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-practitioner-intro.md @@ -1,7 +1,7 @@ ### Scope and usage This profile describes the MedComCorePractitioner which is used to describe a Practitioner in a MedCom standard. -The MedComCorePractitioner is inherited from the [DkCorePractitioner](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-practitioner.html) profile defined by HL7 Denmark. The only change is that MedComCorePractitioner shall include a name of the practitioner if it is available. +The MedComCorePractitioner is inherited from the [DkCorePractitioner](https://hl7.dk/fhir/core/2.0.0/StructureDefinition-dk-core-practitioner.html) profile defined by HL7 Denmark. MedComCorePractitioner is broardly defined (just as it is in the original FHIR ressource and DkCorePractitioner), and may be used to define all the professionals involved directly or indirectly in citizen and patient care and well-being. diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index 39ae038..b44aead 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -1,28 +1,34 @@ ### Introduction -This Implementation Guide (IG) is provided by MedCom to describe MedCom FHIR ®© Core profiles (Dansk: Kerneprofiler) used across MedComs standards. This IG represents the base expectation when describing a Patient, Encounter, Practitioner or Organization when exchanging information within Danish healthcare. +This Implementation Guide (IG) is provided by MedCom to describe MedCom's FHIR ®© Core profiles (Dansk: Kerneprofiler) used across MedComs standards. This IG represents the base expectation when describing fx a Patient, an Encounter, a Practitioner or an Organization when exchanging information within the Danish healthcare system. As the MedComCore profiles only specify the base expectations, they are in general made open for additional adjustments. This is chosen to allow further profiling for specific purposes defined by the communicating parties. The purpose of this IG is to: -* Define MedComCore profiles that constraints the FHIR resources and datatype for use in MedCom standards. See all MedComCore profiles in the "Profiles" tab in the menu. +* Define MedCom Core profiles that constraints the FHIR resources and datatypes for use in MedCom standards. See all MedComCore profiles in the "Profiles" tab in the menu. * Define extensions necessary for local use covering needed Danish concepts, such as a personal identification number for Danish citizens called Central Person Register (CPR-number). -The MedComCore profiles only constitutes a part of a standard. To exchange a complete MedCom standard, profiles from the MedComMessaging, MedComCareCommunication or MedComHospitalNotification shall be used, depended on the purpose of the standard. +The MedCom Core profiles only constitute a part of a standard. To exchange a complete MedCom standard, profiles from the other Implementation Guides is used. #### Terminology On [MedCom Terminology IG](http://medcomfhir.dk/ig/terminology/) all referenced CodeSystem and ValueSets developed by MedCom can be found. #### Dependencies -This IG has a dependency to [DK-core](https://hl7.dk/fhir/core/), defined by [HL7 Denmark](https://hl7.dk/). This is currently reflected in the profiles that inherit from DkCore profiles. +This IG has a dependency to [DK-core](https://hl7.dk/fhir/core/), defined by [HL7 Denmark](https://hl7.dk/). This is currently reflected in the profiles that inherit from DkCore profiles. + +Note that any MedCom Core profile referencing a Patient resource uses DkCorePatient as its required reference. This is because MedComDocumentPatient cannot inherit from MedComCorePatient due to differing requirements, and their closest shared parent is therefore DkCorePatient. In message-based MedCom standards, MedComCorePatient **MUST** always be used as the Patient resource, whereas in document-sharing-based MedCom standards, the required Patient profile is MedComDocumentPatient — even though DkCorePatient appears as the referenced profile in the core profiles within this Implementation Guide. ### Documentation [More information about MedCom Core](https://medcomdk.github.io/dk-medcom-core/) can be found here. As mentioned, MedCom Core does not alone constitute a standard, why the documentation is limited. -### Governance +### Governance and guidance FHIR profiles are managed under MedCom: [Source code](https://github.com/medcomdk/dk-medcom-core). -A description of [governance concerning change management and versioning](https://medcomdk.github.io/MedComLandingPage) of MedComs FHIR artefacts, can be found on the link. +A description of governance and guidance for MedCom's FHIR standards, can be found on the [MedCom Landing Page](https://medcomdk.github.io/MedComLandingPage). + +The MedCom FHIR landing page provides a overview of governance requirements that apply to MedCom’s FHIR standards, and some content is followed by practical guidance on how to work with fx the associated implementation guides and tools. The page begins with a clear description of the governance principles that define how MedCom profiles are structured, interpreted and validated. This includes fx the mandatory rules for interpreting MustSupport, the formal validation requirements that implementers must follow, the expectations for producing narrative texts and governance for how MedCom Terminology is versioned. In addition, the governance section outlines the rules for MedCom FHIR Messaging and Document Sharing, including requirements for fx message flow and envelope usage. + +The landing page also offers help to developers to understand how to work with MedCom’s FHIR standards. This includes a guide of how to read an Implementation Guide. Users will also find instructions on how to use the required tools, such as validation and how to use Touchstone. #### Quality Assurance Report From 61650eccee73e894450a3c570ca5e716164dad9f Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 2 Dec 2025 14:50:39 +0100 Subject: [PATCH 17/40] Updated texts --- .../StructureDefinition-medcom-core-observation-intro.md | 1 - input/pagecontent/index.md | 6 ++++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md index ee0ac1c..d715c04 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md @@ -7,7 +7,6 @@ This profile is a MedCom Core profile for observations and is intended to repres #### Status The MedComCoreObservation resource require an indication of the observation status. To indicate the observation status, a code from this valueSet defined by MedCom **MUST** be used. Click here se the status codes. - #### Codes In an Observation resource, codes from CodeSystems are used to describe what is observed in the elements Observation.code.coding. In the element Observation.code.coding six possible CodeSystem are specified. * NPU codes are the most used codes in Danmark to express analysis performed at the laboratory. diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index b44aead..d0bfd5e 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -10,6 +10,8 @@ The purpose of this IG is to: The MedCom Core profiles only constitute a part of a standard. To exchange a complete MedCom standard, profiles from the other Implementation Guides is used. +**XML and JSON:** Note that the document may be represented in either XML or JSON and interconverted between these or have its character encoding changed, all the while remaining the same document. + #### Terminology On [MedCom Terminology IG](http://medcomfhir.dk/ig/terminology/) all referenced CodeSystem and ValueSets developed by MedCom can be found. @@ -26,9 +28,9 @@ FHIR profiles are managed under MedCom: [Source code](https://github.com/medcomd A description of governance and guidance for MedCom's FHIR standards, can be found on the [MedCom Landing Page](https://medcomdk.github.io/MedComLandingPage). -The MedCom FHIR landing page provides a overview of governance requirements that apply to MedCom’s FHIR standards, and some content is followed by practical guidance on how to work with fx the associated implementation guides and tools. The page begins with a clear description of the governance principles that define how MedCom profiles are structured, interpreted and validated. This includes fx the mandatory rules for interpreting MustSupport, the formal validation requirements that implementers must follow, the expectations for producing narrative texts and governance for how MedCom Terminology is versioned. In addition, the governance section outlines the rules for MedCom FHIR Messaging and Document Sharing, including requirements for fx message flow and envelope usage. +The MedCom FHIR landing page provides a overview of governance requirements that apply to MedCom’s FHIR standards. This includes fx the mandatory rules for interpreting MustSupport, the formal validation requirements that implementers must follow, the expectations for producing narrative texts and governance for how MedCom Terminology is versioned. -The landing page also offers help to developers to understand how to work with MedCom’s FHIR standards. This includes a guide of how to read an Implementation Guide. Users will also find instructions on how to use the required tools, such as validation and how to use Touchstone. +The landing page also offers help to developers to understand how to work with MedCom’s FHIR standards. This includes a guide of how to read an Implementation Guide. Users will also find instructions on how to use some of the required tools, such as validation setup and how to use Touchstone. #### Quality Assurance Report From e2ff4b57a838d1a104d41e13b87331b9fa37da89 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 3 Dec 2025 15:15:42 +0100 Subject: [PATCH 18/40] Update StructureDefinition-medcom-core-diagnosticreport-intro.md --- .../StructureDefinition-medcom-core-diagnosticreport-intro.md | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/input/pagecontent/StructureDefinition-medcom-core-diagnosticreport-intro.md b/input/pagecontent/StructureDefinition-medcom-core-diagnosticreport-intro.md index 6cd9d95..2531459 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-diagnosticreport-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-diagnosticreport-intro.md @@ -1,7 +1,5 @@ ->Note: This profile is developed to be part of a production trial of the communication between the general practitioner and municipal acute care team. - #### Scope and usage -This profile is intended to be uses in MedCom HomeCareObservation and MedCom's Laboratory standards. +This profile is intended to be uses as a diagnostic report in MedCom standards. #### Attachments In MedComCoreDiagnosticReport it is allowed to include attachments. When sending an attachment diagnosticReport.media shall be used. The DiagnosticReport.media.link reference to MedComCoreMedia resource where the atachment shall be added. From af49ad535695dfdf541fe360742e537d3fe1b625 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 3 Dec 2025 15:21:44 +0100 Subject: [PATCH 19/40] Update sushi-config.yaml --- sushi-config.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/sushi-config.yaml b/sushi-config.yaml index af44e37..1d372a0 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -16,7 +16,6 @@ jurisdiction: urn:iso:std:iso:3166#DK "Denmark" dependencies: hl7.fhir.dk.core: 3.4.0 medcom.fhir.dk.terminology: 2.0.1 - hl7.fhir.extensions.r5: 4.0.1 menu: Home: index.html From 66a708eeeccb13586fb6b76f5f57523b0cc94290 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 3 Dec 2025 19:44:52 +0100 Subject: [PATCH 20/40] Update MedComCorePractitioner.fsh --- input/fsh/MedComCorePractitioner.fsh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePractitioner.fsh b/input/fsh/MedComCorePractitioner.fsh index b680abc..fc6e28f 100644 --- a/input/fsh/MedComCorePractitioner.fsh +++ b/input/fsh/MedComCorePractitioner.fsh @@ -8,8 +8,11 @@ Description: "Practitioner resource is used to describe a healthcare professiona * text.status MS * text.div MS * name MS +* name.given MS +* name.family MS * insert ProducerShallPutInNarrative(id) -* insert ProducerShallPutInNarrative(name) +* insert ProducerShallPutInNarrative(name.given) +* insert ProducerShallPutInNarrative(name.family) Instance: e9eacb62-666b-11ed-9022-0242ac120002 InstanceOf: MedComCorePractitioner From 69c6589d6996b92033778e3b010ed55f8341456b Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 3 Dec 2025 20:51:25 +0100 Subject: [PATCH 21/40] Updated careteam and practitionerRole --- input/fsh/MedComCoreCareTeam.fsh | 2 +- input/fsh/MedComCorePractitionerRole.fsh | 8 +++++--- 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/input/fsh/MedComCoreCareTeam.fsh b/input/fsh/MedComCoreCareTeam.fsh index 35b498f..9555f15 100644 --- a/input/fsh/MedComCoreCareTeam.fsh +++ b/input/fsh/MedComCoreCareTeam.fsh @@ -8,7 +8,7 @@ Description: "Careteam participating in the care of a patient" * text.status MS * text.div MS * name 1.. MS -* managingOrganization 0..1 MS +* managingOrganization 1..1 MS * managingOrganization only Reference(MedComCoreOrganization) * managingOrganization ^type.aggregation = #bundled * insert ProducerShallPutInNarrative(id) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index eb57b0f..ecef3c6 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -8,12 +8,12 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * text.status MS * text.div MS * practitioner only Reference(MedComCorePractitioner) -* practitioner MS +* practitioner 1.. MS * code 1.. MS * code from $PractitionerRoles (example) * code.coding MS * code.text MS -* organization MS +* organization 1.. MS * organization only Reference(MedComCoreOrganization) * organization ^type.aggregation = #bundled * obeys medcom-core-practitionerrole-code-xor-text @@ -35,6 +35,7 @@ Title: "Example of a PractitionerRole" Description: "Example of a practitioner role with a code and reference to a practitioner" * code = $PractitionerRole#afdelingslaege * practitioner = Reference(e9eacb62-666b-11ed-9022-0242ac120002) +* organization = Reference(12ee0dde-a672-462f-820d-5efe832d73c9) //Practitioner rolle @@ -43,4 +44,5 @@ InstanceOf: MedComCorePractitionerRole Title: "PractitionerRole with a role and reference to a practitioner" Description: "PractitionerRole with a role and reference to a practitioner" * practitioner = Reference(e9eacb62-666b-11ed-9022-0242ac120002) -* code = $PractitionerRole#sygeplejerske \ No newline at end of file +* code = $PractitionerRole#sygeplejerske +* organization = Reference(12ee0dde-a672-462f-820d-5efe832d73c9) \ No newline at end of file From f9c50c38cae81d2ae34804c93daf0e6c600dda9f Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Thu, 4 Dec 2025 10:42:43 +0100 Subject: [PATCH 22/40] Updated dependency to terminology --- sushi-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sushi-config.yaml b/sushi-config.yaml index 1d372a0..86e19f4 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -15,7 +15,7 @@ jurisdiction: urn:iso:std:iso:3166#DK "Denmark" dependencies: hl7.fhir.dk.core: 3.4.0 - medcom.fhir.dk.terminology: 2.0.1 + medcom.fhir.dk.terminology: 2.0.2 menu: Home: index.html From de60ef7fc0e1d15f0ab3906dbcdd38a3a9b0652c Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 10 Dec 2025 12:12:26 +0100 Subject: [PATCH 23/40] Updated according to review --- input/fsh/LPR3Identifier.fsh | 6 ++-- input/fsh/MedComCoreCareTeam.fsh | 2 +- input/fsh/MedComCoreDiagnosticRepport.fsh | 30 +++++++++++-------- input/fsh/MedComCoreEncounter.fsh | 8 +++-- input/fsh/MedComCoreMedia.fsh | 27 +++++++++-------- input/fsh/MedComCoreObservation.fsh | 2 +- input/fsh/MedComCoreOrganization.fsh | 3 +- input/fsh/MedComCorePatient.fsh | 24 +++++++++------ input/fsh/MedComCorePractitioner.fsh | 2 +- input/fsh/MedComCorePractitionerRole.fsh | 7 +++-- input/fsh/MedComMessagingContactPoint.fsh | 5 +++- ...efinition-medcom-core-observation-intro.md | 4 ++- 12 files changed, 74 insertions(+), 46 deletions(-) diff --git a/input/fsh/LPR3Identifier.fsh b/input/fsh/LPR3Identifier.fsh index 8a7f7a4..d7bc030 100644 --- a/input/fsh/LPR3Identifier.fsh +++ b/input/fsh/LPR3Identifier.fsh @@ -3,10 +3,12 @@ Parent: Identifier Id: lpr3-Identifier Title: "LPR3 Identifier" Description: "Identifier holding a LPR3 identifier" -* system 1.. +* system 1.. MS * system = "https://www.esundhed.dk/Registre/Landspatientregisteret" (exactly) -* value 1.. +* value 1.. MS * value obeys uuidv5 +* insert ProducerShallPutInNarrative(system) +* insert ProducerShallPutInNarrative(value) Invariant: uuidv5 Description: "LPR3 episodeOfCare identifiers must conform to a UUIDv5" diff --git a/input/fsh/MedComCoreCareTeam.fsh b/input/fsh/MedComCoreCareTeam.fsh index 9555f15..44ea1f9 100644 --- a/input/fsh/MedComCoreCareTeam.fsh +++ b/input/fsh/MedComCoreCareTeam.fsh @@ -2,7 +2,7 @@ Profile: MedComCoreCareTeam Parent: CareTeam Id: medcom-core-careteam Description: "Careteam participating in the care of a patient" -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index bb735c4..d2a67c1 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -3,15 +3,15 @@ Parent: DiagnosticReport Id: medcom-core-diagnosticreport Title: "MedComCoreDiagnosticReport" Description: "Report containing all observation results." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS -* identifier 1..1 MS -* identifier.value 1..1 MS -* identifier.value obeys medcom-uuidv4 -* identifier ^short = "The Diagnostic Report identifier" +//* identifier 1..1 MS +//* identifier.value 1..1 MS +//* identifier.value obeys medcom-uuidv4 +//* identifier ^short = "The Diagnostic Report identifier" * status 1..1 MS * status from $StatusCodeDiagnosticReport * status ^short = "registered | partial | preliminary | final | corrected | cancelled | entered-in-error" @@ -20,14 +20,20 @@ Description: "Report containing all observation results." * subject 1..1 MS * subject only Reference(DkCorePatient) * subject ^type.aggregation = #bundled -* issued 1..1 MS -* result MS +//* issued 1..1 MS +//* result MS * result only Reference(MedComCoreObservation) * result ^type.aggregation = #bundled -* performer MS -* media MS +* performer only Reference(MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam) +* resultsInterpreter only Reference(MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreOrganization or MedComCoreCareTeam) +//* media MS * media.link only Reference(MedComCoreMedia) * media ^short = "Attachments that are relevant for assessment of the patient's condition." -* media.link MS SU -* conclusion 0..1 MS -* conclusion ^short = "A comment relevant for all observations in the report." +//* media.link MS +* conclusion 0..1 //MS +//* conclusion ^short = "A comment relevant for all observations in the report." + +* insert ProducerShallPutInNarrative(id) +* insert ProducerShallPutInNarrative(status) +* insert ProducerShallPutInNarrative(code) +* insert ProducerShallPutInNarrative(subject) diff --git a/input/fsh/MedComCoreEncounter.fsh b/input/fsh/MedComCoreEncounter.fsh index 223da0e..ced3049 100644 --- a/input/fsh/MedComCoreEncounter.fsh +++ b/input/fsh/MedComCoreEncounter.fsh @@ -2,7 +2,7 @@ Profile: MedComCoreEncounter Parent: Encounter Id: medcom-core-encounter Description: "An interaction between a patient/citizen and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient/citizen." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS @@ -12,6 +12,8 @@ Description: "An interaction between a patient/citizen and healthcare provider(s * class from $EncounterClassVS * episodeOfCare MS * episodeOfCare.identifier MS +* episodeOfCare.identifier.system 1..1 MS +* episodeOfCare.identifier.value 1..1 MS * episodeOfCare ^slicing.discriminator.type = #value * episodeOfCare ^slicing.discriminator.path = "identifier.system" * episodeOfCare ^slicing.rules = #open @@ -33,8 +35,8 @@ Description: "An interaction between a patient/citizen and healthcare provider(s * insert ProducerShallPutInNarrative(status) * insert ProducerShallPutInNarrative(class) * insert ProducerShallPutInNarrative(subject) -* insert ProducerShallPutInNarrative(episodeOfCare.identifier) -* insert ProducerShallPutInNarrative(episodeOfCare[lpr3identifier].identifier) +* insert ProducerShallPutInNarrative(episodeOfCare.identifier.system) +* insert ProducerShallPutInNarrative(episodeOfCare.identifier.value) * insert ProducerShallPutInNarrative(serviceProvider) Instance: 6220b42d-c4fd-4c77-bae7-78e7d890dc8d diff --git a/input/fsh/MedComCoreMedia.fsh b/input/fsh/MedComCoreMedia.fsh index 9324a5a..518dfa7 100644 --- a/input/fsh/MedComCoreMedia.fsh +++ b/input/fsh/MedComCoreMedia.fsh @@ -3,23 +3,26 @@ Parent: Media Id: medcom-core-media Title: "MedComMedia" Description: "Profile to capture relevant images,audio, video and document as part of the healthcare process" -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS * status MS -* identifier 1..1 MS -* identifier only MedComAssignedIdentifier -* operator 0..1 MS -* operator only Reference(MedComCorePractitioner or MedComCorePractitionerRole) -* content.data MS -* content.contentType MS -* content.contentType from $Mimetypes -* content.title 1..1 MS -* content.creation 1..1 MS -* operator obeys medcom-homecareReport-5 -* operator obeys medcom-homecareReport-6 +//* identifier 1..1 MS +//* identifier only MedComAssignedIdentifier +* operator 0..1 //MS +* operator only Reference(MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreOrganization or MedComCoreCareTeam or DkCorePatient or Device or DkCoreRelatedPerson) +* content MS +//* content.data MS +//* content.contentType MS +//* content.contentType from $Mimetypes +//* content.title 1..1 MS +//* content.creation 1..1 MS +//* operator obeys medcom-homecareReport-5 +//* operator obeys medcom-homecareReport-6 +* insert ProducerShallPutInNarrative(id) +* insert ProducerShallPutInNarrative(status) Invariant: medcom-homecareReport-5 diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 0758107..5388f25 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -5,7 +5,7 @@ Parent: DkCoreObservation Id: medcom-core-observation Title: "MedComCoreObservation" Description: "Observation profile." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS diff --git a/input/fsh/MedComCoreOrganization.fsh b/input/fsh/MedComCoreOrganization.fsh index f9ec3d6..ba8c0d7 100644 --- a/input/fsh/MedComCoreOrganization.fsh +++ b/input/fsh/MedComCoreOrganization.fsh @@ -16,7 +16,8 @@ Description: "A formally recognized organizations within danish healthcare, regi * name MS * name ^definition = "Name of the organization. Shall be present if known by the sender." * insert ProducerShallPutInNarrative(id) -* insert ProducerShallPutInNarrative(identifier[SOR-ID]) +* insert ProducerShallPutInNarrative(identifier[SOR-ID].system) +* insert ProducerShallPutInNarrative(identifier[SOR-ID].value) * insert ProducerShallPutInNarrative(name) Instance: 12ee0dde-a672-462f-820d-5efe832d73c9 diff --git a/input/fsh/MedComCorePatient.fsh b/input/fsh/MedComCorePatient.fsh index 76a154d..1a74927 100644 --- a/input/fsh/MedComCorePatient.fsh +++ b/input/fsh/MedComCorePatient.fsh @@ -2,15 +2,21 @@ Profile: MedComCorePatient Parent: DkCorePatient Id: medcom-core-patient Description: "Patient/citizen resource to use as subject in MedCom communication." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS * identifier[cpr] ^short = "Unique identification number for all citizens in Denmark, called civil person register (CPR-number)." * identifier[cpr] MS +* identifier[cpr].system MS +* identifier[cpr].value MS * identifier[x-ecpr] MS +* identifier[x-ecpr].system MS +* identifier[x-ecpr].value MS * identifier[d-ecpr] MS +* identifier[d-ecpr].system MS +* identifier[d-ecpr].value MS * name 1.. * name[official] 1.. MS * name[official].given MS @@ -23,16 +29,16 @@ Description: "Patient/citizen resource to use as subject in MedCom communication //* deceased[x] ^definition = "Shall contain information if the patient is deceased and it is relevant in the given context" //* deceased[x] ^short = "Shall only be sent if the patient is deceased or the status change from deceased to non-deceased" * address ^definition = "Shall contain all known, relevant addresses of the patient" -* address.line MS +//* address.line MS * address.line ^definition = "Shall contain the known information about the street name, number etc. to provide an exact address" -* address.city MS +//* address.city MS * address.city ^definition = "Shall be present if the city is known" -* address.postalCode MS +//* address.postalCode MS * address.postalCode ^definition = "Shall be present if the postal code is known" * managingOrganization only Reference(MedComCoreOrganization) * managingOrganization ^type.aggregation = #bundled * managingOrganization ^definition = "Organization that is the custodian of the patient record. This can e.g. be the sender of a message or responsable for the patients treatment. One of these organizations will always be included in the bundle, why this element is not mandatory to include." -* identifier and name and telecom and address MS +* identifier and name MS //and telecom and address MS * insert ProducerShallPutInNarrative(id) * insert ProducerShallPutInNarrative(identifier[cpr].value) * insert ProducerShallPutInNarrative(identifier[cpr].system) @@ -42,10 +48,10 @@ Description: "Patient/citizen resource to use as subject in MedCom communication * insert ProducerShallPutInNarrative(identifier[d-ecpr].system) * insert ProducerShallPutInNarrative(name[official].family) * insert ProducerShallPutInNarrative(name[official].given) -* insert ProducerShallPutInNarrative(telecom) -* insert ProducerShallPutInNarrative(address.line) -* insert ProducerShallPutInNarrative(address.city) -* insert ProducerShallPutInNarrative(address.postalCode) +//* insert ProducerShallPutInNarrative(telecom) +//* insert ProducerShallPutInNarrative(address.line) +//* insert ProducerShallPutInNarrative(address.city) +//* insert ProducerShallPutInNarrative(address.postalCode) Instance: 733cef33-3626-422b-955d-d506aaa65fe1 InstanceOf: MedComCorePatient diff --git a/input/fsh/MedComCorePractitioner.fsh b/input/fsh/MedComCorePractitioner.fsh index fc6e28f..b446178 100644 --- a/input/fsh/MedComCorePractitioner.fsh +++ b/input/fsh/MedComCorePractitioner.fsh @@ -2,7 +2,7 @@ Profile: MedComCorePractitioner Parent: http://hl7.dk/fhir/core/StructureDefinition/dk-core-practitioner Id: medcom-core-practitioner Description: "Practitioner resource is used to describe a healthcare professional or another actor involved in citizen or patient care." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index ecef3c6..ebc7acf 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -2,7 +2,7 @@ Profile: MedComCorePractitionerRole Parent: DkCorePractitionerRole Id: medcom-core-practitionerrole Description: "PractitionerRole resource used to describe the role of a healthcare professional or another actor involved in citizen or patient care." -* id MS +* id 1.. MS * text MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS @@ -12,6 +12,8 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * code 1.. MS * code from $PractitionerRoles (example) * code.coding MS +* code.coding.system 1.. MS +* code.coding.code 1.. MS * code.text MS * organization 1.. MS * organization only Reference(MedComCoreOrganization) @@ -20,7 +22,8 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * insert ProducerShallPutInNarrative(id) * insert ProducerShallPutInNarrative(practitioner) * insert ProducerShallPutInNarrative(organization) -* insert ProducerShallPutInNarrative(code.coding) +* insert ProducerShallPutInNarrative(code.coding.system) +* insert ProducerShallPutInNarrative(code.coding.code) * insert ProducerShallPutInNarrative(code.text) diff --git a/input/fsh/MedComMessagingContactPoint.fsh b/input/fsh/MedComMessagingContactPoint.fsh index 6fcc68b..3016e33 100644 --- a/input/fsh/MedComMessagingContactPoint.fsh +++ b/input/fsh/MedComMessagingContactPoint.fsh @@ -4,4 +4,7 @@ Id: medcom-messaging-contactpoint Description: "The datatype ContactPoint is specified for use in MedCom messages." * system MS * value MS -* use MS \ No newline at end of file +* use MS +* insert ProducerShallPutInNarrative(system) +* insert ProducerShallPutInNarrative(value) +* insert ProducerShallPutInNarrative(use) diff --git a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md index d715c04..85afc7a 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-observation-intro.md @@ -1,5 +1,7 @@ ### Scope and use -This profile is a MedCom Core profile for observations and is intended to represent observations for a variety cases including for example: +This profile is a MedCom Core profile for observation measurements and simple assertions made about a patient. + +It is intended to represent observations for a variety cases including for example: * laboratory observations * observations performed by a municipal acute care team * EKG study data From 2469cca2c185754c8fa65eeb4b1d0f7132c7df9b Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Wed, 10 Dec 2025 12:13:56 +0100 Subject: [PATCH 24/40] Corrected version --- sushi-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sushi-config.yaml b/sushi-config.yaml index 86e19f4..44f5817 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -4,7 +4,7 @@ name: MedComCore title: "DK MedCom Core" description: This IG includes core profiles defined by MedCom. These profiles are used in MedCom's FHIR standards status: active -version: 3.0.2-dev +version: 4.0.0 fhirVersion: 4.0.1 copyrightYear: 2021+ releaseLabel: release From cf32f1170c7499ea482c29530ba7e4fb14d3c24e Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Thu, 11 Dec 2025 14:24:53 +0100 Subject: [PATCH 25/40] Testing build-site --- input/fsh/MedComCoreObservation.fsh | 1 + sushi-config.yaml | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 5388f25..bad267a 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -20,6 +20,7 @@ Description: "Observation profile." * subject ^type.aggregation = #bundled * performer 1.. MS * performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or DkCorePatient or DkCoreRelatedPerson) +* bodySite 1.. MS * extension contains $MedComObsExtValueAttachment named valueAttachment 0..* diff --git a/sushi-config.yaml b/sushi-config.yaml index 44f5817..77276e3 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -4,7 +4,7 @@ name: MedComCore title: "DK MedCom Core" description: This IG includes core profiles defined by MedCom. These profiles are used in MedCom's FHIR standards status: active -version: 4.0.0 +version: 4.0.0-test fhirVersion: 4.0.1 copyrightYear: 2021+ releaseLabel: release From 86245824a0e7a1b983bcb7c2261c9bfa7af511b1 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Thu, 11 Dec 2025 14:57:21 +0100 Subject: [PATCH 26/40] Update sushi-config.yaml --- sushi-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sushi-config.yaml b/sushi-config.yaml index 77276e3..44f5817 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -4,7 +4,7 @@ name: MedComCore title: "DK MedCom Core" description: This IG includes core profiles defined by MedCom. These profiles are used in MedCom's FHIR standards status: active -version: 4.0.0-test +version: 4.0.0 fhirVersion: 4.0.1 copyrightYear: 2021+ releaseLabel: release From 4f9556fde9499b78bcedcd36462b0e7b83cf6a52 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Fri, 12 Dec 2025 08:13:24 +0100 Subject: [PATCH 27/40] removed test --- input/fsh/MedComCoreObservation.fsh | 1 - 1 file changed, 1 deletion(-) diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index bad267a..5388f25 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -20,7 +20,6 @@ Description: "Observation profile." * subject ^type.aggregation = #bundled * performer 1.. MS * performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or DkCorePatient or DkCoreRelatedPerson) -* bodySite 1.. MS * extension contains $MedComObsExtValueAttachment named valueAttachment 0..* From 937971e756412ad43dcea3fea366bf2552325c95 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 15 Dec 2025 11:21:36 +0100 Subject: [PATCH 28/40] Updated based on review --- input/fsh/MedComCoreDiagnosticRepport.fsh | 2 +- input/fsh/MedComCoreEncounter.fsh | 2 +- input/fsh/MedComCoreMedia.fsh | 2 +- input/fsh/MedComCoreObservation.fsh | 4 ++-- input/fsh/MedComCorePractitionerRole.fsh | 12 ++++++------ ...eDefinition-medcom-core-practitionerrole-intro.md | 4 +++- input/pagecontent/index.md | 2 -- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index d2a67c1..d574263 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -18,7 +18,7 @@ Description: "Report containing all observation results." * code MS * code from $DiagnosticReportCode * subject 1..1 MS -* subject only Reference(DkCorePatient) +* subject only Reference(MedComCorePatient) * subject ^type.aggregation = #bundled //* issued 1..1 MS //* result MS diff --git a/input/fsh/MedComCoreEncounter.fsh b/input/fsh/MedComCoreEncounter.fsh index ced3049..74d2c7d 100644 --- a/input/fsh/MedComCoreEncounter.fsh +++ b/input/fsh/MedComCoreEncounter.fsh @@ -25,7 +25,7 @@ Description: "An interaction between a patient/citizen and healthcare provider(s * episodeOfCare[lpr3identifier].identifier only Lpr3Identifier * episodeOfCare[lpr3identifier].identifier ^definition = "Shall contain the id of the episode of care reported to the Danish National Patient Registry if known" * subject 1.. MS -* subject only Reference(DkCorePatient) +* subject only Reference(MedComCorePatient) * subject ^type.aggregation = #bundled * account ..0 * serviceProvider only Reference(MedComCoreOrganization) diff --git a/input/fsh/MedComCoreMedia.fsh b/input/fsh/MedComCoreMedia.fsh index 518dfa7..5bc2e14 100644 --- a/input/fsh/MedComCoreMedia.fsh +++ b/input/fsh/MedComCoreMedia.fsh @@ -12,7 +12,7 @@ Description: "Profile to capture relevant images,audio, video and document as pa //* identifier 1..1 MS //* identifier only MedComAssignedIdentifier * operator 0..1 //MS -* operator only Reference(MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreOrganization or MedComCoreCareTeam or DkCorePatient or Device or DkCoreRelatedPerson) +* operator only Reference(MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreOrganization or MedComCoreCareTeam or MedComCorePatient or Device or DkCoreRelatedPerson) * content MS //* content.data MS //* content.contentType MS diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 5388f25..4d52f84 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -16,10 +16,10 @@ Description: "Observation profile." * effective[x] ^short = "The date and time of the observation." * code MS * subject 1..1 MS -* subject only Reference(DkCorePatient) +* subject only Reference(MedComCorePatient) * subject ^type.aggregation = #bundled * performer 1.. MS -* performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or DkCorePatient or DkCoreRelatedPerson) +* performer only Reference(MedComCoreOrganization or MedComCorePractitioner or MedComCorePractitionerRole or MedComCoreCareTeam or MedComCorePatient or DkCoreRelatedPerson) * extension contains $MedComObsExtValueAttachment named valueAttachment 0..* diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index ebc7acf..c7906f4 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -8,12 +8,12 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * text.status MS * text.div MS * practitioner only Reference(MedComCorePractitioner) -* practitioner 1.. MS -* code 1.. MS +* practitioner MS +* code MS * code from $PractitionerRoles (example) * code.coding MS -* code.coding.system 1.. MS -* code.coding.code 1.. MS +* code.coding.system MS +* code.coding.code MS * code.text MS * organization 1.. MS * organization only Reference(MedComCoreOrganization) @@ -28,9 +28,9 @@ Description: "PractitionerRole resource used to describe the role of a healthcar Invariant: medcom-core-practitionerrole-code-xor-text -Description: "There shall exist a practitioner role code or text." +Description: "There shall exist a practitioner role code.coding or text if code is present." Severity: #error -Expression: "code.coding.code.exists() xor code.text.exists()" +Expression: "code.exists() implies (code.coding.where(system.exists() and code.exists()).exists() xor code.text.exists())" Instance: 6057686e-666c-11ed-9022-0242ac120002 InstanceOf: MedComCorePractitionerRole diff --git a/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md b/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md index 8e3ae4f..0b0103a 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-practitionerrole-intro.md @@ -3,8 +3,10 @@ This profile describes the MedComCorePractitionerRole which is used to describe a practitioner's role in a MedCom standard. If a practitioner is referenced from MedComCorePractitionerRole it shall be a MedComCorePractitioner. -Just as it is in the original FHIR ressource, the MedComCorePractitionerRole is broadly defined and describes services a practitioner is able to provide for the organization. +Just as it is in the original FHIR ressource, the MedComCorePractitionerRole is broadly defined and describes services a practitioner is able to provide for the organization. The organization **MUST** always be present. It is prefered to use a code from [MedComCorePractitionerRoles](https://medcomfhir.dk/ig/terminology/ValueSet-medcom-core-PractitionerRoles.html). If these does not cover the needs, the roles can be included in a string at PractitionerRole.code.text. +If the code element is present, it shall contain either a structured code (at least one coding with both system and code populated) or a textual representation (code.text) + Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCorePractitionerRole. \ No newline at end of file diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index d0bfd5e..e7d46d9 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -18,8 +18,6 @@ On [MedCom Terminology IG](http://medcomfhir.dk/ig/terminology/) all referenced #### Dependencies This IG has a dependency to [DK-core](https://hl7.dk/fhir/core/), defined by [HL7 Denmark](https://hl7.dk/). This is currently reflected in the profiles that inherit from DkCore profiles. -Note that any MedCom Core profile referencing a Patient resource uses DkCorePatient as its required reference. This is because MedComDocumentPatient cannot inherit from MedComCorePatient due to differing requirements, and their closest shared parent is therefore DkCorePatient. In message-based MedCom standards, MedComCorePatient **MUST** always be used as the Patient resource, whereas in document-sharing-based MedCom standards, the required Patient profile is MedComDocumentPatient — even though DkCorePatient appears as the referenced profile in the core profiles within this Implementation Guide. - ### Documentation [More information about MedCom Core](https://medcomdk.github.io/dk-medcom-core/) can be found here. As mentioned, MedCom Core does not alone constitute a standard, why the documentation is limited. From 713f13b82744ade421ae43f62746a71beabe6a40 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 15 Dec 2025 11:55:33 +0100 Subject: [PATCH 29/40] Update MedComCorePatient.fsh --- input/fsh/MedComCorePatient.fsh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePatient.fsh b/input/fsh/MedComCorePatient.fsh index 1a74927..f813a5c 100644 --- a/input/fsh/MedComCorePatient.fsh +++ b/input/fsh/MedComCorePatient.fsh @@ -17,8 +17,9 @@ Description: "Patient/citizen resource to use as subject in MedCom communication * identifier[d-ecpr] MS * identifier[d-ecpr].system MS * identifier[d-ecpr].value MS -* name 1.. +* name 1.. MS * name[official] 1.. MS +* name[official].use MS * name[official].given MS * name[official].given ^definition = "Shall be present if the official given name of the patient is known, danish \"fornavn\". " * name[official].family MS @@ -48,6 +49,7 @@ Description: "Patient/citizen resource to use as subject in MedCom communication * insert ProducerShallPutInNarrative(identifier[d-ecpr].system) * insert ProducerShallPutInNarrative(name[official].family) * insert ProducerShallPutInNarrative(name[official].given) +* insert ProducerShallPutInNarrative(name[official].use) //* insert ProducerShallPutInNarrative(telecom) //* insert ProducerShallPutInNarrative(address.line) //* insert ProducerShallPutInNarrative(address.city) From a1605cde90eea963626db1de843effda7564dbae Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 15 Dec 2025 12:12:55 +0100 Subject: [PATCH 30/40] Update index.md --- input/pagecontent/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index e7d46d9..e329c24 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -28,7 +28,7 @@ A description of governance and guidance for MedCom's FHIR standards, can be fou The MedCom FHIR landing page provides a overview of governance requirements that apply to MedCom’s FHIR standards. This includes fx the mandatory rules for interpreting MustSupport, the formal validation requirements that implementers must follow, the expectations for producing narrative texts and governance for how MedCom Terminology is versioned. -The landing page also offers help to developers to understand how to work with MedCom’s FHIR standards. This includes a guide of how to read an Implementation Guide. Users will also find instructions on how to use some of the required tools, such as validation setup and how to use Touchstone. +The landing page also offers help to developers to understand how to work with MedCom’s FHIR standards. This includes a guide of how to read an Implementation Guide. Users will also find instructions on how to use some of the FHIR tools, such as validation setup. #### Quality Assurance Report From 51680dcb7bb663c8bdc619cfefaa2e298b04f624 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 5 Jan 2026 10:44:51 +0100 Subject: [PATCH 31/40] Corrected wording --- _build.new.bat | 386 +++++++++++++++++++++++++++++++++++++ input/pagecontent/index.md | 2 +- 2 files changed, 387 insertions(+), 1 deletion(-) create mode 100644 _build.new.bat diff --git a/_build.new.bat b/_build.new.bat new file mode 100644 index 0000000..99d0e1f --- /dev/null +++ b/_build.new.bat @@ -0,0 +1,386 @@ +@ECHO OFF +setlocal enabledelayedexpansion + +SET "dlurl=https://github.com/HL7/fhir-ig-publisher/releases/latest/download/publisher.jar" +SET "publisher_jar=publisher.jar" +SET "input_cache_path=%CD%\input-cache\" +SET "skipPrompts=false" +SET "upper_path=..\" +SET "scriptdlroot=https://raw.githubusercontent.com/HL7/ig-publisher-scripts/main" +SET "build_bat_url=%scriptdlroot%/_build.bat" +SET "build_sh_url=%scriptdlroot%/_build.sh" + + + +:: Debugging statements to check jar file location +ECHO Checking for publisher.jar in %input_cache_path% +IF EXIST "%input_cache_path%%publisher_jar%" ( + SET "jar_location=%input_cache_path%%publisher_jar%" + ECHO Found publisher.jar in input-cache +) ELSE ( + ECHO Checking for publisher.jar in %upper_path% + IF EXIST "%upper_path%%publisher_jar%" ( + SET "jar_location=%upper_path%%publisher_jar%" + ECHO Found publisher.jar in parent folder + ) ELSE ( + SET "jar_location=not_found" + SET "default_choice=1" + ECHO publisher.jar not found in input-cache or parent folder + ) +) + + +:: Handle command-line argument to bypass the menu +IF NOT "%~1"=="" ( + IF /I "%~1"=="update" SET "userChoice=1" + IF /I "%~1"=="build" SET "userChoice=2" + IF /I "%~1"=="nosushi" SET "userChoice=3" + IF /I "%~1"=="notx" SET "userChoice=4" + IF /I "%~1"=="jekyll" SET "userChoice=5" + IF /I "%~1"=="clean" SET "userChoice=6" + IF /I "%~1"=="exit" SET "userChoice=0" + GOTO executeChoice +) + +echo --------------------------------------------------------------- +ECHO Checking internet connection... +PING tx.fhir.org -4 -n 1 -w 4000 >nul 2>&1 && SET "online_status=true" || SET "online_status=false" + +IF "%online_status%"=="true" ( + ECHO We're online and tx.fhir.org is available. + FOR /F "tokens=2 delims=:" %%a IN ('curl -s https://api.github.com/repos/HL7/fhir-ig-publisher/releases/latest ^| findstr "tag_name"') DO SET "latest_version=%%a" + SET "latest_version=!latest_version:"=!" + SET "latest_version=!latest_version: =!" + SET "latest_version=!latest_version:~0,-1!" +) ELSE ( + ECHO We're offline or tx.fhir.org is not available, can only run the publisher without TX... + SET "txoption=-tx n/a" + SET "latest_version=unknown" + SET "default_choice=4" +) + +echo --------------------------------------------------------------- + + +IF NOT "%jar_location%"=="not_found" ( + FOR /F "tokens=*" %%i IN ('java "-Dfile.encoding=UTF-8" -jar "%jar_location%" -v 2^>^&1') DO SET "publisher_version=%%i" + SET "publisher_version=!publisher_version:"=!" + ECHO Detected publisher version: !publisher_version! +) ELSE ( + SET "publisher_version=unknown" + ECHO publisher.jar location is not found +) + +ECHO Publisher version: !publisher_version!; Latest is !latest_version! + +IF NOT "%online_status%"=="true" ( + ECHO We're offline. +) ELSE ( + IF NOT "!publisher_version!"=="!latest_version!" ( + ECHO An update is recommended. + SET "default_choice=1" + ) ELSE ( + ECHO Publisher is up to date. + SET "default_choice=2" + ) +) + +echo --------------------------------------------------------------- +echo. + +echo Please select an option: +echo 1. Download or update publisher +echo 2. Build IG +echo 3. Build IG - no sushi +echo 4. Build IG - force no TX server +echo 5. Jekyll build +echo 6. Clean up temp directories +echo 0. Exit +:: echo [Press Enter for default (%default_choice%) or type an option number:] +echo. + +:: Using CHOICE to handle input with timeout +:: ECHO [Enter=Continue, 1-7=Option, 0=Exit] +choice /C 12345670 /N /CS /D %default_choice% /T 5 /M "Choose an option number or wait 5 seconds for default (%default_choice%):" +SET "userChoice=%ERRORLEVEL%" + + +:executeChoice +echo You selected: %userChoice% + +IF "%userChoice%"=="1" GOTO downloadpublisher +IF "%userChoice%"=="2" GOTO publish_once +IF "%userChoice%"=="3" GOTO publish_nosushi +IF "%userChoice%"=="4" GOTO publish_notx +IF "%userChoice%"=="5" GOTO debugjekyll +IF "%userChoice%"=="6" GOTO clean +IF "%userChoice%"=="0" EXIT /B + +:end + + + +:debugjekyll + echo Running Jekyll build... + jekyll build -s temp/pages -d output +GOTO end + + +:clean + echo Cleaning up directories... + if exist ".\input-cache\publisher.jar" ( + echo Preserving publisher.jar and removing other files in .\input-cache... + move ".\input-cache\publisher.jar" ".\" + rmdir /s /q ".\input-cache" + mkdir ".\input-cache" + move ".\publisher.jar" ".\input-cache" + ) else ( + if exist ".\input-cache\" ( + rmdir /s /q ".\input-cache" + ) + ) + if exist ".\temp\" ( + rmdir /s /q ".\temp" + echo Removed: .\temp + ) + if exist ".\output\" ( + rmdir /s /q ".\output" + echo Removed: .\output + ) + if exist ".\template\" ( + rmdir /s /q ".\template" + echo Removed: .\template + ) + +GOTO end + + + + + +:downloadpublisher +ECHO Downloading Publisher... +:processflags +SET ARG=%1 +IF DEFINED ARG ( + IF "%ARG%"=="-f" SET FORCE=true + IF "%ARG%"=="--force" SET FORCE=true + SHIFT + GOTO processflags +) + +FOR %%x IN ("%CD%") DO SET upper_path=%%~dpx + +ECHO. +IF NOT EXIST "%input_cache_path%%publisher_jar%" ( + IF NOT EXIST "%upper_path%%publisher_jar%" ( + SET jarlocation="%input_cache_path%%publisher_jar%" + SET jarlocationname=Input Cache + ECHO IG Publisher is not yet in input-cache or parent folder. + REM we don't use jarlocation below because it will be empty because we're in a bracketed if statement + GOTO create + ) ELSE ( + ECHO IG Publisher FOUND in parent folder + SET jarlocation="%upper_path%%publisher_jar%" + SET jarlocationname=Parent folder + GOTO upgrade + ) +) ELSE ( + ECHO IG Publisher FOUND in input-cache + SET jarlocation="%input_cache_path%%publisher_jar%" + SET jarlocationname=Input Cache + GOTO upgrade +) + +:create +IF DEFINED FORCE ( + MKDIR "%input_cache_path%" 2> NUL + GOTO download +) + +IF "%skipPrompts%"=="y" ( + SET create=Y +) ELSE ( + SET /p create="Download? (Y/N) " +) +IF /I "%create%"=="Y" ( + ECHO Will place publisher jar here: %input_cache_path%%publisher_jar% + MKDIR "%input_cache_path%" 2> NUL + GOTO download +) +GOTO done + +:upgrade +IF "%skipPrompts%"=="y" ( + SET overwrite=Y +) ELSE ( + SET /p overwrite="Overwrite %jarlocation%? (Y/N) " +) + +IF /I "%overwrite%"=="Y" ( + GOTO download +) +GOTO done + +:download +ECHO Downloading most recent publisher to %jarlocationname% - it's ~200 MB, so this may take a bit + +FOR /f "tokens=4-5 delims=. " %%i IN ('ver') DO SET VERSION=%%i.%%j +IF "%version%" == "10.0" GOTO win10 +IF "%version%" == "6.3" GOTO win8.1 +IF "%version%" == "6.2" GOTO win8 +IF "%version%" == "6.1" GOTO win7 +IF "%version%" == "6.0" GOTO vista + +ECHO Unrecognized version: %version% +GOTO done + +:win10 +CALL POWERSHELL -command if ('System.Net.WebClient' -as [type]) {(new-object System.Net.WebClient).DownloadFile(\"%dlurl%\",\"%jarlocation%\") } else { Invoke-WebRequest -Uri "%dlurl%" -Outfile "%jarlocation%" } + +GOTO done + +:win7 +rem this may be triggering the antivirus - bitsadmin.exe is a known threat +rem CALL bitsadmin /transfer GetPublisher /download /priority normal "%dlurl%" "%jarlocation%" + +rem this didn't work in win 10 +rem CALL Start-BitsTransfer /priority normal "%dlurl%" "%jarlocation%" + +rem this should work - untested +call (New-Object Net.WebClient).DownloadFile('%dlurl%', '%jarlocation%') +GOTO done + +:win8.1 +:win8 +:vista +GOTO done + + + +:done + + + + +ECHO. +ECHO Updating scripts +IF "%skipPrompts%"=="y" ( + SET updateScripts=Y +) ELSE ( + SET /p updateScripts="Update scripts? (Y/N) " +) +IF /I "%updateScripts%"=="Y" ( + GOTO scripts +) +GOTO end + + +:scripts + +REM Download all batch files (and this one with a new name) + +SETLOCAL DisableDelayedExpansion + + + +:dl_script_1 +ECHO Updating _build.sh +call POWERSHELL -command if ('System.Net.WebClient' -as [type]) {(new-object System.Net.WebClient).DownloadFile(\"%build_sh_url%\",\"_build.new.sh\") } else { Invoke-WebRequest -Uri "%build_sh_url%" -Outfile "_build.new.sh" } +if %ERRORLEVEL% == 0 goto upd_script_1 +echo "Errors encountered during download: %errorlevel%" +goto dl_script_2 +:upd_script_1 +start copy /y "_build.new.sh" "_build.sh" ^&^& del "_build.new.sh" ^&^& exit + + +:dl_script_2 +ECHO Updating _build.bat +call POWERSHELL -command if ('System.Net.WebClient' -as [type]) {(new-object System.Net.WebClient).DownloadFile(\"%build_bat_url%\",\"_build.new.bat\") } else { Invoke-WebRequest -Uri "%build_bat_url%" -Outfile "_build.new.bat" } +if %ERRORLEVEL% == 0 goto upd_script_2 +echo "Errors encountered during download: %errorlevel%" +goto end +:upd_script_2 +start copy /y "_build.new.bat" "_build.bat" ^&^& del "_build.new.bat" ^&^& exit + + +GOTO end + + +:publish_once + +SET JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 + +:: Debugging statements before running publisher +ECHO 1jar_location is: %jar_location% +IF NOT "%jar_location%"=="not_found" ( + java %JAVA_OPTS% -jar "%jar_location%" -ig . %txoption% %* +) ELSE ( + ECHO IG Publisher NOT FOUND in input-cache or parent folder. Please run _updatePublisher. Aborting... +) + +GOTO end + + + +:publish_nosushi + +SET JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 + +:: Debugging statements before running publisher +ECHO 3jar_location is: %jar_location% +IF NOT "%jar_location%"=="not_found" ( + java %JAVA_OPTS% -jar "%jar_location%" -ig . %txoption% -no-sushi %* +) ELSE ( + ECHO IG Publisher NOT FOUND in input-cache or parent folder. Please run _updatePublisher. Aborting... +) + +GOTO end + + +:publish_notx +SET txoption=-tx n/a + +SET JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 + +:: Debugging statements before running publisher +ECHO 2jar_location is: %jar_location% +IF NOT "%jar_location%"=="not_found" ( + java %JAVA_OPTS% -jar "%jar_location%" -ig . %txoption% %* +) ELSE ( + ECHO IG Publisher NOT FOUND in input-cache or parent folder. Please run _updatePublisher. Aborting... +) + +GOTO end + + + + +:publish_continuous + +SET JAVA_TOOL_OPTIONS=-Dfile.encoding=UTF-8 + +:: Debugging statements before running publisher +ECHO Checking %input_cache_path% for publisher.jar +IF EXIST "%input_cache_path%\%publisher_jar%" ( + java %JAVA_OPTS% -jar "%input_cache_path%\%publisher_jar%" -ig . %txoption% -watch %* +) ELSE ( + ECHO Checking %upper_path% for publisher.jar + IF EXIST "..\%publisher_jar%" ( + java %JAVA_OPTS% -jar "..\%publisher_jar%" -ig . %txoption% -watch %* + ) ELSE ( + ECHO IG Publisher NOT FOUND in input-cache or parent folder. Please run _updatePublisher. Aborting... + ) +) + +GOTO end + + +:end + +:: Pausing at the end + + +IF NOT "%skipPrompts%"=="true" ( + PAUSE +) diff --git a/input/pagecontent/index.md b/input/pagecontent/index.md index e329c24..cb21873 100644 --- a/input/pagecontent/index.md +++ b/input/pagecontent/index.md @@ -10,7 +10,7 @@ The purpose of this IG is to: The MedCom Core profiles only constitute a part of a standard. To exchange a complete MedCom standard, profiles from the other Implementation Guides is used. -**XML and JSON:** Note that the document may be represented in either XML or JSON and interconverted between these or have its character encoding changed, all the while remaining the same document. +**XML and JSON:** Note that the instances of the profiles may be represented in either XML or JSON and interconverted between these or have its character encoding changed, all the while remaining the same instance. #### Terminology On [MedCom Terminology IG](http://medcomfhir.dk/ig/terminology/) all referenced CodeSystem and ValueSets developed by MedCom can be found. From 6d9b171d47acd3eb562831fcec6418f90b2f4abf Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 5 Jan 2026 11:07:02 +0100 Subject: [PATCH 32/40] Removed MedComMessagingContactPoint from patient telecom --- input/fsh/MedComCorePatient.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCorePatient.fsh b/input/fsh/MedComCorePatient.fsh index f813a5c..64470b5 100644 --- a/input/fsh/MedComCorePatient.fsh +++ b/input/fsh/MedComCorePatient.fsh @@ -25,7 +25,7 @@ Description: "Patient/citizen resource to use as subject in MedCom communication * name[official].family MS * name[official].family ^definition = "Shall always be present, danish \"efternavn\". " * telecom ^definition = "Shall contain value, system and use if these information are known." -* telecom only MedComMessagingContactPoint +//* telecom only MedComMessagingContactPoint //* deceased[x] MS //* deceased[x] ^definition = "Shall contain information if the patient is deceased and it is relevant in the given context" //* deceased[x] ^short = "Shall only be sent if the patient is deceased or the status change from deceased to non-deceased" From 5125cb34d81f07b70fbe798f9dd4ba7e20f026d8 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Mon, 5 Jan 2026 15:36:12 +0100 Subject: [PATCH 33/40] Update sushi-config.yaml --- sushi-config.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sushi-config.yaml b/sushi-config.yaml index 44f5817..745baf5 100644 --- a/sushi-config.yaml +++ b/sushi-config.yaml @@ -14,7 +14,7 @@ publisher: jurisdiction: urn:iso:std:iso:3166#DK "Denmark" dependencies: - hl7.fhir.dk.core: 3.4.0 + hl7.fhir.dk.core: 3.5.0 medcom.fhir.dk.terminology: 2.0.2 menu: From 49a0e53b47d16709a55371717ef2375b7832a636 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 6 Jan 2026 12:49:19 +0100 Subject: [PATCH 34/40] Delete MedComMessagingContactPoint.fsh --- input/fsh/MedComMessagingContactPoint.fsh | 10 ---------- 1 file changed, 10 deletions(-) delete mode 100644 input/fsh/MedComMessagingContactPoint.fsh diff --git a/input/fsh/MedComMessagingContactPoint.fsh b/input/fsh/MedComMessagingContactPoint.fsh deleted file mode 100644 index 3016e33..0000000 --- a/input/fsh/MedComMessagingContactPoint.fsh +++ /dev/null @@ -1,10 +0,0 @@ -Profile: MedComMessagingContactPoint -Parent: ContactPoint -Id: medcom-messaging-contactpoint -Description: "The datatype ContactPoint is specified for use in MedCom messages." -* system MS -* value MS -* use MS -* insert ProducerShallPutInNarrative(system) -* insert ProducerShallPutInNarrative(value) -* insert ProducerShallPutInNarrative(use) From 7ec5be5ff5739a882fedecc2510875ddee4fc84f Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Thu, 8 Jan 2026 12:45:07 +0100 Subject: [PATCH 35/40] Added sushi ignore errors and added 1.. on text element on profiles --- input/fsh/MedComCoreCareTeam.fsh | 2 +- input/fsh/MedComCoreDiagnosticRepport.fsh | 2 +- input/fsh/MedComCoreEncounter.fsh | 2 +- input/fsh/MedComCoreMedia.fsh | 2 +- input/fsh/MedComCoreObservation.fsh | 4 +--- input/fsh/MedComCoreOrganization.fsh | 2 +- input/fsh/MedComCorePatient.fsh | 2 +- input/fsh/MedComCorePractitioner.fsh | 2 +- input/fsh/MedComCorePractitionerRole.fsh | 2 +- input/sushi-ignoreErrors.txt | 12 ++++++++++++ 10 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 input/sushi-ignoreErrors.txt diff --git a/input/fsh/MedComCoreCareTeam.fsh b/input/fsh/MedComCoreCareTeam.fsh index 44ea1f9..831383a 100644 --- a/input/fsh/MedComCoreCareTeam.fsh +++ b/input/fsh/MedComCoreCareTeam.fsh @@ -3,7 +3,7 @@ Parent: CareTeam Id: medcom-core-careteam Description: "Careteam participating in the care of a patient" * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index d574263..ebd438c 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -4,7 +4,7 @@ Id: medcom-core-diagnosticreport Title: "MedComCoreDiagnosticReport" Description: "Report containing all observation results." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCoreEncounter.fsh b/input/fsh/MedComCoreEncounter.fsh index 74d2c7d..437a99b 100644 --- a/input/fsh/MedComCoreEncounter.fsh +++ b/input/fsh/MedComCoreEncounter.fsh @@ -3,7 +3,7 @@ Parent: Encounter Id: medcom-core-encounter Description: "An interaction between a patient/citizen and healthcare provider(s) for the purpose of providing healthcare service(s) or assessing the health status of a patient/citizen." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCoreMedia.fsh b/input/fsh/MedComCoreMedia.fsh index 5bc2e14..9d65b95 100644 --- a/input/fsh/MedComCoreMedia.fsh +++ b/input/fsh/MedComCoreMedia.fsh @@ -4,7 +4,7 @@ Id: medcom-core-media Title: "MedComMedia" Description: "Profile to capture relevant images,audio, video and document as part of the healthcare process" * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCoreObservation.fsh b/input/fsh/MedComCoreObservation.fsh index 4d52f84..5887c1e 100644 --- a/input/fsh/MedComCoreObservation.fsh +++ b/input/fsh/MedComCoreObservation.fsh @@ -1,12 +1,10 @@ - - Profile: MedComCoreObservation Parent: DkCoreObservation Id: medcom-core-observation Title: "MedComCoreObservation" Description: "Observation profile." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCoreOrganization.fsh b/input/fsh/MedComCoreOrganization.fsh index ba8c0d7..0f9a165 100644 --- a/input/fsh/MedComCoreOrganization.fsh +++ b/input/fsh/MedComCoreOrganization.fsh @@ -3,7 +3,7 @@ Parent: DkCoreOrganization Id: medcom-core-organization Description: "A formally recognized organizations within danish healthcare, registered with a SOR identifier issued by The Danish Health Data Authority" * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCorePatient.fsh b/input/fsh/MedComCorePatient.fsh index 64470b5..d9673c1 100644 --- a/input/fsh/MedComCorePatient.fsh +++ b/input/fsh/MedComCorePatient.fsh @@ -3,7 +3,7 @@ Parent: DkCorePatient Id: medcom-core-patient Description: "Patient/citizen resource to use as subject in MedCom communication." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCorePractitioner.fsh b/input/fsh/MedComCorePractitioner.fsh index b446178..8d30ef1 100644 --- a/input/fsh/MedComCorePractitioner.fsh +++ b/input/fsh/MedComCorePractitioner.fsh @@ -3,7 +3,7 @@ Parent: http://hl7.dk/fhir/core/StructureDefinition/dk-core-practitioner Id: medcom-core-practitioner Description: "Practitioner resource is used to describe a healthcare professional or another actor involved in citizen or patient care." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index c7906f4..c11f88e 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -3,7 +3,7 @@ Parent: DkCorePractitionerRole Id: medcom-core-practitionerrole Description: "PractitionerRole resource used to describe the role of a healthcare professional or another actor involved in citizen or patient care." * id 1.. MS -* text MS +* text 1.. MS * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS diff --git a/input/sushi-ignoreErrors.txt b/input/sushi-ignoreErrors.txt new file mode 100644 index 0000000..5764f3d --- /dev/null +++ b/input/sushi-ignoreErrors.txt @@ -0,0 +1,12 @@ +== Suppressed errors == +# Link to sushi desciption: https://fshschool.org/docs/sushi/project/#using-the-hl7-ig-publisher-and-auto-builder +# Suppresses this error as IG Publisher autogenerates narratives after SUSHI has run. +Element Patient.text has minimum cardinality 1 but occurs 0 time(s). +Element CareTeam.text has minimum cardinality 1 but occurs 0 time(s). +Element DiagnosticReport.text has minimum cardinality 1 but occurs 0 time(s). +Element Encounter.text has minimum cardinality 1 but occurs 0 time(s). +Element Media.text has minimum cardinality 1 but occurs 0 time(s). +Element Observation.text has minimum cardinality 1 but occurs 0 time(s). +Element Organization.text has minimum cardinality 1 but occurs 0 time(s). +Element Practitioner.text has minimum cardinality 1 but occurs 0 time(s). +Element PractitionerRole.text has minimum cardinality 1 but occurs 0 time(s). From 1e4897f0a4acad49ea63c8d8e27d9560baa47d29 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Fri, 9 Jan 2026 15:19:20 +0100 Subject: [PATCH 36/40] Added 1.. to PractitionerRole code.coding.system and -value --- input/fsh/MedComCorePractitionerRole.fsh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index c11f88e..8622838 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -12,8 +12,8 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * code MS * code from $PractitionerRoles (example) * code.coding MS -* code.coding.system MS -* code.coding.code MS +* code.coding.system 1.. MS +* code.coding.code 1.. MS * code.text MS * organization 1.. MS * organization only Reference(MedComCoreOrganization) From 71f43bf1224bfb37678ae3295216cba9041abb3d Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 13 Jan 2026 13:23:39 +0100 Subject: [PATCH 37/40] Corrected errors --- input/fsh/MedComCoreDiagnosticRepport.fsh | 2 +- input/fsh/MedComCorePractitionerRole.fsh | 2 +- .../StructureDefinition-medcom-core-encounter-intro.md | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/input/fsh/MedComCoreDiagnosticRepport.fsh b/input/fsh/MedComCoreDiagnosticRepport.fsh index ebd438c..5e27ae2 100644 --- a/input/fsh/MedComCoreDiagnosticRepport.fsh +++ b/input/fsh/MedComCoreDiagnosticRepport.fsh @@ -30,7 +30,7 @@ Description: "Report containing all observation results." * media.link only Reference(MedComCoreMedia) * media ^short = "Attachments that are relevant for assessment of the patient's condition." //* media.link MS -* conclusion 0..1 //MS +//* conclusion 0..1 //MS //* conclusion ^short = "A comment relevant for all observations in the report." * insert ProducerShallPutInNarrative(id) diff --git a/input/fsh/MedComCorePractitionerRole.fsh b/input/fsh/MedComCorePractitionerRole.fsh index 8622838..5c92fc4 100644 --- a/input/fsh/MedComCorePractitionerRole.fsh +++ b/input/fsh/MedComCorePractitionerRole.fsh @@ -9,7 +9,7 @@ Description: "PractitionerRole resource used to describe the role of a healthcar * text.div MS * practitioner only Reference(MedComCorePractitioner) * practitioner MS -* code MS +* code MS * code from $PractitionerRoles (example) * code.coding MS * code.coding.system 1.. MS diff --git a/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md b/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md index ccfbf66..de850f1 100644 --- a/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md +++ b/input/pagecontent/StructureDefinition-medcom-core-encounter-intro.md @@ -22,4 +22,4 @@ The EpisodeOfCare identifier is used to technically connect several encounters c It is both possible to use a [Landspatientregisteret](https://www.esundhed.dk/Registre/Landspatientregisteret)-identifier (called LPR3-identifier) and a locally defined identifier as the EpisodeOfCare-identifier. -Whether a LPR3-identifier or a locally defined identifier is used, it **SHALL** be an UUID. The LPR3-identifier **SHALL** obey a rule stating that the UUID **SHALL** be of version 5, [here more information about the LPR3-identifier can be found](https://scandihealth.github.io/lpr3-docs/). Using a locally defined identifier, a system for the identifier **SHALL** be added. +Whether an LPR3-identifier or a locally defined identifier is used, it **SHALL** be an UUID. The LPR3-identifier **SHALL** obey a rule stating that the UUID **SHALL** be of version 5, [here more information about the LPR3-identifier can be found](https://scandihealth.github.io/lpr3-docs/). Using a locally defined identifier, a system for the identifier **SHALL** be added. From 0054013aa3c924d1b0376adefdf5cc7b8c70fbb8 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 13 Jan 2026 13:32:39 +0100 Subject: [PATCH 38/40] Added release notes --- release-notes.md | 115 ++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 114 insertions(+), 1 deletion(-) diff --git a/release-notes.md b/release-notes.md index 457544e..98e73cb 100644 --- a/release-notes.md +++ b/release-notes.md @@ -1 +1,114 @@ -- Corrected a versioning error in the terminology. Therefore, MedComCore has been re-released to fix the dependency. +## Release Notes + +This release introduces substantial changes across a large number of MedCom Core profiles. The updates include, among others, revised cardinalities, adjusted Must Support (MS) requirements, added and removed narrative obligations, and the removal or restructuring of selected elements. +The changes were mainly made to address that some profiles had become overly restrictive compared to actual implementation needs, and to ensure that the profiles can be used consistently in the context of FHIR Documents. + +The detailed, profile-specific changes are listed in the sections below. In addition, profile descriptions have been updated to reflect the applied changes, and both the index page and selected example instances have been revised accordingly to ensure consistency with the updated profiles. The index page has also been updated with revised links, including links to updated governance documentation. + +--- + +## MedCom Core + +### 1. lpr3-Identifier +- `system` changed to `1..1 MS` and narrative obligation added. +- `value` changed to `1..1 MS` and narrative obligation added. + +### 2. medcom-core-careteam +- `id` and `text` changed to `1..1 MS`. +- `managingOrganization` changed to `1..1 MS`. + +### 3. medcom-core-contact-extension +- Narrative obligation added to `valueContactPoint.system`. +- Narrative obligation added to `valueContactPoint.value`. +- Narrative obligation added to `valueContactPoint.use`. + +### 4. medcom-core-diagnosticreport +- `identifier` requirements removed. +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. +- `issued` requirements removed. +- `result` MS removed. +- `performer` MS removed and reference restricted to: + `MedComCorePractitioner`, `MedComCorePractitionerRole`, or `MedComCoreCareTeam`. +- `media` MS removed. +- `media.link` MS removed. +- `conclusion` requirements removed. +- Narrative obligation added to `id`, `status`, `code`, and `subject`. + +### 5. medcom-core-encounter +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. +- `episodeOfCare.identifier.system` changed to `1..1 MS`. +- `episodeOfCare.identifier.value` changed to `1..1 MS`. +- Narrative obligation added to `episodeOfCare.identifier.system` and `episodeOfCare.identifier.value`. +- Narrative obligation removed from `episodeOfCare.identifier` and `episodeOfCare[lpr3Identifier].identifier`. + +### 6. medcom-core-media +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. +- Narrative obligation added to `id` and `status`. +- `identifier` requirements removed. +- `operator` MS removed. Reference restricted to: + `MedComCorePractitioner`, `MedComCorePractitionerRole`, `MedComCoreOrganization`, + `MedComCoreCareTeam`, `MedComCorePatient`, `Device`, or `DkCoreRelatedPerson`. +- `content` added MS. Requirements for underlying content elements removed. + +### 7. medcom-core-observation +- `identifier` requirements removed. +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. +- `effectiveDateTime` requirements removed. +- `effective[x]` short added. +- `code.coding.code` and `code.coding.system` MS removed. +- `note` requirements removed. +- `performer` changed to `1..* MS`. +- `valueAttachment` extension added. +- Narrative obligation added to `id`, `status`, `subject`, and `performer`. + +### 8. medcom-core-organization +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. +- `identifier` added MS. +- `identifier[SOR-ID].system` and `identifier[SOR-ID].value` added MS. +- Narrative obligation removed from `identifier[SOR-ID]`. +- Narrative obligation added to `identifier[SOR-ID].system`, `identifier[SOR-ID].value`, and `id`. + +### 9. medcom-core-patient +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. +- `identifier[cpr].system`, `identifier[cpr].value`, + `identifier[x-ecpr].system`, `identifier[x-ecpr].value`, + `identifier[d-ecpr].system`, and `identifier[d-ecpr].value` added MS. +- `name` added MS. +- `name[official].use` added MS. +- `telecom`, `address.line`, `address.city`, and `address.postalCode` requirements removed. +- Narrative obligation added to: + `id`, `identifier[cpr].system`, `identifier[cpr].value`, + `identifier[x-ecpr].system`, `identifier[x-ecpr].value`, + `identifier[d-ecpr].system`, `identifier[d-ecpr]`, + `name[official].given`, `name[official].family`, and `name[official].use`. +- Narrative obligation removed from `identifier[cpr]`, `identifier[x-ecpr]`, and `identifier[d-ecpr]`. + +### 10. medcom-core-practitioner +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. +- `name.given` and `name.family` added MS. +- Narrative obligation added to `id`. +- Narrative obligation removed from `name`. +- Narrative obligation added to `name.given` and `name.family`. + +### 11. medcom-core-practitionerrole +- Parent changed to `DkCorePractitionerRole`. +- `id` changed to `1..1 MS`. +- `text` changed to `1..1 MS`. +- `code.coding.system` and `code.coding.code` changed to `1..1 MS`. +- `organization` changed to `1..1 MS`. +- Narrative obligation added to `id`, `practitioner`, `organization`, + `code.coding.system`, `code.coding.code`, and `code.text`. +- Invariant `medcom-core-practitionerrole-code-xor-text` added. + +### 12. medcom-messaging-contactpoint +- Profile removed. + +### 13. medcom-observation-value-attachment-extension +- Extension added to represent attachments in observations. From b72795d7bb7e35e637aa0a479524c0c0182ced36 Mon Sep 17 00:00:00 2001 From: RikkeVestesen Date: Tue, 13 Jan 2026 13:46:11 +0100 Subject: [PATCH 39/40] Corrected release notes --- release-notes.md | 28 +++++++++++++--------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/release-notes.md b/release-notes.md index 98e73cb..3f429f5 100644 --- a/release-notes.md +++ b/release-notes.md @@ -7,22 +7,20 @@ The detailed, profile-specific changes are listed in the sections below. In addi --- -## MedCom Core - -### 1. lpr3-Identifier +## 1. lpr3-Identifier (used in medcom-core-encounter) - `system` changed to `1..1 MS` and narrative obligation added. - `value` changed to `1..1 MS` and narrative obligation added. -### 2. medcom-core-careteam +## 2. medcom-core-careteam - `id` and `text` changed to `1..1 MS`. - `managingOrganization` changed to `1..1 MS`. -### 3. medcom-core-contact-extension +## 3. medcom-core-contact-extension - Narrative obligation added to `valueContactPoint.system`. - Narrative obligation added to `valueContactPoint.value`. - Narrative obligation added to `valueContactPoint.use`. -### 4. medcom-core-diagnosticreport +## 4. medcom-core-diagnosticreport - `identifier` requirements removed. - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. @@ -35,7 +33,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi - `conclusion` requirements removed. - Narrative obligation added to `id`, `status`, `code`, and `subject`. -### 5. medcom-core-encounter +## 5. medcom-core-encounter - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. - `episodeOfCare.identifier.system` changed to `1..1 MS`. @@ -43,7 +41,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi - Narrative obligation added to `episodeOfCare.identifier.system` and `episodeOfCare.identifier.value`. - Narrative obligation removed from `episodeOfCare.identifier` and `episodeOfCare[lpr3Identifier].identifier`. -### 6. medcom-core-media +## 6. medcom-core-media - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. - Narrative obligation added to `id` and `status`. @@ -53,7 +51,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi `MedComCoreCareTeam`, `MedComCorePatient`, `Device`, or `DkCoreRelatedPerson`. - `content` added MS. Requirements for underlying content elements removed. -### 7. medcom-core-observation +## 7. medcom-core-observation - `identifier` requirements removed. - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. `text.status` and `text.div` added MS. @@ -65,7 +63,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi - `valueAttachment` extension added. - Narrative obligation added to `id`, `status`, `subject`, and `performer`. -### 8. medcom-core-organization +## 8. medcom-core-organization - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. - `identifier` added MS. @@ -73,7 +71,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi - Narrative obligation removed from `identifier[SOR-ID]`. - Narrative obligation added to `identifier[SOR-ID].system`, `identifier[SOR-ID].value`, and `id`. -### 9. medcom-core-patient +## 9. medcom-core-patient - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. - `identifier[cpr].system`, `identifier[cpr].value`, @@ -89,7 +87,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi `name[official].given`, `name[official].family`, and `name[official].use`. - Narrative obligation removed from `identifier[cpr]`, `identifier[x-ecpr]`, and `identifier[d-ecpr]`. -### 10. medcom-core-practitioner +## 10. medcom-core-practitioner - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. - `name.given` and `name.family` added MS. @@ -97,7 +95,7 @@ The detailed, profile-specific changes are listed in the sections below. In addi - Narrative obligation removed from `name`. - Narrative obligation added to `name.given` and `name.family`. -### 11. medcom-core-practitionerrole +## 11. medcom-core-practitionerrole - Parent changed to `DkCorePractitionerRole`. - `id` changed to `1..1 MS`. - `text` changed to `1..1 MS`. @@ -107,8 +105,8 @@ The detailed, profile-specific changes are listed in the sections below. In addi `code.coding.system`, `code.coding.code`, and `code.text`. - Invariant `medcom-core-practitionerrole-code-xor-text` added. -### 12. medcom-messaging-contactpoint +## 12. medcom-messaging-contactpoint - Profile removed. -### 13. medcom-observation-value-attachment-extension +## 13. medcom-observation-value-attachment-extension - Extension added to represent attachments in observations. From eb5755207d6946fe34ea69f3bcb45619e5c9ce6d Mon Sep 17 00:00:00 2001 From: SGA-MedCom Date: Tue, 13 Jan 2026 14:35:46 +0100 Subject: [PATCH 40/40] Update MedComCoreOrganization.fsh --- input/fsh/MedComCoreOrganization.fsh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/input/fsh/MedComCoreOrganization.fsh b/input/fsh/MedComCoreOrganization.fsh index 0f9a165..60adc61 100644 --- a/input/fsh/MedComCoreOrganization.fsh +++ b/input/fsh/MedComCoreOrganization.fsh @@ -7,7 +7,7 @@ Description: "A formally recognized organizations within danish healthcare, regi * text ^short = "The narrative text SHALL always be included when exchanging a MedCom FHIR Bundle." * text.status MS * text.div MS -* identifier MS +* identifier * identifier[SOR-ID] ^short = "Sundhedsvæsenets Organisationsregister (SOR) identifier" * identifier[SOR-ID] 1.. * identifier[SOR-ID] MS