给家里人去门诊用的东西:把散在各处的病历、化验单、处方、出院小结,整理成患者自己能核对、医生看得懂的一张交接单。手机或电脑浏览器打开就能用,可以离线,数据默认只留在你自己手上。
先说清楚它是什么、不是什么。 这是一个家庭自用的小工具,未经临床专业审核。它只做信息整理与转写:不诊断、不给用药建议、不建议改药或停药、不判断指标高低。任何一条自动识别出来的内容都必须由你逐条确认后才会进入交接单;没确认的一律不进。看病请以医生意见为准,紧急情况请立即就医。
需要 Node.js 22.12+(22.x 系列;其他版本会被 preinstall 拦住,这是有意的):
npm ci # 安装(lockfile 冻结)
npm run build # 类型检查 + 构建,产物在 dist/
node dev/local-app/server.mjs启动后屏幕上会给出一条局域网地址(例如 http://192.168.x.x:4340/)和一个口令;手机连同一个 WiFi,用浏览器打开那个地址、输口令,就能新建就诊任务、拍照上传、逐项核对、打印或导出交接单。任务数据与原件都写在这台电脑的一个目录里(默认 C:\Users\<你>\jiuyijian-local),不在仓库里,也不上传到任何云服务。
要自动识别,就把图片发往你自己指定的一个兼容端点(不配也能用,界面上会照实说明"识别服务暂时不可用,可手工录入"):
export JYJ_LOCAL_MODEL_KEY='你的密钥'
node dev/local-app/server.mjs --ai-endpoint https://<你选的端点>/v1/chat/completions --model <模型名>- 密钥只从环境变量读,不写命令行、不落盘、不打印。
- 端点要求
https(只有127.0.0.1/localhost例外,方便你自测)。 - 若那家要求自定义鉴权头,加
--auth-style wb。
npm test # 本地夹具 HTTP 冒烟(回归层 B,53 条)
npm run test:e2e # 本机链路端到端自证(真进程/真 HTTP/真落盘,34 条)
npm run typecheck # tsc --noEmit退出码:0 全过|1 有断言红|2 前置不满足。没有"部分绿"——看到 2 先解决环境,不要当通过。
- 识别结果一律停在「待确认」:入单闸门只看人确认过没有;高风险字段(药名、剂量、过敏史)不可能被自动写进交接单。
- 界面上不许说没做过的事:某次识别到底通没通、原件到底存在哪儿、这一条能不能回溯到原件——句子由代码里唯一的一处事实推导;不知道就不断言。
| 路径 | 是什么 |
|---|---|
src/ |
前端(Vite + React + TS 的离线优先 PWA) |
public/sw-v2.js |
离线壳(只在 https 环境注册) |
functions/ |
云端函数实现(同一套业务逻辑的托管版本) |
components/ui/ lib/ |
界面底座(shadcn 风格组件,仅保留 src/ 实际引用的 11 个) |
dev/local-app/server.mjs |
本机链路:一个端口同时发前端与接住这些请求 |
dev/backend-local/ |
本机链路用的查询引擎、对象存储、静态托管与兼容传输层 |
dev/api-fixture/ dev/fake-llm/ dev/fake-ocr/ |
本地回归用的夹具与假模型服务(只绑回环) |
scripts/ |
构建与测试入口 |
- Node 版本:只在 22.12+(22.x)验证过;
engines上限<23。 - 识别:不配端点时只能手工录入(界面会照实说明);云端函数版(
functions/)的部署说明不在本仓。 - PDF:云端通道的 PDF 自动识别尚不可用(界面标注"开发中");本机链路可解析 PDF 文字层。
- 离线壳:只在 https(或 localhost)环境注册 Service Worker;
http://局域网地址下没有离线能力。 - 判据层不在本仓:完整的历史验证记录(上千条静态断言、门禁体系)刻意没有随本仓公开;本仓提供的是可独立运行的冒烟与端到端自证。
- 打印:交接单导出走浏览器打印对话框,各平台表现略有差异。
这个仓库是清洗过的干净导出,不含运行日志、真实病历、凭据、平台内部标识或某台机器的绝对路径;导出前后各跑一次内容扫描,命中即拒绝导出。仓库里那条完整的历史(含踩过的坑与验证记录)没有公开。
见 .github/CONTRIBUTING.md。医疗安全/免责表述问题有独立的 issue 通道;隐私与安全问题请按 .github/SECURITY.md 私密报告,不要开公开 issue。
Apache License 2.0,见 LICENSE。欢迎使用与改作,但请把"未经临床专业审核、不提供诊断或用药建议"这句话一起带走。