diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 75784198..2fbfb8cc 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -6,9 +6,7 @@ name: CI (FHIR Validation) on: # Triggers the workflow on push or pull request events but only for the master branch push: - branches: [ master ] pull_request: - branches: [ master ] # Allows you to run this workflow manually from the Actions tab workflow_dispatch: @@ -29,7 +27,7 @@ jobs: # Java and .NET are already installed on ubuntu-latest - name: Firely.Terminal (GitHub Actions) - uses: FirelyTeam/firely-terminal-pipeline@v0.3.5 + uses: FirelyTeam/firely-terminal-pipeline@v0.4.0 with: PATH_TO_CONFORMANCE_RESOURCES: Resources/fsh-generated/resources/ #PATH_TO_EXAMPLES: Examples @@ -42,7 +40,7 @@ jobs: SIMPLIFIER_PASSWORD: ${{ secrets.SIMPLIFIER_PASSWORD }} SUSHI_ENABLED: true SUSHI_OPTIONS: Resources/ - SUSHI_VERSION: 2.10.2 + SUSHI_VERSION: 3.5.0 EXPECTED_FAILS: VALIDATION_CONFORMANCE_DOTNET VALIDATION_CONFORMANCE_JAVA VALIDATION_EXAMPLES_JAVA - name: Add & Commit diff --git a/ImplementationGuide/ImplementierungsleitfadenIsiK_Dokumentenaustausch.json b/ImplementationGuide/ImplementierungsleitfadenIsiK_Dokumentenaustausch.json index bf3d1e95..0118d698 100644 --- a/ImplementationGuide/ImplementierungsleitfadenIsiK_Dokumentenaustausch.json +++ b/ImplementationGuide/ImplementierungsleitfadenIsiK_Dokumentenaustausch.json @@ -157,6 +157,11 @@ "generation": "markdown" } ] + }, + { + "nameUrl": "ImplementationGuide/markdown/Datenobjekte_ISiKBinary.md", + "title": "ISiKBinary", + "generation": "markdown" } ] } diff --git a/ImplementationGuide/markdown/AkteureUndInteraktionen-Akteure.md b/ImplementationGuide/markdown/AkteureUndInteraktionen-Akteure.md index 875ba5ec..fd39747c 100644 --- a/ImplementationGuide/markdown/AkteureUndInteraktionen-Akteure.md +++ b/ImplementationGuide/markdown/AkteureUndInteraktionen-Akteure.md @@ -1,8 +1,6 @@ ## Akteure ### Dokumentenserver Das bestätigungsrelevante System nimmt die Rolle des Dokumentenservers ein. Ein Dokumentenserver nimmt Dokumente von Clients zur Speicherung/Archivierung/Verwaltung entgegen und erlaubt Clients die Suche nach und den Abruf von Dokumenten. -Dieses ISiK-Modul legt fest, welche Suchkriterien mindestens implementiert werden müssen und welche Kriterien darüber hinaus optional bereitgestellt werden können. -Um Clients die Herstellung von Patienten- und Encounterkontext zu ermöglichen, müssen weiterhin die im Basismodul Stufe 3 festgelegten Interaktionen auf den Datenobjekten ["Patient"](https://simplifier.net/guide/implementierungsleitfaden-isik-basismodul-stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Patient?version=current#ImplementationGuide-markdown-Patient-Patient-Interaktionen) und ["Kontakt/Fall (Encounter)"](https://simplifier.net/guide/implementierungsleitfaden-isik-basismodul-stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Patient?version=current#ImplementationGuide-markdown-Patient-Patient-Interaktionen) implementiert werden. Der Dokumentenserver nimmt im IHE-MHD-Kontext die Rollen [Document Recipient](https://profiles.ihe.net/ITI/MHD/1331_actors_and_transactions.html#133113-document-recipient) und [Document Responder](https://profiles.ihe.net/ITI/MHD/1331_actors_and_transactions.html#133114-document-responder) ein und implementiert die IHE-MHD-Interaktionen * Simplified Publish [ITI-105] (verpflichtend) diff --git a/ImplementationGuide/markdown/AkteureUndInteraktionen-Dokumentenabfrage.md b/ImplementationGuide/markdown/AkteureUndInteraktionen-Dokumentenabfrage.md index 473af0c6..faf2a6e6 100644 --- a/ImplementationGuide/markdown/AkteureUndInteraktionen-Dokumentenabfrage.md +++ b/ImplementationGuide/markdown/AkteureUndInteraktionen-Dokumentenabfrage.md @@ -61,16 +61,8 @@ Die Vereinbarungen gelten uneingeschränkt. Es gelten die Vereinbarungen gemäß {{pagelink:ImplementationGuide/markdown/CapabilityStatement.md}} #### [2:3.67.5 Security Considerations](https://profiles.ihe.net/ITI/MHD/ITI-67.html#23675-security-considerations) -Für Hinweise zur Implementierung von Autorisation und Authentifikation im ISiK-Kontext, siehe [Modul ISiK-Sicherheit](https://simplifier.net/isik-sicherheit-v3) - +Für Hinweise zur Implementierung von Autorisation und Authentifikation im ISiK-Kontext, siehe [Modul ISiK-Sicherheit](https://simplifier.net/isik-sicherheit-v3). -#### Beispiele -* Suche anhand von Patientenkontext (PID) und Dokumentendatum: - `[base]/DocumentReference?patient.identifier=1234&creation=gt2021-10-06` -* Suche nach vorläufigen Endoskopiebefunden (anhand KDL-Dokumenttyp und `docStatus`): - `[base]/DocumentReference?type=http://dvmd.de/fhir/CodeSystem/kdl|DG02010&doc-status=preliminary` -* Suche von Dokumenten anhand der Nummer des Abrechnungsfalles: - `[base]/DocumentReference?encounter.account:identifier=56789` ### Dokumentenzugriff (IHE MHD ITI-68 (Retrieve Document)) diff --git a/ImplementationGuide/markdown/AkteureUndInteraktionen-Interaktion-Dokumentenbereitstellung.md b/ImplementationGuide/markdown/AkteureUndInteraktionen-Interaktion-Dokumentenbereitstellung.md index b9618038..d9283c19 100644 --- a/ImplementationGuide/markdown/AkteureUndInteraktionen-Interaktion-Dokumentenbereitstellung.md +++ b/ImplementationGuide/markdown/AkteureUndInteraktionen-Interaktion-Dokumentenbereitstellung.md @@ -3,14 +3,14 @@ Vor der Bereitstellung von Dokumenten muss ein Client einen Patienten- und Encounterkontext herstellen, damit das Dokument serverseitig anhand der Patient- und Encounter-Verlinkungen in der DocumentReference korrekt zugeordnet werden kann. Zur Herstellung des Kontextes sind folgende Verfahren möglich: -1. **SMARTApp Launch**: Wenn der Aufruf der App im Rahmen des SMART-Frameworks erfolgt, kennt der Client bereits beim Start den aktuellen Patienten- und ggf. den Encounterkontext. Dabei wählt ein Anwender im Primärsystem (Server) einen Patienten und Fall aus und startet in diesem Kontext die App. Referenzen auf Patient und Encounter werden im Zuge der Authorisierung vom Server an Client übermittelt. (Siehe Modul [Sicherheit - Launch Context und Scopes](https://simplifier.net/guide/isik-sicherheit/ImplementationGuide-markdown-ScopesAndLaunchContext?version=current)). -2. **Bekannte Fallnummer**: Der Client kennt die (Abrechnungs-)Fallnummer (z.B. durch das Einscannen eines Barcodes, oder beim Mapping von V2 auf FHIR aus PV1.#19). Der Client sucht den Encounter anhand der Fallnummer (`[base]/Encounter?account:identifier=`). Da unter einer Abrechnungs-Fallnummer mehrere Encounter (Besuche) zusammengefasst werden können (z.B. vorstationär + stationär + nachstationär), sollte als zusätzliches Suchkriterium entweder ein Datum/Zeitraum oder eine Selektion auf `Encounter.status` verwendet werden. Wenn ein zutreffender Encounter gefunden wurde, kann der Patientenkontext aus der subject-Referenz des Encounters entnommen werden. +1. **SMARTApp Launch**: Wenn der Aufruf der App im Rahmen des SMART-Frameworks erfolgt, kennt der Client bereits beim Start den aktuellen Patienten- und ggf. den Encounterkontext. Dabei wählt ein Anwender im Primärsystem (Server) einen Patienten und Fall aus und startet in diesem Kontext die App. Referenzen auf Patient und Encounter werden im Zuge der Autorisierung vom Server an Client übermittelt. (Siehe Modul [Sicherheit - Launch Context und Scopes](https://simplifier.net/guide/isik-sicherheit/ImplementationGuide-markdown-ScopesAndLaunchContext?version=current)). +2. **Bekannte Fallnummer**: Der Client kennt die (Abrechnungs-)Fallnummer (z.B. durch das Einscannen eines Barcodes, oder beim Mapping von V2 auf FHIR aus PV1.#19). Der Client sucht den Encounter im Patienten-führenden System anhand der Fallnummer (`[base]/Encounter?account:identifier=`). Da unter einer Abrechnungs-Fallnummer mehrere Encounter (Besuche) zusammengefasst werden können (z.B. vorstationär + stationär + nachstationär), sollte als zusätzliches Suchkriterium entweder ein Datum/Zeitraum oder eine Selektion auf `Encounter.status` verwendet werden. Wenn ein zutreffender Encounter gefunden wurde, kann der Patientenkontext aus der subject-Referenz des Encounters entnommen werden. 3. **Arbeitsliste**: Der Client ruft auf dem Server eine Arbeitsliste ab (z.B. Liste aller Encounter, die aktuell auf einer bestimmten Station/Ambulanz stattfinden, Liste aller ServiceRequests/Tasks, die durch den Client abgearbeitet werden müssen (aktuell noch nicht im Scope der ISiK-Spezifikationen!) und etabliert den Kontext, nachdem der Benutzer einen Eintrag der Liste ausgewählt hat. -4. **Manuelle Auswahl**. Nach dem Start des Clients verwendet der Benutzer eine Suchmaske, in der anhand von Patientennummer oder anderer demografischer Daten gesucht werden kann. Der Client verwendet die [Patient-Interaktionen des ISiK-Basismoduls](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Patient?version=current#ImplementationGuide-markdown-Patient-Patient-Interaktionen), um auf dem Server nach zutreffenden Patienten zu suchen. Der Anwender wählt den gesuchten Patienten aus der Liste der Suchtreffer aus. Im Anschluss listet der Client, mithílfe der [Encounter-Interaktionen des ISiK-Basismoduls](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Kontakt?version=current#I-markdown-KontaktGesundheitseinrichtung-Kontakt-Interaktionen), die relevanten Besuche des ausgewählten Patienten auf. (Anm.: Welche Besuche als "relevant" erachtet werden, liegt im Ermessen des Clients. Es könnte z.B. anhand von `Encounter.period`, `Encounter.class` und/oder `Encounter.status` gefiltert werden). Der Anwender wählt den zutreffenden Encounter aus. +4. **Manuelle Auswahl**. Nach dem Start des Clients verwendet der Benutzer eine Suchmaske, in der anhand von Patientennummer oder anderer demografischer Daten gesucht werden kann. Der Client verwendet die [Patient-Interaktionen des ISiK-Basismoduls](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Patient?version=current#ImplementationGuide-markdown-Patient-Patient-Interaktionen), um auf dem Server nach zutreffenden Patienten zu suchen. Der Anwender wählt den gesuchten Patienten aus der Liste der Suchtreffer aus. Im Anschluss listet der Client, mithilfe der [Encounter-Interaktionen des ISiK-Basismoduls](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Kontakt?version=current#I-markdown-KontaktGesundheitseinrichtung-Kontakt-Interaktionen), die relevanten Besuche des ausgewählten Patienten auf. (Anm.: Welche Besuche als "relevant" erachtet werden, liegt im Ermessen des Clients. Es könnte z.B. anhand von `Encounter.period`, `Encounter.class` und/oder `Encounter.status` gefiltert werden). Der Anwender wählt den zutreffenden Encounter aus. | Hinweis | Gefahr fehlerhafter Zuordnung!| |---------|---------------------| -| {{render:ImplementationGuide-Images-ig-bilder-Warning}} | Die manuelle Auswahl von Patienten- und Fallkontext durch einen Benutzer ist fehleranfällig. Clients müssen geeigente Vorkehrungen und Plausibilitätsprüfungen implementieren um Falschzuordnungen zu verhindern.| +| {{render:ImplementationGuide-Images-ig-bilder-Warning}} | Die manuelle Auswahl von Patienten- und Fallkontext durch einen Benutzer ist fehleranfällig. Clients müssen geeignete Vorkehrungen und Plausibilitätsprüfungen implementieren um Falschzuordnungen zu verhindern.| ### Dokumentenübermittlung (IHE MHD ITI-105 (Simplified Publish)) diff --git a/ImplementationGuide/markdown/Datenobjekte.md b/ImplementationGuide/markdown/Datenobjekte.md index 73384efe..21d4c5bb 100644 --- a/ImplementationGuide/markdown/Datenobjekte.md +++ b/ImplementationGuide/markdown/Datenobjekte.md @@ -1,10 +1,13 @@ # Datenobjekte -Folgende Datenobjekte und Interaktionen aus dem Modul [ISiK Basis Stufe 3](https://simplifier.net/guide/implementierungsleitfaden-isik-basismodul-stufe-3?version=current) sind in diesem Modul bestätigungsrelevant: +Folgende Datenobjekte aus dem Modul [ISiK Basis Stufe 3](https://simplifier.net/guide/implementierungsleitfaden-isik-basismodul-stufe-3?version=current) werden in diesem Modul verwendet: * [Patient](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Patient?version=current) * [Kontakt/Fall (Encounter)](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Kontakt?version=current) * [Binary](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Binary?version=current) - + +Die Verwendung in diesem Modul bedeutet: +Wenn dieses Modul auf Datenobjekte aus dem Basismodul referenziert, dann MÜSSEN die referenzierten FHIR-Ressourcen konform zu den Vorgaben aus dem Basismodul sein. +Die Referenzierung von im Basismodul spezifizierten Datenobjekten, bedeutet nicht, dass die Interaktionen für die entsprechenden Datenobjekte aus dem Basismodul auch im Modul Dokumentenaustausch bestätigungsrelevant sind. Darüber hinaus gelten in diesem Modul folgende Datenobjekt-spezifische Festlegungen: diff --git a/ImplementationGuide/markdown/Datenobjekte_ISiKBinary.md b/ImplementationGuide/markdown/Datenobjekte_ISiKBinary.md new file mode 100644 index 00000000..ac14d2ad --- /dev/null +++ b/ImplementationGuide/markdown/Datenobjekte_ISiKBinary.md @@ -0,0 +1,7 @@ +## ISiKBinary [(Binary)](https://hl7.org/fhir/R4/binary.html) + +ISiKBinary dient im Kontext des Dokumentenaustauschs dazu entsprechende Binärdateien über einen Dokumentenserver bereitzustellen (siehe {{pagelink:ImplementationGuide/markdown/AkteureUndInteraktionen-Dokumentenabfrage.md, text:Akteure und Interaktionen}}). + +### FHIR-Profil + +Es gelten bis auf weiteres die Vorgaben des ISiK Basismoduls für das Profil ['ISiKBinary'](https://simplifier.net/guide/Implementierungsleitfaden-ISiK-Basismodul-Stufe-3/ImplementationGuide-markdown-Datenobjekte-Datenobjekte-Binary?version=current). \ No newline at end of file diff --git a/ImplementationGuide/markdown/DecisionLog.md b/ImplementationGuide/markdown/DecisionLog.md new file mode 100644 index 00000000..a3abb4b0 --- /dev/null +++ b/ImplementationGuide/markdown/DecisionLog.md @@ -0,0 +1,16 @@ +# Decision Log + +---- +Version: 3.0.1 + +Datum 15.12.2023 + +* Problem: Die DMS müssen keine Patienten- und Encounterabfragen unterstützen können. + * Lösung: Es werden entsprechende Interaktionen aus dem CapabilityStatement entfernt + +Datum: 11.12.2023 + +* Problem: Für das Modul Dokumentenaustausch sind die Abhängigkeit der Referenzierten Ressourcen Encounter und Patient zum ISIK Basismodul nicht klar herausgearbeitet. + * Option A (ggf. mit Nennung der Risiken): Anforderungen zur Nutzung der Ressourcen aus ISIK Basismodul präzisieren + * Option B (ggf. mit Nennung der Risiken): Keine Änderung, damit bleiben offene Fragen zur Nutzung von Basismodul Ressourcen unklar + * Entscheidung: Option A - umgesetzt hier: Anforderungen zur Nutzung der Ressourcen aus ISIK Basismodul präzisiert \ No newline at end of file diff --git a/ImplementationGuide/markdown/DocumentReference_Interaktionen.md b/ImplementationGuide/markdown/DocumentReference_Interaktionen.md index a1c10aa1..69a43941 100644 --- a/ImplementationGuide/markdown/DocumentReference_Interaktionen.md +++ b/ImplementationGuide/markdown/DocumentReference_Interaktionen.md @@ -93,14 +93,3 @@ Die in IHE-MHD geltende Einschränkung, dass Clients bei allen Suchen mindestens Anwendungshinweise: Weitere Informationen zur Suche nach Reference-type Parametern finden sich in der [FHIR-Basisspezifikation - Abschnitt "Reference Search"](https://www.hl7.org/fhir/R4/search.html#reference). -1. Der verkettete Suchparameter "encounter.account:identifier" (zur Suche anhand der Abrechnungsfallnummer) MUSS unterstützt werden: - - Beispiele: - - ```GET [base]/DocumentReference?encounter.account:identifier=http://mein-krankenhaus.example/fhir/sid/fallnummern|7567867``` - - ```GET [base]/DocumentReference?encounter.account:identifier=7567867``` - - Anwendungshinweise: Weitere Informationen zur Suche nach Reference-type Parametern, insbesondere in Verbindung mit dem `:identifier`-Modifier finden sich in der [FHIR-Basisspezifikation - Abschnitt "Reference Search"](https://www.hl7.org/fhir/R4/search.html#reference). - - Weitere Informationen zur Suche nach verketteten Parametern finden sich in der [FHIR-Basisspezifikation - Abschnitt "Chained Parameters"](https://hl7.org/fhir/R4/search.html#chaining). diff --git a/ImplementationGuide/markdown/Einfuehrung.md b/ImplementationGuide/markdown/Einfuehrung.md index a649d553..70cdf99c 100644 --- a/ImplementationGuide/markdown/Einfuehrung.md +++ b/ImplementationGuide/markdown/Einfuehrung.md @@ -1,9 +1,9 @@ gematik logo ---- -Version: 3.0.0 +Version: 3.0.1 -Datum: 1.7.2023 +Datum: 05.01.2024 Status: Aktiv diff --git a/ImplementationGuide/markdown/ReleaseNotes.md b/ImplementationGuide/markdown/ReleaseNotes.md index 6c619cb2..cd98b51f 100644 --- a/ImplementationGuide/markdown/ReleaseNotes.md +++ b/ImplementationGuide/markdown/ReleaseNotes.md @@ -6,6 +6,17 @@ Die erste Ziffer X bezeichnet ein Major-Release und regelt die Gültigkeit von R Offene Punkte und bekannte Probleme siehe [GitHub Issues](https://github.com/gematik/ISiK-Dokumentenaustausch/issues?q=is%3Aissue+is%3Aopen+label%3A%22offene+Punkte+Ballot%22) +Version: 3.0.1 + +Datum: 05.01.2024 + +* Update Dependency zu Basismodul (Technical Correction 3.0.1) +* Nutzung der ISiKBinary präzisiert und im CapabilityStatement entsprechend korrigiert: add CpS statement and reference regarding ISIK binary PTDATA-605 by @f-peverali in https://github.com/gematik/spec-ISiK-Dokumentenaustausch/pull/157 +* Anforderungen zur Nutzung der Ressourcen aus ISIK Basismodul präzisiert: Feature/ptdata 773 anforderungen anpassen basis ressourcen by @f-peverali in https://github.com/gematik/spec-ISiK-Dokumentenaustausch/pull/163 +* rm all interaction on Encounter + Patient in CpS by @f-peverali in https://github.com/gematik/spec-ISiK-Dokumentenaustausch/pull/165 + + +---- Version: 3.0.0 Datum: 01.07.2023 diff --git a/Resources/fsh-generated/resources/Bundle-Suchergebnis-Beispiel.json b/Resources/fsh-generated/resources/Bundle-Suchergebnis-Beispiel.json index 73682045..772bba10 100644 --- a/Resources/fsh-generated/resources/Bundle-Suchergebnis-Beispiel.json +++ b/Resources/fsh-generated/resources/Bundle-Suchergebnis-Beispiel.json @@ -97,8 +97,8 @@ "practiceSetting": { "coding": [ { - "code": "408467006", - "system": "http://snomed.info/sct" + "code": "ALLG", + "system": "http://ihe-d.de/CodeSystems/AerztlicheFachrichtungen" } ] }, diff --git a/Resources/fsh-generated/resources/CapabilityStatement-ISiK-capabilityStatement-dokumentenaustausch-server.json b/Resources/fsh-generated/resources/CapabilityStatement-ISiK-capabilityStatement-dokumentenaustausch-server.json index 4e40af3c..c47df5fc 100644 --- a/Resources/fsh-generated/resources/CapabilityStatement-ISiK-capabilityStatement-dokumentenaustausch-server.json +++ b/Resources/fsh-generated/resources/CapabilityStatement-ISiK-capabilityStatement-dokumentenaustausch-server.json @@ -4,11 +4,11 @@ "url": "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/CapabilityStatement/dokumentenaustausch-server", "status": "active", "experimental": false, - "version": "3.0.0", + "version": "3.0.1", "publisher": "gematik GmbH", - "date": "2023-07-01", + "date": "2024-01-05", "implementationGuide": [ - "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/ImplementationGuide|3.0.0" + "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/ImplementationGuide|3.0.1" ], "name": "ISiKCapabilityStatementDokumentenaustauschServer", "title": "ISiK CapabilityStatement Dokumentenaustausch Server", @@ -34,228 +34,6 @@ { "mode": "server", "resource": [ - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "type": "Patient", - "supportedProfile": [ - "https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKPatient" - ], - "interaction": [ - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "code": "read" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "code": "search-type" - } - ], - "searchParam": [ - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "_id", - "definition": "http://hl7.org/fhir/SearchParameter/Resource-id", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "identifier", - "definition": "http://hl7.org/fhir/SearchParameter/Patient-identifier", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "family", - "definition": "http://hl7.org/fhir/SearchParameter/individual-family", - "type": "string" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "given", - "definition": "http://hl7.org/fhir/SearchParameter/individual-given", - "type": "string" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "birthdate", - "definition": "hhttp://hl7.org/fhir/SearchParameter/individual-birthdate", - "type": "date" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "gender", - "definition": "hhttp://hl7.org/fhir/SearchParameter/individual-gender", - "type": "token" - } - ] - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "type": "Encounter", - "supportedProfile": [ - "https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKKontaktGesundheitseinrichtung" - ], - "interaction": [ - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "code": "read" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "code": "search-type" - } - ], - "searchParam": [ - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "_id", - "definition": "http://hl7.org/fhir/SearchParameter/Resource-id", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "identifier", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-identifier", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "status", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-status", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "class", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-class", - "type": "token" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "type", - "definition": "http://hl7.org/fhir/SearchParameter/clinical-patient", - "type": "reference" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "subject", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-subject", - "type": "reference" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "part-of", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-part-of", - "type": "reference" - }, - { - "extension": [ - { - "url": "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation", - "valueCode": "SHALL" - } - ], - "name": "date", - "definition": "http://hl7.org/fhir/SearchParameter/Encounter-date", - "type": "date" - } - ] - }, { "extension": [ { diff --git a/Resources/fsh-generated/resources/DocumentReference-dok-beispiel-server.json b/Resources/fsh-generated/resources/DocumentReference-dok-beispiel-server.json index 88df03a6..0323957f 100644 --- a/Resources/fsh-generated/resources/DocumentReference-dok-beispiel-server.json +++ b/Resources/fsh-generated/resources/DocumentReference-dok-beispiel-server.json @@ -84,8 +84,8 @@ "practiceSetting": { "coding": [ { - "code": "408467006", - "system": "http://snomed.info/sct" + "code": "ALLG", + "system": "http://ihe-d.de/CodeSystems/AerztlicheFachrichtungen" } ] }, diff --git a/Resources/fsh-generated/resources/OperationDefinition-UpdateMetadata.json b/Resources/fsh-generated/resources/OperationDefinition-UpdateMetadata.json index b7841675..2cd58bec 100644 --- a/Resources/fsh-generated/resources/OperationDefinition-UpdateMetadata.json +++ b/Resources/fsh-generated/resources/OperationDefinition-UpdateMetadata.json @@ -3,7 +3,7 @@ "id": "UpdateMetadata", "status": "active", "publisher": "gematik GmbH", - "date": "2023-07-01", + "date": "2024-01-05", "url": "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/OperationDefinition/UpdateMetadata", "title": "Update document metadata", "kind": "operation", diff --git a/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenMetadaten.json b/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenMetadaten.json index 0bd8915f..4dc5539d 100644 --- a/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenMetadaten.json +++ b/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenMetadaten.json @@ -2,10 +2,12 @@ "resourceType": "StructureDefinition", "id": "ISiKDokumentenMetadaten", "url": "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/StructureDefinition/ISiKDokumentenMetadaten", - "version": "3.0.0", + "version": "3.0.1", "name": "ISiKDokumentenMetadaten", "title": "Erforderliche Metadaten für Dokumentenaustausch in ISiK", "status": "active", + "experimental": false, + "date": "2024-01-05", "publisher": "gematik GmbH", "fhirVersion": "4.0.1", "mapping": [ @@ -280,7 +282,7 @@ "id": "DocumentReference.subject", "path": "DocumentReference.subject", "short": "Patientenbezug des Dokumentes", - "comment": "Siehe Beschreibung in der [FHIR Kernspezifikation](http://hl7.org/fhir/documentreference-definitions.html#DocumentReference.subject)", + "comment": "Im ISIK-Kontext MUSS der referenzierte Patient konform zum [ISIKPatient](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKPatient) des Basismoduls sein.\n \n Für sonstige Kontexte siehe [FHIR Kernspezifikation](http://hl7.org/fhir/documentreference-definitions.html#DocumentReference.subject)", "min": 1, "type": [ { @@ -440,7 +442,7 @@ "id": "DocumentReference.content.attachment.url", "path": "DocumentReference.content.attachment.url", "short": "Referenz auf Dokument", - "comment": "Um die Suche nach Dokumenten effizient zu gestalten, dürfen die Dokumente selbst nicht in die DocumentReference eingebettet werden, \n sondern müssen als separates Datenobjekt referenziert werden. \n \nUpdate für Stufe 3:\nDie Ausnahme bildet die Interaktion "Dokumentenbereitstellung", \nbei der die Binärdaten des Dokumentes eingebettet in die DocumentReference an den Server übermittelt und dort dann in eine separate \nRessource ausgelagert und über Attachment.url referenziert werden.", + "comment": "Um die Suche nach Dokumenten effizient zu gestalten, dürfen die Dokumente selbst nicht in die DocumentReference eingebettet werden, \n sondern müssen als separates Datenobjekt referenziert werden. \n\nWird ein separates Datenobjekt im ISIK-Kontext referenziert, so MUSS dieses konform zum Profil [ISIKBinary](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKBinary) aus dem Basismodul sein.\n \nUpdate für Stufe 3:\nDie Ausnahme bildet die Interaktion "Dokumentenbereitstellung", \nbei der die Binärdaten des Dokumentes eingebettet in die DocumentReference an den Server übermittelt und dort dann in eine separate \nRessource ausgelagert und über Attachment.url referenziert werden.", "mustSupport": true, "mapping": [ { @@ -490,7 +492,7 @@ { "id": "DocumentReference.context.encounter", "path": "DocumentReference.context.encounter", - "comment": "Abweichend zu MHD V4.0.1 ist die Verwendung der Encounter-Referenz im ISiK-Kontext erlaubt.\nUpdate für Stufe 3: \nIn MHD 4.2.0 wurde das Verbot der Angabe einer Encounter-Referenz gelockert, das ISiK-Profil ist damit in diesem Punkt wieder kompatibel zu IHE MHD.\n ", + "comment": "Abweichend zu MHD V4.0.1 ist die Verwendung der Encounter-Referenz im ISiK-Kontext erlaubt.\n\n Wird ein Encounter im ISIK-Kontext referenziert, so MUSS dieser konform zum Profil [ISIKKontaktGesundheitseinrichtung](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKKontaktGesundheitseinrichtung) aus dem Basismodul sein. \nUpdate für Stufe 3: \nIn MHD 4.2.0 wurde das Verbot der Angabe einer Encounter-Referenz gelockert, das ISiK-Profil ist damit in diesem Punkt wieder kompatibel zu IHE MHD.\n ", "max": "1", "mustSupport": true, "mapping": [ diff --git a/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenSuchergebnisse.json b/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenSuchergebnisse.json index 957eb594..dd6a6637 100644 --- a/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenSuchergebnisse.json +++ b/Resources/fsh-generated/resources/StructureDefinition-ISiKDokumentenSuchergebnisse.json @@ -2,10 +2,12 @@ "resourceType": "StructureDefinition", "id": "ISiKDokumentenSuchergebnisse", "url": "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/StructureDefinition/ISiKDokumentenSuchergebnisse", - "version": "3.0.0", + "version": "3.0.1", "name": "ISiKDokumentenSuchergebnisse", "title": "Suchergebnisse einer Dokumentensuche", "status": "active", + "experimental": false, + "date": "2024-01-05", "publisher": "gematik GmbH", "fhirVersion": "4.0.1", "mapping": [ diff --git a/Resources/fsh-generated/resources/ValueSet-ISiKConfidentialityCodes.json b/Resources/fsh-generated/resources/ValueSet-ISiKConfidentialityCodes.json index 07c607c5..e2614a75 100644 --- a/Resources/fsh-generated/resources/ValueSet-ISiKConfidentialityCodes.json +++ b/Resources/fsh-generated/resources/ValueSet-ISiKConfidentialityCodes.json @@ -5,9 +5,11 @@ "id": "ISiKConfidentialityCodes", "title": "ISiKConfidentialityCodes", "description": "Vertraulichkeitsstufen", - "version": "3.0.0", "url": "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/ValueSet/ISiKConfidentialityCodes", + "version": "3.0.1", + "experimental": false, "publisher": "gematik GmbH", + "date": "2024-01-05", "compose": { "include": [ { diff --git a/Resources/input/fsh/ISiKDokumentenMetadaten.fsh b/Resources/input/fsh/ISiKDokumentenMetadaten.fsh index 564eb94a..868abcc3 100644 --- a/Resources/input/fsh/ISiKDokumentenMetadaten.fsh +++ b/Resources/input/fsh/ISiKDokumentenMetadaten.fsh @@ -85,7 +85,9 @@ In MHD 4.2.0 wurde die Verpflichtung zur Angabe eines Identifiers gelockert, das * subject only Reference(Patient) * subject 1..1 MS * ^short = "Patientenbezug des Dokumentes" - * ^comment = "Siehe Beschreibung in der [FHIR Kernspezifikation](http://hl7.org/fhir/documentreference-definitions.html#DocumentReference.subject)" + * ^comment = "Im ISIK-Kontext MUSS der referenzierte Patient konform zum [ISIKPatient](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKPatient) des Basismoduls sein. + + Für sonstige Kontexte siehe [FHIR Kernspezifikation](http://hl7.org/fhir/documentreference-definitions.html#DocumentReference.subject)" * reference 1..1 MS * reference 1..1 MS * ^short = "Absolute oder relative URL des Patienten auf dem Server" @@ -144,6 +146,8 @@ Ressource ausgelagert und über Attachment.url referenziert werden." * ^short = "Referenz auf Dokument" * ^comment = "Um die Suche nach Dokumenten effizient zu gestalten, dürfen die Dokumente selbst nicht in die DocumentReference eingebettet werden, sondern müssen als separates Datenobjekt referenziert werden. + +Wird ein separates Datenobjekt im ISIK-Kontext referenziert, so MUSS dieses konform zum Profil [ISIKBinary](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKBinary) aus dem Basismodul sein. Update für Stufe 3: Die Ausnahme bildet die Interaktion "Dokumentenbereitstellung", @@ -164,6 +168,8 @@ Ressource ausgelagert und über Attachment.url referenziert werden." * context 1.. MS * encounter ..1 MS * ^comment = "Abweichend zu MHD V4.0.1 ist die Verwendung der Encounter-Referenz im ISiK-Kontext erlaubt. + + Wird ein Encounter im ISIK-Kontext referenziert, so MUSS dieser konform zum Profil [ISIKKontaktGesundheitseinrichtung](https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKKontaktGesundheitseinrichtung) aus dem Basismodul sein. Update für Stufe 3: In MHD 4.2.0 wurde das Verbot der Angabe einer Encounter-Referenz gelockert, das ISiK-Profil ist damit in diesem Punkt wieder kompatibel zu IHE MHD. " @@ -192,8 +198,8 @@ Title: "dok-beispiel" * masterIdentifier.value = "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46340" * status = #current * category = $ihe-de-class#BEF "Befundbericht" -* type.coding[+] = $kdl#PT130102 "Molekularpathologiebefund" -* type.coding[+] = $ihe-de-type#PATH "Pathologiebefundberichte" +* type.coding[KDL] = $kdl#PT130102 "Molekularpathologiebefund" +* type.coding[XDS] = $ihe-de-type#PATH "Pathologiebefundberichte" * description = "Molekularpathologiebefund vom 31.12.21" * subject = Reference(PatientinMusterfrau) * securityLabel = $v3-Confidentiality#N @@ -210,12 +216,11 @@ Instance: dok-beispiel-client-with-binary-pdf-example-short InstanceOf: ISiKDokumentenMetadaten Usage: #example Title: "dok-beispiel" -Description: "" * meta.security = $v3-ActReason#HTEST * masterIdentifier.system = "urn:ietf:rfc:3986" * masterIdentifier.value = "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46340" * status = #current -* type.coding[+] = $kdl#PT130102 "Molekularpathologiebefund" +* type.coding[KDL] = $kdl#PT130102 "Molekularpathologiebefund" * description = "Molekularpathologiebefund vom 31.12.21" * subject = Reference(PatientinMusterfrau) * securityLabel = $v3-Confidentiality#N @@ -232,12 +237,11 @@ Instance: dok-beispiel-client-with-binary-jpeg-example-short InstanceOf: ISiKDokumentenMetadaten Usage: #example Title: "dok-beispiel" -Description: "" * meta.security = $v3-ActReason#HTEST * masterIdentifier.system = "urn:ietf:rfc:3986" * masterIdentifier.value = "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46340" * status = #current -* type.coding[+] = $kdl#ED020101 "Fotodokumentation Operation" +* type.coding[KDL] = $kdl#ED020101 "Fotodokumentation Operation" * description = "Fotodokumentation Operation vom 31.12.21" * subject = Reference(PatientinMusterfrau) * securityLabel = $v3-Confidentiality#N @@ -254,12 +258,11 @@ Instance: dok-beispiel-client-with-binary-jpeg-example InstanceOf: ISiKDokumentenMetadaten Usage: #example Title: "dok-beispiel" -Description: "" * meta.security = $v3-ActReason#HTEST * masterIdentifier.system = "urn:ietf:rfc:3986" * masterIdentifier.value = "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46340" * status = #current -* type.coding[+] = $kdl#ED020101 "Fotodokumentation Operation" +* type.coding[KDL] = $kdl#ED020101 "Fotodokumentation Operation" * description = "Fotodokumentation Operation vom 31.12.21" * subject = Reference(PatientinMusterfrau) * securityLabel = $v3-Confidentiality#N @@ -276,12 +279,11 @@ Instance: dok-beispiel-client-with-binary-pdf-example InstanceOf: ISiKDokumentenMetadaten Usage: #example Title: "dok-beispiel" -Description: "" * meta.security = $v3-ActReason#HTEST * masterIdentifier.system = "urn:ietf:rfc:3986" * masterIdentifier.value = "urn:oid:1.2.840.113556.1.8000.2554.58783.21864.3474.19410.44358.58254.41281.46340" * status = #current -* type.coding[+] = $kdl#PT130102 "Molekularpathologiebefund" +* type.coding[KDL] = $kdl#PT130102 "Molekularpathologiebefund" * description = "Molekularpathologiebefund vom 31.12.21" * subject = Reference(PatientinMusterfrau) * securityLabel = $v3-Confidentiality#N diff --git a/Resources/input/fsh/ISiKDokumentenSuchergebnisse.fsh b/Resources/input/fsh/ISiKDokumentenSuchergebnisse.fsh index 21fd8d65..8d7afba5 100644 --- a/Resources/input/fsh/ISiKDokumentenSuchergebnisse.fsh +++ b/Resources/input/fsh/ISiKDokumentenSuchergebnisse.fsh @@ -19,7 +19,6 @@ Instance: Suchergebnis-Beispiel InstanceOf: ISiKDokumentenSuchergebnisse Usage: #example Title: "Suchergebnis-Beispiel" -Description: "" * total = 1 * entry.fullUrl = "http://meinfhirserver.de/DocumentReference/dok-beispiel" * entry.resource = dok-beispiel-server diff --git a/Resources/input/fsh/OperationUpdateMetadata.fsh b/Resources/input/fsh/OperationUpdateMetadata.fsh index 48e4433e..3ff0c1d5 100644 --- a/Resources/input/fsh/OperationUpdateMetadata.fsh +++ b/Resources/input/fsh/OperationUpdateMetadata.fsh @@ -2,7 +2,6 @@ Instance: UpdateMetadata InstanceOf: OperationDefinition Usage: #example Title: "update-metadata" -Description: "" * insert Meta-Inst * url = "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/OperationDefinition/UpdateMetadata" * title = "Update document metadata" diff --git a/Resources/input/fsh/capabilitystatement.fsh b/Resources/input/fsh/capabilitystatement.fsh index c5377e9c..a29d87fd 100644 --- a/Resources/input/fsh/capabilitystatement.fsh +++ b/Resources/input/fsh/capabilitystatement.fsh @@ -11,116 +11,7 @@ Usage: #definition * format[0] = #application/fhir+xml * format[+] = #application/fhir+json * rest.mode = #server -* rest.resource[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * type = #Patient - * supportedProfile = "https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKPatient" - * interaction[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * code = #read - * interaction[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * code = #search-type - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "_id" - * definition = "http://hl7.org/fhir/SearchParameter/Resource-id" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "identifier" - * definition = "http://hl7.org/fhir/SearchParameter/Patient-identifier" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "family" - * definition = "http://hl7.org/fhir/SearchParameter/individual-family" - * type = #string - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "given" - * definition = "http://hl7.org/fhir/SearchParameter/individual-given" - * type = #string - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "birthdate" - * definition = "http://hl7.org/fhir/SearchParameter/individual-birthdate" - * type = #date - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "gender" - * definition = "http://hl7.org/fhir/SearchParameter/individual-gender" - * type = #token -* rest.resource[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * type = #Encounter - * supportedProfile = "https://gematik.de/fhir/isik/v3/Basismodul/StructureDefinition/ISiKKontaktGesundheitseinrichtung" - * interaction[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * code = #read - * interaction[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * code = #search-type - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "_id" - * definition = "http://hl7.org/fhir/SearchParameter/Resource-id" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "identifier" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-identifier" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "status" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-status" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "class" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-class" - * type = #token - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "type" - * definition = "http://hl7.org/fhir/SearchParameter/clinical-patient" - * type = #reference - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "subject" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-subject" - * type = #reference - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "part-of" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-part-of" - * type = #reference - * searchParam[+] - * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" - * extension.valueCode = #SHALL - * name = "date" - * definition = "http://hl7.org/fhir/SearchParameter/Encounter-date" - * type = #date + * rest.resource[+] * extension.url = "http://hl7.org/fhir/StructureDefinition/capabilitystatement-expectation" * extension.valueCode = #SHALL diff --git a/Resources/input/fsh/rulesets.fsh b/Resources/input/fsh/ruleset.fsh similarity index 67% rename from Resources/input/fsh/rulesets.fsh rename to Resources/input/fsh/ruleset.fsh index 21e9a55d..d60af747 100644 --- a/Resources/input/fsh/rulesets.fsh +++ b/Resources/input/fsh/ruleset.fsh @@ -1,16 +1,20 @@ -RuleSet: Meta -* ^publisher = "gematik GmbH" - -RuleSet: Meta-Inst -* status = #active -* publisher = "gematik GmbH" -* date = "2023-07-01" - -RuleSet: Meta-CapabilityStatement -* status = #active -* experimental = false -* version = "3.0.0" -* publisher = "gematik GmbH" -* date = "2023-07-01" -* implementationGuide = "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/ImplementationGuide|3.0.0" -* url = "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/CapabilityStatement/dokumentenaustausch-server" +RuleSet: Meta +* ^version = "3.0.1" +* ^status = #active +* ^experimental = false +* ^publisher = "gematik GmbH" +* ^date = "2024-01-05" + +RuleSet: Meta-Inst +* status = #active +* publisher = "gematik GmbH" +* date = "2024-01-05" + +RuleSet: Meta-CapabilityStatement +* status = #active +* experimental = false +* version = "3.0.1" +* publisher = "gematik GmbH" +* date = "2024-01-05" +* implementationGuide = "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/ImplementationGuide|3.0.1" +* url = "https://gematik.de/fhir/isik/v3/Dokumentenaustausch/CapabilityStatement/dokumentenaustausch-server" diff --git a/Resources/sushi-config.yaml b/Resources/sushi-config.yaml index 31392c0d..3f2f8290 100644 --- a/Resources/sushi-config.yaml +++ b/Resources/sushi-config.yaml @@ -2,17 +2,10 @@ # │ The properties below are used to create the ImplementationGuide resource. For a list of │ # │ supported properties, see: https://fshschool.org/docs/sushi/configuration/ │ # ╰────────────────────────────────────────────────────────────────────────────────────────────────╯ -id: de.gematik.isik-dokumentenaustausch canonical: https://gematik.de/fhir/isik/v3/Dokumentenaustausch -name: ISiK_Dokumentenaustausch -status: active -version: 3.0.0 fhirVersion: 4.0.1 -publisher: - name: gematik GmbH - url: https://gematik.de dependencies: ihe.iti.mhd: 4.2.0 - de.gematik.isik-basismodul: 3.0.0 + de.gematik.isik-basismodul: 3.0.1 dvmd.kdl.r4.2022: 2022.1.2 FSHOnly: true diff --git a/package.json b/package.json index 2d80c5f1..c46b9179 100644 --- a/package.json +++ b/package.json @@ -1,12 +1,12 @@ { "name": "de.gematik.isik-basismodul-dokumentenaustausch", - "version": "3.0.0", + "version": "3.0.1", "fhirVersions": [ "4.0.1" ], "dependencies": { "ihe.iti.mhd": "4.2.0", - "de.gematik.isik-basismodul": "3.0.0", + "de.gematik.isik-basismodul": "3.0.1", "dvmd.kdl.r4.2022": "2022.1.2" } } diff --git a/scripts/config.yaml b/scripts/config.yaml new file mode 100644 index 00000000..35ac3426 --- /dev/null +++ b/scripts/config.yaml @@ -0,0 +1,26 @@ +package.json: + - type: version + regex: '("version":\s*")([\d\.]+.*)(")' +sushi-config.yaml: + - type: version + regex: '(version:\s*)(\d+\.\d+\.\d+.*)()' +ruleset.fsh: + - type: version + regex: + - '(\*\s*version\s*=\s*")([\d\.]+.*)(")' + - '(\*\s*\^version\s*=\s*")([\d\.]+.*)(")' + - '(\*\s*implementationGuide\s*=\s*".*\|)([\d\.]+.*)(")' + - type: date + regex: + - '(\*\s*date\s*=\s*")(\d+\-\d+\-\d+)(")' + - '(\*\s*\^date\s*=\s*")(\d+\-\d+\-\d+)(")' + format: '%Y-%m-%d' +Einfuehrung.md: + - type: version + regex: '(Version: \s*)(\d+\.\d+\.\d+.*)()' + - type: date + regex: '(Datum:\s*)(\d+\.\d+\.\d+.*)()' + format: '%d.%m.%Y' +ImplementierungsleitfadenIsiK_Dokumentenaustausch.json: + - type: version + regex: '("version":\s*")(\d+\.\d+\.\d+.*)(",)' \ No newline at end of file diff --git a/scripts/release_publish.py b/scripts/release_publish.py index 9195808f..86adfa52 100644 --- a/scripts/release_publish.py +++ b/scripts/release_publish.py @@ -1,124 +1,104 @@ +import datetime import re import subprocess import os import argparse from datetime import date +import yaml -class FileWithVersionToUpdate: - def __init__(self, filename, version_regex) -> None: - self.filename = filename - self.version_regex = version_regex - self.location = None - - def set_file_location(self, location): - self.location = location -class FileWithDateToUpdate: - def __init__(self, filename, date_regex) -> None: +class FileTypeCombinationToUpdate: + def __init__(self, filename, content_type, regex_list, format=None) -> None: self.filename = filename - self.date_regex = date_regex + self.content_type = content_type + self.regex_list = regex_list + self.format = format self.location = None def set_file_location(self, location): self.location = location -# class FileWithDateToUpdate: -# def __init__(self, filename, date_regex, format) -> None: -# self.filename = filename -# self.date_regex = date_regex -# self.location = None -# self.format = format -# def set_file_location(self, location): -# self.location = location - - +def load_config_file(config_file_path): + with open(config_file_path, 'r') as config_file: + return yaml.safe_load(config_file) def get_new_release_version_from_branch_name() -> str: git_branch = subprocess.check_output(['git', 'rev-parse', '--abbrev-ref', 'HEAD']).strip().decode() return git_branch -def replace_version_in_files(files : list, new_release_version: str): - if files is None: - print("Error: No Files found!") - return - for file in files: - replace_version_in_file(file,new_release_version) +def create_files_to_update_list(config): + files_to_update = [] + for filename, replacements in config.items(): + for replacement in replacements: + files_to_update.append( + FileTypeCombinationToUpdate( + filename, + replacement["type"], + replacement["regex"] if isinstance(replacement["regex"], list) else [replacement["regex"]], + replacement.get("format", None), + ) + ) + return files_to_update -def replace_version_in_file(file: FileWithVersionToUpdate,new_release_version: str): - with open(file.location, 'r') as input_file: - input_text = input_file.read() - output_text = re.sub(file.version_regex, rf'\g<1>{new_release_version}\g<3>', input_text) - print(f"Info: Replaced version with '{new_release_version}' in file '{file.location}'.") +def locate_files_in_current_project(files: list): + located_files = [] + for current_file in files: + file_location = find_file(current_file.filename, ".") + if file_location is not None: + current_file.set_file_location(file_location) + located_files.append(current_file) + else: + print(f"Warning: File '{current_file.filename}' not found.") + return located_files - with open(file.location, 'w') as output_file: - output_file.write(output_text) -def replace_date_in_files(files : list, new_release_date: str): +def find_file(name, path="."): + for root, dirs, files in os.walk(path): + if name in files: + print(f"Info: Found '{name}' in {root}.") + return os.path.join(root, name) + return None + + +def replace_content_in_files(files: list, new_release_version: str, new_date: datetime): if files is None: - print("Error: No Files found!") + print("Error: No files found!") return - for file in files: - replace_date_in_file(file,new_release_date) + for FileTypeCombination in files: + if FileTypeCombination.content_type == "version": + replace_version_in_file(FileTypeCombination, new_release_version) + elif FileTypeCombination.content_type == "date": + replace_date_in_file(FileTypeCombination, new_date) + -def replace_date_in_file(file: FileWithVersionToUpdate, new_date: str): +def replace_version_in_file(file: FileTypeCombinationToUpdate, new_release_version: str): with open(file.location, 'r') as input_file: input_text = input_file.read() - #output_text = re.sub(file.date_regex, rf'\g<1>{new_date.strftime(file.format)}\g<3>', input_text) #see https://www.programiz.com/python-programming/datetime#:~:text=Python%20format%20datetime&text=It%27s%20more%20common%20to%20use,()%20methods%20to%20handle%20this. - output_text = re.sub(file.date_regex, rf'\g<1>{new_date}\g<3>', input_text) - print(f"Info: Replaced date with '{new_date}' in file '{file.location}'.") + for regex in file.regex_list: + input_text = re.sub(regex, rf'\g<1>{new_release_version}\g<3>', input_text) + + print(f"Info: Replaced version with '{new_release_version}' in file '{file.location}'.") with open(file.location, 'w') as output_file: - output_file.write(output_text) - -def get_file_to_update_version_list(): - file_list = [] - file_list.append(FileWithVersionToUpdate('package.json', r'("version":\s*")([\d\.]+.*)(")')) - file_list.append(FileWithVersionToUpdate('sushi-config.yaml', r'(version:\s*")(\d+\.\d+\.\d+.*)(")')) - file_list.append(FileWithVersionToUpdate('ruleset.fsh', r'(\*\s*version\s*=\s*")([\d\.]+.*)(")')) - file_list.append(FileWithVersionToUpdate('Einfuehrung.md', r'(Version: \s*)(\d+\.\d+\.\d+.*)()')) - return file_list - -def get_file_to_update_date_list(): - file_list = [] - #file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(date\s*=\s*")(\d+\-\d+\-\d+)(")'), '%m/%d/%Y' ) - #file_list.append(FileWithDateToUpdate('Einfuehrung.md', r'(Datum: \s*)(\d+\.\d+\.\d+)()') , '%m/%d/%Y') - file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(\*\s*date\s*=\s*")(\d+\-\d+\-\d+)(")')) - file_list.append(FileWithDateToUpdate('ruleset.fsh', r'(\*\s*\^date\s*=\s*")(\d+\-\d+\-\d+)(")')) - file_list.append(FileWithDateToUpdate('Einfuehrung.md', r'(Datum:\s*)(\d+\.\d+\.\d+.*)()')) - return file_list + output_file.write(input_text) -def locate_files_in_current_project(files: list): - return_list = [] - for current_file in files: - file_location = find_file(current_file.filename, ".") - if file_location is not None: - current_file.set_file_location(file_location) - return_list.append(current_file) - else: - print(f"Warning: File '{current_file.filename}' not found.") - return return_list +def replace_date_in_file(file: FileTypeCombinationToUpdate, new_date: datetime): + with open(file.location, 'r') as input_file: + input_text = input_file.read() -def find_file(name, path="."): - for root, dirs, files in os.walk(path): + for regex in file.regex_list: + input_text = re.sub(regex, rf'\g<1>{new_date.strftime(file.format)}\g<3>', input_text) - if name in files: - print(f"Info: Found '{name}' in {root}.") - return os.path.join(root, name) - return None + print(f"Info: Replaced date with '{new_date.strftime(file.format)}' in file '{file.location}'.") -def get_latest_release_tag(): - cmd = 'git describe --abbrev=0 --tags --match "v*.*.*" HEAD' - try: - output = subprocess.check_output(cmd, shell=True) - return output.decode().strip() - except subprocess.CalledProcessError: - return None + with open(file.location, 'w') as output_file: + output_file.write(input_text) def output_commit_messages_since_last_release(): latest_release_tag = get_latest_release_tag() @@ -133,15 +113,22 @@ def output_commit_messages_since_last_release(): except subprocess.CalledProcessError: print("Warning: Failed to get commit messages.") -def main(): - today = date.today() +def get_latest_release_tag(): + cmd = 'git describe --abbrev=0 --tags --match "v*.*.*" HEAD' + try: + output = subprocess.check_output(cmd, shell=True) + return output.decode().strip() + except subprocess.CalledProcessError: + return None - parser = argparse.ArgumentParser(description='Update release version number') + +def main(): + parser = argparse.ArgumentParser(description='Update release version number and date') parser.add_argument('-b', '--branch', action='store_true', help='get new version from branch name') parser.add_argument('-v', '--version', type=str, help='specify new version number') + parser.add_argument('-d', '--date', type=str, help='specify custom date for release') + parser.add_argument('-c', '--config', type=str, default='config.yaml', help='specify config file') parser.add_argument('-o', '--output', action='store_true', help='output commit messages since last release') - # TODO new argument -d if not date_time now - args = parser.parse_args() if args.version: @@ -151,16 +138,19 @@ def main(): else: parser.error('No new release version specified. Please use either -v or -b to specify the new release version.') - if args.output: - output_commit_messages_since_last_release() + if args.date: + custom_date = datetime.datetime.strptime(args.date, '%d.%m.%Y').date() + else: + custom_date = date.today() - file_to_update_version_list = get_file_to_update_version_list() - file_version_list = locate_files_in_current_project(file_to_update_version_list) - replace_version_in_files(file_version_list, new_release_version) + config_file_path = os.path.join(os.path.dirname(os.path.abspath(__file__)), args.config) + config = load_config_file(config_file_path) + files_to_update = create_files_to_update_list(config) + located_files = locate_files_in_current_project(files_to_update) + replace_content_in_files(located_files, new_release_version, custom_date) - file_to_update_date_list = get_file_to_update_date_list() - file_date_list = locate_files_in_current_project(file_to_update_date_list) - replace_date_in_files(file_date_list, today) + if args.output: + output_commit_messages_since_last_release() if __name__ == "__main__": main() \ No newline at end of file diff --git a/scripts/update_version.sh b/scripts/update_version.sh deleted file mode 100644 index 2cbe628d..00000000 --- a/scripts/update_version.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/bash -clear -# This script will download the latest validation script from the template source save it -# to the scripts_folder and execute it to validate your fhir ressources. -script_name=release_publish.py -script_path=. - -#parentdir="$(dirname "$script_path")" -#mkdir -p "$parentdir" - -curl https://raw.githubusercontent.com/gematik/spec-TemplateForSimplifierProjects/feature/release_publish/scripts/$script_name -o $script_path -chmod a+x $script_path -python3 $script_name \ No newline at end of file