Skip to content
Merged
Show file tree
Hide file tree
Changes from 22 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
2 changes: 1 addition & 1 deletion input/fsh/MedComCoreCareTeam.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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)
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
7 changes: 6 additions & 1 deletion input/fsh/MedComCoreDiagnosticRepport.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -13,7 +18,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
Expand Down
2 changes: 1 addition & 1 deletion input/fsh/MedComCoreEncounter.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
5 changes: 5 additions & 0 deletions input/fsh/MedComCoreMedia.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
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 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)
7 changes: 5 additions & 2 deletions input/fsh/MedComCoreOrganization.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,17 @@ 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)
Expand Down
9 changes: 6 additions & 3 deletions input/fsh/MedComCorePatient.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand Down
5 changes: 4 additions & 1 deletion input/fsh/MedComCorePractitioner.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
18 changes: 13 additions & 5 deletions input/fsh/MedComCorePractitionerRole.fsh
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
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
Expand All @@ -8,27 +8,34 @@ Description: "PractitionerRole resource used to describe the role of a healthcar
* 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.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.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 +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
* code = $PractitionerRole#sygeplejerske
* organization = Reference(12ee0dde-a672-462f-820d-5efe832d73c9)
19 changes: 19 additions & 0 deletions input/fsh/MedComObservationValueAttachmentExtension.fsh
Original file line number Diff line number Diff line change
@@ -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
7 changes: 6 additions & 1 deletion input/fsh/aliases.fsh
Original file line number Diff line number Diff line change
Expand Up @@ -14,4 +14,9 @@ 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
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
Original file line number Diff line number Diff line change
@@ -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.
Please refer to the tab "Snapshot Table" below for the definition of the required content of a MedComCoreOrganization.
Original file line number Diff line number Diff line change
@@ -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.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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.
18 changes: 4 additions & 14 deletions input/pagecontent/StructureDefinition-medcom-core-media-intro.md
Original file line number Diff line number Diff line change
@@ -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
Expand All @@ -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)

<!-- Only an attachment of the following formats must be included:

* Adobe Portable Document Format (PDF)
* Graphics Interchange Format (gif)
* JPEG Image
* Portable Network Graphics (PNG)
* Tag Image File Format (tiff) -->

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.
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.
Original file line number Diff line number Diff line change
@@ -1,20 +1,20 @@
>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. <a href="http://medcomfhir.dk/ig/terminology/ValueSet-medcom-core-observation-status.html"> Click here se the status codes.</a>

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. <a href="http://medcomfhir.dk/ig/terminology/ValueSet-medcom-core-observation-status.html"> Click here se the status codes.</a>

#### 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 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.
* SKS codes are classifications for use in documenting patients and healthcare services.SKS have a few observation codes in use, most are found in the ‘R’ Hierarchy - see e.g. https://medinfo.dk/sks/brows.php.
* 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

#### 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.
Loading