
关于
临床决策支持系统(CDSS)开发模式。涵盖药物相互作用检查、剂量验证、临床评分(NEWS2、qSOFA)、警报严重性分类以及与 EMR 工作流的集成。
name: healthcare-cdss-patterns description: 临床决策支持系统(CDSS)开发模式。药物相互作用检查、剂量验证、临床评分(NEWS2、qSOFA)、警报严重性分类以及 EMR 工作流集成。 origin: Health1 Super Speciality Hospitals — contributed by Dr. Keyur Patel version: "1.0.0"
医疗 CDSS 开发模式
用于构建集成到 EMR 工作流中的临床决策支持系统的模式。CDSS 模块对患者安全至关重要——对假阴性零容忍。
适用场景
- 实现药物相互作用检查
- 构建剂量验证引擎
- 实现临床评分系统(NEWS2、qSOFA、APACHE、GCS)
- 设计异常临床值的警报系统
- 构建带安全检查的药物医嘱录入
- 将实验室结果解读与临床上下文集成
工作原理
CDSS 引擎是一个零副作用的纯函数库。输入临床数据,输出警报。这使其完全可测试。
三个主要模块:
- checkInteractions(newDrug, currentMeds, allergies) — 检查新药物与当前用药和已知过敏的相互作用。返回按严重性排序的 InteractionAlert[]。使用 DrugInteractionPair 数据模型。
- validateDose(drug, dose, route, weight, age, renalFunction) — 根据基于体重、年龄调整和肾功能调整的规则验证处方剂量。返回 DoseValidationResult。
- calculateNEWS2(vitals) — 从 NEWS2Input 计算国家早期预警评分 2。返回包含总分、风险等级和升级指导的 NEWS2Result。
EMR UI
↓ (user enters data)
CDSS Engine (pure functions, no side effects)
├── Drug Interaction Checker
├── Dose Validator
├── Clinical Scoring (NEWS2, qSOFA, etc.)
└── Alert Classifier
↓ (returns alerts)
EMR UI (displays alerts inline, blocks if critical)
药物相互作用检查
interface DrugInteractionPair {
drugA: string; // generic name
drugB: string; // generic 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: 'Cross-reactivity with documented allergy: ' + allergy,
recommendation: 'Do not prescribe without allergy consultation' });
}
}
return alerts.sort((a, b) => severityOrder(a.severity) - severityOrder(b.severity));
}
相互作用对必须是双向的:如果药物 A 与药物 B 有相互作用,那么药物 B 也与药物 A 有相互作用。
剂量验证
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: 'No validation rules available', suggestedRange: null, factors: [] };
const factors: string[] = [];
// SAFETY: if rules require weight but weight missing, BLOCK (not pass)
if (rules.weightBased) {
if (!patientWeight || patientWeight <= 0) {
return { valid: false, message: 'Weight required for ' + drug + ' (mg/kg drug)',
suggestedRange: null, factors: ['weight_missing'] };
}
factors.push('weight');
const maxDose = rules.maxPerKg * patientWeight;
if (dose > maxDose) {
return { valid: false, message: 'Dose exceeds max for ' + patientWeight + 'kg',
suggestedRange: { min: rules.minPerKg * patientWeight, max: maxDose, unit: rules.unit }, factors };
}
}
// Age-based adjustment
if (rules.ageAdjusted && patientAge !== undefined) {
factors.push('age');
const ageMax = rules.getAgeAdjustedMax(patientAge);
if (dose > ageMax) {
return { valid: false, message: 'Exceeds age-adjusted max for ' + patientAge + 'yr',
suggestedRange: { min: rules.typicalMin, max: ageMax, unit: rules.unit }, factors };
}
}
// Renal adjustment
if (rules.renalAdjusted && renalFunction !== undefined) {
factors
兼容工具
Claude CodeCursor
标签
AI与机器学习
