Skip to content
Merged
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
40 commits
Select commit Hold shift + click to select a range
b9bd237
Update MedComCorePractitionerRole.fsh
SGA-MedCom Nov 17, 2025
47de9e0
Edited version
RikkeVestesen Nov 18, 2025
75243d4
Added 1.. on id
RikkeVestesen Nov 18, 2025
3a9f980
Updated to DkCorePatient in DiagnosticReport
RikkeVestesen Nov 21, 2025
98aa182
Added obligations for MedComCoreContactExtension
RikkeVestesen Nov 25, 2025
f6eead9
Updated observation.subject to reference only DkCorePatient
RikkeVestesen Nov 26, 2025
2da0743
Corrected observation
RikkeVestesen Nov 26, 2025
527480f
Removed comment
RikkeVestesen Nov 26, 2025
edba78a
Removed MS og all individual code choises in Observation
RikkeVestesen Nov 26, 2025
f5ecefd
Removed identifier requirement that it has to be UUIDv4
RikkeVestesen Nov 26, 2025
7d20000
Updated
RikkeVestesen Nov 28, 2025
57bb97f
Updated
RikkeVestesen Nov 28, 2025
50dbd3d
Updated PractitionerRole
RikkeVestesen Dec 1, 2025
5afe5a8
Adde MS to SOR identififer value + system
RikkeVestesen Dec 1, 2025
6e91106
Added medcom local value attachment extension
RikkeVestesen Dec 1, 2025
9d9e553
Updated texts in index and profiles.
RikkeVestesen Dec 2, 2025
61650ec
Updated texts
RikkeVestesen Dec 2, 2025
e2ff4b5
Update StructureDefinition-medcom-core-diagnosticreport-intro.md
RikkeVestesen Dec 3, 2025
af49ad5
Update sushi-config.yaml
RikkeVestesen Dec 3, 2025
66a708e
Update MedComCorePractitioner.fsh
RikkeVestesen Dec 3, 2025
69c6589
Updated careteam and practitionerRole
RikkeVestesen Dec 3, 2025
f9c50c3
Updated dependency to terminology
RikkeVestesen Dec 4, 2025
de60ef7
Updated according to review
RikkeVestesen Dec 10, 2025
2469cca
Corrected version
RikkeVestesen Dec 10, 2025
cf32f11
Testing build-site
RikkeVestesen Dec 11, 2025
8624582
Update sushi-config.yaml
RikkeVestesen Dec 11, 2025
4f9556f
removed test
RikkeVestesen Dec 12, 2025
937971e
Updated based on review
RikkeVestesen Dec 15, 2025
713f13b
Update MedComCorePatient.fsh
RikkeVestesen Dec 15, 2025
a1605cd
Update index.md
RikkeVestesen Dec 15, 2025
51680dc
Corrected wording
RikkeVestesen Jan 5, 2026
6d9b171
Removed MedComMessagingContactPoint from patient telecom
RikkeVestesen Jan 5, 2026
5125cb3
Update sushi-config.yaml
RikkeVestesen Jan 5, 2026
49a0e53
Delete MedComMessagingContactPoint.fsh
RikkeVestesen Jan 6, 2026
7ec5be5
Added sushi ignore errors and added 1.. on text element on profiles
RikkeVestesen Jan 8, 2026
1e4897f
Added 1.. to PractitionerRole code.coding.system and -value
RikkeVestesen Jan 9, 2026
71f43bf
Corrected errors
RikkeVestesen Jan 13, 2026
0054013
Added release notes
RikkeVestesen Jan 13, 2026
b72795d
Corrected release notes
RikkeVestesen Jan 13, 2026
eb57552
Update MedComCoreOrganization.fsh
SGA-MedCom Jan 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion _build.bat
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
6 changes: 4 additions & 2 deletions input/fsh/LPR3Identifier.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
4 changes: 2 additions & 2 deletions input/fsh/MedComCoreCareTeam.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,13 +2,13 @@ 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
* 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)
Expand Down
4 changes: 3 additions & 1 deletion input/fsh/MedComCoreContactExtension.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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"
Expand Down
35 changes: 23 additions & 12 deletions input/fsh/MedComCoreDiagnosticRepport.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,37 @@ Parent: DiagnosticReport
Id: medcom-core-diagnosticreport
Title: "MedComCoreDiagnosticReport"
Description: "Report containing all observation results."
* identifier 1..1 MS
* identifier.value 1..1 MS
* identifier.value obeys medcom-uuidv4
* identifier ^short = "The Diagnostic Report identifier"
* 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"
* status 1..1 MS
* status from $StatusCodeDiagnosticReport
* status ^short = "registered | partial | preliminary | final | corrected | cancelled | entered-in-error"
* 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
//* 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)
10 changes: 6 additions & 4 deletions input/fsh/MedComCoreEncounter.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -23,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(MedComCorePatient)
* subject only Reference(DkCorePatient)
* subject ^type.aggregation = #bundled
* account ..0
* serviceProvider only Reference(MedComCoreOrganization)
Expand All @@ -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
Expand Down
30 changes: 19 additions & 11 deletions input/fsh/MedComCoreMedia.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +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 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
Expand Down
36 changes: 24 additions & 12 deletions input/fsh/MedComCoreObservation.fsh
Original file line number Diff line number Diff line change
@@ -1,22 +1,34 @@


Profile: MedComCoreObservation
Parent: DkCoreObservation
Id: medcom-core-observation
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"
Description: "Observation profile."
* 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 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] ^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(MedComCorePatient)
* subject only Reference(DkCorePatient)
* subject ^type.aggregation = #bundled
* note MS
* note ^short = "A comment on the individual result (Danish: Analysekommentar)"
* 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 ---
* extension contains
$obsExtValueAttachment named valueAttachmentR5 0..*
* extension[valueAttachmentR5].value[x] only Attachment */

* insert ProducerShallPutInNarrative(id)
* insert ProducerShallPutInNarrative(status)
* insert ProducerShallPutInNarrative(subject)
* insert ProducerShallPutInNarrative(performer)
10 changes: 7 additions & 3 deletions input/fsh/MedComCoreOrganization.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,18 +2,22 @@ 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
* 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)
* 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
Expand Down
33 changes: 21 additions & 12 deletions input/fsh/MedComCorePatient.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -23,26 +29,29 @@ 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])
* 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)
* 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
Expand Down
7 changes: 5 additions & 2 deletions input/fsh/MedComCorePractitioner.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@ 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
* 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
Expand Down
25 changes: 18 additions & 7 deletions input/fsh/MedComCorePractitionerRole.fsh
Original file line number Diff line number Diff line change
@@ -1,34 +1,44 @@
Profile: MedComCorePractitionerRole
Parent: 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
* 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
* practitioner only Reference(MedComCorePractitioner)
* practitioner MS
* code MS
* practitioner 1.. MS
* code 1.. MS
* code from $PractitionerRoles (example)
* code.coding MS
* code.coding.system 1.. MS
* code.coding.code 1.. MS
* code.text MS
* organization MS
* organization 1.. 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)
* insert ProducerShallPutInNarrative(code.coding)
* insert ProducerShallPutInNarrative(code.coding.system)
* insert ProducerShallPutInNarrative(code.coding.code)
* 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"
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
Expand All @@ -37,4 +47,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
* code = $PractitionerRole#sygeplejerske
* organization = Reference(12ee0dde-a672-462f-820d-5efe832d73c9)
Loading