# Computing Ecqms

Compute electronic clinical quality measures (eCQMs) over structured data using CQL/QDM...

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

## Install

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

## Description

Compute electronic clinical quality measures (eCQMs) over structured data using CQL/QDM logic, lifting note-derived numerator and exclusion facts from OpenMed to improve measure capture. Use when the user wants to compute an eCQM, evaluate a CMS/ECQI quality measure, improve numerator capture from clinical notes, build CQL/QDM measure logic, or close documentation gaps that structured codes miss. Covers eCQM structure (IPP/denominator/numerator/exclusions), CQL v1.5 and QDM v5.6, MADiE authoring, and mapping OpenMed entities to QDM data elements. Consumes OpenMed analyze_text facts (coded via the linking skills) to supplement structured EHR data; does not replace certified measure engines.

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

# Computing eCQMs

Electronic Clinical Quality Measures (eCQMs) are computed over structured data
using **CQL** (Clinical Quality Language) logic against the **QDM** (Quality
Data Model). Much of what a measure needs, a counseling note, a reason a
service wasn't done, a symptom, lives only in **free text**. This skill uses
OpenMed to lift those facts out of notes (on-device) and feed them into measure
computation so numerators and valid exclusions aren't undercounted.

## When to use this skill

When structured codes under-capture a measure population and the evidence is in
notes: documented exclusions ("patient declined screening"), numerator-relevant
findings, or symptoms gating a measure. Use it *alongside* a certified measure
engine, OpenMed supplements capture; it does not compute or certify the
measure.

## eCQM anatomy (what you're populating)

| Population | Meaning | Where OpenMed helps |
| --- | --- | --- |
| IPP (Initial Population) | everyone the measure could apply to | usually structured (encounters, age) |
| Denominator | IPP meeting base criteria | mostly structured |
| Denominator Exclusion / Exception | valid reasons to remove from denom | **notes**: "declined", "medical reason", "not indicated" |
| Numerator | met the quality action | **notes**: counseling delivered, advice given, status documented |

## Quick start

```python
import openmed

note = (
    "Tobacco use screened today; patient is a current every-day smoker. "
    "Cessation counseling provided and cessation medication offered."
)

result = openmed.analyze_text(note, output_format="dict")
# entities -> {text, label, confidence, start, end}

The rest: https://github.com/maziyarpanahi/openmed/blob/HEAD/skills/computing-ecqms/SKILL.md
