乐于分享
好东西不私藏

[开源] 多部门会签文档进度自动重建系统:面向医院行政与临床协同的OCR+状态机追踪工具

[开源] 多部门会签文档进度自动重建系统:面向医院行政与临床协同的OCR+状态机追踪工具

本项目是专为医院多部门会签流程设计的轻量级文档进度追踪系统,解决术前讨论、器械采购、医务审批等跨科室纸质/扫描件流转中「卡在哪、谁没签、超没超时」三大盲区。我们用手机拍照上传会签单,自动识别当前签署节点(如「麻醉科已签」「ICU待审」),驱动状态机记录每一步流转时间,生成唯一二维码供患者或申请科室扫码查实时状态和预计完成时间;对停留超48小时未处理的节点,系统自动告警。它不是通用工作流引擎,不对接HIS或EMR,而是聚焦「会签文档本身」这一最小可追踪单元,提供CLI命令行、Web API和HTML仪表盘三类交付形态,技术栈全部基于Python生态:Tesseract(chi_sim中文包)做OCR、OpenCV预处理图像、SQLite本地存档、Flask暴露API、Rich渲染终端界面、Jinja2生成中式政务风HTML页。

定位与能力范围

我们不做流程再造,也不替代签字动作本身,只做一件事:把散落在不同科室桌面上的会签单,变成一条可追溯、可查询、可预警的时间线。适用场景明确限定在「多部门顺序或并行签署的正式文书」,典型如:术前讨论纪要、高值耗材采购申请、院内会诊邀请单、科研伦理审查表、大型设备使用审批单。不覆盖日常交接班记录、护理巡视单、检验申请单等非会签类表单;也不处理电子签名平台已在线签署的文档,本系统专治那些仍靠打印、手写、传阅、拍照的「半数字化」环节。

它的能力边界清晰: - 输入必须是含会签栏的文档图像(支持JPG/PNG),能识别出「科室名+签署人+时间」结构化字段; - 状态机仅管理「创建→流转中→完成→取消」四态,节点粒度到科室级(非个人),不拆解到具体医生工号; - QR码仅编码文档ID与查询密钥,不承载业务数据,扫码页只读不修改; - 所有告警基于配置的threshold_hours(默认48小时),不引入外部日历或节假日规则。

核心功能模块

模块
关键能力
说明
图像采集与OCR
灰度化、二值化、倾斜校正、中文识别
OpenCV预处理保障Tesseract在模糊、反光、倾斜照片上仍可提取「外科:张三 2026-05-10」类文本
状态机引擎
节点级待签/已签/已拒、全局文档状态、完整时间戳链
每次sign操作触发状态校验,拒绝重复签署或跳过前置节点,所有变更写入timeline表
QR码管理
文档ID+密钥编码、可打印标签生成、扫码直连状态页
生成PNG后可粘贴至纸质单右下角,患者扫码即见当前所处节点及剩余预估时长(如「距超时还剩36小时」)
HTML可视化
时间轴图谱、四象限仪表盘(待处理/进行中/已完成/超时)、响应式布局
界面采用蓝灰主色、方正字体、无动画,适配iPad及门诊自助机浏览器
CLI工具集
全生命周期操作:建单、查状态、签节点、看时间轴、导报表
支持--status in_progress筛选、batch-import夹批量导入、export --format csv导出台账

使用与配置

安装只需三步:克隆代码、装Python依赖、配Tesseract中文包。无需数据库服务或云环境,SQLite文件默认存于data/document_flow.db,开箱即用。

pip install -r requirements.txt

Tesseract安装按系统区分: - Windows:下载UB-Mannheim安装包,勾选chi_sim中文语言包; - Linux:sudo apt-get install tesseract-ocr tesseract-ocr-chi-sim; - macOS:brew install tesseract tesseract-lang

配置通过config.json统一管理,关键项包括OCR语言(默认chi_sim+eng)、超时阈值(单位小时)、Web服务端口、日志路径。首次运行可自动生成模板:

python main.py init-config

工作流实操示例

以「术前讨论纪要」为例,全流程6步可在5分钟内走完:

  1. 创建文档:声明标题与初始会签科室
    python main.py create "术前讨论纪要" --departments "外科,麻醉科,ICU"

  2. 补全节点:追加医务科、分管院长等后续环节
    python main.py add-node 1 --name "医务科审核" --department "医务科"
       python main.py add-node 1 --name "分管院长审批" --department "院领导"

  3. 导入照片:外科医生拍下已签署页面,上传绑定文档
    python main.py import-image ./img/waike.jpg --doc-id 1

  4. OCR识别:系统自动解析出「外科:李四 2026-05-10」并标记该节点为SIGNED
    python main.py scan-document ./img/waike.jpg

  5. 扫码查看:打印QR码贴单,患者扫码即见「当前节点:麻醉科(待签),预计24小时内完成」
    python main.py generate-qr 1

  6. 监控超时:若麻醉科48小时未签,report --type overdue将列出该文档,管理员可定向催办。

工程结构与扩展性

项目采用分层架构,各模块职责分明,便于医院信息科二次开发:

