OpenMed CHW表单去标识化指南:ODK、CommCare与KoBoToolbox社区数据本地处理
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
OpenMed 是一个本地优先的医疗 AI 开源项目,其 CHW(社区健康工作者)表单去标识化功能可以把 ODK Central、CommCare HQ 和 KoBoToolbox 导出的提交数据在本地完成隐私脱敏,全程不联网、不调用任何平台 API、患者数据不离开你的网络。对于在社区一线收集调查数据的团队来说,这意味着可以在数据离开采集设备之前就完成脱敏。
为什么社区数据需要本地去标识化
CHW(Community Health Worker,社区健康工作者)表单是基层医疗数据的主要载体:家访记录、患者姓名、身份证号、就诊日期、家庭经纬度……这些字段混合在 ODK、CommCare、KoBoToolbox 的 JSON 或 CSV 导出里,直接上传到云端或发布给合作方都构成隐私风险。
传统的做法是把导出文件传到服务器端用通用 NLP 工具处理,但 CHW 数据往往来自弱网甚至无网的采集环境。OpenMed 的 CHW 表单处理器(openmed/multimodal/chw_forms.py)专为这种场景设计:
- 100% 本地运行:不抓取 ODK Central / CommCare HQ / KoBoToolbox 的任何在线接口,也不上传结果
- 结构化感知:能识别三大平台导出的嵌套 JSON、斜杠分隔路径 CSV、长表 repeat 导出
- 确定性输出:相同输入 + 相同策略,输出完全一致,便于审计与复现
- 附带无 PHI 清单:生成的 manifest 只含字段路径、策略、计数,绝不含原始表单值
三大平台导出格式,一份代码全兼容
XForms 生态里同一份提交会有多种形态,OpenMed 的处理器对三种主流平台做了适配,对应关系如下:
| 平台 | 典型导出形态 | 测试样例文件 |
|---|---|---|
| ODK Central | OData 风格元数据、斜杠路径、repeat 行 | odk.json / odk.csv |
| CommCare HQ | 嵌套 form/meta/case 结构、点号路径 | commcare.json / commcare.csv |
| KoBoToolbox | KoBo 元数据、斜杠分隔字段、嵌套 repeat | kobo.json / kobo.csv |
这些合成样例文件都在 tests/unit/multimodal/fixtures/chw_forms/ 目录下,你可以放心地拿来做本地演练,无需接触真实生产数据。
字段策略一览:每类字段怎么处理
处理器会按"斜杠/点号分隔的路径"解析出 group/repeat 结构,再对叶子字段自动分类并采取默认动作:
| 字段形态 | 默认动作 |
|---|---|
_uuid、_submission_time、deviceid、instanceID、case ID | 确定性哈希 |
| 人名、电话、出生日期、街道地址 | 规范化标签掩码 |
| 身份证、患者号、家庭号、记录号 | 确定性哈希 |
| 就诊/随访日期 | 按记录做确定性日期平移,保留时间间隔关系 |
geopoint、geotrace、GPS 坐标 | 经纬度四舍五入泛化,移除高程与精度 |
| 叙述性描述、随访记录、咨询笔记 | 走完整文本去标识化流水线 |
| 未分类文本(含单选/多选答案) | 走文本流水线;未检出 PII 的编码值保持原样 |
两个值得注意的设计:
- 经纬度只保留圆整后的经纬度。如果要做区级发布,建议直接丢弃坐标、改发行政区编码——这与 DHIS2 "发布区级以上行政单元而非设施/家庭位置" 的规则一致(参见 docs/dhis2-export.md)。
- 不确定时按最保守处理:无法识别为编码值的文本字段不会"想当然放过",而是进入文本去标识化流水线;CSV 中列数与表头不一致的行会被拒绝而不是截断。
五分钟上手:命令行一步脱敏
仓库自带一个文件级示例脚本 examples/chw_form_deid.py,一条命令即可完成脱敏并输出无 PHI 的策略清单:
uv run python examples/chw_form_deid.py \ tests/unit/multimodal/fixtures/chw_forms/odk.json \ --platform odk \ --output /tmp/odk.deidentified.json \ --manifest /tmp/odk.manifest.json常用开关:
--platform odk | commcare | kobo:显式指定平台(有平台元数据时可省略)--drop-metadata:直接删除平台元数据而非哈希--drop-geopoints:直接丢弃地理坐标字段而非泛化
运行完成后,--output得到脱敏后的同构导出(JSON 键序稳定、CSV 表头与行序稳定),--manifest得到字段级策略清单。完整 API 用法(redact_chw_form函数与策略参数)详见官方文档 docs/chw-form-deid.md。
进阶:按需覆盖默认策略
如果你的项目有自定义字段,可以在策略里做两点映射,无需改动代码:
header_heuristics:把项目自定义列名映射到规范标签,例如把beneficiary_alias声明为 PERSONaction_overrides:对指定字段路径单独指定keep、mask、hash、drop、date_shift、free_text_redact或generalize_geo动作
例如某项目要求"家访其他答案"走文本脱敏、"家庭坐标"整列删除,只需在策略里各加一行声明即可。删除 CSV 字段会移除整列,删除 JSON 字段则移除对应键,repeat 列表与嵌套结构会完整保留。
隐私边界:它做什么、不做什么
使用 CHW 表单处理器前,请明确它的能力边界(这也是 docs/chw-form-deid.md 中的 Privacy Boundary 一节):
- ✅ 只处理本地文件导出(JSON / CSV / TSV)
- ✅ 文本叙述字段复用 OpenMed 常规去标识化流水线,需要离线时可将模型缓存在机构机器上
- ❌ 不抓取 ODK Central / CommCare HQ / KoBoToolbox 在线数据,也不上传结果
- ❌ 媒体附件(照片等)需要走现有的图片/OCR 脱敏路径
- 测试中请只使用仓库内的合成样例(tests/unit/multimodal/test_chw_forms.py 覆盖了三大平台的导出形态)
延伸阅读
- 功能总览:docs/feature-map.md
- 示例索引:docs/examples.md(含
chw_form_deid.py条目) - 多模态脱敏入口:openmed/multimodal/
- 表格类数据脱敏:docs/duckdb-deidentification.md
CHW 表单去标识化的核心价值就一句话:让社区数据在离开采集现场之前,就成为一份可以安全共享的资产。
【免费下载链接】openmedLocal-first healthcare AI: clinical NER & HIPAA PII de-identification that runs 100% on-device. 2,200+ medical models, 21 languages, Apple MLX + Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考