---
name: chem-hazard-toxicity
description: Extract explicit safety warnings, GHS classifications, LD50 toxicity profiles, and acute oral toxicity triage from PubChem PUG VIEW.
metadata:
  category: [chemistry, drug-discovery]
  venv: [cpu]
---

# Chemical Hazard and Toxicity Profiling

## Goal
To programmatically extract critical safety information from the PubChem PUG-VIEW API. This skill pulls GHS Classifications, Hazard Classes, and Toxicological properties (like LD50/LC50 experimental animal records) for a given compound based on its CID, and performs GHS Acute Toxicity Category assignment and hazard statement consistency analysis.

## Instructions

### 1. Extract Safety Profile by CID
Provide the precise CID of the molecule to query safety metadata.

```bash
${CLAUDE_SKILL_DIR}/../../venv/run cpu python ${CLAUDE_SKILL_DIR}/scripts/get_safety_data.py \
  --cid 2519 \
  --outdir research/caffeine_safety \
  --output safety_caffeine.json
```

### 2. GHS Acute Oral Toxicity Triage Helper
Use `--triage` to extract consensus GHS statements ($\ge 50\%$), lowest rat oral LD50, GHS acute oral category (1–5 or `unclassified`), and check oral hazard code consistency:

```bash
${CLAUDE_SKILL_DIR}/../../venv/run cpu python ${CLAUDE_SKILL_DIR}/scripts/get_safety_data.py \
  --cid 2519 \
  --triage \
  --outdir research/caffeine_safety \
  --output triage_caffeine.json
```

### Python API Integration
Import helper functions directly into python scripts:

```python
from scripts.get_safety_data import (
    extract_consensus_ghs_codes,
    extract_lowest_rat_oral_ld50,
    assign_acute_oral_category,
    check_oral_code_consistency,
    profile_compound,
)

profile = profile_compound(2519, threshold_percent=50.0)
# Returns dict with cid, consensus_ghs_codes, oral_rat_ld50_mg_kg, oral_rat_ld50_evidence, acute_oral_category, ghs_oral_code_consistent
```

> **GHS Category & Code Consistency Rule**:
> - Category 1 ($\le 5\text{ mg/kg}$) & Category 2 ($5 < \text{LD}_{50} \le 50\text{ mg/kg}$) $\rightarrow$ expected GHS oral code `H300` (*Fatal if swallowed*).
> - Category 3 ($50 < \text{LD}_{50} \le 300\text{ mg/kg}$) $\rightarrow$ `H301` (*Toxic if swallowed*).
> - Category 4 ($300 < \text{LD}_{50} \le 2000\text{ mg/kg}$) $\rightarrow$ `H302` (*Harmful if swallowed*).
> - Category 5 ($2000 < \text{LD}_{50} \le 5000\text{ mg/kg}$) $\rightarrow$ `H303` (*May be harmful if swallowed*).
> - `unclassified` ($> 5000\text{ mg/kg}$) $\rightarrow$ empty set (`{}`).

## Constraints
- **Data Availability**: Relies on experimental or reported data listed in PubChem.
- **Network Limits**: Automatically handles standard `HTTP 503/429` rate limiting via exponential backoff.

---
---

**Author:** Bowen Deng
**Contact:** [GitHub @learningmatter-mit](https://github.com/learningmatter-mit)
