Communitygithub.com

Healthcare-CDSS-Patterns

Entwicklungsmuster für klinische Entscheidungsunterstützungssysteme (CDSS) – Wechselwirkungsprüfung, Dosierungsvalidierung, klinische Bewertungssysteme (NEWS2, qSOFA) und Integration in EMR-Workflows.

Was ist Healthcare-CDSS-Patterns?

Dieses Skill enthält bewährte Muster zur Erstellung von Clinical Decision Support Systems (CDSS), die tief in EMR-Workflows integriert sind. CDSS-Module sind für die Patientensicherheit kritisch – es besteht Nulltoleranz für falsch negative Ergebnisse. Das Skill definiert eine reine Funktionenbibliothek ohne Seiteneffekte, die klinische Daten als Eingabe nimmt und Warnmeldungen zurückgibt. Es unterstützt die drei Hauptmodule: Wechselwirkungsprüfung (checkInteractions), Dosisvalidierung (validateDose) und klinische Bewertung (calculateNEWS2). Die Implementierung umfasst detaillierte Typschnittstellen, Datenmodelle (DrugInteractionPair, DoseValidationResult, NEWS2Input/Result) sowie eine klare Abstufung der Warnschwere mit entsprechendem UI-Verhalten. Das Skill ist plattformunabhängig und als Referenz für Entwickler von CDSS-Komponenten in beliebigen JavaScript/TypeScript-basierten KI-Agenten oder Frameworks geeignet. Die bereitgestellten Testfälle demonstrieren die Nulltoleranz für Fehler: Jede verpasste Wechselwirkung oder fehlende Gewichtsangabe führt zu einem blockierenden Fehler, nicht zu einem stillen Ignorieren.

Funktioniert mit~Claude Code~Codex CLI~Cursor
npx skills add https://github.com/affaan-m/everything-claude-code/tree/main/skills/healthcare-cdss-patterns

In Ihrer bevorzugten KI fragen

Öffnet einen neuen Chat, in dem dieser Agent-Skill bereits geladen ist.

Dokumentation

Healthcare CDSS Development Patterns (deutsche Übersetzung)

Muster zum Aufbau von Clinical Decision Support Systems, die in EMR-Workflows integriert werden. CDSS-Module sind patientensicherheitskritisch – Nulltoleranz für falsch negative Ergebnisse.

Wann verwenden

  • Implementierung von Arzneimittelwechselwirkungsprüfungen
  • Erstellung von Dosisvalidierungs-Engines
  • Implementierung klinischer Bewertungssysteme (NEWS2, qSOFA, APACHE, GCS)
  • Gestaltung von Warnsystemen für abnormale klinische Werte
  • Aufbau von Medikamentenbestellung mit Sicherheitsprüfungen
  • Integration von Laborergebnisinterpretation mit klinischem Kontext

Wie es funktioniert

Die CDSS-Engine ist eine reine Funktionsbibliothek ohne Seiteneffekte. Klinische Daten eingeben, Warnungen ausgeben. Dadurch ist sie vollständig testbar.

Drei Hauptmodule:

  1. checkInteractions(newDrug, currentMeds, allergies) – Prüft ein neues Medikament gegen aktuelle Medikationen und bekannte Allergien. Gibt InteractionAlert[] sortiert nach Schweregrad zurück. Verwendet das DrugInteractionPair-Datenmodell.
  2. validateDose(drug, dose, route, weight, age, renalFunction) – Validiert eine verschriebene Dosis gegen gewichtsbasierte, altersangepasste und nierenangepasste Regeln. Gibt DoseValidationResult zurück.
  3. calculateNEWS2(vitals) – National Early Warning Score 2 aus NEWS2Input. Gibt NEWS2Result mit Gesamtpunktzahl, Risikostufe und Eskalationsanleitung zurück.
EMR-Benutzeroberfläche
  ↓ (Benutzer gibt Daten ein)
CDSS-Engine (reine Funktionen, keine Seiteneffekte)
  ├── Arzneimittelwechselwirkungsprüfer
  ├── Dosisvalidator
  ├── Klinische Bewertung (NEWS2, qSOFA, etc.)
  └── Warnklassifizierer
  ↓ (gibt Warnungen zurück)
EMR-Benutzeroberfläche (zeigt Warnungen inline an, blockiert bei kritisch)

