Healthcare Eval Harness — Patientensicherheits-Verifizierung
Automatisiertes Verifizierungssystem für Bereitstellungen von Gesundheitsanwendungen. Ein einziger KRITISCHER Fehler blockiert die Bereitstellung. Patientensicherheit ist nicht verhandelbar.
Hinweis: Die Beispiele verwenden Jest als Referenz-Test Runner. Passen Sie die Befehle an Ihr Framework an (Vitest, pytest, PHPUnit usw.) – die Testkategorien und Bestehensschwellen sind Framework-unabhängig.
Wann verwenden
- Vor jeder Bereitstellung von EMR/EHR-Anwendungen
- Nach Änderungen an der CDSS-Logik (Arzneimittelinteraktionen, Dosisvalidierung, Bewertungen)
- Nach Änderungen an Datenbankschemata, die Patientendaten betreffen
- Nach Änderungen an Authentifizierung oder Zugriffskontrolle
- Während der Konfiguration der CI/CD-Pipeline für Gesundheits-Apps
- Nach dem Auflösen von Merge-Konflikten in klinischen Modulen
Funktionsweise
Das Eval Harness führt fünf Testkategorien in der Reihenfolge aus. Die ersten drei (CDSS-Genauigkeit, PHI-Exposition, Datenintegrität) sind KRITISCHE Gates mit einer erforderlichen Bestehensquote von 100% – ein einziger Fehler blockiert die Bereitstellung. Die restlichen zwei (Klinische Workflows, Integration) sind HOHE Gates mit einer erforderlichen Bestehensquote von 95%+.
Jede Kategorie ist einem Jest-Testpfadmuster zugeordnet. Die CI-Pipeline führt KRITISCHE Gates mit --bail (Stopp bei erstem Fehler) aus und erzwingt Abdeckungsschwellen mit --coverage --coverageThreshold.
Evaluierungskategorien
1. CDSS-Genauigkeit (KRITISCH – 100% erforderlich)
Testet die gesamte klinische Entscheidungsunterstützungslogik: Arzneimittelinteraktionspaare (beide Richtungen), Dosisvalidierungsregeln, klinische Bewertungen im Vergleich zu veröffentlichten Spezifikationen, keine falsch-negativen, keine stillen Fehler.
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage
2. PHI-Exposition (KRITISCH – 100% erforderlich)
Testet auf Lecks von geschützten Gesundheitsinformationen: API-Fehlerantworten, Konsolenausgabe, URL-Parameter, Browser-Speicher, standortübergreifende Isolation, nicht authentifizierter Zugriff, Fehlen von Dienstrollenschlüsseln.
npx jest --testPathPattern='tests/security/phi' --bail --ci
3. Datenintegrität (KRITISCH – 100% erforderlich)
Testet die Sicherheit klinischer Daten: gesperrte Begegnungen, Audit-Trail-Einträge, Schutz vor kaskadierendem Löschen, gleichzeitige Bearbeitung, keine verwaisten Datensätze.
npx jest --testPathPattern='tests/data-integrity' --bail --ci
4. Klinische Workflows (HOCH – 95%+ erforderlich)
Testet End-to-End-Abläufe: Begegnungslebenszyklus, Template-Rendering, Medikationssätze, Arzneimittel-/Diagnosesuche, Rezept-PDF, Alarme für rote Flaggen.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "Keine klinischen Tests gefunden" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Klinische Bestehensquote: ${rate}% ($passed/$total)"
5. Integrations-Compliance (HOCH – 95%+ erforderlich)
Testet externe Systeme: HL7-Nachrichtenparsing (v2.x), FHIR-Validierung, Laborergebniszuordnung, Behandlung fehlerhafter Nachrichten.
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$tmp_json" || true
total=$(jq '.numTotalTests // 0' "$tmp_json")
passed=$(jq '.numPassedTests // 0' "$tmp_json")
if [ "$total" -eq 0 ]; then
echo "Keine Integrationstests gefunden" >&2
exit 1
fi
rate=$(echo "scale=2; $passed * 100 / $total" | bc)
echo "Integrations-Bestehensquote: ${rate}% ($passed/$total)"
Pass/Fail-Matrix
| Kategorie | Schwelle | Bei Fehler |
|---|---|---|
| CDSS-Genauigkeit | 100% | BEREITSTELLUNG SPERREN |
| PHI-Exposition | 100% | BEREITSTELLUNG SPERREN |
| Datenintegrität | 100% | BEREITSTELLUNG SPERREN |
| Klinische Workflows | 95%+ | WARNEN, mit Überprüfung zulassen |
| Integration | 95%+ | WARNEN, mit Überprüfung zulassen |
CI/CD-Integration
name: Healthcare Safety Gate
on: [push, pull_request]
jobs:
safety-gate:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-node@v4
with:
node-version: '20'
- run: npm ci
# KRITISCHE Gates – 100% erforderlich, Stopp bei erstem Fehler
- name: CDSS-Genauigkeit
run: npx jest --testPathPattern='tests/cdss' --bail --ci --coverage --coverageThreshold='{"global":{"branches":80,"functions":80,"lines":80}}'
- name: PHI-Expositionsprüfung
run: npx jest --testPathPattern='tests/security/phi' --bail --ci
- name: Datenintegrität
run: npx jest --testPathPattern='tests/data-integrity' --bail --ci
# HOHE Gates – 95%+ erforderlich, benutzerdefinierte Schwellenprüfung
# HOHE Gates – 95%+ erforderlich
- name: Klinische Workflows
run: |
TMP_JSON=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$TMP_JSON" || true
TOTAL=$(jq '.numTotalTests // 0' "$TMP_JSON")
PASSED=$(jq '.numPassedTests // 0' "$TMP_JSON")
if [ "$TOTAL" -eq 0 ]; then
echo "::error::Keine klinischen Tests gefunden"; exit 1
fi
RATE=$(echo "scale=2; $PASSED * 100 / $TOTAL" | bc)
echo "Bestehensquote: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Klinische Bestehensquote ${RATE}% unter 95%"
fi
- name: Integrations-Compliance
run: |
TMP_JSON=$(mktemp)
npx jest --testPathPattern='tests/integration' --ci --json --outputFile="$TMP_JSON" || true
TOTAL=$(jq '.numTotalTests // 0' "$TMP_JSON")
PASSED=$(jq '.numPassedTests // 0' "$TMP_JSON")
if [ "$TOTAL" -eq 0 ]; then
echo "::error::Keine Integrationstests gefunden"; exit 1
fi
RATE=$(echo "scale=2; $PASSED * 100 / $TOTAL" | bc)
echo "Bestehensquote: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Integrations-Bestehensquote ${RATE}% unter 95%"
fi
Anti-Patterns
- CDSS-Tests überspringen, „weil sie beim letzten Mal bestanden haben“
- KRITISCHE Schwellen unter 100% setzen
--no-bailbei KRITISCHEN Test-Suiten verwenden- Die CDSS-Engine in Integrationstests mocken (echte Logik muss getestet werden)
- Bereitstellungen zulassen, wenn das Sicherheits-Gate rot ist
- Tests ohne
--coveragebei CDSS-Suiten ausführen
Beispiele
Beispiel 1: Alle Kritischen Gates Lokal Ausführen
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage && \
npx jest --testPathPattern='tests/security/phi' --bail --ci && \
npx jest --testPathPattern='tests/data-integrity' --bail --ci
Beispiel 2: Bestehensquote des Hohen Gates Prüfen
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
jq '{
passed: (.numPassedTests // 0),
total: (.numTotalTests // 0),
rate: (if (.numTotalTests // 0) == 0 then 0 else ((.numPassedTests // 0) / (.numTotalTests // 1) * 100) end)
}' "$tmp_json"
# Erwartet: { "passed": 21, "total": 22, "rate": 95.45 }
Beispiel 3: Evaluierungsbericht
## Healthcare Eval: 2026-03-27 [Commit abc1234]
### Patientensicherheit: BESTANDEN
| Kategorie | Tests | Bestanden | Fehlgeschlagen | Status |
|-----------|-------|-----------|----------------|--------|
| CDSS-Genauigkeit | 39 | 39 | 0 | BESTANDEN |
| PHI-Exposition | 8 | 8 | 0 | BESTANDEN |
| Datenintegrität | 12 | 12 | 0 | BESTANDEN |
| Klinische Workflows | 22 | 21 | 1 | 95,5% BESTANDEN |
| Integration | 6 | 6 | 0 | BESTANDEN |
### Abdeckung: 84% (Ziel: 80%+)
### Entscheidung: SICHER ZU BEREITSTELLEN