Gesundheitsdaten, die wirklich funktionieren
Hochwertige Daten sind das Fundament einer effektiven digitalen Gesundheitsversorgung – doch diese Daten zu erfassen und auszuwerten ist alles andere als einfach. Viele Gesundheitsorganisationen kämpfen noch immer mit fragmentierten Datensätzen, inkonsistenten Patienteneingaben und zeitaufwändigen manuellen Workflows, die die Entscheidungsfindung behindern und die Versorgung verlangsamen. Genau hier kommen Aidbox Forms und SQL on FHIR ins Spiel. Diese leistungsstarken Werkzeuge verändern grundlegend, wie Versorgungsteams Daten erheben und damit arbeiten.
Aidbox Forms ermöglicht die Erstellung strukturierter digitaler Formulare, die SNOMED CT- oder LOINC-Codes zur Standardisierung der Eingabe verwenden, Berechnungen wie den BMI automatisieren und Datenqualität sowie Interoperabilität sicherstellen – wodurch Fehler, die bei der papiergestützten Erfassung häufig auftreten, vermieden werden. Nach der Erfassung wandelt SQL on FHIR komplexe FHIR-Ressourcen in abfragbare Tabellen um und ermöglicht es Versorgungsteams, Daten zu analysieren und zu visualisieren, ohne sich durch verschachtelte Strukturen arbeiten zu müssen. Gemeinsam optimieren diese Werkzeuge Workflows, reduzieren den manuellen Aufwand und entlasten Versorgungsteams, damit sie sich auf das Wesentliche konzentrieren können: eine bessere Patientenversorgung.
In diesem Artikel führen wir Sie anhand eines konkreten Beispiels durch den gesamten Prozess: ein Risikobeurteilungsformular, das darauf ausgelegt ist, Lebensstilkennzahlen wie Raucherstatus, Alkoholkonsum, körperliche Aktivität und Ernährungsgewohnheiten zu erfassen. Das vollständige Formular finden Sie in der Aidbox Form Gallery. Der Einfachheit halber konzentrieren wir uns auf einen Ausschnitt dieses Formulars und behandeln Raucherstatus und BMI.

