Update PACS DICOM navigation and summaries

This commit is contained in:
Codex
2026-05-30 13:29:31 +08:00
parent c1fbdd8bac
commit 40e18ed45d
10 changed files with 307 additions and 57 deletions

View File

@@ -594,14 +594,20 @@ def annotation_labels_sql() -> str:
return f"""
SELECT
a.ct_number,
COALESCE(jsonb_agg(DISTINCT part.value) FILTER (WHERE part.value IS NOT NULL), '[]'::jsonb) AS body_part_keys,
COALESCE(jsonb_agg(DISTINCT
CASE
WHEN part.value IN ('lower_abdomen', 'pelvis') THEN 'abdomen_pelvis'
ELSE part.value
END
) FILTER (WHERE part.value IS NOT NULL), '[]'::jsonb) AS body_part_keys,
COALESCE(jsonb_agg(DISTINCT
CASE part.value
WHEN 'head_neck' THEN '头颈部'
WHEN 'chest' THEN '胸部'
WHEN 'upper_abdomen' THEN '上腹部'
WHEN 'lower_abdomen' THEN '腹部'
WHEN 'pelvis' THEN '盆腔'
WHEN 'abdomen_pelvis' THEN ''
WHEN 'lower_abdomen' THEN '腹盆部'
WHEN 'pelvis' THEN '腹盆部'
ELSE NULL
END
) FILTER (WHERE part.value IS NOT NULL), '[]'::jsonb) AS body_part_labels
@@ -688,7 +694,7 @@ def cases(
)
if status_filter in {"registered", "unregistered"}:
clauses.append(f"registration_status = {sql_literal(status_filter)}")
if body_part in {"head_neck", "chest", "upper_abdomen", "lower_abdomen", "pelvis"}:
if body_part in {"head_neck", "chest", "upper_abdomen", "abdomen_pelvis"}:
clauses.append(f"body_part_keys ? {sql_literal(body_part)}")
if algorithm_model.strip():
clauses.append(f"algorithm_model ILIKE {sql_literal('%' + algorithm_model.strip().replace('%', '').replace('_', '') + '%')}")
@@ -808,6 +814,9 @@ def resolve_study_root(study: dict[str, Any]) -> Path:
return root
target_folder = str(study.get("target_folder_name") or "")
if target_folder and PROCESSED_ROOT.exists():
direct = PROCESSED_ROOT / target_folder
if direct.exists():
return direct
found = next(PROCESSED_ROOT.rglob(target_folder), None)
if found:
return found
@@ -843,10 +852,8 @@ def annotation_labels(row: dict[str, Any]) -> list[str]:
elif part == "upper_abdomen":
phase = {"plain": "平扫", "arterial": "动脉期", "portal_venous": "门脉期", "delayed": "延迟期", "unknown": "无法判别"}.get(row.get("upper_abdomen_phase") or "unknown", "无法判别")
labels.append(f"上腹部-{phase}")
elif part == "lower_abdomen":
labels.append("腹部")
elif part == "pelvis":
labels.append("盆腔")
elif part in {"abdomen_pelvis", "lower_abdomen", "pelvis"}:
labels.append("")
return labels