Compare commits

..

17 Commits

Author SHA1 Message Date
364cf5f1c9 Added more detail to metadata feedback README 2025-02-06 16:20:54 +01:00
e571681fce Added clarifying information to README 2025-02-06 16:04:59 +01:00
4f5f6b17e7 Added metadata feedback to README 2025-02-06 11:23:19 +01:00
146235236b Removed stuff accumulated during testing phase
Most of the things added during testing were not necessary and they were
removed. This had the additional advantage that many files are now identical
to their equivalents in the develop branch, making the diff more manageable.
2025-02-06 09:28:48 +01:00
0169435074 We are not using the Teiler in this pilot 2025-02-05 15:10:29 +01:00
6c71a83e70 Added startup script for metadata feedback 2025-02-05 14:30:24 +01:00
ed95dff63e Merge branch 'develop' into metadata_fb 2025-02-05 14:02:47 +01:00
3841a98a3b Push hub URL into /etc/bridgehead/bbmri.conf 2025-02-05 13:50:12 +01:00
710092c020 Autogenerate secrets for feedback-agent 2025-02-05 11:17:38 +01:00
9977578aa5 Changes for metadata feedback
These changes fall into the following categories:

* Integration of the feedback components into Traefik.
* Small tweaks to Bridgehead parameters needed by metadata feedback.
* Reverting changes made to some files for testing purposes.
2025-02-04 14:55:08 +01:00
634d4e2a4b Added comments explaining how things have been changed for local testing 2024-10-18 13:32:06 +02:00
bc24599c54 Beam suppressed
Changes have been made so that the Bridgehead can run without Beam.
2024-10-18 11:15:18 +02:00
502eef0cc8 feat: adapt secret sync for bbmri 2024-06-12 08:36:28 +00:00
c4b7620fd6 BBMRI Teiler default templates: bbmri (exporter) and bbmri-qb (reporter) 2024-04-30 14:23:38 +02:00
6a21a5b641 Move exporter and teiler to bbmri/modules 2024-04-30 14:16:59 +02:00
c04ffc5f33 Merge branch 'main' into qr_bbmri 2024-04-30 14:04:34 +02:00
b1bdf48e55 changes for the bbmri-qr 2024-04-18 13:50:14 +02:00
13 changed files with 189 additions and 303 deletions

View File

