当前位置: 首页 > news >正文

[开源] 伦理批文与知情同意书版本一致性自动核查系统:面向伦理审查办公室的合规性守门工具

本项目是一个专为医疗机构伦理审查办公室设计的自动化核查工具,解决临床研究中伦理批文与知情同意书版本号、生效日期、批件编号等关键元数据不一致的常见合规风险。我们用 OCR(Tesseract.js)识别扫描件、PDF 和图片中的文字,结合正则匹配与轻量 NLP 提取版本标识,再通过结构化比对引擎判断“一份批文是否覆盖对应知情同意书”的逻辑关系,最终生成可追溯、可导出、带时间线可视化的 HTML 报告。它不是文档管理系统,也不是通用文本比对器,而是一套聚焦于「伦理审查闭环验证」场景的垂直工具;支持 CLI 交互式运行与静默批处理,技术栈基于 Node.js / TypeScript,底层依赖 pdf.js、mammoth.js、commander.js 等稳定开源组件,所有配置项(如版本号正则、关键词库)均外置可编辑,不侵入核心逻辑。

定位与能力边界

我们不做全文语义比对,也不校验知情同意书内容是否符合《赫尔辛基宣言》条款,那是伦理委员会议事范畴。本系统只做一件事:确认「你归档的这份知情同意书,是不是被当前有效的伦理批文所授权」。这个判断依赖三个锚点:版本号(如 V2.1、Rev.3)、签署/生效日期(如 2024-03-15)、批件编号(如 伦审字〔2024〕第07号)。只要三者中任一存在明显冲突(例如批文是 V1.0 而同意书印着 V2.0;或批文生效日为 2024-04-01,但同意书签署日为 2024-03-20),系统就会标记为「不一致」并进入报告清单。它不替代人工复核,但把原本需要逐份翻查、肉眼对照、手工登记的重复劳动,压缩成一次点击+一份 HTML 表格。

这种定位决定了它的适用边界:
- ✅ 适用于已建立电子归档习惯、但尚未部署 EDC 或伦理管理系统的中小型医院、区域临床试验中心;
- ✅ 适配伦理办公室日常质控抽查、专项飞行检查前的自查、新项目启动前的材料预审;
- ❌ 不处理手写签名真伪识别、不解析 PDF 表单域(AcroForm)、不对接 HIS 或科研管理系统 API;
- ❌ 不支持非中文文档(如纯英文版知情同意书未作本地化适配);
- ❌ 不校验多语言版本间的一致性(例如中英文两版同意书是否同步更新)。

换句话说,它守的是「版本链」这一道窄门,而不是整条伦理合规流水线。

核心功能模块

系统按处理流程划分为六个内聚模块,全部在src/下清晰分层,职责单一且可独立测试:

模块目录

职责说明

关键技术/策略

loaders/

统一入口加载 PDF、DOCX、PNG/JPG/BMP、TXT 四类源文件,自动判别格式并转为标准文本流

pdf.js 解析 PDF 文本层;mammoth.js 提取 DOCX 语义结构;Tesseract.js 处理图像;纯文本直读

ocr/

对扫描件与图片执行 OCR,内置降噪、二值化预处理,支持中英混合识别(以中文为主)

Tesseract.js + 自定义 PSM 模式(按行识别优先)

extractors/

从 OCR 结果或原生文本中提取三类关键字段:版本号、日期、批件编号

正则模式库驱动(version-patterns.json),辅以关键词上下文定位(如“版本号:”“Version No.”后跟随内容)

engines/

执行批文与同意书的配对逻辑:先按文件名/目录关系粗筛,再按提取字段细比(版本号严格相等、日期需满足“批文早于或等于同意书签署日”)

规则引擎,非机器学习;支持自定义宽松/严格比对模式

reporters/

生成 HTML 报告页,含顶部统计卡片(总文档数、不一致数、一致率)、详情表格(每对文档的提取结果与比对结论)、时间线图(按批件生效日排序的版本演进)

使用原生 DOM 构建,零前端框架依赖,适配移动端横向滚动

exporters/