目录/文件
职责
可定制点
src/state_machine.py
状态转换规则、节点校验逻辑
修改transition_rules可适配本院特有会签顺序(如需「先ICU后麻醉科」)
src/ocr_engine.py
图像预处理参数、Tesseract调用封装
调整threshold(默认128)或开关denoise可优化特定扫描件识别率
src/qr_generator.py
QR码内容格式、密钥生成策略
替换generate_query_key()函数可对接院内统一认证体系
templates/
HTML页面样式与数据渲染逻辑
修改CSS变量即可切换蓝白/绿白主题,适配不同科室视觉偏好

所有CRUD操作经由src/crud.py抽象,数据库表结构固化但字段可扩:documents表存主干信息,nodes表存科室节点,timeline表存每一次签署动作,新增字段不影响现有CLI命令。

环境与运行保障

系统对运行环境要求极低,Python 3.8+即可,无GPU依赖。测试覆盖核心路径,运行pytest可验证OCR解析、状态跳转、QR码生成等关键行为。日志默认写入logs/document_flow.log,级别可配为DEBUG用于排查识别失败原因。

常见问题有标准应对手段: | 问题现象 | 原因定位 | 解决方式 | |----------|----------|----------| | OCR识别不出科室名 | 图片过暗/反光/倾斜严重 | 用scan-document前先手动旋转图片,或调高config.jsonocr.threshold值 | | status命令报错「no such table」 | data/目录无写权限或路径不存在 | 手动创建data文件夹,或修改config.jsondatabase.path为绝对路径 | | Web服务启动失败 | 端口5000被占用 | 修改config.jsonweb.port为5001,或执行lsof -i :5000杀进程 |

数据与交付形态

系统输出两类核心数据资产:一是结构化台账,含文档ID、标题、各节点签署人、时间、备注,支持CSV/JSON导出供质控分析;二是可视化视图,仪表盘按状态分类统计文档数,时间轴页展示从发起至当前的完整流转图谱。所有数据落盘于SQLite,无外部依赖,导出即走,符合医院数据本地化要求。

CLI命令覆盖全部管理动作,Web API则为前端集成预留接口:GET /api/document/{id}返回摘要,GET /api/document/{id}/timeline返回带时间戳的节点序列,GET /api/document/{id}/status返回是否超时等布尔态。不提供POST/PUT接口,杜绝远程篡改风险。

项目地址:
https://github.com/nexorin9/document-flow-tracker

往期热门文章

医疗AI,连幻觉都谈不上

排队两小时,看病三分钟:医院HIS系统正在改变诊疗

HIS厂商的"架构收敛":当所有系统长得一模一样,你凭什么收费?

十万字病历,AI只配读懂噪音

一群鼓吹AI Coding的专家,正在制造医疗信息化的新技术债

当AI开始学习自己编造的病历

不是AI不行,是HIS系统把门焊死了

医院AI培训:台上教你投喂,台下让你背锅

当AI开始操作医院HIS系统,医疗AI的问题就变了

医院信息网络安全大赛:表演给谁看?

CHIMA年年开,问题年年在

CHIMA2026:AI挤满展厅,但医院已经不买单了

医院的数据不属于医院

医院信息科不会消失,但正在被掏空

谁解释数据,谁就定义医院

一线崩了!医院信息科正在拖垮整个医疗信息化

医疗信息化将进入无人实施时代

当医院信息科主任用AI下场写代码,交付链第一次被打穿

当代码不再是“技术”:HIS厂商的“辜鸿铭时刻”

我用一个Agent,把实施链路压缩到一轮循环

AI狂欢背后:HIS厂商正在成为第一批受害者

离职程序员被炼成AI!但我发现真正该慌的是医生

HIS厂商还没倒,但已经不值钱了!

HIS厂商真正的危机:医院不再必须买系统了

代码不再稀缺,医院HIS厂商还怎么定价?

买国产不会被问责,买进口不会被原谅

把HIS系统的Loading改成Thinking,它就是AI了吗?

Seedance2证明了一件事:医疗AI可能只是另一种幻觉

软件已死:医院未来不需要买系统,只需要买“技能包”

我用OpenClaw干了一件HIS厂商最怕的事

Epic的“美国HIS神话”,为何在中国公立医院无法复制?

中国公立医院的内外网隔离,究竟在保护什么?

Oracle的撤退信号:医疗信息化,正在被资本重新定价

别做梦了,绝大多数公立医院,根本玩不转HIS自研

互联网大厂做不好HIS?因为这不是软件业,是保姆业

为什么开源HIS系统在中国几乎绝迹?

这套HIS系统完美运行,所以:医生全责

当HIS系统真正好用时,病人已经出事了

比“大厂救不了”更残酷的真相,当全国医院共用一套HIS系统

中国式 RWD 祛魅:所谓真实世界数据,其实是 AWD?

都在说医疗数据是金矿,但没人敢提那个尴尬的真相

中国医院信息化正在经历一场反向演化:越评级,越难用

为什么互联网大厂的“降维打击”,救不了中国医院的HIS?