[开源] 电子健康档案访问透明时间线:面向患者知情权与信息科合规管理的审计可视化系统

发布时间:2026/6/3 15:40:00

[开源] 电子健康档案访问透明时间线:面向患者知情权与信息科合规管理的审计可视化系统 本项目是一个专为区域健康信息平台设计的电子健康档案EHR访问行为透明化工具核心是把原本分散、隐晦、难以追溯的审计日志转化为患者可查、信息科可管、监管可验的结构化轨迹。它不替代原有HIS或EMR系统而是作为独立审计层读取平台级审计日志JSON/CSV格式经解析、建模、评分、渲染后提供CLI命令行查询、Web可视化看板、多格式合规导出三大交付形态。面向两类核心用户一是需要确认“我的病历被谁看了、为什么看”的患者二是需常态化生成《个人信息保护法》响应材料、应对等保测评与卫健监管检查的信息科工程师。技术上采用TypeScriptNode.js构建主引擎Python辅助模拟真实多源日志数据内存时序数据库支撑实时查询SVG原生渲染高保真时间线Socket.IO保障新记录毫秒级推送。定位与能力范围我们不做日志采集代理也不改写医院原有系统接口。我们专注解决一个明确断点审计日志有了但没人能快速读懂、没人能按需验证、没人能向患者解释清楚。因此全部能力围绕「可解释性」展开不是堆指标而是让每一条访问记录都带上下文哪家机构、哪位操作员脱敏、什么时间、调用哪个系统模块、填写了什么业务原因如“门诊接诊”“转诊审核”“科研授权”。完整度评分机制进一步把“查得全不全”量化为三个维度时间覆盖度是否跨年度连续、机构多样性是否含基层/三甲/公卫等不同层级、类型多样性是否含查询/下载/打印/共享等不同动作。这既不是宽泛的安全态势感知也不是粗粒度的访问统计大屏而是落到每个患者ID、每条原始日志、每次人工可复核的透明呈现。核心功能所有功能均以“患者为中心、以合规为标尺”对齐。我们把能力分为三类交付面命令行供信息科批量处理与脚本集成、Web看板供窗口人员演示与患者自助、导出报告供归档与迎检。功能类别具体能力使用场景说明CLI 查询工具按患者ID查访问记录支持时间范围、机构名称、操作员角色过滤信息科日常核查某患者历史访问配合脚本做月度异常访问扫描全局统计各机构访问量TOP10、访问类型分布饼图、业务原因热力排序快速识别高频访问机构、常见用途偏差、潜在非必要调用Web 可视化看板SVG原生渲染时间线支持缩放/平移/悬停查看详情实时Socket.IO推送新记录窗口人员向患者现场演示安全审计员动态追踪当日访问流患者自助查询患者凭身份证号前端校验访问/patient.html仅显示本人记录操作员姓名脱敏为“张医生XX医院”满足《个保法》第45条“个人有权查阅、复制其个人信息”要求多格式导出HTML交互报告、PDF合规报告含法律依据标注、JSON原始数据、CSV结构化表格迎检提交PDF版《患者档案访问合规说明》科研团队导入CSV做访问模式分析特别说明合规报告compliance-report.ejs模板已内嵌《个人信息保护法》第十三条、第二十一条、第三十条等条款原文及对应字段映射非简单套话而是每项导出数据均标注“此处满足法条X款Y项”。使用与配置部署极简无外部数据库依赖。整个系统启动只需两步npm install npm run web访问http://localhost:3000即进入主看板http://localhost:3000/patient.html为患者入口。首次运行前建议先生成模拟数据验证流程python data/simulator.py该脚本会按真实区域平台逻辑生成含12家机构、8类业务系统、5种访问原因的审计日志覆盖门诊、住院、公卫、检验、影像等典型场景。CLI是信息科主力工具常用指令如下# 查某患者全量访问记录默认最近90天 ts-node src/cli.ts query PATIENT_001 # 精确到某日且限定某机构 ts-node src/cli.ts query PATIENT_001 --date-from 2024-06-01 --date-to 2024-06-01 --institution 市一院 # 直接输出完整度评分含三项子分与总分 ts-node src/cli.ts query PATIENT_001 --completeness # 一键生成合规PDF报告需本地安装puppeteer ts-node src/cli.ts export PATIENT_001 --compliance --output ./report.pdf所有CLI参数含义在SETUP.md信息科部署指南中有逐项说明包括环境变量AUDIT_LOG_PATH指定日志源路径、COMPLIANCE_ORG_NAME注入本单位名称等关键配置。工程结构代码组织严格按职责分层便于信息科二次开发或对接自有日志格式src/ ├── parser.ts # 审计日志解析引擎统一输入JSON/CSV标准输出AccessRecord[] ├── database.ts # 内存时序数据库基于MapArray实现支持按患者ID/Org/TimeRange高效检索 ├── completeness.ts # 完整度评分引擎纯函数式计算输入记录数组输出{timeCoverage: 0.87, orgDiversity: 0.62, ...} ├── web/ │ ├── server.ts # Express服务器提供/api/records、/api/stats等REST端点 │ └── timeline-renderer.ts # SVG时间线渲染器不依赖D3手写path生成兼容低配终端机 ├── cli.ts # CLI主入口封装parser/database/completeness提供一致命令体验 └── adapters/ # 预留目录未来接入医院HIS审计日志、省级平台API时只在此写适配器types.ts中定义了核心类型AccessRecord强制包含patientId、institution、operatorRole、accessReason、accessTime、systemModule六项必填字段确保任何日志源接入后语义不丢失。数据与扩展数据来源完全开放。当前内置Python模拟器data/simulator.py生成的数据字段设计严格对照国家《医疗卫生机构网络安全管理办法》附录B“审计日志字段要求”包含patientId: 患者唯一标识支持身份证号、医保卡号、平台IDinstitution: 机构全称非缩写如“XX市第一人民医院”accessReason: 业务原因枚举值门诊接诊、住院查房、转诊审核、公卫随访、检验申请、影像调阅、科研授权、其他systemModule: 调用系统模块HIS、EMR、LIS、PACS、公卫系统、区域健康档案平台若需对接真实日志只需编写adapters/下的新适配器实现parse(rawLog: string): AccessRecord方法即可。所有导出格式HTML/PDF/JSON/CSV均基于同一份AccessRecord[]数据源保证结果一致性。限制与说明本系统有明确边界我们不承诺也不支持以下场景不替代医院原有审计日志采集系统不提供网络探针或数据库触发器不存储患者敏感身份信息如完整身份证号、手机号患者自助页仅校验不落库不提供用户权限管理系统RBACCLI与Web均默认开放只读访问生产环境需由信息科前置Nginx做IP白名单或反向代理鉴权内存数据库设计为单机轻量级方案适用于日均审计日志50万条的区域平台超大规模需自行替换为TimescaleDB等时序数据库接口已预留。所有限制均在README.md与SETUP.md中坦诚说明无隐藏前提。我们相信透明的系统边界才是可信赖的起点。项目地址https://github.com/nexorin9/ehr-access-timeline

相关新闻