Files
HIS/患者列表处理/数据处理工作区/07_处理程序说明.md

73 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 患者列表归档处理程序说明
## 工作区文件
1. `01_科室分类规则.json`:大科室、子科室、文件夹别名归类规则。
2. `02_患者列表OCR归档.py`:单个图片集群的 OCR、字段清洗、去重、复核报告生成程序。
3. `03_人工复核修正.json`:少量无法靠规则自动判断的人工修正项,可能包含患者信息,不提交到 Git。
4. `04_合并批次结果.py`:合并所有 `*-列表归档结果`,生成全局 JSON/CSV 和 `信息记录`
5. `05_同步PostgreSQL单表.py`:把合并结果同步到 PostgreSQL 的 `"Patient_Lists"` 单表。
6. `06_PostgreSQL建表结构.sql`:数据库单表结构、索引、表注释、字段注释。
7. `07_处理程序说明.md`:当前说明。
8. `08_PostgreSQL调整Patient_Lists列顺序.sql`:保留数据的前提下,把现有 `"Patient_Lists"` 物理列顺序调整为当前字段顺序。
9. `09_PostgreSQL住院号非空唯一约束.sql`:删除住院号为空的记录,重复住院号保留最新一条,并让 PostgreSQL 强制住院号不能为空且唯一。
## 智能体处理顺序
1. 检查待处理批次目录和图片数量。
2. 必要时更新 `01_科室分类规则.json` 的别名。
3. 运行 `02_患者列表OCR归档.py` 处理一个批次。
4. 查看 `复核报告.json``重复住院号报告.json`
5. 若有需人工复核项,优先补自动清洗规则;仍不能自动判断时,写入 `03_人工复核修正.json`
6.`--rebuild-from-cache` 重建该批次结果,确认复核项和重复住院号符合预期。
7. 运行 `04_合并批次结果.py` 更新全局 `信息记录`
8. 运行 `05_同步PostgreSQL单表.py` 同步到 PostgreSQL。
9. 导入 PostgreSQL 后查询记录数、需复核记录数、重复住院号组数。
## 人工复核网页端
- 代码目录:`人工复核网页端/`
- 启动方式:`cd 人工复核网页端 && docker compose up -d --build`
- 登录配置从项目根目录 `.env` 读取:`REVIEW_APP_USERNAME``REVIEW_APP_PASSWORD``REVIEW_APP_SECRET_KEY``REVIEW_APP_PORT`
- 网页端读取各批次 `复核报告.json`,按原始图片路径与图片内行号裁剪截图;住院号不能为空且唯一,格式是否规范交由人工复核时判断。
- 保存修订后写入 `数据处理工作区/03_人工复核修正.json`,并尽量同步 PostgreSQL若 PostgreSQL 暂不可用,会保留待同步状态,之后可在网页端点击“提交待同步”。
- 出院时间默认允许为空;确有出院时间时,网页端和处理程序会校验时间格式以及是否早于入院时间。
- 页面包含概览、复核、抽查、抽查查看、设置区域;抽查功能可随机抽取患者行,调用 Kimi 多模态模型二次核验,并把 AI 反馈、机器判断、人工抽查结论写入 PostgreSQL。
## 识别策略
- OCR 接口:腾讯云 `RecognizeTableAccurateOCR` 表格识别 V3。
- 新批次拼接图默认给每张原图上下各加 `24px` 白色边界,减少贴边表格行被裁掉或和相邻图片粘连的概率。
- 正式处理优先用 6 张拼接;接口超时、失败或行数偏少时,程序会自动降到 4/3/2/单张。
- 行数校验:按图片高度推断应有行数,返回行数偏少即判定该拼接档位不可靠。
- 漏行不一定只发生在最上方或最下方两行;长拼接图中间也可能漏行,白边只能缓解贴边问题。
- 同一科室内会记忆稳定回退档位;跨科室不共享该记忆,避免重建历史缓存时误用。
- 只用缓存重建时,若前序回退策略需要的缓存不完整,会先尝试该组主缓存,避免因缓存形态不同造成少行。
- 字段顺序固定为:姓名、性别、年龄、住院号、诊断、入院时间、最后书写时间、住院天数、出院时间、手术后天数。
- 字段清洗包含日期规范化、住院号常见误识别修正、长诊断吞入入院时间、空时间字段导致列左移、`后XX天` 错位等。
## 住院号核验规则
- `住院号` 是唯一强制校验条件:不能为空且全库唯一。
- 单批次、全局合并和 PostgreSQL 同步都会剔除住院号为空的记录;重复住院号按后出现记录覆盖先出现记录;格式异常但非空的住院号保留。
- 网页端保存时优先按图片路径和图片内行号定位数据库记录;如果当前住院号已存在于另一条记录,会用当前修订覆盖既有住院号记录,并删除当前重复图片记录。
- 数据库约束允许 `出院时间` 为空;若入院时间和出院时间均为标准格式且入院时间晚于出院时间,该记录必须标记为 `需人工复核`
## PostgreSQL 单表字段
`"Patient_Lists"` 只保留正式查看和追溯需要的字段:
- 数据定位:`batch_name``source_folder``image_path``image_name``image_row_no`
- 科室信息:`major_department``sub_department`
- 患者信息:姓名、性别、年龄、住院号、诊断、入院时间、最后书写时间、住院天数、出院时间、手术后天数
- 复核信息:`review_status``review_notes``manual_corrected`
- 抽查信息:`audit_result``audit_ai_feedback``audit_manual_feedback``audit_machine_verdict``audit_source``audit_checked_by``audit_checked_at`
复核状态含义:
- `自动复核通过`OCR 结果经过程序规则校验后没有发现明显异常,`manual_corrected=false`
- `人工复核通过`:该行命中了 `03_人工复核修正.json` 中的人工修正项,修正后校验通过,`manual_corrected=true`
- `AI修改-待确认`:网页端 Kimi 辅助生成的草稿状态,不会被待同步流程写入 PostgreSQL需人工保存确认。
OCR 请求号、OCR 缓存路径、拼接图路径、拼接组号等中间态字段不进入数据库正式表。