bzkf / obds-to-fhir

This project contains a Kafka Stream processor that creates FHIR resources from oBDS-XML data and writes them to a FHIR Topic.
GNU General Public License v3.0
3 stars 3 forks source link

Ersetzen der statischen code-lookup HashMaps durch einen TermServer-Ansatz #70

Open chgl opened 3 months ago

chgl commented 3 months ago

Aktuell sind viele oBDS->FHIR coding mappings hart-codiert in HashMaps. In den neuen Onko-Profilen werden ConceptMaps definiert die diese Mappings auf FHIR-native Art abbilden: https://simplifier.net/medizininformatikinitiative-modulonkologie/~resources?category=ConceptMap

Mappings können dann via $translate-calls umgesetzt werden: https://hl7.org/fhir/R4B/conceptmap-operation-translate.html

Für die lokale Entwicklung könnte man diese in einen HAPI FHIR server laden, oder einen externen TermServer nutzen (MII?).

pcvolkmer commented 3 months ago

Hier mal eine (unvollständige) Übersicht der Lookup-Klassen und den URLs zu simplifier.net, auch mit ValueSets und CodeSystems neben den ConceptMaps. An einigen Stellen sind mehr Mapping-Werte vorhanden, als in den Lookup-Klassen.

Lookup-Klasse Url
BeurteilungResidualstatusVsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-gesamtbeurteilung-residualstatus
DisplayAdtSeitenlokalisationLookup https://simplifier.net/MedizininformatikInitiative-ModulOnkologie/mii-cs-onko-seitenlokalisation
FMLokalisationVsLookup ?
GradingLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-cs-onko-grading, https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-cm-onko-grading-sct
JnuVsLookup ?
OPIntentionVsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-operation-intention
OPKomplikationVsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-cs-onko-operation-komplikation
SideEffectTherapyGradingLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-cs-onko-nebenwirkung-ctcae-grad, https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-cm-onko-nebenwirkung-sct
SnomedCtSeitenlokalisationLookup https://simplifier.net/MedizininformatikInitiative-ModulOnkologie/mii-cm-onko-seitenlokalisation-sct
StellungOpVsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-systemische-therapie-stellung
SystIntentionVsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-systemische-therapie-intention
SYSTTherapieartCSLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-systemische-therapie-art
TnmCpuPraefixTvsLookup https://simplifier.net/medizininformatikinitiative-modulonkologie/mii-vs-onko-tnm-cp-praefix
pcvolkmer commented 3 months ago

Da für ValueSets und CodeSystems der FHIR-Op $translate nicht verfügbar ist, könnte ein Client auch die möglichen Werte laden und das Mapping selbst vornehmen.

Beispiele (curl mit JSONPath) zum Auffinden anhand des Codes:

Anderenfalls müsste alles als ConceptMap vorliegen und der verwendete FHIR-Server $translate unterstützen. Soweit ich weiß unterstützt z.B. der oft genutzte https://github.com/samply/blaze dies (noch) nicht.

chgl commented 3 months ago

Für den HAPI FHIR kann man zB so IGs laden:

services:
  hapi-fhir-server:
    image: docker.io/hapiproject/hapi:v7.2.0@sha256:9bcafa8342b572eee248cb7c48c496863d352bbd0347e1d98ea238d09620e89b
    restart: unless-stopped
    cap_drop:
      - ALL
    ipc: none
    security_opt:
      - "no-new-privileges:true"
    read_only: true
    tmpfs:
      - /tmp
      - /app/target
    privileged: false
    environment:
      SPRING_DATASOURCE_URL: "jdbc:postgresql://hapi-fhir-db:5432/fhir?currentSchema=public"
      SPRING_DATASOURCE_USERNAME: postgres
      # kics-scan ignore-line
      SPRING_DATASOURCE_PASSWORD: postgres
      SPRING_DATASOURCE_DRIVERCLASSNAME: org.postgresql.Driver
      spring.jpa.properties.hibernate.dialect: ca.uhn.fhir.jpa.model.dialect.HapiFhirPostgres94Dialect
      HAPI_FHIR_VALIDATION_REQUESTS_ENABLED: "false"
      HAPI_FHIR_USE_APACHE_ADDRESS_STRATEGY: "true"
      HAPI_FHIR_ENFORCE_REFERENTIAL_INTEGRITY_ON_DELETE: "false"
      HAPI_FHIR_ENFORCE_REFERENTIAL_INTEGRITY_ON_WRITE: "false"
      HAPI_FHIR_SUBSCRIPTION_RESTHOOK_ENABLED: "false"
      HAPI_FHIR_ALLOW_MULTIPLE_DELETE: "true"
      HAPI_FHIR_BULK_IMPORT_ENABLED: "false"
      HAPI_FHIR_IMPLEMENTATIONGUIDES_MIIONKOLOGIE_PACKAGEURL: "https://packages.simplifier.net/de.medizininformatikinitiative.kerndatensatz.onkologie/2024.0.0-ballot-beta-1"
      HAPI_FHIR_IMPLEMENTATIONGUIDES_MIIONKOLOGIE_VERSION: "2024.0.0-ballot-beta-1"
      HAPI_FHIR_IMPLEMENTATIONGUIDES_MIIONKOLOGIE_NAME: "de.medizininformatikinitiative.kerndatensatz.onkologie"
    depends_on:
      - hapi-fhir-db
    ports:
      - "127.0.0.1:8084:8080"

  hapi-fhir-db:
    image: docker.io/bitnami/postgresql:16.4.0@sha256:6bea1699d088605204841b889fb79d7572030a36ec5731e736d73cd33018cc03
    restart: unless-stopped
    environment:
      # kics-scan ignore-line
      POSTGRESQL_PASSWORD: postgres
      POSTGRESQL_DATABASE: fhir

Allerdings klappt zB GET http://localhost:8084/fhir/ConceptMap/$translate?system=https://www.medizininformatik-initiative.de/fhir/ext/modul-onko/CodeSystem/mii-cs-onko-verlauf-primaertumor&code=K&targetSystem=http://snomed.info/sct auf anhieb nicht. Das kann aber auch Anwenderfehler sein.

pcvolkmer commented 3 months ago

Allerdings klappt zB GET http://localhost:8084/fhir/ConceptMap/$translate?system=https://www.medizininformatik-initiative.de/fhir/ext/modul-onko/CodeSystem/mii-cs-onko-verlauf-primaertumor&code=K&targetSystem=http://snomed.info/sct auf anhieb nicht. Das kann aber auch Anwenderfehler sein.

Bei ConceptMaps funktioniert es, bei ValueSets und CodeSystems leider nicht (Siehe auch: https://github.com/bzkf/obds-to-fhir/issues/70#issuecomment-2287145307). Eventuell könnte dies ein Problem werden.

chgl commented 3 months ago

Ah jetzt, also bei den ValueSets und CodeSystem lookup Klassen nutzen wir das primär um das display zu bekommen - dafür würde sich dann $lookup anbieten: https://www.hl7.org/fhir/codesystem-operation-lookup.html - ValueSet beschreibt auch nur eine Teilmenge von einem oder mehreren CodeSystem.