Healthcare Eval Harness — Patientensicherheits-Verifikation
Automatisiertes Verifikationssystem für Bereitstellungen von Gesundheitsanwendungen. Ein einzelner 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 Durchlaufschwellen sind framework-unabhängig.
Wann Verwenden
- Vor jeder Bereitstellung von EMR/EHR-Anwendungen
- Nach Änderungen an der CDSS-Logik (Arzneimittelwechselwirkungen, Dosisvalidierung, Bewertungen)
- Nach Änderungen an Datenbankschemata, die Patientendaten betreffen
- Nach Änderungen an Authentifizierung oder Zugriffskontrolle
- Während der Konfiguration von CI/CD-Pipelines für Gesundheitsapps
- Nach Auflösung von Merge-Konflikten in klinischen Modulen
Funktionsweise
Der Eval-Harness führt fünf Testkategorien in der angegebenen Reihenfolge aus. Die ersten drei (CDSS-Genauigkeit, PHI-Exposition, Datenintegrität) sind KRITISCHE Tore mit einer erforderlichen Durchlaufquote von 100% – ein einzelner Fehler blockiert die Bereitstellung. Die verbleibenden zwei (Klinischer Workflow, Integration) sind HOHE Tore mit einer erforderlichen Durchlaufquote von 95%+.
Jede Kategorie ist einem Jest-Testpfadmuster zugeordnet. Die CI-Pipeline führt KRITISCHE Tore mit --bail (Stopp bei erstem Fehler) aus und erzwingt Abdeckungsschwellen mit --coverage --coverageThreshold.
Eval-Kategorien
1. CDSS-Genauigkeit (KRITISCH — 100% erforderlich)
Testet die gesamte klinische Entscheidungsunterstützungslogik: Arzneimittelwechselwirkungspaare (beide Richtungen), Dosisvalidierungsregeln, klinische Bewertungen im Vergleich zu veröffentlichten Spezifikationen, keine falsch negativen Ergebnisse, keine stillen Fehler.
npx jest --testPathPattern='tests/cdss' --bail --ci --coverage
2. PHI-Exposition (KRITISCH — 100% erforderlich)
Testet auf Lecks geschützter Gesundheitsinformationen: API-Fehlermeldungen, Konsolenausgaben, 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 Behandlungsfälle, Audit-Trail-Einträge, Schutz vor kaskadierenden Löschungen, gleichzeitige Bearbeitung, keine verwaisten Datensätze.
npx jest --testPathPattern='tests/data-integrity' --bail --ci
4. Klinischer Workflow (HOCH — 95%+ erforderlich)
Testet End-to-End-Abläufe: Lebenszyklus von Behandlungsfällen, Vorlagen-Rendering, Medikationssets, Arzneimittel-/Diagnosesuche, Rezept-PDF, Alarmmeldungen.
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 Durchlaufquote: ${rate}% ($passed/$total)"
5. Integrations-Compliance (HOCH — 95%+ erforderlich)
Testet externe Systeme: HL7-Nachrichtenparsing (v2.x), FHIR-Validierung, Labordatenzuordnung, Verarbeitung 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-Durchlaufquote: ${rate}% ($passed/$total)"
Bestanden/Fehlgeschlagen-Matrix
| Kategorie | Schwelle | Bei Fehler |
|---|---|---|
| CDSS-Genauigkeit | 100% | Bereitstellung blockieren |
| PHI-Exposition | 100% | Bereitstellung blockieren |
| Datenintegrität | 100% | Bereitstellung blockieren |
| Klinischer Workflow | 95%+ | WARNUNG, nach Überprüfung zulassen |
| Integration | 95%+ | WARNUNG, nach Ü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 Tore — 100% erforderlich, bei erstem Fehler abbrechen
- 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 Tore — 95%+ erforderlich, benutzerdefinierte Schwellenprüfung
# HOHE Tore — 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 "Durchlaufquote: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Klinische Durchlaufquote ${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 "Durchlaufquote: ${RATE}% ($PASSED/$TOTAL)"
if (( $(echo "$RATE < 95" | bc -l) )); then
echo "::warning::Integrations-Durchlaufquote ${RATE}% unter 95%"
fi
Anti-Patterns
- CDSS-Tests überspringen, „weil sie letztes Mal bestanden haben“
- KRITISCHE Schwellen unter 100% setzen
--no-bailbei KRITISCHEN Test-Suites verwenden- Die CDSS-Engine in Integrationstests mocken (echte Logik muss getestet werden)
- Bereitstellungen zulassen, wenn das Sicherheitstor rot ist
- Tests ohne
--coveragebei CDSS-Suites ausführen
Beispiele
Beispiel 1: Alle Kritischen Tore 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: Durchlaufquote der Hohen Tore Prüfen
tmp_json=$(mktemp)
npx jest --testPathPattern='tests/clinical' --ci --json --outputFile="$tmp_json" || true
jq '{
bestanden: (.numPassedTests // 0),
gesamt: (.numTotalTests // 0),
quote: (if (.numTotalTests // 0) == 0 then 0 else ((.numPassedTests // 0) / (.numTotalTests // 1) * 100) end)
}' "$tmp_json"
# Erwartet: { "bestanden": 21, "gesamt": 22, "quote": 95.45 }
Beispiel 3: Eval-Bericht
## 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 |
| Klinischer Workflow | 22 | 21 | 1 | 95,5% BESTANDEN |
| Integration | 6 | 6 | 0 | BESTANDEN |
### Abdeckung: 84% (Ziel: 80%+)
### Urteil: SICHER FÜR DIE BEREITSTELLUNG