Arzneimittelwechselwirkungsprüfung

interface DrugInteractionPair {
  drugA: string;           // generischer Name
  drugB: string;           // generischer Name
  severity: 'critical' | 'major' | 'minor';
  mechanism: string;
  clinicalEffect: string;
  recommendation: string;
}

function checkInteractions(
  newDrug: string,
  currentMedications: string[],
  allergyList: string[]
): InteractionAlert[] {
  if (!newDrug) return [];
  const alerts: InteractionAlert[] = [];
  for (const current of currentMedications) {
    const interaction = findInteraction(newDrug, current);
    if (interaction) {
      alerts.push({ severity: interaction.severity, pair: [newDrug, current],
        message: interaction.clinicalEffect, recommendation: interaction.recommendation });
    }
  }
  for (const allergy of allergyList) {
    if (isCrossReactive(newDrug, allergy)) {
      alerts.push({ severity: 'critical', pair: [newDrug, allergy],
        message: `Kreuzreaktivität mit dokumentierter Allergie: ${allergy}`,
        recommendation: 'Nicht ohne Allergie-Konsultation verschreiben' });
    }
  }
  return alerts.sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity));
}

Wechselwirkungspaare müssen bidirektional sein: Wenn Arzneimittel A mit Arzneimittel B interagiert, dann interagiert Arzneimittel B mit Arzneimittel A.

Dosisvalidierung

interface DoseValidationResult {
  valid: boolean;
  message: string;
  suggestedRange: { min: number; max: number; unit: string } | null;
  factors: string[];
}

function validateDose(
  drug: string,
  dose: number,
  route: 'oral' | 'iv' | 'im' | 'sc' | 'topical',
  patientWeight?: number,
  patientAge?: number,
  renalFunction?: number
): DoseValidationResult {
  const rules = getDoseRules(drug, route);
  if (!rules) return { valid: true, message: 'Keine Validierungsregeln verfügbar', suggestedRange: null, factors: [] };
  const factors: string[] = [];

  // SICHERHEIT: Wenn Regeln Gewicht erfordern, aber Gewicht fehlt, BLOCKIEREN (nicht durchlassen)
  if (rules.weightBased) {
    if (!patientWeight || patientWeight <= 0) {
      return { valid: false, message: `Gewicht erforderlich für ${drug} (mg/kg Arzneistoff)`,
        suggestedRange: null, factors: ['weight_missing'] };
    }
    factors.push('weight');
    const maxDose = rules.maxPerKg * patientWeight;
    if (dose > maxDose) {
      return { valid: false, message: `Dosis überschreitet Maximum für ${patientWeight}kg`,
        suggestedRange: { min: rules.minPerKg * patientWeight, max: maxDose, unit: rules.unit }, factors };
    }
  }

  // Altersbasierte Anpassung (wenn Regeln Altersklassen definieren und Alter angegeben ist)
  if (rules.ageAdjusted && patientAge !== undefined) {
    factors.push('age');
    const ageMax = rules.getAgeAdjustedMax(patientAge);
    if (dose > ageMax) {
      return { valid: false, message: `Überschreitet altersangepasstes Maximum für ${patientAge}J.`,
        suggestedRange: { min: rules.typicalMin, max: ageMax, unit: rules.unit }, factors };
    }
  }

  // Nierenanpassung (wenn Regeln eGFR-Klassen definieren und eGFR angegeben ist)
  if (rules.renalAdjusted && renalFunction !== undefined) {
    factors.push('renal');
    const renalMax = rules.getRenalAdjustedMax(renalFunction);
    if (dose > renalMax) {
      return { valid: false, message: `Überschreitet nierenangepasstes Maximum für eGFR ${renalFunction}`,
        suggestedRange: { min: rules.typicalMin, max: renalMax, unit: rules.unit }, factors };
    }
  }

  // Absolutes Maximum
  if (dose > rules.absoluteMax) {
    return { valid: false, message: `Überschreitet absolutes Maximum ${rules.absoluteMax}${rules.unit}`,
      suggestedRange: { min: rules.typicalMin, max: rules.absoluteMax, unit: rules.unit },
      factors: [...factors, 'absolute_max'] };
  }
  return { valid: true, message: 'Im Bereich',
    suggestedRange: { min: rules.typicalMin, max: rules.typicalMax, unit: rules.unit }, factors };
}

