feat(review): 核对包改成医生读得懂;资料库超声一路只留给 agent 的参数

- ceus:灌注指标改为对病灶去暗区(roi_perf)和紫圈(roi_pan)两组算,roi_all 指标删除;
  D1–D4 仍要 roi_all、roi_perf 两条都过才定位(负责人 2026-10-17:医生要正常区与病灶对比看)
- build/library:tic.json 只出两组 11 个指标与 7 个槽位的视频时间;医生截图挪进
  ultrasound/keyframes/key.png,UltrasoundRoute 去掉 key_image、keyframes 多一个 key
- review:TIC参数.csv 取代 TIC结果.csv;问题清单按原因对照表写成大白话,对照表外的原因报错;
  程序原文进 snapshot/问题清单_原文.csv;说明.pdf 整份重写为合作者口吻
- 文档:结构.md、医生核对包、装配两个库、CEUS定量

任务书 04。

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-17 10:22:15 -04:00
parent 77ee03f9a3
commit 7e7f32a13d
19 changed files with 2111 additions and 634 deletions
+7 -4
View File
@@ -238,11 +238,14 @@ def test_build_reads_real_run_layout(
route = read_ultrasound(result.library_dir, alias)
summary = json.loads((run_dir / "U001" / "summary.json").read_text(encoding="utf-8"))
located = {s for s, a in summary["anchor_frames"].items() if a["status"] == "ok"}
assert set(route.keyframes) == located
assert set(route.keyframes) == {"key", *located}
assert route.tic is not None
assert set(route.tic) == {"fits", "perfusion_metrics", "pan_curve_usable", "keyframes"}
assert route.tic["keyframes"]["F1"]["video_time_s"] == pytest.approx(15.0, abs=0.1)
assert route.tic["keyframes"]["F2"]["located"] is False
assert set(route.tic) == {"perfusion_metrics", "keyframe_times_s"}
# 合成视频里没有紫圈:紫圈一组为 null,病灶去暗区一组有 11 个指标。
assert route.tic["perfusion_metrics"]["roi_pan"] is None
assert len(route.tic["perfusion_metrics"]["roi_perf"]) == 11
assert route.tic["keyframe_times_s"]["F1"] == pytest.approx(15.0, abs=0.1)
assert route.tic["keyframe_times_s"]["F2"] is None
# 医生核对包也读这个真实布局:TIC 曲线图和回放视频按字节拷进病例目录。
pack_config = tmp_path / "review_pack.yaml"