临床笔记AI处理工具

一款AI驱动的应用程序,用于处理原始临床笔记,将其结构化,映射到FHIR资源,并根据NCD(国家覆盖决定)政策进行预先授权分析。

  • by Satya-Bharadwaj
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 Satya-Bharadwaj/mcpagent

使用说明

AI试剂临床记录

一个基于人工智能的应用程序,可以处理原始临床记录,对其进行结构化,映射到Contoso资源,并根据NCD(国家覆盖范围确定)政策进行事先授权分析。

概述

该应用程序为临床记录分析和事先授权提供了一个全面的5步人工智能工作流:

  1. 临床记录结构 -将原始笔记解析为带有引用的有组织的部分
  2. 骨骼丰富 -人工智能增强和格式化结构化数据
  3. Contoso映射 -转换为标准化的Contoso资源
  4. NCD策略检索 -从CMS获取相关的医疗保险覆盖政策
  5. 政策分析和资格 -基于人工智能的比较与缺失信息的启发

主要特点

  • 实时进度跟踪 -每个分析步骤中的视觉反馈
  • 互动启发 -当信息缺失时,人工智能会生成澄清问题
  • 多格式输入 -将临床记录上传为文本、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/sdk v1.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(模型上下文协议)

完整工作流示例

用户旅程

  1. 认证

    • 用户使用凭据登录
    • 系统发出JWT令牌
    • 存储在localStorage中的令牌,用于后续请求
  2. 输入临床记录

    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文件
    • 输入非传染性疾病政策标题:“胆囊切除术”
  3. 进度跟踪(实时)

    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...
    
  4. 第一步:临床记录结构

    • MCP服务器将注释分为结构化部分
    • 生成引用密钥以实现可追溯性
    • OpenAI丰富并格式化为markdown
  5. 第二步:Contoso映射

    • 将结构化数据转换为Contoso资源
    {
      "resourceType": "Observation",
      "code": { "text": "Pain character" },
      "valueString": "dull ache in right upper quadrant",
      "citation": "[REF-001]"
    }
    
  6. 步骤3:策略提取

    • 从CMS检索“胆囊切除术”NCD策略
    • 包括适应症、限制和覆盖标准
  7. 第四步:人工智能政策分析

    • OpenAI GPT-4将患者数据与政策标准进行比较
    • 初步分析发现信息缺失
  8. 第五步:互动式启发式 (如果需要)

    • 系统提示:
      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个月以上”
  9. 重新分析上下文

    • 系统重新运行与用户答案的策略比较
    • 信心得分从72%提高→ 94%
  10. 最终结果:资格决定

    {
      "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(模型上下文协议)
  • 用于基础设施的谷歌云平台