Klinische Bewertung: NEWS2

interface NEWS2Input {
  respiratoryRate: number; oxygenSaturation: number; supplementalOxygen: boolean;
  temperature: number; systolicBP: number; heartRate: number;
  consciousness: 'alert' | 'voice' | 'pain' | 'unresponsive';
}
interface NEWS2Result {
  total: number;           // 0-20
  risk: 'low' | 'low-medium' | 'medium' | 'high';
  components: Record<string, number>;
  escalation: string;
}

Bewertungstabellen müssen exakt der Spezifikation des Royal College of Physicians entsprechen.

Warnschwere und UI-Verhalten

SchweregradUI-VerhaltenErforderliche Maßnahme des Klinikers
KritischAktion blockieren. Nicht schließbarer Modal. Rot.Übergehungsgrund muss dokumentiert werden, um fortzufahren
SchwerwiegendWarnbanner inline. Orange.Vor Fortfahren bestätigen
GeringInfo-Hinweis inline. Gelb.Nur zur Kenntnisnahme, keine Aktion erforderlich

Kritische Warnungen dürfen NIEMALS automatisch geschlossen oder als Toast-Benachrichtigungen implementiert werden. Übergehungsgründe müssen im Prüfpfad gespeichert werden.

Testen von CDSS (Nulltoleranz für falsch negative Ergebnisse)

describe('CDSS — Patientensicherheit', () => {
  INTERACTION_PAIRS.forEach(({ drugA, drugB, severity }) => {
    it(`erkennt ${drugA} + ${drugB} (${severity})`, () => {
      const alerts = checkInteractions(drugA, [drugB], []);
      expect(alerts.length).toBeGreaterThan(0);
      expect(alerts[0].severity).toBe(severity);
    });
    it(`erkennt ${drugB} + ${drugA} (umgekehrt)`, () => {
      const alerts = checkInteractions(drugB, [drugA], []);
      expect(alerts.length).toBeGreaterThan(0);
    });
  });
  it('blockiert mg/kg-Medikament bei fehlendem Gewicht', () => {
    const result = validateDose('gentamicin', 300, 'iv');
    expect(result.valid).toBe(false);
    expect(result.factors).toContain('weight_missing');
  });
  it('behandelt fehlerhafte Arzneimitteldaten elegant', () => {
    expect(() => checkInteractions('', [], [])).not.toThrow();
  });
});

Bestandenskriterium: 100 %. Eine einzige verpasste Wechselwirkung ist ein Patientensicherheitsvorfall.

Anti-Patterns

  • CDSS-Prüfungen ohne dokumentierten Grund optional oder überspringbar machen
  • Wechselwirkungsprüfungen als Toast-Benachrichtigungen implementieren
  • any-Typen für Arzneimittel- oder klinische Daten verwenden
  • Wechselwirkungspaare fest codieren anstatt eine wartbare Datenstruktur zu verwenden
  • Fehler in der CDSS-Engine stillschweigend abfangen (muss Fehler lautstark melden)
  • Gewichtsbasierte Validierung überspringen, wenn Gewicht nicht verfügbar ist (muss blockieren, nicht durchlassen)

Beispiele

Beispiel 1: Arzneimittelwechselwirkungsprüfung

const alerts = checkInteractions('warfarin', ['aspirin', 'metformin'], ['penicillin']);
// [{ severity: 'critical', pair: ['warfarin', 'aspirin'],
//    message: 'Erhöhtes Blutungsrisiko', recommendation: 'Kombination vermeiden' }]

Beispiel 2: Dosisvalidierung

const ok = validateDose('paracetamol', 1000, 'oral', 70, 45);
// { valid: true, suggestedRange: { min: 500, max: 4000, unit: 'mg' } }

const bad = validateDose('paracetamol', 5000, 'oral', 70, 45);
// { valid: false, message: 'Überschreitet absolutes Maximum 4000mg' }

const noWeight = validateDose('gentamicin', 300, 'iv');
// { valid: false, factors: ['weight_missing'] }

Beispiel 3: NEWS2-Bewertung

const result = calculateNEWS2({
  respiratoryRate: 24, oxygenSaturation: 93, supplementalOxygen: true,
  temperature: 38.5, systolicBP: 100, heartRate: 110, consciousness: 'voice'
});
// { total: 13, risk: 'high', escalation: 'Dringende klinische Überprüfung. Intensivstation in Betracht ziehen.' }

