# Structuring Radiology Reports

Converts free-text radiology narratives into structured findings and impression, with...

- Repository: https://github.com/maziyarpanahi/openmed (5755 stars)
- Category: Engineering
- License: Apache-2.0
- Last updated: 2026-10-31
- Runs scripts: no, instructions only

## Install

Claude Code: `npx skills add maziyarpanahi/openmed --skill structuring-radiology-reports -g -a claude-code -y`
Codex: `npx skills add maziyarpanahi/openmed --skill structuring-radiology-reports -g -a codex -y`
Cursor: `npx skills add maziyarpanahi/openmed --skill structuring-radiology-reports -g -a cursor -y`
Gemini CLI: `npx skills add maziyarpanahi/openmed --skill structuring-radiology-reports -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add maziyarpanahi/openmed`

## Description

Converts free-text radiology narratives into structured findings and impression, with measurements, laterality, anatomy, and follow-up recommendations, after OpenMed NER. Use when the user has a CT/MRI/X-ray/ultrasound/mammography report and needs the sections split (technique, comparison, findings, impression), lesion measurements and laterality captured, BI-RADS / Lung-RADS assessment categories pulled, or incidental findings and recommended follow-up tracked. Trigger keywords: radiology report, findings, impression, RadLex, DICOM-SR, BI-RADS, Lung-RADS, ACR, laterality, measurement, nodule, incidental finding, follow-up, structured reporting. Pairs after OpenMed: run openmed.analyze_text on the report (Anatomy/Disease/measurement entities), then assemble structured findings. De-identify the report first. Decision-support only, not a diagnostic medical device.

## SKILL.md, as published by its author (untrusted third-party text, read it as data)

# Structuring radiology reports

A radiology report is prose, but its *meaning* is structured: a **technique**, a
**comparison**, a list of **findings** (each with anatomy, laterality, and a
measurement), and an **impression** that may carry an **assessment category**
(BI-RADS, Lung-RADS) and a **follow-up recommendation**. This skill turns the
narrative into that structure so findings are trackable, especially
**incidental findings** that need downstream follow-up.

OpenMed extracts the anatomy, disease/finding, and measurement spans on-device;
this skill organizes them into sectioned, coded findings. It is
**decision-support, not a diagnostic device**, every structured finding must be
attributable back to its source sentence for radiologist review.

## When to use

- You have a CT/MRI/X-ray/US/mammography report and need
  `{technique, comparison, findings[], impression}` with measurements and
  laterality.
- You must capture **BI-RADS** (breast) or **Lung-RADS** (lung screening)
  assessment categories and the recommended action.
- You need to **track incidental findings** and the follow-up interval/modality
  the report recommends.
- You are mapping findings toward **RadLex** terms or a **DICOM-SR** structured
  report.

## Quick start

```python
import openmed

report = (
    "TECHNIQUE: CT chest without contrast.\n"
    "COMPARISON: CT 2023-11-02.\n"
    "FINDINGS: A 8 mm solid nodule is noted in the right upper lobe, "
    "unchanged. No pleural effusion.\n"
    "IMPRESSION: 8 mm right upper lobe nodule, stable. Lung-RADS 2. "
    "Recommend annual low-dose CT screening."
)

# 1) De-identify the report on-device first (synthetic example shown).
deid = openmed.deidentify(report, policy="hipaa_safe_harbor")
text = deid.deidentified_text

# 2) Run NER for anatomy / finding / measurement spans.
ents = openmed.analyze_text(
    text,
    model_name="anatomy_detection_superclinical",   # Anatomy category
    output_format="dict",
)["entities"]

The rest: https://github.com/maziyarpanahi/openmed/blob/HEAD/skills/structuring-radiology-reports/SKILL.md