1. Datenerfassung mit FHIR SDC
Bevor eine sinnvolle Analyse stattfinden kann, müssen Daten auf strukturierte und einheitliche Weise erfasst werden – und genau hier kommt FHIR Structured Data Capture (SDC) ins Spiel. In FHIR werden Formulare als Questionnaire-Ressourcen erstellt, und ausgefüllte Formulare werden als QuestionnaireResponse-Ressourcen gespeichert. Mit anderen Worten: Die Daten sind so strukturiert und standardisiert, dass sie einfach systemübergreifend geteilt, verstanden und wiederverwendet werden können – ein entscheidender Faktor für koordinierte Versorgung und systemweite Analysen. FHIR SDC bietet zudem leistungsstarke Funktionen, darunter:
- Automatisch befüllte Felder auf Basis vorhandener Patientendaten, um redundante Eingaben zu reduzieren
- Automatisierte Berechnungen, wie den BMI aus Körpergröße und -gewicht oder das Alter aus dem Geburtsdatum
- Erweiterte Steuerelemente und Logik, um Benutzer intuitiv durch komplexe Formulare zu führen
Sehen wir uns das in der Praxis an, indem wir mit dem Aidbox Form Builder ein digitales Formular erstellen. Unser Beispiel konzentriert sich auf die Erfassung einiger wichtiger Lebensstilkennzahlen: Raucherstatus, Körpergröße und -gewicht, wobei der BMI automatisch berechnet wird. Nachfolgend ist dargestellt, wie die Questionnaire-Ressource aussehen wird:
{
"resourceType": "Questionnaire",
"id": "health-metrics",
"title": "Health Metrics",
"status": "active",
"item": [
{
"linkId": "smoking-status",
"text": "What is your smoking status?",
"type": "choice",
"answerOption": [
{"valueCoding": {"code": "266919005", "display": "Never smoked", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "449868002", "display": "Current smoker", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "8517006", "display": "Former smoker", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "266927001", "display": "Passive smoker", "system": "http://snomed.info/sct"}}
]
},
{
"linkId": "height",
"text": "What is your height (in cm)?",
"type": "decimal"
},
{
"linkId": "weight",
"text": "What is your weight (in kg)?",
"type": "decimal"
},
{
"linkId": "bmi",
"text": "Body Mass Index (calculated)",
"type": "decimal",
"readOnly": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-calculatedExpression",
"valueExpression": {
"language": "text/fhirpath",
"expression": "weight / ((height / 100) * (height / 100))"
}
}
]
}
]
}
Dieses Formular standardisiert wesentliche Lebensstileingaben:
- Der Raucherstatus wird mit SNOMED CT kodiert, um semantische Konsistenz zu gewährleisten.
- Körpergröße und -gewicht werden in metrischen Einheiten erfasst.
- Der BMI wird mithilfe eines FHIRPath-Ausdrucks in Echtzeit berechnet, was die Effizienz steigert und manuelle Fehler reduziert.
Durch den Einsatz von FHIR SDC und Werkzeugen wie dem Aidbox Form Builder können Versorgungsteams hochwertige, interoperable Daten erheben.
2. Daten für die Analyse strukturieren
Die Datenerfassung ist nur der erste Schritt – der eigentliche Mehrwert entsteht, wenn die Daten für Analyse und Wiederverwendung strukturiert werden. In FHIR werden ausgefüllte Formulare als QuestionnaireResponse-Ressourcen gespeichert. Dieses Format eignet sich gut, um festzuhalten, was ein Patient eingereicht hat, und ist direkt mit den Fragen des Formulars verknüpft. Für reale Anforderungen im Gesundheitswesen ist es jedoch häufig nicht ausreichend.
Hier ist der Grund dafür.
Eine QuestionnaireResponse speichert Rohdaten, die eng an die ursprüngliche Formularstruktur gekoppelt sind. Sie kann beispielsweise erfassen, dass ein Patient „Raucher" ist oder einen berechneten BMI aufweist – doch um diese Information später abzurufen, müssen Systeme das spezifische Layout des Formulars kennen. Das erschwert sowohl die patientenübergreifende Abfrage als auch die Weitergabe von Daten an andere Systeme erheblich. Hinzu kommt, dass QuestionnaireResponse nicht darauf ausgelegt ist, klinische Workflows zu unterstützen, wie etwa die Anzeige von Verläufen über die Zeit, die Befüllung von Patientenakten oder die Auslösung klinischer Entscheidungsunterstützung.
Um dieses Problem zu lösen, können Schlüsselantworten extrahiert und in strukturierte FHIR-Ressourcen wie Observation umgewandelt werden. Hier kommt Aidbox Forms ein erheblicher Mehrwert zugute.
Wenn Sie die Extraktion aktivieren, wandelt Aidbox Forms ausgewählte Antworten in eigenständige, wiederverwendbare Observations um.
Zum Beispiel:
- Ein Raucherstatus von „Raucher" wird zu einer Observation, die mit LOINC 72166-2 (Tabakraucherstatus) und SNOMED CT für den Antwortwert kodiert ist.
- Der berechnete BMI wird mit LOINC 39156-5 extrahiert; Körpergröße und -gewicht können auf ähnliche Weise mit Standardcodes behandelt werden.
Diese Trennung bietet wesentliche Vorteile:
- Interoperabilität: Observations entsprechen weit verbreiteten FHIR-Profilen wie US Core, sodass andere Systeme sie interpretieren können, ohne das Originalformular zu benötigen.
- Flexibilität: Diskrete Observations können unabhängig abgefragt werden – etwa um alle Patienten mit einem BMI über 30 zu finden – ohne QuestionnaireResponse-Strukturen durchsuchen zu müssen.
- Kontextuelle Nutzung: Observations können mit Patienten, Begegnungen oder Zeitstempeln verknüpft werden und unterstützen so die Längsschnittverfolgung oder klinische Entscheidungsfindung.
- Mehrere Quellen: Daten können aus verschiedenen Quellen stammen – Fragebögen, Wearables oder elektronische Patientenakten. Die Extraktion in Observations standardisiert sie in einem gemeinsamen Format und ermöglicht eine nahtlose Integration und Analyse unabhängig von der Herkunft.
Mit dem Aidbox Form Builder lässt sich einfach festlegen, welche Antworten extrahiert werden sollen. Sie konfigurieren dazu einfach die entsprechenden Elemente im Formular mit der observationExtract-Extension. Hier ist derselbe health-metrics-Fragebogen aus Abschnitt 1, nun mit konfigurierter Extraktion für „smoking-status" und „bmi":
{
"resourceType": "Questionnaire",
"id": "health-metrics",
"title": "Health Metrics",
"status": "active",
"item": [
{
"linkId": "smoking-status",
"text": "What is your smoking status?",
"type": "choice",
"answerOption": [
{"valueCoding": {"code": "266919005", "display": "Never smoked", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "449868002", "display": "Current smoker", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "8517006", "display": "Former smoker", "system": "http://snomed.info/sct"}},
{"valueCoding": {"code": "266927001", "display": "Passive smoker", "system": "http://snomed.info/sct"}}
],
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/sdc-questionnaire-observationExtract",
"valueBoolean": true
},
{
"url": "http://hl7.org/fhir/StructureDefinition/sdc-questionnaire-observationExtract-code",
"valueCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "72166-2", "display": "Tobacco smoking status"}]}
}
]
},
{
"linkId": "height",
"text": "What is your height (in cm)?",
"type": "decimal"
},
{
"linkId": "weight",
"text": "What is your weight (in kg)?",
"type": "decimal"
},
{
"linkId": "bmi",
"text": "Body Mass Index (calculated)",
"type": "decimal",
"readOnly": true,
"extension": [
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-calculatedExpression",
"valueExpression": {
"language": "text/fhirpath",
"expression": "weight / ((height / 100) * (height / 100))"
}
},
{
"url": "http://hl7.org/fhir/StructureDefinition/sdc-questionnaire-observationExtract",
"valueBoolean": true
},
{
"url": "http://hl7.org/fhir/StructureDefinition/questionnaire-observationLinkPeriod",
"valueDuration": {"value": 0, "unit": "days", "system": "http://unitsofmeasure.org"}
},
{
"url": "http://hl7.org/fhir/StructureDefinition/sdc-questionnaire-observationExtract-code",
"valueCodeableConcept": {"coding": [{"system": "http://loinc.org", "code": "39156-5", "display": "Body Mass Index"}]}
}
]
}
]
}
Angenommen, ein Patient gibt Folgendes an:
- Raucherstatus: „Raucher"
- Körpergröße: 170 cm
- Körpergewicht: 70 kg
- BMI: (berechnet als 24,22)
Die resultierende QuestionnaireResponse würde (vereinfacht) so aussehen:
{
"resourceType": "QuestionnaireResponse",
"questionnaire": "Questionnaire/health-metrics",
"status": "completed",
"subject": {"reference": "Patient/123"},
"item": [
{
"linkId": "smoking-status",
"answer": [{"valueCoding": {"code": "449868002", "display": "Current smoker", "system": "http://snomed.info/sct"}}]
},
{"linkId": "height", "answer": [{"valueDecimal": 170}]},
{"linkId": "weight", "answer": [{"valueDecimal": 70}]},
{"linkId": "bmi", "answer": [{"valueDecimal": 24.22}]}
]
}
Dank der observationExtract-Extension generiert Aidbox Forms automatisch diese Observation-Ressourcen für die markierten Elemente:
Observation zum Raucherstatus:
{
"resourceType": "Observation",
"status": "final",
"code": {"coding": [{"system": "http://loinc.org", "code": "72166-2", "display": "Tobacco smoking status"}]},
"subject": {"reference": "Patient/123"},
"valueCodeableConcept": {"coding": [{"system": "http://snomed.info/sct", "code": "449868002", "display": "Current smoker"}]}
}
BMI-Observation:
{
"resourceType": "Observation",
"status": "final",
"code": {"coding": [{"system": "http://loinc.org", "code": "39156-5", "display": "Body Mass Index"}]},
"subject": {"reference": "Patient/123"},
"valueQuantity": {"value": 24.22, "unit": "kg/m2", "system": "http://unitsofmeasure.org"}
}
Aidbox Forms automatisiert diese Extraktion und bildet Antworten auf ein abfragefreundliches Format ab, sodass Versorgungsteams keine Zeit mit manueller Datenvorbereitung verschwenden. Körpergröße und -gewicht verbleiben hier in der QuestionnaireResponse, da sie nicht für die Extraktion konfiguriert wurden – das lässt sich jedoch leicht ändern, indem dieselben Extensions hinzugefügt werden, sodass sie systemübergreifend einfach abgerufen und geteilt werden können.
3. ViewDefinitions für die Analyse mit SQL on FHIR erstellen
Die Analyse von Gesundheitsdaten sollte intuitiv sein. SQL on FHIR ermöglicht es Ihnen, FHIR-Ressourcen mit vertrautem SQL-Syntax abzufragen – etwa um Raucher zu zählen oder BMI-Verläufe zu verfolgen. Es gibt jedoch eine Herausforderung: FHIR-Daten wie Observations werden in einem verschachtelten, hierarchischen Format gespeichert, das für Standard-SQL-Werkzeuge nicht ohne Weiteres geeignet ist. Hier werden ViewDefinitions, eine Funktion im Werkzeugkasten von Health Samurai, unverzichtbar.
Ohne ViewDefinitions bedeutet die direkte Abfrage von FHIR-Ressourcen, sich durch tief verschachtelte JSON-Strukturen zu navigieren. Eine typische Observation enthält Arrays von Codierungen, Verweise auf andere Ressourcen und eingebettete Datentypen. Der Versuch, alle Einträge mit dem Status „Raucher" zu finden, würde beispielsweise erfordern, jedes valueCodeableConcept.coding-Feld zu parsen – das ist mühsam und fehleranfällig, wenn man sich auf einfaches SQL verlässt. ViewDefinitions lösen dieses Problem, indem sie FHIR-Daten abflachen und in eine tabellarische Ansicht überführen, die wie eine herkömmliche Datenbanktabelle verwendet werden kann.
Hier ist der Nutzen von ViewDefinitions im Überblick:
- Vereinfachung: Sie wandeln verschachtelte FHIR-Daten in Zeilen und Spalten um, sodass Sie sie mit einfachem SQL statt mit FHIR-spezifischen Werkzeugen oder benutzerdefinierten Skripten abfragen können.
- Anpassbarkeit: Sie legen genau fest, welche Felder – wie Patienten-ID oder BMI-Wert – für Ihre Analyse relevant sind, und filtern irrelevante Daten heraus.
- Effizienz: Vordefinierte Ansichten sparen Zeit, da Teams konsistente Abfragen ausführen können, ohne jedes Mal komplexe Logik neu aufbauen zu müssen.
Hier ist beispielsweise eine ViewDefinition für Raucherstatus-Observations:
{
"name": "observation_smoking_view",
"resource": "observation",
"select": [
{
"column": [
{
"name": "observation_id",
"path": "getResourceKey()"
},
{
"name": "code",
"path": "value.ofType(CodeableConcept).coding.first().code"
},
{
"name": "display",
"path": "value.ofType(CodeableConcept).coding.first().display"
},
{
"name": "qr_id",
"path": "derivedFrom.first().getReferenceKey()"
}
]
}
],
"where": [
{
"path": "code.coding.where(code = '365981007').exists()"
}
],
"status": "active",
"id": "observation_smoking_view",
"resourceType": "ViewDefinition"
}
Und hier eine für BMI-Observations:
{
"name": "observation_bmi_view",
"resource": "observation",
"select": [
{
"column": [
{
"name": "observation_id",
"path": "getResourceKey()"
},
{
"name": "bmi",
"path": "value.ofType(Quantity).value",
"type": "decimal"
},
{
"name": "qr_id",
"path": "derivedFrom.first().getReferenceKey()"
}
]
}
],
"where": [
{
"path": "code.coding.where(code = '60621009').exists()"
}
],
"status": "active",
"id": "observation_bmi_view",
"resourceType": "ViewDefinition"
}
Diese Ansichten transformieren komplexe FHIR-Strukturen in saubere, analysebereit Tabellen. Die SmokingStatusView ruft Patienten-IDs und Raucherstatus (LOINC 72166-2) ab, während die BMIView BMI-Werte (LOINC 39156-5) mit Einheiten extrahiert. Sie können diese folgendermaßen abfragen:
Raucherstatus:
SELECT * FROM SmokingStatusView
BMI:
SELECT * FROM BMIView
Jede Abfrage liefert einen flachen, strukturierten Datensatz, mit dem sich bereits komfortabel arbeiten lässt:
BMIView-Ausgabe:
| gen-obs-bmi-1 | 24.064332204316088 | gen-qr-1 |
|---|---|---|
| gen-obs-bmi-10 | 23.320073211330087 | gen-qr-10 |
| gen-obs-bmi-100 | 30.760773314666764 | gen-qr-100 |
| gen-obs-bmi-1000 | 24.825445454831456 | gen-qr-1000 |
| gen-obs-bmi-10000 | 27.455811393648887 | gen-qr-10000 |
„SELECT * FROM BMIView"
SmokingStatusView-Ausgabe:
| gen-obs-smoking-1 | 77176002 | Smoker | gen-qr-1 |
|---|---|---|---|
| gen-obs-smoking-10 | 266919005 | Never smoked tobacco | gen-qr-10 |
| gen-obs-smoking-100 | 77176002 | Smoker | gen-qr-100 |
| gen-obs-smoking-1000 | 266919005 | Never smoked tobacco | gen-qr-1000 |
| gen-obs-smoking-10000 | 160617001 | Stopped smoking | gen-qr-10000 |
„SELECT * FROM SmokingStatusView"
4. Daten mit Metabase und ViewDefinitions visualisieren
Die Visualisierung von Daten ist der Moment, in dem Erkenntnisse wirklich zum Vorschein kommen. Durch die Integration von SQL on FHIR mit Werkzeugen wie Metabase – einem Open-Source-Visualisierungswerkzeug – können Sie Rohabfragen in dynamische Diagramme und Dashboards verwandeln, ohne auf manuelle Tabellen angewiesen zu sein. ViewDefinitions, wie in Abschnitt 3 gezeigt, fungieren als Brücke zwischen komplexen FHIR-Strukturen und SQL-basierter Analyse. Sie transformieren verschachtelte Gesundheitsdaten in saubere, tabellarische Ansichten, die Visualisierungswerkzeuge wie Metabase problemlos verarbeiten können. Sehen wir uns zwei praktische Beispiele mit den zuvor erhobenen Raucherstatus- und BMI-Daten an.
Rauchentwicklung nach Geschlecht


