Update PACS DICOM navigation and summaries
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user