使用说明
AI试剂临床记录
一个基于人工智能的应用程序,可以处理原始临床记录,对其进行结构化,映射到Contoso资源,并根据NCD(国家覆盖范围确定)政策进行事先授权分析。
概述
该应用程序为临床记录分析和事先授权提供了一个全面的5步人工智能工作流:
- 临床记录结构 -将原始笔记解析为带有引用的有组织的部分
- 骨骼丰富 -人工智能增强和格式化结构化数据
- Contoso映射 -转换为标准化的Contoso资源
- NCD策略检索 -从CMS获取相关的医疗保险覆盖政策
- 政策分析和资格 -基于人工智能的比较与缺失信息的启发
主要特点
- 实时进度跟踪 -每个分析步骤中的视觉反馈
- 互动启发 -当信息缺失时,人工智能会生成澄清问题
- 多格式输入 -将临床记录上传为文本、PDF或DOCX文件
- 安全认证 -基于JWT的具有速率限制的用户身份验证
- ➤合规性 -标准化医疗数据格式
- 信心评分 -资格决定的透明置信水平
建筑
┌─────────────────┐
│ Frontend │ React + TypeScript (Vite)
│ (Port 5173) │
└────────┬────────┘
│
│ HTTP/REST
▼
┌─────────────────┐
│ Backend │ Node.js + Express + OpenAI
│ (Port 8080) │
└────────┬────────┘
│
├──────────► raw2structured MCP Server
│ (structure_clinical_note, map_to_fhir)
│
└──────────► priorauth-checker MCP Server
(fetch_ncd_policy)
项目结构
mcp-agent/
├── backend/ # Backend API service
│ ├── src/
│ │ ├── index.ts # Main Express server
│ │ ├── services/
│ │ │ └── openaiService.ts
│ │ └── utils/
│ │ └── mcpClient.ts
│ ├── package.json
│ ├── Dockerfile
│ └── README.md
│
├── frontend/ # React frontend
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── services/ # API client
│ │ ├── App.tsx
│ │ └── App.css
│ ├── package.json
│ └── README.md
│
├── prior-auth-index.ts # MCP server source (reference)
├── raw2structured-server.py # MCP server source (reference)
├── DEPLOYMENT.md # Deployment guide
└── README.md # This file
特性
1.临床记录结构
- 接受多种输入格式:
- 直接文本输入
- PDF文件上传(最大10MB)
- DOCX文件上传(最大10MB)
- 将原始临床记录解析为多个部分:
- 主诉
- 现病史
- 既往病史
- 当前药物
- 过敏
- 体检
- 实验室和成像
- 评估和计划
- 生成引用密钥以实现可追溯性
2.实时进度跟踪
- 可视化进度指示器显示5个分析步骤
- 每一步完成时实时更新
- 透明度步骤说明
- 在长时间运行的分析过程中改善用户体验
3.Contoso映射
- 将结构化的临床数据转化为类似Contoso的资源:
- 程序
- 条件
- 药物
- 过敏
- 观察
- 计划
- 确保医疗保健数据的互操作性
4.非传染性疾病政策分析
- 从CMS数据库获取NCD策略
- 基于人工智能的临床数据与政策标准的比较
- 生成资格确定:
- 符合条件
- 不合格
- 需求_审查
5.互动启发
- AI检测缺失或模糊的信息
- 生成1-3道澄清性选择题
- 用户通过模态对话框提供额外的上下文
- 使用新信息重新分析以提高准确性
- 减少手动审查要求
6.事先授权输出
- 确定匹配和不匹配的策略标准
- 突出覆盖范围的一致性和差距
- 提供理由和建议
- 信心评分(0-100)
- 引用支持证据
7.安全和身份验证
- 基于JWT的用户身份验证
- 使用bcryptjs进行密码哈希
- 速率限制(每个IP每15分钟100个请求)
- 通过Helmet.js发送HTTP安全标头
- 可选Firebase审核日志记录
- 受保护的API端点
快速开始
先决条件
- Node.js 18+
- OpenAI API密钥
- 访问已部署的MCP服务器
- (可选)用于审计日志记录的Firebase服务帐户
- (可选)用于生产部署的Google Cloud Secret Manager
后端设置
cd backend
npm install
cp .env.example .env
# Edit .env with your OpenAI API key
npm run dev
后端运行 http://localhost:8080
前端设置
cd frontend
npm install
cp .env.example .env
# Edit .env with backend URL
npm run dev
前端继续运行 http://localhost:5173
API终点
认证
发布/API/验证/登录
用户身份验证端点。
请求:
{
"username": "user",
"password": "password"
}
答复:
{
"token": "jwt-token-here",
"user": {
"username": "user"
}
}
默认用户(开发):
分析端点(都需要身份验证)
POST/api/结构注释
构建一份原始的临床记录。
标题: Authorization: Bearer <token>
请求:
{
"rawNote": "Patient presents with..."
}
答复:
{
"structuredSkeleton": {...},
"citationKey": [...],
"formattedNote": "### History of Present Illness\n..."
}
POST/api/上传临床记录
上传并解析PDF或DOCX文件中的临床记录。
标题:
Authorization: Bearer <token>Content-Type: multipart/form-data
请求: 表单数据 file 字段(最大10MB)
答复:
{
"text": "Extracted clinical note text..."
}
POST/api/映射到fhir
将结构化内容映射到Contoso资源。
标题: Authorization: Bearer <token>
请求:
{
"structuredContent": {...}
}
答复:
{
"fhirBundle": {
"resourceType": "Bundle",
"entry": [...]
}
}
POST/api/refetch ncd策略
按标题获取NCD策略。
标题: Authorization: Bearer <token>
请求:
{
"title": "Lumbar Spinal Fusion"
}
答复:
{
"policy": {
"document_id": "...",
"title": "...",
"indications_limitations": "..."
}
}
POST/api/分析临床记录
完成端到端分析,并跟踪进度(主要工作流程)。
标题: Authorization: Bearer <token>
请求:
{
"rawNote": "Patient presents with...",
"ncdTitle": "Lumbar Spinal Fusion"
}
答复:
{
"currentStep": 5,
"structuredNote": {...},
"fhirBundle": {...},
"ncdPolicy": {...},
"analysis": {
"eligibilityDecision": "ELIGIBLE",
"matchedCriteria": [...],
"unmatchedCriteria": [...],
"coverageAlignment": {...},
"priorAuthJustification": {...},
"confidenceScore": 85,
"needsElicitation": false,
"elicitationQuestions": []
}
}
如果需要,合法性为真:
{
"currentStep": 5,
"analysis": {
"needsElicitation": true,
"elicitationQuestions": [
{
"question": "What is the severity of the patient's condition?",
"options": ["Mild", "Moderate", "Severe", "Critical"]
}
]
}
}
POST/api/比较策略
从启发中重新分析额外的用户上下文。
标题: Authorization: Bearer <token>
请求:
{
"structuredNote": {...},
"fhirBundle": {...},
"ncdPolicy": {...},
"additionalContext": "User answered: Severe condition, 6+ months duration"
}
答复:
{
"analysis": {
"eligibilityDecision": "ELIGIBLE",
"matchedCriteria": [...],
"confidenceScore": 92,
"needsElicitation": false
}
}
GET/健康
健康检查端点(不需要身份验证)。
答复:
{
"status": "ok",
"timestamp": "2025-01-11T12:00:00.000Z"
}
部署
看 部署.md 了解详细的部署说明。
后端部署
cd backend
./deploy.sh
前端部署
构建并部署到您首选的托管平台:
cd frontend
npm run build
# Deploy dist/ directory
MCP服务器
此应用程序与两个MCP服务器集成:
1.raw2结构化
网址:
工具:
structure_clinical_note:将原始笔记分割成结构化部分map_to_fhir:将结构化内容映射到Contoso资源parse_pdf_note:从PDF临床记录中提取文本
2.priorauth检查器
网址:
工具:
fetch_ncd_policy:按标题或ID获取NCD策略fetch_multiple_ncd_policies:批量获取多个策略
环境变量
后端
# Required
OPENAI_API_KEY=your_openai_api_key
RAW2STRUCTURED_MCP_URL=
PRIORAUTH_CHECKER_MCP_URL=
JWT_SECRET=your-secret-key-change-in-production
PORT=8080
# Optional
ALLOWED_ORIGINS=http://localhost:5173,https://yourdomain.com
NODE_ENV=development
FIREBASE_SERVICE_ACCOUNT_PATH=./serviceAccountKey.json
前端
VITE_API_BASE_URL=http://localhost:8080
技术栈
后端
- 框架:Node.js+Express
- 语言:TypeScript
- AI引擎:OpenAI GPT-4
- MCP客户端:
@modelcontextprotocol/sdkv1.21.0 - 认证:JWT+bcryptjs
- 文件解析:pdf解析,猛犸象(DOCX)
- 安全:头盔、快递费率限制、cors
- 数据库:Firebase Firestore(可选审计日志记录)
- 容器化:Docker
前端
- 框架:反应19
- 语言:TypeScript
- 生成工具:快
- HTTP客户端:带有拦截器的Axios
- UI组件:
- 使用JWT身份验证登录
- 进度指示器(5步工作流程)
- 文件上传(PDF/DOCX)
- 用户交互的激励模式
- 临床笔记的Markdown渲染
- Contoso资源查看器
- 状态管理:React挂钩
基础设施
- 部署:Google Cloud Run(容器化)
- MCP服务器:外部HTTP流端点
- 秘密管理:谷歌云秘密管理器
- 协议:MCP(模型上下文协议)
完整工作流示例
用户旅程
-
认证
- 用户使用凭据登录
- 系统发出JWT令牌
- 存储在localStorage中的令牌,用于后续请求
-
输入临床记录
Patient presents with right upper quadrant pain that started 2 days ago. Patient reports dull ache that radiates to the shoulder. Pain is worse after meals. Patient has history of gallstones.- 选项:直接文本输入或上传PDF/DOCX文件
- 输入非传染性疾病政策标题:“胆囊切除术”
-
进度跟踪(实时)
Step 1/5: Structuring clinical note... Step 2/5: Enriching structured data... Step 3/5: Mapping to FHIR resources... Step 4/5: Fetching NCD policy... Step 5/5: Analyzing policy compliance... -
第一步:临床记录结构
- MCP服务器将注释分为结构化部分
- 生成引用密钥以实现可追溯性
- OpenAI丰富并格式化为markdown
-
第二步:Contoso映射
- 将结构化数据转换为Contoso资源
{ "resourceType": "Observation", "code": { "text": "Pain character" }, "valueString": "dull ache in right upper quadrant", "citation": "[REF-001]" } -
步骤3:策略提取
- 从CMS检索“胆囊切除术”NCD策略
- 包括适应症、限制和覆盖标准
-
第四步:人工智能政策分析
- OpenAI GPT-4将患者数据与政策标准进行比较
- 初步分析发现信息缺失
-
第五步:互动式启发式 (如果需要)
- 系统提示:
Missing information detected. Please answer to improve accuracy: Question 1: Has conservative management been attempted? - Yes, for 3+ months - Yes, for less than 3 months - No, acute presentation Question 2: Are there documented gallstones on imaging? - Yes, confirmed on ultrasound - Yes, confirmed on CT - No imaging available - 用户选择: “是,经超声波确认”和“是,持续3个月以上”
- 系统提示:
-
重新分析上下文
- 系统重新运行与用户答案的策略比较
- 信心得分从72%提高→ 94%
-
最终结果:资格决定
{ "eligibilityDecision": "ELIGIBLE", "confidenceScore": 94, "matchedCriteria": [ "Documented gallstones on imaging", "Conservative management attempted for 3+ months", "Symptomatic with RUQ pain" ], "unmatchedCriteria": [], "priorAuthJustification": { "summary": "Patient meets all criteria for cholecystectomy...", "supportingEvidence": [ "RUQ pain radiating to shoulder [REF-001]", "History of gallstones [REF-003]", "Failed conservative management [User Context]" ] } }
结果
- 明确合格/不合格/有义务/需要_审查决定
- 透明度信心评分
- 引用的详细理由
- 已识别的覆盖缺口(如有)
- 准备提交事先授权文件
发展
运行测试(后端)
cd backend
npm test
为生产而建
# Backend
cd backend
npm run build
# Frontend
cd frontend
npm run build
地方发展
同时运行后端和前端:
1号航站楼:
cd backend && npm run dev
2号航站楼:
cd frontend && npm run dev
许可证
麻省理工学院
致谢
- GPT-4 API的OpenAI
- NCD政策数据库CMS
- 用于服务器集成的MCP(模型上下文协议)
- 用于基础设施的谷歌云平台