将比对结果导出为 CSV(供 Excel 分析)、JSON(供下游系统接入)、HTML(含内联样式,离线可打开)

字段命名遵循伦理审查通用术语,如approval_versionconsent_dateis_consistent

所有模块对外暴露统一接口,例如extractVersion(text)comparePair(approvalDoc, consentDoc),便于未来扩展 OCR 引擎或替换 NLP 提取逻辑。

使用与配置方式

运行无需服务器,本地 Node.js 环境即可。我们提供两种使用路径:交互式 CLI(适合初次试用、小批量核查)和命令行参数模式(适合集成进质控脚本、定时任务)。

首次运行前需安装依赖并编译:

npm install npm run build

之后可直接运行:

# 进入交互向导:自动提示选择输入目录、输出格式、是否静默 npm run cli # 批处理模式:指定输入目录、输出目录、报告格式 npm run cli -- --input ./example-data --output ./output --format html # 查看完整参数说明 npm run cli -- --help

配置完全开放:所有识别规则均存于src/config/下的 JSON 文件,无需改代码即可调整:

配置文件

作用

示例片段(节选)

version-patterns.json

定义版本号正则表达式,支持多级匹配优先级

"V\\d+\\.\\d+(?:\\.\\d+)?", "Rev\\.\\s*\\d+", "版本[:: ]+\\d+\\.\\d+"
date-patterns.json

匹配常见中文/数字混合日期格式

"\\d{4}年\\d{1,2}月\\d{1,2}日", "\\d{4}-\\d{2}-\\d{2}", "签署日期:\\s*(\\d{4}-\\d{2}-\\d{2})"
keywords.json

标记关键字段位置的上下文词

"version_keywords": ["版本号", "修订号", "Version No.", "Rev."]

若某批文惯用「批件字号」而非「版本号」作为主标识(如“伦审字〔2024〕第07号”),只需在version-patterns.json中新增对应正则,并确保该字段能被extractors/模块捕获,比对引擎即自动纳入判断依据。

工程结构与可维护性

项目采用典型的分层架构,目录即契约:

ethics-doc-version-checker/ ├── src/ │ ├── loaders/ # 输入适配层:屏蔽格式差异,输出统一文本流 │ ├── ocr/ # 识别层:仅负责图像→文本,不参与业务逻辑 │ ├── extractors/ # 提取层:纯函数式,输入文本→输出 {version, date, id} │ ├── engines/ # 核心逻辑层:输入两个提取结果→输出 {is_consistent, reason} │ ├── reporters/ # 展示层:输入比对结果→输出 HTML 字符串 │ ├── exporters/ # 导出层:输入数据结构→输出文件字节流 │ ├── cli/ # 交互层:参数解析、流程调度、用户反馈 │ └── types/ # 类型定义:所有模块共享的 interface 与 type ├── data/ # 运行时数据(如日志、缓存) ├── example-data/ # 内置示例:含 PDF 批文、DOCX 同意书、JPG 扫描件各一份 └── README.md

这种结构让修改成本可控:
- 若某家医院的知情同意书固定在页眉第三行印版本号,只需调整extractors/中的定位策略,不影响 OCR 或报告生成;
- 若需增加对 Markdown 格式的支持,只改动loaders/新增一个mdLoader.ts,其余模块无感;
- 若未来要接入医院 OA 系统的 HTTP 接口拉取文档,只需新增loaders/httpLoader.ts,CLI 层自动识别新来源。

所有模块均有类型约束(TypeScript),关键函数附带单元测试用例(位于__tests__/),确保每次重构不破坏比对准确性。

数据规范与扩展建议

系统默认按「一对多」关系组织文档:一个伦理批文(Approval Document)可对应多个知情同意书(Consent Document)。配对逻辑优先依赖目录结构,例如./example-data/approval/下放批文,./example-data/consent/下放同意书;若同名(如2024-001.pdf2024-001.docx),则自动尝试关联。不强制要求文件名完全一致,但建议保持基础标识符(如项目编号、申办方缩写)统一,以降低误配率。

对于多中心研究,可将各中心子目录按./example-data/center-a/approval/./example-data/center-a/consent/方式组织,运行时指定根目录,系统会递归扫描并保留中心维度标签,HTML 报告中可按中心筛选统计。