Ein einfaches Balkendiagramm kann zeigen, wie sich Rauchgewohnheiten zwischen den Geschlechtern unterscheiden – etwa dass ein höherer Prozentsatz der Männer angibt, aktuell zu rauchen. Solche Visualisierungen machen es einfach, Muster auf Bevölkerungsebene zu erkennen und gezielte Interventionen zu steuern.
Dashboard zur Gesundheitsübersicht
Ein Dashboard, das mehrere Kennzahlen kombiniert – wie BMI-Verteilung, Raucherstatus und Alkoholkonsum – kann einen schnellen Überblick über den Gesundheitszustand einer Bevölkerung bieten. Diese Ansichten helfen Kliniker:innen und Analyst:innen, Risiken und Trends rasch zu identifizieren, ohne sich durch Rohdaten arbeiten zu müssen.
Damit dies in der Praxis funktioniert:
- Das Risikobeurteilungsformular muss so konfiguriert sein, dass Daten in Observation-Ressourcen extrahiert werden.
- ViewDefinitions wandeln diese Daten dann in flache, SQL-abfragbare Tabellen um.
- Metabase stellt eine Verbindung zur SQL on FHIR-Schnittstelle her und visualisiert die Ausgabe.
Dieses Formular mit kodierten Feldern und konfigurierter Datenextraktion steht zum Download aus der Form Gallery zur Verfügung.
Wir stellen außerdem in jeder Aidbox-Instanz ein öffentliches Notebook mit Schritt-für-Schritt-Anleitungen zur Erstellung von ViewDefinitions bereit, die auf dieses Formular zugeschnitten sind.
Fazit
Aidbox Forms und SQL on FHIR optimieren den gesamten Weg der Gesundheitsdaten – von der strukturierten Erfassung bis zur aussagekräftigen Visualisierung. Aufgebaut auf FHIR-Standards und auf Benutzerfreundlichkeit ausgelegt, helfen sie Gesundheitsorganisationen, Komplexität zu bewältigen und sich auf das Wesentliche zu konzentrieren: bessere Versorgung durch bessere Erkenntnisse. Ob Sie Lebensstilkennzahlen erfassen, Dashboards erstellen oder Analysen zur Bevölkerungsgesundheit durchführen – Aidbox gibt Ihnen die Werkzeuge an die Hand, um schnell voranzukommen, compliant zu bleiben und eine bessere Versorgung zu bieten.
Möchten Sie sehen, wie es in Ihren Workflow passt? Entdecken Sie Aidbox Forms unter aidbox.app.





