Agent skill · Databases

etl-to-omop-cdm

Map OpenMed-extracted, terminology-coded conditions, drugs, and measurements into OMOP CDM v5.4 clinical tables (condition_occurrence, drug_exposure, measurement) for OHDSI/ATLAS analytics. Use when the user wants to load NLP-derived facts into an OMOP database, build an OHDSI ETL from clinical notes, populate condition_occurrence or drug_exposure from text, or standardize note-derived findings to OMOP standard concepts. Covers the source-to-standard concept mapping pattern, required vs optional CDM fields, type concepts for NLP-derived rows, and the user-supplied OHDSI vocabulary (CONCEPT/CON

maziyarpanahigithub.com/maziyarpanahiGitHub ↗
claude-codeApache-2.0
Install
npx skills add maziyarpanahi/openmed --skill etl-to-omop-cdm --agent claude-code

Same command for any agent — swap --agent for codex, cursor, copilot.

Facts
Files in the skill folder: 2
SKILL.md size: 7 KB
Bundled scripts: none
Version: 1.0
Path: skills/etl-to-omop-cdm/SKILL.md
Open the folder on GitHub →
Where it comes from
Stars: 4,851
Language: Python
Read our review of the source →

Weekly change comes from our own snapshots, not the repository page — it measures attention, not adoption.

From the SKILL.md

# ETL to OMOP CDM The OMOP Common Data Model (CDM) is the OHDSI standard for observational health data. This skill maps **OpenMed-derived clinical facts** — entities from `analyze_text` that you have already linked to a source terminology — into the OMOP clinical event tables `condition_occurrence`, `drug_exposure`, and `measurement`. The NLP runs **on-device**; OMOP loading is a downstream, deterministic transform. ## When to use this skill After you have (a) extracted entities with OpenMed and (b) coded them to a source vocabulary (ICD-10-CM / SNOMED for conditions, RxNorm for drugs, LOINC for labs — see the linking skills). Use this skill to turn those coded facts into OMOP rows. It is *not* a clinical NER skill and *not* a code-linking skill; it assumes both are done. ## Quick start ```python import openmed note = "Assessment: type 2 diabetes mellitus. Started metformin 500 mg PO BID. HbA1c 8.2%." result = openmed.analyze_text(note, output_format="dict") # result["entities"] -> [{text,label,confidence,start,end}, ...] # You then code each entity to a SOURCE concept using the OHDSI vocabulary you # downloaded (see linking-umls-concepts / normalizing-rxnorm / mapping-loinc), # an

What's inside
Steps it walks through
  1. When to use this skill
  2. Quick start
  3. The source → standard pattern (the heart of OMOP)
  4. Domain → table → fields
  5. Type concepts: mark rows as NLP-derived
  6. Workflow
  7. Hand-off to / from OpenMed
  8. Edge cases & gotchas
  9. Standards & references
Ships with 1 file
  • references/omop_cdm_v5_4_fields.md
More from openmed
All skills →
About this skill
What does the etl-to-omop-cdm skill do?

Map OpenMed-extracted, terminology-coded conditions, drugs, and measurements into OMOP CDM v5.4 clinical tables (condition_occurrence, drug_exposure, measurement) for OHDSI/ATLAS analytics. Use when the user wants to load NLP-derived facts into an OMOP database, build an OHDSI ETL from clinical notes, populate condition_occurrence or drug_exposure from text, or standardize note-derived findings to OMOP standard concepts. Covers the source-to-standard concept mapping pattern, required vs optional CDM fields, type concepts for NLP-derived rows, and the user-supplied OHDSI vocabulary (CONCEPT/CON

How do I install it?

Run `npx skills add maziyarpanahi/openmed --skill etl-to-omop-cdm --agent claude-code` — it drops the skill into your project so the agent can pick it up. Swap the --agent value for codex, cursor or copilot if you use one of those.

Where does this skill come from?

From maziyarpanahi/openmed, a repository with 4,851 stars. We read it straight from the repository tree rather than a submitted listing, so what you see here is what is actually published.

Is a popular skill a good skill?

Not necessarily. Stars measure attention, not adoption — a repository can trend for a week and be abandoned. That is why we show the weekly change from our own snapshots next to the total, instead of a single flattering number.

Keep going