扩展建议(均无需改核心代码):
- 在config/version-patterns.json中补充本院常用批件编号模板(如沪伦审〔2024〕XX号);
- 将example-data/替换为真实归档目录软链接,实现「零迁移成本」接入;
- 用npm run cli -- --format json输出结构化结果,再用 Python 脚本聚合全院季度不一致率,生成质控简报。

限制与说明

本系统在以下场景存在固有局限,已在设计阶段明确接受:
-OCR 识别精度受限于原始图像质量:模糊、倾斜、低对比度的扫描件可能导致版本号漏提,此时需人工复核原始图像并优化扫描参数;
-正则匹配无法覆盖语义等价但字面不同的表达:例如“V2.0”与“第二版”不会被判定为同一版本,需在version-patterns.json中显式添加映射;
-不处理跨文档引用关系:如知情同意书中提及“依据 XX 批文”,系统不会反向查找该批文是否存在,仅比对当前目录下显式存在的文件;
-时间逻辑仅校验“批文生效日 ≤ 同意书签署日”:不校验“批文失效日 ≥ 同意书签署日”,因多数伦理批文无明确失效日,此规则需由人工根据批件正文判断。

这些限制不是缺陷,而是边界声明。我们选择把确定性留给规则引擎,把模糊性留给伦理委员,这正是本项目能长期稳定运行的前提。

项目地址:
https://github.com/nexorin9/ethics-doc-version-checker

http://www.jsqmd.com/news/880770/

相关文章:

  • IT简历远程_兼职经验呈现指南:HR直呼“真香”的正确姿势(附反例吐槽)
  • 计算机工程投稿经历(2026年5月份录用)
  • 2026年元届象GEO优化服务,真实口碑如何?
  • Keil RTX5迁移调试问题与RTOS组件使用指南
  • https://pypi.tuna.tsinghua.edu.cn/simple/
  • AI Agent Harness Engineering 与边缘计算:低延迟场景下的智能体部署与运行
  • 别急着重装系统!记一次 Ubuntu 22.04 上 gcc 与 cpp 版本依赖冲突的排查与修复实录
  • 飞翔的小鸟精灵组
  • 14.解决 99% 刷机故障!从底层原理到脚本实操,杜绝 IMEI / 基带永久损坏
  • 麒麟服务器等保三级配置实战:从SSH双因子到kysec策略落地
  • CAXA 查找替换
  • 四川螺纹钢最新市场价 建材行情动态拿货报价找盛世钢联 - 四川盛世钢联营销中心
  • AI与精益创业结合驱动产品创新的方法论
  • 差分隐私生成模型实战:从理论保障到隐私攻击与审计评估
  • 2026最新免费图片去水印保姆级教程!这5种方法一次学会,第三种零门槛秒出图
  • 15.纯手写无封装!ADB/Fastboot 底层命令封装,刷机维修神器源码
  • CAXA 引出说明
  • 四川钢管最新市场价 管材行情动态拿货报价找盛世钢联 - 四川盛世钢联营销中心
  • 002-AI客服-RAG优化分析
  • 物理生物学研究报告【20260015】
  • ARM SME架构向量点积指令SVDOT与UDOT深度解析
  • 5秒音频也能玩转AI?手把手教你用ESC-50数据集入门环境声音分类
  • 如何将上传至PyPI
  • 别再骂Windows Defender了!手把手教你优化MsMpEng.exe,让游戏/编译不再卡顿
  • 16.高通 9008 深度救砖实战!EDL 协议解析 + Python 刷机源码直接运行
  • 从0到10万粉:用ChatGPT批量生成B站选题、脚本、标题、简介、弹幕预埋——完整工作流拆解,含5大防限流校验节点
  • CAXA 基准代号
  • 多模态模型在昇腾上的部署架构
  • Transformer注意力机制优化2026:Flash Attention到MLA的工程进化
  • 2026年至今,西安地区高适配机械弹簧供应商深度解析:为何“兵华弹簧制造”备受青睐? - 2026年企业推荐榜