Individual skills in this repo

This repo contains 20 individual skills — each has its own dedicated page.

accessibility

Design, implement, and audit inclusive digital products using WCAG 2.2 Level AA. Use when building or auditing UI that must meet WCAG 2.2 Level AA, or when reviewing a change for keyboard, contrast, or screen-reader support.

affaan-m/claude-api

Anthropic Claude API patterns for Python and TypeScript. Covers Messages API, streaming, tool use, vision, extended thinking, batches, prompt caching, and Claude Agent SDK. Use when building applications with the Claude API or Anthropic SDKs.

affaan-m/everything-claude-code

End-to-end marketing campaign planning and execution. Covers audience research, positioning, campaign angle definition, landing page copy, email sequences, social posts, ad copy, short-form video scripts, and content calendars. Use as the orchestration layer for multi-channel product launches. Use when planning or executing a multi-channel product launch, or producing landing page, email, social, or ad copy.

affaan-m/everything-claude-code

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/everything-claude-code-conventions

Development conventions and patterns for everything-claude-code. JavaScript project with conventional commits.

affaan-m/frontend-design

Create distinctive, production-grade frontend interfaces with high design quality. Use when the user asks to build web components, pages, or applications and the visual direction matters as much as the code quality.

affaan-m/gget

gget CLI and Python workflow for quick genomic database queries, sequence lookup, BLAST-style searches, enrichment checks, and reproducible bioinformatics evidence logs.

affaan-m/literature-review

Systematic literature-review workflow for academic, biomedical, technical, and scientific topics, including search planning, source screening, synthesis, citation checks, and evidence logging.

affaan-m/motion-ui

Production-ready UI motion system for React/Next.js. Use when implementing animations, transitions, or motion patterns.

affaan-m/project-guidelines-example

Example project-specific skill template based on a real production application.

affaan-m/pubmed-database

Direct PubMed and NCBI E-utilities search workflows for biomedical literature, MeSH queries, PMID lookup, citation retrieval, and API-backed literature monitoring.

affaan-m/scholar-evaluation

Structured scholarly-work evaluation for papers, proposals, literature reviews, methods sections, evidence quality, citation support, and research-writing feedback.

affaan-m/uspto-database

USPTO patent and trademark data workflow for official record lookup, PatentSearch queries, TSDR checks, assignment data, and reproducible IP research logs.

agent-architecture-audit

Full-stack diagnostic for agent and LLM applications. Audits the 12-layer agent stack for wrapper regression, memory pollution, tool discipline failures, hidden repair loops, and rendering corruption. Produces severity-ranked findings with code-first fixes. Essential for developers building agent applications, autonomous loops, or any LLM-powered feature. Use when an agent or LLM feature misbehaves and the failing layer is unknown, or before shipping an agent stack.

agent-eval

Head-to-head comparison of coding agents (Claude Code, Aider, Codex, etc.) on custom tasks with pass rate, cost, time, and consistency metrics. Use when choosing between coding agents, or when a change to an agent setup needs measured pass rate, cost, and time rather than an impression.

agent-harness-construction

Design and optimize AI agent action spaces, tool definitions, and observation formatting for higher completion rates. Use when defining or revising an agent

agentic-engineering

Operate as an agentic engineer using eval-first execution, decomposition, and cost-aware model routing. Use when planning or executing engineering work that agents will carry out end to end.

agentic-os

Build persistent multi-agent operating systems on Claude Code. Covers kernel architecture, specialist agents, slash commands, file-based memory, scheduled automation, and state management without external databases. Use when building a persistent multi-agent system on Claude Code with its own memory, commands, and scheduling.

agent-introspection-debugging

Structured self-debugging workflow for AI agent failures using capture, diagnosis, contained recovery, and introspection reports. Use when an agent run fails and you need a reproducible diagnosis instead of a retry.

agent-payment-x402

Add x402 payment execution to AI agents with per-task budgets, spending controls, and non-custodial wallets. Supports Base through agentwallet-sdk and X Layer through OKX Payments / OKX Agent Payments Protocol. Use when an agent must pay for something itself and needs per-task budgets, spending controls, and a non-custodial wallet.

Verwandte Skills