# Segmenting Clinical Sections

Split a clinical note into canonical sections (Chief Complaint, HPI, PMH, Medications...

- 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 segmenting-clinical-sections -g -a claude-code -y`
Codex: `npx skills add maziyarpanahi/openmed --skill segmenting-clinical-sections -g -a codex -y`
Cursor: `npx skills add maziyarpanahi/openmed --skill segmenting-clinical-sections -g -a cursor -y`
Gemini CLI: `npx skills add maziyarpanahi/openmed --skill segmenting-clinical-sections -g -a gemini-cli -y`
Claude Code plugin marketplace: `/plugin marketplace add maziyarpanahi/openmed`

## Description

Split a clinical note into canonical sections (Chief Complaint, HPI, PMH, Medications, Allergies, Assessment & Plan, etc.) before running OpenMed NER or de-identification, so section context sharpens downstream precision. Use when the user has a free-text note or discharge summary and wants section-aware processing, header detection, mapping headers to LOINC document-section codes, or per-section NER/de-id. Covers heuristic header detection, normalization to canonical section labels, LOINC/SecTag framing, and why a finding in PMH is historical while the same finding in A&P is active. Hand-off: feed each sectioned chunk into openmed.analyze_text / openmed.deidentify. Pairs before extracting-clinical-entities.

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

# Segmenting clinical sections

A clinical note is not flat text, it is a sequence of named sections (Chief
Complaint, HPI, Past Medical History, Medications, Allergies, Assessment & Plan).
The **same phrase means different things in different sections**: "diabetes" in
PMH is historical context, "diabetes" in Assessment & Plan is an active problem,
and "penicillin" under Allergies is an adverse-reaction flag, not a current
medication. Splitting the note into canonical sections **before** NER or
de-identification gives every downstream OpenMed step the context it needs to be
more precise, and lets you process sensitive sections under stricter policies.

## When to use

- You have a free-text note, H&P, progress note, or discharge summary and are
  about to run NER (`extracting-clinical-entities`) or de-identification.
- The user wants section detection, header parsing, LOINC section mapping, or
  per-section processing (e.g. "redact the Social History section harder").
- Downstream NER is over- or under-firing because it can't tell historical PMH
  mentions from active A&P problems.

## Quick start

```python
import re
import openmed

# Synthetic note.
note = """CHIEF COMPLAINT: chest pain.
HPI: 54M with 2 hours of substernal pressure.
PAST MEDICAL HISTORY: type 2 diabetes, prior MI 2019.
MEDICATIONS: metformin 500 mg BID.
ALLERGIES: penicillin (rash).
ASSESSMENT AND PLAN: acute coronary syndrome; start aspirin, admit."""

# Map common header variants -> canonical section + LOINC document-section code.
SECTION_MAP = {
    "chief complaint": ("Chief Complaint", "10154-3"),
    "hpi": ("History of Present Illness", "10164-2"),
    "history of present illness": ("History of Present Illness", "10164-2"),
    "past medical history": ("Past Medical History", "11348-0"),
    "medications": ("Medications", "10160-0"),
    "allergies": ("Allergies", "48765-2"),
    "assessment and plan": ("Assessment and Plan", "51847-2"),
}

The rest: https://github.com/maziyarpanahi/openmed/blob/HEAD/skills/segmenting-clinical-sections/SKILL.md