@ -23,6 +23,7 @@ This repository is the starting point for any information and tools you will nee
- [File structure](#file-structure) - [File structure](#file-structure)
- [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed) - [BBMRI-ERIC Directory entry needed](#bbmri-eric-directory-entry-needed)
- [Loading data](#loading-data) - [Loading data](#loading-data)
- [Metadata feedback](#metadata-feedback)
4. [Things you should know](#things-you-should-know) 4. [Things you should know](#things-you-should-know)
- [Auto-Updates](#auto-updates) - [Auto-Updates](#auto-updates)
- [Auto-Backups](#auto-backups) - [Auto-Backups](#auto-backups)
@ -154,7 +155,8 @@ Pay special attention to:
Clone the bridgehead repository: Clone the bridgehead repository:
```shell ```shell
sudo mkdir -p /srv/docker/ sudo mkdir -p /srv/docker/
sudo git clone -b main https://github.com/samply/bridgehead.git /srv/docker/bridgehead sudo git clone https://github.com/samply/bridgehead.git /srv/docker/bridgehead
sudo git checkout metadata_fb # Only needed if you want to use metadata feedback
``` ```
Then, run the installation script: Then, run the installation script:
@ -347,6 +349,26 @@ Normally, you will need to build your own ETL to feed the Bridgehead. However, t
You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile). You can find the profiles for generating FHIR in [Simplifier](https://simplifier.net/bbmri.de/~resources?category=Profile).
### Metadata feedback
The Bridgehead comes with a tool that allows you to associate metadata with samples. Multiple arbitrary text strings are allowed. A typical use case would be publications based on research using a sample. Here, one could lay down the DOI of the publication in the sample.
Full details of the system can be found [here](https://github.com/samply/feedback-deployment). To avail yourself of this feature, you need to
- Use the bbmri project.
- work with the ```metadata_fb``` branch of the Bridgehead repository.
- Build the feedback-agent Docker container (more details [here](https://github.com/samply/feedback-agent/)).
- Build the feedback-agent-ui Docker container (more details [here](https://github.com/samply/feedback-agent-ui/)).
The following extra environment variables need to be added to your ```/etc/bridgehead/bbmri.conf``` file:
``` code
ENABLE_EXPORTER=true
ENABLE_FEEDBACK_AGENT=true
FEEDBACK_HUB_URL=<URL for central feedback hub backend API>
FOCUS_RETRY_COUNT=256
```
## Things you should know ## Things you should know
### Auto-Updates ### Auto-Updates

View File

@ -22,6 +22,7 @@ services:
BROKER_URL: ${ERIC_BROKER_URL} BROKER_URL: ${ERIC_BROKER_URL}
PROXY_ID: ${ERIC_PROXY_ID} PROXY_ID: ${ERIC_PROXY_ID}
APP_focus_KEY: ${ERIC_FOCUS_BEAM_SECRET_SHORT} APP_focus_KEY: ${ERIC_FOCUS_BEAM_SECRET_SHORT}
APP_feedback-agent_KEY: ${FEEDBACK_AGENT_BEAM_SECRET}
PRIVKEY_FILE: /run/secrets/proxy.pem PRIVKEY_FILE: /run/secrets/proxy.pem
ALL_PROXY: http://forward_proxy:3128 ALL_PROXY: http://forward_proxy:3128
TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs TLS_CA_CERTIFICATES_DIR: /conf/trusted-ca-certs

View File

@ -0,0 +1,67 @@
version: "3.7"
services:
exporter:
image: docker.verbis.dkfz.de/ccp/dktk-exporter:latest
container_name: bridgehead-ccp-exporter
environment:
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
LOG_LEVEL: "INFO"
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
CROSS_ORIGINS: "https://${HOST}"
EXPORTER_DB_USER: "exporter"
EXPORTER_DB_PASSWORD: "${EXPORTER_DB_PASSWORD}"
EXPORTER_DB_URL: "jdbc:postgresql://exporter-db:5432/exporter"
HTTP_RELATIVE_PATH: "/ccp-exporter"
SITE: "${SITE_ID}"
HTTP_SERVLET_REQUEST_SCHEME: "https"
OPAL_PASSWORD: "${EXPORTER_OPAL_PASSWORD}"
labels:
- "traefik.enable=true"
- "traefik.http.routers.exporter_ccp.rule=PathPrefix(`/ccp-exporter`)"
- "traefik.http.services.exporter_ccp.loadbalancer.server.port=8092"
- "traefik.http.routers.exporter_ccp.tls=true"
- "traefik.http.middlewares.exporter_ccp_strip.stripprefix.prefixes=/ccp-exporter"
- "traefik.http.routers.exporter_ccp.middlewares=exporter_ccp_strip"
volumes:
- "/var/cache/bridgehead/ccp/exporter-files:/app/exporter-files/output"
exporter-db:
image: docker.verbis.dkfz.de/cache/postgres:${POSTGRES_TAG}
container_name: bridgehead-ccp-exporter-db
environment:
POSTGRES_USER: "exporter"
POSTGRES_PASSWORD: "${EXPORTER_DB_PASSWORD}"
POSTGRES_DB: "exporter"
volumes:
# Consider removing this volume once we find a solution to save Lens-queries to be executed in the explorer.
- "/var/cache/bridgehead/ccp/exporter-db:/var/lib/postgresql/data"
reporter:
image: docker.verbis.dkfz.de/ccp/dktk-reporter:latest
container_name: bridgehead-ccp-reporter
environment:
JAVA_OPTS: "-Xms1G -Xmx8G -XX:+UseG1GC"
LOG_LEVEL: "INFO"
CROSS_ORIGINS: "https://${HOST}"
HTTP_RELATIVE_PATH: "/ccp-reporter"
SITE: "${SITE_ID}"
EXPORTER_API_KEY: "${EXPORTER_API_KEY}"
EXPORTER_URL: "http://exporter:8092"
LOG_FHIR_VALIDATION: "false"
HTTP_SERVLET_REQUEST_SCHEME: "https"
# In this initial development state of the bridgehead, we are trying to have so many volumes as possible.
# However, in the first executions in the CCP sites, this volume seems to be very important. A report is
# a process that can take several hours, because it depends on the exporter.
# There is a risk that the bridgehead restarts, losing the already created export.
volumes:
- "/var/cache/bridgehead/ccp/reporter-files:/app/reports"
labels:
- "traefik.enable=true"
- "traefik.http.routers.reporter_ccp.rule=PathPrefix(`/ccp-reporter`)"
- "traefik.http.services.reporter_ccp.loadbalancer.server.port=8095"
- "traefik.http.routers.reporter_ccp.tls=true"
- "traefik.http.middlewares.reporter_ccp_strip.stripprefix.prefixes=/ccp-reporter"
- "traefik.http.routers.reporter_ccp.middlewares=reporter_ccp_strip"

View File

@ -0,0 +1,9 @@
#!/bin/bash -e
if [ "$ENABLE_EXPORTER" == true ]; then
log INFO "Exporter setup detected -- will start Exporter service."
OVERRIDE+=" -f ./$PROJECT/modules/exporter-compose.yml"
EXPORTER_DB_PASSWORD="$(echo \"This is a salt string to generate one consistent password for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 30)"
EXPORTER_API_KEY="$(echo \"This is a salt string to generate one consistent API KEY for the exporter. It is not required to be secret.\" | sha1sum | openssl pkeyutl -sign -inkey /etc/bridgehead/pki/${SITE_ID}.priv.pem | base64 | head -c 64)"
POSTGRES_TAG=15.6-alpine
fi

15
bbmri/modules/exporter.md Normal file
View File

@ -0,0 +1,15 @@
# Exporter and Reporter
## Exporter
The exporter is a REST API that exports the data of the different databases of the bridgehead in a set of tables.
It can accept different output formats as CSV, Excel, JSON or XML. It can also export data into Opal.
## Exporter-DB
It is a database to save queries for its execution in the exporter.
The exporter manages also the different executions of the same query in through the database.
## Reporter
This component is a plugin of the exporter that allows to create more complex Excel reports described in templates.
It is compatible with different template engines as Groovy, Thymeleaf,...
It is perfect to generate a document as our traditional CCP quality report.

View File

@ -0,0 +1,59 @@
version: "3.7"
services:
feedback-agent-ui:
image: "samply/feedback-agent-ui"
environment:
- VUE_APP_EXPORTER_URL=https://localhost/ccp-exporter
- VUE_APP_FB_BACKEND_URL=http://localhost:8072
labels:
- traefik.enable=true
# HTTPS
- traefik.http.routers.feedback_agent_ui_ccp_https.rule=PathPrefix(`/ccp-feedback-agent-ui`)
- traefik.http.services.feedback_agent_ui_ccp_https.loadbalancer.server.port=8096
- traefik.http.routers.feedback_agent_ui_ccp_https.entrypoints=websecure
- traefik.http.routers.feedback_agent_ui_ccp_https.tls=true
feedback-agent:
image: "samply/feedback-agent"
environment:
- SPRING_DATASOURCE_URL=jdbc:postgresql://feedback-agent-db:5432/compose-postgres
- SPRING_DATASOURCE_USERNAME=compose-postgres
- SPRING_DATASOURCE_PASSWORD=${FEEDBACK_AGENT_DB_PASSWORD}
- SPRING_JPA_HIBERNATE_DDL_AUTO=update
- BEAM_PROXY_URI=http://beam-proxy-eric:8081
- FEEDBACK_HUB_URL=${FEEDBACK_HUB_URL}
- BLAZE_BASE_URL=http://blaze:8080/fhir
- FEEDBACK_AGENT_SECRET=${FEEDBACK_AGENT_BEAM_SECRET}
- FEEDBACK_AGENT_BEAM_ID=feedback-agent.${ERIC_PROXY_ID}
- FEEDBACK_HUB_BEAM_ID=feedback-hub.feedback-central.${ERIC_BROKER_ID}
- EXPORTER_API_KEY=${EXPORTER_API_KEY}
- CORS_ALLOWED_ORIGINS="https://${HOST}
networks:
# Only needed for local testing.
- feedback
- default
labels:
- traefik.enable=true
# HTTPS
- traefik.http.routers.feedback_agent_ccp_https.rule=PathPrefix(`/ccp-feedback-agent`)
- traefik.http.services.feedback_agent_ccp_https.loadbalancer.server.port=8072
- traefik.http.routers.feedback_agent_ccp_https.entrypoints=websecure
- traefik.http.middlewares.feedback_agent_ccp_https_strip.stripprefix.prefixes=/ccp-feedback-agent
- traefik.http.routers.feedback_agent_ccp_https.middlewares=feedback_agent_ccp_https_strip
- traefik.http.routers.feedback_agent_ccp_https.tls=true
feedback-agent-db:
image: 'postgres:13.1-alpine'
container_name: feedback-agent-db
environment:
- POSTGRES_USER=compose-postgres
- POSTGRES_PASSWORD=${FEEDBACK_AGENT_DB_PASSWORD}
# This is needed when you run both agent and hub locally in a test
# environment. Not necessary in production, though it probably won't
# cause any problems.
networks:
# Network to connect agent and hub.
feedback:
name: feedback
driver: bridge

View File

@ -0,0 +1,8 @@
#!/bin/bash
if [ "$ENABLE_FEEDBACK_AGENT" == true ]; then
OVERRIDE+=" -f ./$PROJECT/modules/feedback-agent-compose.yml"
FEEDBACK_AGENT_BEAM_SECRET="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 20)"
FEEDBACK_AGENT_DB_PASSWORD="$(cat /proc/sys/kernel/random/uuid | sed 's/[-]//g' | head -c 20)"
fi

View File

@ -0,0 +1,6 @@
# Metadata feedback agent
This component can be used to choose the sample to be associated
with a given piece of metadata (generally the ID of a publication
relating to research done with the sample).

View File

@ -1,112 +0,0 @@
version: '3.7'
services:
ovis-traefik-forward-auth:
image: quay.io/oauth2-proxy/oauth2-proxy:latest
environment:
- http_proxy=${http_proxy:-http://forward_proxy:3128}
- https_proxy=${https_proxy:-http://forward_proxy:3128}
- OAUTH2_PROXY_PROVIDER=oidc
- OAUTH2_PROXY_SKIP_PROVIDER_BUTTON=true
- OAUTH2_PROXY_OIDC_ISSUER_URL=${OAUTH_ISSUER_URL}
- OAUTH2_PROXY_CLIENT_ID=${OAUTH_CLIENT_ID}
- OAUTH2_PROXY_CLIENT_SECRET=${OAUTH_CLIENT_SECRET}
- OAUTH2_PROXY_COOKIE_SECRET=${AUTHENTICATION_SECRET}
- OAUTH2_PROXY_COOKIE_DOMAINS=.${HOST:-localhost}
- OAUTH2_PROXY_COOKIE_REFRESH=4m
- OAUTH2_PROXY_COOKIE_EXPIRE=24h
- OAUTH2_PROXY_HTTP_ADDRESS=:4180
- OAUTH2_PROXY_REVERSE_PROXY=true
- OAUTH2_PROXY_WHITELIST_DOMAINS=.${HOST:-localhost}
- OAUTH2_PROXY_UPSTREAMS=static://202
- OAUTH2_PROXY_EMAIL_DOMAINS=*
#- OAUTH2_PROXY_ALLOWED_GROUPS=app-ovis
#- OAUTH2_PROXY_ERRORS_TO_INFO_LOG=true
- OAUTH2_PROXY_CODE_CHALLENGE_METHOD=S256
# For some reason, login.verbis.dkfz.de does not have a "groups" scope but this comes automatically through a
# scope called microprofile-jwt. Remove the following line once we have a "groups" scope.
- OAUTH2_PROXY_SCOPE=openid profile email
# Pass Authorization Header and some user information to spot
- OAUTH2_PROXY_SET_AUTHORIZATION_HEADER=true
- OAUTH2_PROXY_SET_XAUTHREQUEST=true
labels:
- "traefik.enable=true"
- "traefik.http.middlewares.ovis-traefik-forward-auth.forwardauth.address=http://ovis-traefik-forward-auth:4180"
- "traefik.http.middlewares.ovis-traefik-forward-auth.forwardauth.authResponseHeaders=Authorization, X-Forwarded-User, X-Auth-Request-User, X-Auth-Request-Email"
- "traefik.http.services.ovis-traefik-forward-auth.loadbalancer.server.port=4180"
- "traefik.http.routers.oauth2.rule=Host(`${HOST:-localhost}`) && PathPrefix(`/oauth2-ovis/`)"
- "traefik.http.routers.oauth2.tls=true"
fhir-transformer:
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-fhir-transformer:latest
restart: on-failure
environment:
- FHIR_SERVER_URL=${FHIR_SERVER_URL:-http://bridgehead-ccp-blaze:8080/fhir}
- FHIR_USERNAME=${FHIR_USERNAME}
- FHIR_PASSWORD=${FHIR_PASSWORD}
volumes:
- /var/cache/bridgehead/ccp/ovis/shared_data:/app/output
mongo:
image: mongo:${MONGO_VER:-latest}
restart: always
command: mongod
- /var/cache/bridgehead/ccp/ovis/mongo/init/init.js:/docker-entrypoint-initdb.d/init.js
backend:
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-backend:latest
restart: always
user: root
working_dir: /app
environment:
- APOLLO_PORT=${APOLLO_PORT:-4001}
- CREDOS_PORT=${CREDOS_PORT:-4000}
- MONGO_VER=latest
- CORS_ORIGIN=*
- DB=${DB:-onc_test}
- ADRESS=${ADRESS:-mongodb://mongo:27017}
depends_on:
- mongo
- fhir-transformer
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:${APOLLO_PORT:-4001}/health"]
interval: 5s
timeout: 3s
retries: 5
start_period: 10s
entrypoint: >
sh -c "
# First run the initialization process
while [ ! -f /shared/omock.json ]; do
echo 'Waiting for omock.json...'
sleep 5
done;
mkdir -p ./prep &&
cp /shared/omock.json ./prep/omock.json &&
node ./mgDB/prep/preprocessor.mjs &&
echo 'Processing complete' &&
exec node --watch index.js"
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-backend.rule=Host(`${HOST:-localhost}`) && PathPrefix(`/graphql`)"
- "traefik.http.routers.ovis-backend.tls=true"
- "traefik.http.services.ovis-backend.loadbalancer.server.port=${APOLLO_PORT:-4001}"
volumes:
- /var/cache/bridgehead/ccp/ovis/shared_data:/shared
frontend:
image: docker.verbis.dkfz.de/ovis/adt-mon-gql-frontend:latest
restart: always
environment:
- PUBLIC_GRAPHQL_URL=https://${HOST:-localhost}/graphql
depends_on:
backend:
condition: service_healthy
working_dir: /app
labels:
- "traefik.enable=true"
- "traefik.http.routers.ovis-frontend.tls=true"
- "traefik.http.routers.ovis-frontend.rule=Host(`${HOST:-localhost}`)"
- "traefik.http.routers.ovis-frontend.middlewares=traefik-forward-auth"
- "traefik.http.services.ovis-frontend.loadbalancer.server.port=5173"

View File

@ -1,108 +0,0 @@
#!/bin/bash -e
if [ -n "$ENABLE_OVIS" ];then
# Setup MongoDB initialization directory if it doesn't exist
mkdir -p "/var/cache/bridgehead/ccp/ovis/mongo/init"
# Generate MongoDB initialization script directly
cat > "/var/cache/bridgehead/ccp/ovis/mongo/init/init.js" << 'EOF'
db = db.getSiblingDB("test_credos");
db.createCollection("user");
db.user.insertMany([{
"_id": "OVIS-Root",
"createdAt": new Date(),
"createdBy": "system",
"role": "super-admin",
"status": "active",
"pseudonymization": false,
"darkMode": false,
"colorTheme": "CCCMunich",
"language": "de",
}]);
db = db.getSiblingDB("onc_test");
db.createCollection("user");
db.user.insertMany([{
"_id": "OVIS-Root",
"createdAt": new Date(),
"createdBy": "system",
"role": "super-admin",
"status": "active",
"pseudonymization": false,
"darkMode": false,
"colorTheme": "CCCMunich",
"language": "de",
}]);
db.ops.insertMany([
{"OPSC_4":"1-40","OPS_Gruppen_Text":"Biopsie ohne Inzision an Nervensystem und endokrinen Organen "},
{"OPSC_4":"1-44","OPS_Gruppen_Text":"Biopsie ohne Inzision an den Verdauungsorganen"},
{"OPSC_4":"1-40","OPS_Gruppen_Text":"Biopsie ohne Inzision an anderen Organen und Geweben"},
{"OPSC_4":"1-50","OPS_Gruppen_Text":"Biopsie an Haut, Mamma, Knochen und Muskeln durch Inzision"},
{"OPSC_4":"1-51","OPS_Gruppen_Text":"Biopsie an Nervengewebe, Hypophyse, Corpus pineale durch Inzision und Trepanation von Schädelknochen "},
{"OPSC_4":"1-55","OPS_Gruppen_Text":"Biopsie an anderen Verdauungsorganen, Zwerchfell und (Retro-)Peritoneum durch Inzision "},
{"OPSC_4":"1-56","OPS_Gruppen_Text":"Biopsie an Harnwegen und männlichen Geschlechtsorgannen durch Inzision"},
{"OPSC_4":"1-58","OPS_Gruppen_Text":"Biopsie an anderen Organen durch Inzision "},
{"OPSC_4":"1-63","OPS_Gruppen_Text":"Diagnostische Endoskopie des oberen Verdauungstraktes"},
{"OPSC_4":"1-65","OPS_Gruppen_Text":"Diagnostische Endoskopie des unteren Verdauungstraktes"},
{"OPSC_4":"1-69","OPS_Gruppen_Text":"Diagnostische Endoskopie durch Inzision und intraoperativ "},
{"OPSC_4":"5-01","OPS_Gruppen_Text":"Inzision (Trepanation) und Exzision an Schädel, Gehirn und Hirnhäuten"},
{"OPSC_4":"5-02","OPS_Gruppen_Text":"Andere Operationen an Schädel, Gehirn und Hirnhäuten"},
{"OPSC_4":"5-03","OPS_Gruppen_Text":"Operationen an Rückenmark, Rückenmarkhäuten und Spinalkanal"},
{"OPSC_4":"5-05","OPS_Gruppen_Text":"Andere Operationen an Nerven und Nervenganglien "},
{"OPSC_4":"5-06","OPS_Gruppen_Text":"Operationen an Schilddrüse und Nebenschilddrüse "},
{"OPSC_4":"5-07","OPS_Gruppen_Text":"Operationen an anderen endokrinen Drüsen "},
{"OPSC_4":"5-20","OPS_Gruppen_Text":"Andere Operationen an Mittel- und Innenohr "},
{"OPSC_4":"5-25","OPS_Gruppen_Text":"Operationen an der Zunge "},
{"OPSC_4":"5-31","OPS_Gruppen_Text":"Andere Larynxoperationen und Operationen an der Trachea "},
{"OPSC_4":"5-32","OPS_Gruppen_Text":"Exzision und Resektion an Lunge und Bronchus "},
{"OPSC_4":"5-33","OPS_Gruppen_Text":"Andere Operationen an Lunge und Bronchus"},
{"OPSC_4":"5-34","OPS_Gruppen_Text":"Operationen an Brustwand, Pleura, Mediastinum und Zwerchfell "},
{"OPSC_4":"5-37","OPS_Gruppen_Text":"Rhythmuschirurgie und andere Operationen an Herz und Perikard"},
{"OPSC_4":"5-38","OPS_Gruppen_Text":"Inzision, Exzision und Verschluß von Blutgefäßen "},
{"OPSC_4":"5-39","OPS_Gruppen_Text":"Andere Operationen an Blutgefäßen "},
{"OPSC_4":"5-40","OPS_Gruppen_Text":"Operationen am Lymphgewebe "},
{"OPSC_4":"5-41","OPS_Gruppen_Text":"Operationen an Milz und Knochenmark "},
{"OPSC_4":"5-42","OPS_Gruppen_Text":"Operationen am Ösophagus "},
{"OPSC_4":"5-43","OPS_Gruppen_Text":"Inzision, Exzision und Resektion am Magen "},
{"OPSC_4":"5-44","OPS_Gruppen_Text":"Erweiterte Magenresektion und andere Operationen am Magen "},
{"OPSC_4":"5-45","OPS_Gruppen_Text":"Inzision, Exzision, Resektion und Anastomose an Dünn- und Dickdarm "},
{"OPSC_4":"5-46","OPS_Gruppen_Text":"Andere Operationen an Dünn- und Dickdarm "},
{"OPSC_4":"5-47","OPS_Gruppen_Text":"Operationen an der Appendix "},
{"OPSC_4":"5-48","OPS_Gruppen_Text":"Operationen am Rektum "},
{"OPSC_4":"5-49","OPS_Gruppen_Text":"Operationen am Anus "},
{"OPSC_4":"5-50","OPS_Gruppen_Text":"Operationen an der Leber "},
{"OPSC_4":"5-51","OPS_Gruppen_Text":"Operationen an Gallenblase und Gallenwegen "},
{"OPSC_4":"5-52","OPS_Gruppen_Text":"Operationen am Pankreas "},
{"OPSC_4":"5-53","OPS_Gruppen_Text":"Verschluß abdominaler Hernien "},
{"OPSC_4":"5-54","OPS_Gruppen_Text":"Andere Operationen in der Bauchregion "},
{"OPSC_4":"5-55","OPS_Gruppen_Text":"Operationen an der Niere "},
{"OPSC_4":"5-56","OPS_Gruppen_Text":"Operationen am Ureter "},
{"OPSC_4":"5-57","OPS_Gruppen_Text":"Operationen an der Harnblase "},
{"OPSC_4":"5-59","OPS_Gruppen_Text":"Andere Operationen an den Harnorganen "},
{"OPSC_4":"5-60","OPS_Gruppen_Text":"Operationen an Prostata und Vesiculae seminales "},
{"OPSC_4":"5-61","OPS_Gruppen_Text":"Operationen an Skrotum und Tunica vaginalis testis"},
{"OPSC_4":"5-62","OPS_Gruppen_Text":"Operationen am Hoden "},
{"OPSC_4":"5-65","OPS_Gruppen_Text":"Operationen am Ovar "},
{"OPSC_4":"5-68","OPS_Gruppen_Text":"Inzision, Exzision und Exstirpation des Uterus "},
{"OPSC_4":"5-70","OPS_Gruppen_Text":"Operationen an Vagina und Douglasraum "},
{"OPSC_4":"5-71","OPS_Gruppen_Text":"Operationen an der Vulva "},
{"OPSC_4":"5-85","OPS_Gruppen_Text":"Operationen an Muskeln, Sehnen, Faszien und Schleimbeuteln"},
{"OPSC_4":"5-87","OPS_Gruppen_Text":"Exzision und Resektion der Mamma "},
{"OPSC_4":"5-89","OPS_Gruppen_Text":"Operationen an Haut und Unterhaut "},
{"OPSC_4":"5-90","OPS_Gruppen_Text":"Operative Wiederherstellung und Rekonstruktion von Haut und Unterhaut"},
{"OPSC_4":"5-91","OPS_Gruppen_Text":"Andere Operationen an Haut und Unterhaut "},
{"OPSC_4":"5-93","OPS_Gruppen_Text":"Angaben zum Transplantat und zu verwendeten Materialien"},
{"OPSC_4":"5-98","OPS_Gruppen_Text":"Spezielle Operationstechniken und Operationen bei speziellen Versorgungssituationen "},
{"OPSC_4":"8-13","OPS_Gruppen_Text":"Manipulation am Harntrakt"},
{"OPSC_4":"8-14","OPS_Gruppen_Text":"Therapeutische Kathedirisierung, Aspiration, Punktion und Spülung "},
{"OPSC_4":"8-15","OPS_Gruppen_Text":"Therapeutische Aspiration und Entleerung durch Punktion "},
{"OPSC_4":"8-17","OPS_Gruppen_Text":"Spülung (Lavage) "},
{"OPSC_4":"8-19","OPS_Gruppen_Text":"Verbände "},
{"OPSC_4":"8-77","OPS_Gruppen_Text":"Maßnahmen im Rahmen der Reanimation "},
{"OPSC_4":"8-92","OPS_Gruppen_Text":"Neurologisches Monitoring "},
])
EOF
OVERRIDE+=" -f ./$PROJECT/modules/ovis-compose.yml"
fi

View File

@ -17,12 +17,4 @@ do
done done
idManagementSetup idManagementSetup
obds2fhirRestSetup obds2fhirRestSetup
for module in modules/*.sh
do
log DEBUG "sourcing $module"
source $module
done
transfairSetup

View File

@ -1,51 +0,0 @@
services:
transfair:
image: docker.verbis.dkfz.de/cache/samply/transfair:latest
container_name: bridgehead-transfair
environment:
# NOTE: Those 3 variables need only to be passed if their set, otherwise transfair will complain about empty url values
- INSTITUTE_TTP_URL
- INSTITUTE_TTP_API_KEY
- PROJECT_ID_SYSTEM
- FHIR_REQUEST_URL=${FHIR_REQUEST_URL}
- FHIR_INPUT_URL=${FHIR_INPUT_URL}
- FHIR_OUTPUT_URL=${FHIR_OUTPUT_URL:-http://blaze:8080}
- FHIR_REQUEST_CREDENTIALS=${FHIR_REQUEST_CREDENTIALS}
- FHIR_INPUT_CREDENTIALS=${FHIR_INPUT_CREDENTIALS}
- FHIR_OUTPUT_CREDENTIALS=${FHIR_OUTPUT_CREDENTIALS}
- EXCHANGE_ID_SYSTEM=${EXCHANGE_ID_SYSTEM:-SESSION_ID}
- DATABASE_URL=sqlite://transfair/data_requests.sql?mode=rwc
- RUST_LOG=${RUST_LOG:-info}
volumes:
- /var/cache/bridgehead/${PROJECT}/transfair:/transfair
transfair-input-blaze:
image: docker.verbis.dkfz.de/cache/samply/blaze:0.28
container_name: bridgehead-transfair-input-blaze
environment:
BASE_URL: "http://bridgehead-transfair-input-blaze:8080"
JAVA_TOOL_OPTIONS: "-Xmx1024m"
DB_BLOCK_CACHE_SIZE: 1024
CQL_EXPR_CACHE_SIZE: 8
ENFORCE_REFERENTIAL_INTEGRITY: "false"
volumes:
- "transfair-input-blaze-data:/app/data"
profiles: ["transfair-input-blaze"]
transfair-request-blaze:
image: docker.verbis.dkfz.de/cache/samply/blaze:0.28
container_name: bridgehead-transfair-requests-blaze
environment:
BASE_URL: "http://bridgehead-transfair-requests-blaze:8080"
JAVA_TOOL_OPTIONS: "-Xmx1024m"
DB_BLOCK_CACHE_SIZE: 1024
CQL_EXPR_CACHE_SIZE: 8
ENFORCE_REFERENTIAL_INTEGRITY: "false"
volumes:
- "transfair-request-blaze-data:/app/data"
profiles: ["transfair-request-blaze"]
volumes:
transfair-input-blaze-data:
transfair-request-blaze-data:

View File

@ -1,22 +0,0 @@
#!/bin/bash -e
function transfairSetup() {
if [[ -n "$INSTITUTE_TTP_URL" || -n "$EXCHANGE_ID_SYSTEM" ]]; then
echo "Starting transfair."
OVERRIDE+=" -f ./modules/transfair-compose.yml"
if [ -n "$FHIR_INPUT_URL" ]; then
log INFO "TransFAIR input fhir store set to external $FHIR_INPUT_URL"
else
log INFO "TransFAIR input fhir store not set writing to internal blaze"
FHIR_INPUT_URL="http://transfair-input-blaze:8080"
OVERRIDE+=" --profile transfair-input-blaze"
fi
if [ -n "$FHIR_REQUEST_URL" ]; then
log INFO "TransFAIR request fhir store set to external $FHIR_REQUEST_URL"
else
log INFO "TransFAIR request fhir store not set writing to internal blaze"
FHIR_REQUEST_URL="http://transfair-requests-blaze:8080"
OVERRIDE+=" --profile transfair-request-blaze"
fi
fi
}