Generate CIOMS-compliant adverse event narratives for Individual Case Safety Reports (ICSR). Creates structured pharmacovigilance documents following CIOMS I and ICH E2B standards from case data for regulatory submission to health authorities.
Install with Tessl CLI
npx tessl i github:aipoch/medical-research-skills --skill adverse-event-narrativeOverall
score
17%
Does it follow best practices?
If you maintain this skill, you can automatically optimize it using the tessl CLI to improve its score:
npx tessl skill review --optimize ./path/to/skillValidation for skill structure
Regulatory-grade narrative generation tool that transforms adverse event case data into CIOMS-compliant ICSR narratives suitable for submission to FDA, EMA, and other health authorities.
Key Capabilities:
✅ Use this skill when:
❌ Do NOT use when:
lay-summary-gensafety-summary-reportsmeddra-coderIntegration:
meddra-coder (MedDRA term coding), clinical-data-cleaner (data preparation)safety-summary-reports (aggregate analysis), regulatory-submission-prep (FDA/EMA filing)Generate standardized sections per CIOMS guidelines:
from scripts.narrative_generator import NarrativeGenerator
generator = NarrativeGenerator()
# Generate complete narrative
narrative = generator.generate(
case_data=case_json,
format="cioms_i", # or "ich_e2b", "fda_medwatch"
include_meddra=True
)
narrative.save("ICSR_2024_001_narrative.txt")Standard Sections:
Reconstruct timeline and assess temporal plausibility:
# Analyze temporal relationships
timeline = generator.analyze_timeline(
drug_start="2024-01-15",
drug_stop="2024-02-01",
ae_onset="2024-01-28",
dechallenge_date="2024-02-01",
rechallenge_date=None
)
# Output shows temporal assessment
# "AE onset 13 days after drug initiation, positive dechallenge within 24h"Assessments Generated:
Structure causality assessment per WHO-UMC criteria:
# Generate causality section
causality = generator.assess_causality(
case_data=case,
criteria="who_umc", # or "naranjo", "cochrane"
include_rationale=True
)
# Output structured assessment with points for each criterionWHO-UMC Categories:
Generate narratives for different regulatory contexts:
# FDA MedWatch Form 3500A
fda_narrative = generator.generate(
case_data=case,
format="fda_medwatch",
max_length=2000 # Character limit
)
# EMA E2B(R3) electronic format
ema_narrative = generator.generate(
case_data=case,
format="ich_e2b",
version="R3"
)
# CIOMS I paper format
cioms_narrative = generator.generate(
case_data=case,
format="cioms_i"
)Scenario: Patient hospitalized for severe drug reaction.
{
"case_id": "2024-SAE-001",
"patient_age": "58 years",
"patient_sex": "Female",
"suspect_drugs": [{
"drug_name": "Metformin",
"dose": "1000 mg BID",
"dates": "2024-01-15 to 2024-02-01"
}],
"adverse_events": [{
"meddra_pt": "Lactic acidosis",
"seriousness": "Hospitalization",
"onset": "2024-01-28"
}],
"outcome": "Recovered with sequelae"
}Narrative Emphasis:
Scenario: Death suspected to be drug-related.
# Fatal case handling
narrative = generator.generate(
case_data=fatal_case,
format="cioms_i",
include_autopsy=True,
cause_of_death_analysis=True
)Critical Elements:
Scenario: Positive rechallenge confirms drug causation.
Key Documentation:
Narrative Structure:
First Exposure:
- Drug X initiated [date]
- AE occurred [date], [description]
- Drug discontinued [date]
- Dechallenge: [positive/negative]
Rechallenge:
- Drug X reintroduced [date]
- Same AE recurred [date]
- Drug discontinued [date]
- Outcome: [status]
Causality: Certain (positive rechallenge)Scenario: Multiple suspect drugs, need to identify most likely culprit.
Analysis Approach:
Narrative Organization:
From case data to regulatory submission:
# Step 1: Generate narrative
python scripts/main.py \
--input case_data.json \
--format cioms_i \
--output narrative.txt
# Step 2: Validate completeness
python scripts/validate.py \
--narrative narrative.txt \
--check cioms_completeness \
--output validation_report.txt
# Step 3: Generate E2B format for electronic submission
python scripts/main.py \
--input case_data.json \
--format ich_e2b \
--output e2b_narrative.xml
# Step 4: Medical review markup
python scripts/review.py \
--narrative narrative.txt \
--output review_version.txtPython API:
from scripts.narrative_generator import NarrativeGenerator
from scripts.validator import NarrativeValidator
# Initialize
generator = NarrativeGenerator()
validator = NarrativeValidator()
# Load case data
import json
with open("case_001.json", "r") as f:
case = json.load(f)
# Generate narrative
narrative = generator.generate(
case_data=case,
format="cioms_i",
include_meddra=True,
language="en"
)
# Validate
validation = validator.check(
narrative=narrative,
criteria=["cioms_completeness", "temporal_logic", "meddra_accuracy"]
)
if validation.passed:
with open("final_narrative.txt", "w") as f:
f.write(narrative.text)
print("✓ Narrative validated and saved")
else:
print(f"⚠ Issues: {validation.issues}")Pre-Generation:
Narrative Content:
Post-Generation:
Completeness Issues:
❌ Missing dechallenge information → Cannot assess causality
❌ Vague temporal information → "Recently started" vs. specific dates
❌ Incomplete concomitant medication list → Alternative causes missed
Medical Accuracy Issues:
❌ Incorrect MedDRA coding → Wrong medical concept
❌ Confusing correlation with causation → Temporal = causal
❌ Omitting alternative diagnoses → Biased toward drug causation
Regulatory Issues:
❌ Opinion in narrative body → "Clearly caused by drug"
❌ Patient identifiers → HIPAA/privacy violation
❌ Abbreviations not defined → Assumes reader knowledge
Available in references/ directory:
cioms_i_guidelines.pdf - CIOMS I international reporting standardsich_e2b_specifications.md - ICH E2B(R3) electronic format detailsmeddra_coding_guide.md - MedDRA terminology and coding principleswho_umc_causality.md - WHO causality assessment criteriafda_medwatch_guide.md - FDA Form 3500A instructionsgvp_module_vi.md - EU Good Pharmacovigilance Practicesnarrative_templates.md - Example narratives by case typeLocated in scripts/ directory:
main.py - CLI interface for narrative generationnarrative_generator.py - Core narrative composition enginetemporal_analyzer.py - Timeline reconstruction and analysiscausality_assessor.py - Causality evaluation supportmeddra_integrator.py - Medical terminology and codingvalidator.py - Completeness and quality checksformat_converter.py - Convert between CIOMS, E2B, MedWatch formatsbatch_processor.py - Multi-case narrative generation⚠️ CRITICAL: This tool generates draft narratives for efficiency. All adverse event narratives require review by qualified drug safety physicians before regulatory submission. Causality assessment must be performed by healthcare professionals with access to complete medical records.
If you maintain this skill, you can claim it as your own. Once claimed, you can manage eval scenarios, bundle related skills, attach documentation or rules, and ensure cross-agent compatibility.