diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 00000000..987fa188 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,59 @@ +FROM mcr.microsoft.com/devcontainers/base:alpine-3.18 + +# Setzen der Umgebungsvariablen +ENV FIRELY_TERMINAL_VERSION=3.1.0 +ENV JAVA_VALIDATOR_VERSION=6.0.11 +ENV SUSHI_VERSION=3.5.0 + +# Installieren der notwendige Tools +# Add Microsoft's .NET SDK repository and install .NET SDK +RUN wget https://dot.net/v1/dotnet-install.sh \ + && chmod +x dotnet-install.sh \ + && ./dotnet-install.sh --channel 6.0 --install-dir /usr/share/dotnet \ + && ln -s /usr/share/dotnet/dotnet /usr/local/bin \ + && rm dotnet-install.sh + +# Install ICU libraries +RUN apk add --no-cache icu-libs + +# Install Node.js and npm +RUN apk add --no-cache nodejs npm + +# Install Java (OpenJDK) +RUN apk add --no-cache openjdk11 + +# Install Firely Terminal as vscode user +# Switch to the vscode user +USER vscode + +# Install Firely Terminal +RUN dotnet tool install --global Firely.Terminal --version $FIRELY_TERMINAL_VERSION + +# Add .NET tools to PATH for vscode user +ENV PATH="/home/vscode/.dotnet/tools:${PATH}" + +# Switch back to root user to perform remaining installations +USER root + +RUN npm install -g fsh-sushi@$SUSHI_VERSION + +# Installieren der zusätzliche Abhängigkeiten +RUN apk update && apk add --no-cache jq findutils curl ca-certificates + +# Setup for FHIR Validator +RUN mkdir -p /home/vscode/.fhir/validators/ +RUN wget -q https://github.com/hapifhir/org.hl7.fhir.core/releases/download/$JAVA_VALIDATOR_VERSION/validator_cli.jar -O /home/vscode/.fhir/validators/validator_cli.jar + +# Set ownership +RUN mkdir -p /home/vscode/.fhir/packages && \ + chown -R vscode:vscode /home/vscode/.fhir/packages + +RUN mkdir -p /home/vscode/.fhir/settings/ +COPY codfsh-config.yaml /home/vscode/.fhir/settings/codfsh-config.yaml + +# Setzen des Arbeitsverzeichnis +WORKDIR /workspace + +COPY . /workspace + +CMD [ "/bin/bash" ] diff --git a/.devcontainer/codfsh-config.yaml b/.devcontainer/codfsh-config.yaml new file mode 100644 index 00000000..7b151129 --- /dev/null +++ b/.devcontainer/codfsh-config.yaml @@ -0,0 +1,9 @@ +sushi: + min_version: "3.5.0" +hapi: + min_version: "3.0.0" + parameters: + jurisdiction: DE + locale: de-DE + tx: "n/a" + debug: true diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 00000000..8072f952 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,34 @@ +// For format details, see https://aka.ms/devcontainer.json. For config options, see the +// README at: https://github.com/devcontainers/templates/tree/main/src/alpine +{ + "name": "FHIR Development Container", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "build": { + "dockerfile": "Dockerfile" + }, + "customizations": { + "vscode": { + "extensions": [ + "gematikde.codfsh", + "MITRE-Health.vscode-language-fsh", + "ms-azuretools.vscode-docker" + ], + "settings": { + "codfsh.HapiValidator.Executable": "/home/vscode/.fhir/validators/validator_cli.jar", + "codfsh.HapiValidator.Settings.SettingsFile": "/home/vscode/.fhir/settings/codfsh-config.yaml" + } + } + } + + // Features to add to the dev container. More info: https://containers.dev/features. + // "features": {}, + + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + + // Use 'postCreateCommand' to run commands after the container is created. + // "postCreateCommand": "uname -a", + + // Uncomment to connect as root instead. More info: https://aka.ms/dev-containers-non-root. + // "remoteUser": "root" +} diff --git a/.github/workflows/RenderAllDiagrams.yml b/.github/workflows/RenderAllDiagrams.yml new file mode 100644 index 00000000..ee949a78 --- /dev/null +++ b/.github/workflows/RenderAllDiagrams.yml @@ -0,0 +1,102 @@ +name: Render All Diagrams + +on: + push: + paths: + - '**/Material/images/src/**/*.puml' + - '**/Material/images/src/**/*.drawio' + branches-ignore: + - 'main**' + + # Allows you to run this workflow manually from the Actions tab + workflow_dispatch: + +jobs: + build: + runs-on: ubuntu-latest + + steps: + + # Checks-out your repository under $GITHUB_WORKSPACE, so your job can access it + - name: Checkout repository + uses: actions/checkout@v4 + + # Installs Java distribution for running the plantUML jar + - name: Install Java + uses: actions/setup-java@v3 + with: + distribution: 'temurin' + java-version: '17' + check-latest: true + + # Install graphviz for plantuml + - name: Setup Graphviz + uses: ts-graphviz/setup-graphviz@v1 + + # Download plantUML jar + - name: Download plantuml file + run: | + wget -O plantuml.jar "https://github.com/plantuml/plantuml/releases/latest/download/plantuml.jar" + + # Clean Folder + - name: Ensure and clean folder + run: | + img_dir=Material/images/diagrams + mkdir -p $img_dir + rm -rf Material/images/diagrams/*.svg + + # Generate the SVGs from PUML + - name: Render PUML to SVG and Move files + run: | + FileNamePaths=$(find . -path "*/images/src/*/*.puml" -exec dirname {} \; | sort -u) + for dir in $FileNamePaths + do + # Render SVGs from PUMLs + find $dir -name "*.puml" -exec java -jar plantuml.jar -tsvg {} \; + done + + # Remove plantUML jar + - name: remove plantuml file + run: | + rm -f plantuml.jar + + # Generate the SVGs from DrawIO + - name: Render DrawIO to SVG with predefined action + uses: rlespinasse/drawio-export-action@v2 + with: + path: ./Material/images/src/drawio/ + remove-page-suffix: true + output: . + format: svg + action-mode: all + + # copies the created SVG files to the images/diagrams folder and deletes the drawio files + - name: Move SVGs to target image folder + run: | + img_dir=Material/images/diagrams + # Find all unique directories containing *.SVGs files under any /imgsrc/ folder + FileNamePaths=$(find . -path "*/images/src/*/*.svg" -exec dirname {} \; | sort -u) + for dir in $FileNamePaths + do + # Move SVGs to out directory + find $dir -name "*.svg" -exec mv {} $img_dir \; + done + + ## add and commit the new generated files + #- name: Create Pull Request + # uses: peter-evans/create-pull-request@v5 + # with: + # branch: auto/images-generation + # commit-message: Generated Images from source Code by GitHub Action + # title: Generated Images from GitHub Action + # assignees: ${{ github.actor }} + # reviewers: ${{ github.actor }} + # delete-branch: true + # labels: automated pr + + - name: Commit rendered files + uses: stefanzweifel/git-auto-commit-action@v5 + with: + commit_user_name: GitHub Actions Bot + commit_user_email: ActionBot@github.com + commit_message: auto-generated diagrams by GitHub Action after source code change \ No newline at end of file diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index d33d0d92..ceae92b3 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -4,12 +4,15 @@ name: CI (FHIR Validation) # Controls when the action will run. on: - # Triggers the workflow on push or pull request events + # Triggers the workflow on push or pull request events but only for the master branch push: + paths: + - 'Resources/**' + branches-ignore: + - 'main**' pull_request: - - # Allows you to run this workflow manually from the Actions tab - workflow_dispatch: + branches: + - 'main**' # A workflow run is made up of one or more jobs that can run sequentially or in parallel jobs: @@ -46,4 +49,7 @@ jobs: - name: Add & Commit uses: EndBug/add-and-commit@v7 with: + committer_name: GitHub Actions Bot + committer_email: ActionBot@github.com add: 'Resources/fsh-generated/resources/' + message: auto-generated FHIR files by GitHub Actions (CI FSH to FHIR Validation) diff --git a/ImplementationGuide/markdown/BerichtSubsystem/BerichtSubsystem_Interaktionen.md b/ImplementationGuide/markdown/BerichtSubsystem/BerichtSubsystem_Interaktionen.md index 47f876e7..04e2bcc1 100644 --- a/ImplementationGuide/markdown/BerichtSubsystem/BerichtSubsystem_Interaktionen.md +++ b/ImplementationGuide/markdown/BerichtSubsystem/BerichtSubsystem_Interaktionen.md @@ -27,8 +27,9 @@ In der aktuellen Ausbaustufe von ISiK MUSS ein empfangenes Dokument in folgenden 4. Hinzufügen des Dokumentes und seiner Metadaten zur Fallakte des Patienten. 5. Visualisierung des Dokumentes und seiner Metadaten in der Fallakte des Patienten -{{render:ImplementationGuide/Images/Composition-Bundle.png}} -*Die Grafik zeigt an einem vereinfachten Beispiel die Zuordnung des HTML-Dokumentes zu Patient und Kontakt in der aktuellen Ausbaustufe von ISiK (schwarze Pfeile). Die grauen Pfeile deuten die Übernahme strukturierter Daten, wie sie in weiteren Ausbaustufen erforderlich wird.* +Composition Bundle + +Die Grafik zeigt an einem vereinfachten Beispiel die Zuordnung des HTML-Dokumentes zu Patient und Kontakt in der aktuellen Ausbaustufe von ISiK (schwarze Pfeile). Die grauen Pfeile deuten die Übernahme strukturierter Daten, wie sie in weiteren Ausbaustufen erforderlich wird. ### Hinweise zum Umgang mit der menschenlesbaren Repräsentation diff --git a/ImplementationGuide/markdown/Datenobjekte/Datenobjekte.md b/ImplementationGuide/markdown/Datenobjekte/Datenobjekte.md index af7cc9eb..6b5151e0 100644 --- a/ImplementationGuide/markdown/Datenobjekte/Datenobjekte.md +++ b/ImplementationGuide/markdown/Datenobjekte/Datenobjekte.md @@ -2,5 +2,4 @@ In den folgenden Unterkapiteln werden die ISiK-Datenobjekte, die in dem vereinfachten Informationsmodell dargestellt sind, und ihre FHIR-Spezifikation beschrieben. -{{render:ImplementationGuide/Images/Infomodel.png}} -*Vereinfachtes Informationsmodell* +Vereinfachtes Infomodell diff --git a/ImplementationGuide/markdown/Einfuehrung.md b/ImplementationGuide/markdown/Einfuehrung.md index 2fb20db9..688772d8 100644 --- a/ImplementationGuide/markdown/Einfuehrung.md +++ b/ImplementationGuide/markdown/Einfuehrung.md @@ -1,4 +1,4 @@ -gematik logo +gematik logo ---- Version: 3.0.2 diff --git a/ImplementationGuide/markdown/KontaktGesundheitseinrichtung/Kontakt_Motivation.md b/ImplementationGuide/markdown/KontaktGesundheitseinrichtung/Kontakt_Motivation.md index c45f72c2..1d1888aa 100644 --- a/ImplementationGuide/markdown/KontaktGesundheitseinrichtung/Kontakt_Motivation.md +++ b/ImplementationGuide/markdown/KontaktGesundheitseinrichtung/Kontakt_Motivation.md @@ -21,11 +21,11 @@ Der stationäre Aufenthalt oder der ambulante Kontakt eines Patienten in einer G * **Abrechnungsfall (Account):** Der Fall, im Sinne einer Gruppierung von medizinischen Leistungen, die in einem gemeinsamen Kontext abgerechnet werden, sind in FHIR durch die Ressource Account repräsentiert. Ein Abrechnungsfall kann mehrere Encounter umfassen (z.B. vorstationärer Besuch, stationärer Aufenthalt und nachstationäre Besuche) -{{render:ImplementationGuide/Images/Encounter-Modell-Abrechnung.png}} +{{render:Material/Images/Encounter-Modell-Abrechnung.png}} * **Medizinischer Fall (EpisodeOfCare):** Der medizinische Fall gruppiert Informationen, die im Kontext einer gemeinsamen (Dauer-)Diagnose stehen und wird in FHIR durch die EpisodeOfCare dargestellt. -{{render:ImplementationGuide/Images/Encounter-Modell-Medizinisch.png}} +{{render:Material/Images/Encounter-Modell-Medizinisch.png}} --- @@ -43,7 +43,7 @@ Als Kontakt des Patienten mit konkreten Servicestellen, wie z.B. Radiologie oder Zur Unterscheidung der verschiedenen Kontaktebenen wird in der MI-I eine Codierung in `Encounter.type` verwendet. Die Hierarchie der Encounter wird über die `Encounter.partOf`-Relation hergestellt. Ambulante Besuche werden in dem Modell derzeit noch nicht berücksichtigt. -{{render:ImplementationGuide/Images/Encounter-Modell-MII.png}} +{{render:Material/Images/Encounter-Modell-MII.png}} --- @@ -51,7 +51,7 @@ Zur Unterscheidung der verschiedenen Kontaktebenen wird in der MI-I eine Codieru Für die Ausbaustufe 2 und 3 des ISiK Basismoduls werden alle zuvor genannten Sichtweise und Modelle berücksichtigt: -{{render:ImplementationGuide/Images/Encounter-Modelle.png}} +{{render:Material/Images/Encounter-Modelle.png}} Verpflichtend umzusetzen ist für die bestätigungsrelevanten Systeme der Account, im Sinne der Gruppierung einzelner Besuche, zu einem gemeinsamen (Abrechnungs-)Fall sowie der Encounter der Ebene "Abteilungskontakt" im Sinne des Modells der Medizininformatikinitiative. @@ -61,7 +61,7 @@ Wichtig sind dabei jedoch folgende Punkte zu beachten: * Encounter im ISiK-Kontext sind stets als "Abteilungskontakte, im Sinne der MI-I mit dem entsprechenden `Encounter.type`-Code, zu kennzeichnen. * jegliche im ISiK-Basis-Modul, als auch in anderen ISiK-Modulen definierte Ressourcen, die über einen Encounter-Kontext verfügen, müssen auf einen ISiK-Encounter (Abteilungskontakt) referenzieren. -{{render:ImplementationGuide/Images/Encounter-Modell-ISiK.png}} +{{render:Material/Images/Encounter-Modell-ISiK.png}} --- @@ -78,8 +78,8 @@ Um insbesondere Subsysteme von der Pflicht zu entbinden, die Account-Ressource z | Hinweis | Änderung gegenüber ISiK-Basis-Modul Stufe 1!| |---------|---------------------| -| {{render:ImplementationGuide-Images-ig-bilder-Warning}} | Die Abbildung der Fallnummer als Identifier des Accounts ist abweichend von der im Basismodul Stufe 1 festgelegten Abbildung der Fallnummer als Identifier des Encounters. Diese Änderung ist erforderlich, da die Fallnummer nicht geeignet ist, einen Encounter eindeutig zu identifizieren. Der Encounter kann weiterhin einen von der Abrechnungsfallnummer unabhänigen Identifier enthalten (z.B. "Aufnahmenummer", Bewegungsnummer). Dieser identifiziert eineindeutig den jeweiligen Kontakt.| +| {{render:Material/Images/IG_Warning}} | Die Abbildung der Fallnummer als Identifier des Accounts ist abweichend von der im Basismodul Stufe 1 festgelegten Abbildung der Fallnummer als Identifier des Encounters. Diese Änderung ist erforderlich, da die Fallnummer nicht geeignet ist, einen Encounter eindeutig zu identifizieren. Der Encounter kann weiterhin einen von der Abrechnungsfallnummer unabhänigen Identifier enthalten (z.B. "Aufnahmenummer", Bewegungsnummer). Dieser identifiziert eineindeutig den jeweiligen Kontakt.| -{{render:ImplementationGuide/Images/Encounter-Modell-Fallnummer.png}} +{{render:Material/Images/Encounter-Modell-Fallnummer.png}} --- diff --git a/Material/Darstellung_Composition_verarbeiten.docx b/Material/Darstellung_Composition_verarbeiten.docx deleted file mode 100644 index 9ef98900..00000000 Binary files a/Material/Darstellung_Composition_verarbeiten.docx and /dev/null differ diff --git a/Material/Gematik_Logo_Flag.png b/Material/Gematik_Logo_Flag.png deleted file mode 100644 index fc27adee..00000000 Binary files a/Material/Gematik_Logo_Flag.png and /dev/null differ diff --git a/ImplementationGuide/Images/Composition-Bundle.png b/Material/images/Composition-Bundle.png similarity index 100% rename from ImplementationGuide/Images/Composition-Bundle.png rename to Material/images/Composition-Bundle.png diff --git a/ImplementationGuide/Images/Encounter-Modell-Abrechnung.png b/Material/images/Encounter-Modell-Abrechnung.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modell-Abrechnung.png rename to Material/images/Encounter-Modell-Abrechnung.png diff --git a/ImplementationGuide/Images/Encounter-Modell-Fallnummer.png b/Material/images/Encounter-Modell-Fallnummer.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modell-Fallnummer.png rename to Material/images/Encounter-Modell-Fallnummer.png diff --git a/ImplementationGuide/Images/Encounter-Modell-ISiK.png b/Material/images/Encounter-Modell-ISiK.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modell-ISiK.png rename to Material/images/Encounter-Modell-ISiK.png diff --git a/ImplementationGuide/Images/Encounter-Modell-MII.png b/Material/images/Encounter-Modell-MII.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modell-MII.png rename to Material/images/Encounter-Modell-MII.png diff --git a/ImplementationGuide/Images/Encounter-Modell-Medizinisch.png b/Material/images/Encounter-Modell-Medizinisch.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modell-Medizinisch.png rename to Material/images/Encounter-Modell-Medizinisch.png diff --git a/ImplementationGuide/Images/Encounter-Modelle.png b/Material/images/Encounter-Modelle.png similarity index 100% rename from ImplementationGuide/Images/Encounter-Modelle.png rename to Material/images/Encounter-Modelle.png diff --git a/Material/images/Gematik_Logo_Flag.svg b/Material/images/Gematik_Logo_Flag.svg new file mode 100644 index 00000000..20976701 --- /dev/null +++ b/Material/images/Gematik_Logo_Flag.svg @@ -0,0 +1,40 @@ + + + + + + + + + + + + + + + + + + + diff --git a/ImplementationGuide/Images/ig_bilder_Warning.jpg b/Material/images/IG_Warning.jpg similarity index 100% rename from ImplementationGuide/Images/ig_bilder_Warning.jpg rename to Material/images/IG_Warning.jpg diff --git a/Material/images/diagrams/Composition_Bundle.svg b/Material/images/diagrams/Composition_Bundle.svg new file mode 100644 index 00000000..3d60601e --- /dev/null +++ b/Material/images/diagrams/Composition_Bundle.svg @@ -0,0 +1,3 @@ + + +
Bundle
Bundle
Patientenakten "54321"
Patientenakten "54321"
Composition

