# Reporting Adverse Events

Structures adverse-event mentions that OpenMed extracts into FAERS / ICH E2B(R3)...

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

## Install

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

## Description

Structures adverse-event mentions that OpenMed extracts into FAERS / ICH E2B(R3) reportable fields, suspect drug, reaction (MedDRA PT), seriousness criteria, and outcome. Use when the user needs to build an individual case safety report (ICSR), populate a FAERS submission, map a narrative to E2B(R3) data elements, classify seriousness (death, life-threatening, hospitalization, disability, congenital anomaly), or assign reaction outcomes. Trigger keywords: adverse event, ADR, ICSR, FAERS, E2B, E2B(R3), suspect drug, seriousness, MedDRA, reaction outcome, pharmacovigilance case. Pairs after OpenMed NER: consume Pharmaceutical/Chemical and Disease entities from openmed.analyze_text. MedDRA is licensed and user-supplied, never bundled. De-identify the narrative with openmed.deidentify before any external submission.

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

# Reporting adverse events into FAERS / ICH E2B(R3)

A pharmacovigilance case starts as free-text narrative ("68 yo on warfarin
developed GI bleed, hospitalized"). To make it reportable you must structure it
into the **ICH E2B(R3)** data elements that the FDA's **FAERS** (and EMA's
EudraVigilance) expect: a **suspect drug**, one or more **reactions** coded to
**MedDRA** Preferred Terms, **seriousness** criteria, and a **reaction outcome**.

OpenMed extracts the drug and condition spans on-device; this skill turns those
spans plus the narrative into the E2B(R3) skeleton. The reaction coding step
needs **MedDRA**, which is **licensed by the MSSO and user-supplied**, it is
never bundled with OpenMed and must be loaded from the user's own subscription.

## When to use

- A narrative names a drug and an adverse reaction and you need an ICSR
  (Individual Case Safety Report) shell with the right E2B(R3) fields.
- You must classify **seriousness** (E2B sections C.1.7 / E.i.3), death,
  life-threatening, hospitalization/prolongation, disability, congenital
  anomaly, or "other medically important condition".
- You need to characterize each drug as **suspect / concomitant / interacting**
  (the `drugcharacterization` axis FAERS uses).
- You are pre-filling a 3500A / FAERS electronic submission or staging cases for
  a safety database.

This skill produces a **structured draft for human safety review**, it does not
file reports or perform causality assessment autonomously.

## Quick start

```python
import openmed

narrative = (
    "68-year-old patient on warfarin 5 mg daily developed a gastrointestinal "
    "hemorrhage and was hospitalized. Warfarin was discontinued; the patient "
    "recovered."
)

# 1) Extract drug spans (Pharmaceutical category) on-device.
drugs = openmed.analyze_text(
    narrative,
    model_name="pharma_detection_superclinical",
    output_format="dict",
)["entities"]

The rest: https://github.com/maziyarpanahi/openmed/blob/HEAD/skills/reporting-adverse-events/SKILL.md
