帮助构建临床决策支持系统规则、评分告警与EMR集成方案
复制安装指令,让 AI 自动完成配置 · 推荐新手
请帮我安装 askskill 上的 "healthcare-cdss-patterns" 技能: 1. 下载 https://raw.githubusercontent.com/affaan-m/ECC/main/skills/healthcare-cdss-patterns/SKILL.md 2. 保存为 ~/.claude/skills/healthcare-cdss-patterns/SKILL.md 3. 装好后重载技能,告诉我可以用了
请为医院临床决策支持系统设计药物相互作用检查模块,包含规则结构、严重级别分层、告警文案、误报控制策略,以及在医生开立处方时的EMR集成流程。
输出药物相互作用检测的系统设计方案,包括规则模型、告警分级和处方流程集成建议。
请给出CDSS中的剂量校验开发模式,覆盖成人与儿童剂量范围、肾功能调整、重复给药检查、异常处理,以及如何向医生展示可解释的校验结果。
输出可实现的剂量校验规则框架、关键判断条件和面向临床用户的结果展示方式。
请设计一个将NEWS2和qSOFA纳入EMR工作流的CDSS方案,说明数据输入项、评分计算逻辑、告警阈值、严重程度分类,以及如何减少告警疲劳。
输出临床评分集成方案,包含计算规则、触发条件、告警分级与降低告警疲劳的建议。
Patterns for building Clinical Decision Support Systems that integrate into EMR workflows. CDSS modules are patient safety critical — zero tolerance for false negatives.
The CDSS engine is a pure function library with zero side effects. Input clinical data, output alerts. This makes it fully testable.
Three primary modules:
checkInteractions(newDrug, currentMeds, allergies) — Checks a new drug against current medications and known allergies. Returns severity-sorted InteractionAlert[]. Uses DrugInteractionPair data model.validateDose(drug, dose, route, weight, age, renalFunction) — Validates a prescribed dose against weight-based, age-adjusted, and renal-adjusted rules. Returns DoseValidationResult.calculateNEWS2(vitals) — National Early Warning Score 2 from NEWS2Input. Returns NEWS2Result with total score, risk level, and escalation guidance.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));
}
Interaction pairs must be bidirectional: if Drug A interacts with Drug B, then Drug B interacts with Drug 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`,
…
帮助用户在回答前选择简短、标准或详细版本,控制回复深度与 token 用量。
帮助临床大模型查询药物相互作用、剂量建议与替代用药方案。