.text



.encounter


.subject


.section "Diagnosen"



.section "Laborwerte"
Composition...
Fallakte "12345"

Dokumente:
   - Befundbericht vom 9.10.2020





Diagnosen:
   - Diabetes Typ II

Laborwerte:
   - Blutzucker: 201mg/dl 

Fallakte "12345"...
<html<h1>Befundbericht</h1>
<p>Patient: Mustermann, Max (*01.01.1970)</p><h2>Diagnosen</h2>…
<h2>VitalParameter</h2>
…mit freundlichen Grüßen</html>
<html<h1>Befundbericht</h1>...
<html<h1>Befundbericht</h1>
<p>Patient: Mustermann, Max (*01.01.1970)</p><h2>Diagnosen</h2>…
<h2>VitalParameter</h2>
…mit freundlichen Grüßen</html>
<html<h1>Befundbericht</h1>...
Encounter.identifier
= 12345
Encounter.identifier...
Patient.identifier
= 54321
Patient.identifier...
Condition.display
= "Diabetes Typ II"
Condition.display...
Observation
.code = "Blutzucker"
.value = "201 mg/dl"
Observation...
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Material/ISiK Stufe 2 Vereinfachtes Infomodell.drawio.pdf b/Material/images/diagrams/ISiK Stufe 2 Vereinfachtes Infomodell.pdf similarity index 100% rename from Material/ISiK Stufe 2 Vereinfachtes Infomodell.drawio.pdf rename to Material/images/diagrams/ISiK Stufe 2 Vereinfachtes Infomodell.pdf diff --git a/ImplementationGuide/Images/Infomodel.png b/Material/images/diagrams/Infomodel.png similarity index 100% rename from ImplementationGuide/Images/Infomodel.png rename to Material/images/diagrams/Infomodel.png diff --git a/Material/images/diagrams/Vereinfachtes_Infomodell.svg b/Material/images/diagrams/Vereinfachtes_Infomodell.svg new file mode 100644 index 00000000..7ce36884 --- /dev/null +++ b/Material/images/diagrams/Vereinfachtes_Infomodell.svg @@ -0,0 +1,3 @@ + + +
Person im Gesundheitsberuf
Person im Gesundheit...
Prozedur
Prozedur
Diagnose
Diagnose
Kontakt (Fall)
Kontakt (Fall)
Abrechnungsfall
Abrechnungsfall
Patient
Patient
Gesetzlich Versicherter
Gesetzlich Versicher...
Selbstzahler
Selbstzahler
Bericht aus Subsystem 
Bericht aus Subsystem 
Angehöriger
Angehöriger
Text is not SVG - cannot display
\ No newline at end of file diff --git a/Material/images/src/drawio/Composition_Bundle.drawio b/Material/images/src/drawio/Composition_Bundle.drawio new file mode 100644 index 00000000..557f2acc --- /dev/null +++ b/Material/images/src/drawio/Composition_Bundle.drawio @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Material/ISiK Stufe 2 Vereinfachtes Infomodell.drawio b/Material/images/src/drawio/Vereinfachtes_Infomodell.drawio similarity index 100% rename from Material/ISiK Stufe 2 Vereinfachtes Infomodell.drawio rename to Material/images/src/drawio/Vereinfachtes_Infomodell.drawio