交付出件箱

← 返回出件箱

门店端视光记录「保存即完成」方案(2026-09-02 · 长官 15:10 已拍板)

长官口径(9-02 14:40 语音):门店端不要「草稿 / 完成」两档。该填的填完点保存就是保存了;保存直接算完成;缺的以后再编辑。现在这套不清晰,要好好研究怎么弄。

一、现状(物理 grep · s2-rework 分支 59e645d9)

点 位置 现状
状态取值 app/models/refractive_record.py:49 draft(默认)/ completed 两态
建记录 refractive-record-pane.tsx:229 → POST /records 帧3 点「新建检查」立刻建一条 draft 空壳,再进帧5
帧5 按钮 frame5-record-entry.tsx:564-578 「暂存草稿」(PATCH)+「保存检查记录」(POST …/complete);编辑 completed 时只有「保存修改」(PATCH)
complete 端点 refractive_record_service.py:994-1027 只许 draft→completed;_completion_errors(868-900)缺必填直接 422 拦下
必填清单 同上 868-900 双眼行都在;双眼裸眼视力;戴镜则戴镜视力+自镜 DS/DC;开始主觉验光则方法+双眼 DS/DC+矫正视力
家长可见 service:940 parent_view 只许 completed;timeline(service:336)没过滤 status 家长列表能看到 draft、点开 404(本身是 bug)
对比基线 refractive_comparison_service.py:169 只取 completed
AI 分析 / 门店结论推送 service:823-865 不看 status,任何时候可跑
帧3 列表角标 patient-rail.tsx:255 橙「草稿」/ 绿「已完成」

数据:test 库 / 生产库状态分布见本文末尾附录(执行时贴入)。

为什么现在不清晰:一条记录一建就是「草稿」,填完还得再点一次「保存检查记录」才定型;必填不齐连定型都不让;家长端列表又把草稿露出来。三处叠一起,视光师搞不清哪一步才算存了。

二、目标模型(一句话)

门店端只有「保存」。保存 = 记录定型(completed)= 家长可见 + 进对比基线。缺项不拦,只提示,以后编辑再补。

三、改法(按最小改动排,推荐全做)

  1. 帧5 只留一个主按钮「保存」(新建、编辑同一文案)。删「暂存草稿」「保存检查记录」「保存修改」三种。
  2. draft 记录点保存:前端 PATCH 字段 → 成功后紧接 POST …/complete 定型(两次调用,保留后端「status 绝不经 PATCH 改」的既有设计,改动最小;若 complete 失败,toast「已保存但未定型,请再点一次保存」,重试只走 complete)。
  3. completed 记录点保存:只 PATCH(现状路径)。
  4. 后端 complete 不再拦必填:_completion_errors 结果改为随响应返回 warnings: [...],状态照常置 completed。监护人同意本来就不拦(phase63_002),不动。
  5. 保存反馈:成功 toast「已保存」;有缺项时追加一行「未填:裸眼视力(OS)、…,可稍后编辑」。新建保存后回帧3 该孩子的检查列表并刷新;编辑已有记录保存后回帧4 查看页(默认这么定,长官不认可就也回列表)。
  6. 空壳草稿处理(「新建检查」点了却没保存):帧5 未保存返回时,若这条记录从未保存过(version 仍为初始且双眼无任何数据)→ 前端直接删掉它。需后端补 DELETE /records/{id},只许删 draft 且无眼别数据,completed 永远不可删。这样列表里不再出现草稿。
  7. 帧3 列表去掉「草稿 / 已完成」角标(全都是定型记录,角标没信息量)。存量旧 draft(见附录)统一显示灰「未保存」,打开进帧4 查看 → 编辑 → 保存即定型;test 的空壳用新 DELETE 端点清掉,生产若有再问长官。
  8. 家长端 timeline 补 status == completed 过滤(修现有 bug,与「定型才可见」对齐)。
  9. 必填星标(批 B)改为「建议填写」标识,不再对应拦截,只对应第 3 条的缺项提示。
  10. 不动:AI 分析 / 门店结论 / 推送 / 重算 / 对比基线逻辑。

四、要改的测试(全部真打 PG)

五、需要长官点头的三处(不点头我按括号里的默认做)

  1. 保存是否保留任何硬拦?(默认:一律不拦,连双眼裸眼视力也只提示)
  2. 空壳草稿处理:返回即删(默认),还是留着显示「未保存」?
  3. 编辑已有记录保存后:回帧4 查看页(默认),还是也回列表?

六、跟当前批次的关系

附录 · 状态分布(9-02 执行)

test:
 completed |   133
(2 rows)

(注:结果最多 1000 行 · 超出请加更严格 WHERE / LIMIT)
prod:
 draft     |     3
 completed |    24
(2 rows)

七、长官拍板(9-02 15:10「继续」)

七、长官拍板(9-02 15:00-15:10)

  1. 方案整体通过。
  2. 保存后直接进该记录查看页(帧4),不回列表(新建/编辑统一);门店结论与 AI 分析都在帧4 上看和写。
  3. AI 分析最低门槛:双眼裸眼视力 + 双眼验光球镜柱镜 + 双眼眼轴;不齐不调模型,卡 9 明示「数据不全,缺:…」。数据支撑:生产 24/24 定型记录有眼轴,test 132/133。
  4. 瞳距进分析(进 prompt + 触发重算),但不设门槛。
  5. 第五节三处默认照做:保存不硬拦、空壳返回即删、编辑后回帧4。