Files
gh-k-dense-ai-claude-scient…/skills/fda-database/references/drugs.md
2025-11-30 08:30:10 +08:00

469 lines
14 KiB
Markdown

# FDA Drug Databases
This reference covers all FDA drug-related API endpoints accessible through openFDA.
## Overview
The FDA drug databases provide access to information about pharmaceutical products, including adverse events, labeling, recalls, approvals, and shortages. All endpoints follow the openFDA API structure and return JSON-formatted data.
## Available Endpoints
### 1. Drug Adverse Events
**Endpoint**: `https://api.fda.gov/drug/event.json`
**Purpose**: Access reports of drug side effects, product use errors, product quality problems, and therapeutic failures submitted to the FDA.
**Data Source**: FDA Adverse Event Reporting System (FAERS)
**Key Fields**:
- `patient.drug.medicinalproduct` - Drug name
- `patient.drug.drugindication` - Reason for taking the drug
- `patient.reaction.reactionmeddrapt` - Adverse reaction description
- `receivedate` - Date report was received
- `serious` - Whether the event was serious (1 = serious, 2 = not serious)
- `seriousnessdeath` - Whether the event resulted in death
- `primarysource.qualification` - Reporter qualification (physician, pharmacist, etc.)
**Common Use Cases**:
- Safety signal detection
- Post-market surveillance
- Drug interaction analysis
- Comparative safety research
**Example Queries**:
```python
# Find adverse events for a specific drug
import requests
api_key = "YOUR_API_KEY"
url = "https://api.fda.gov/drug/event.json"
# Search for aspirin-related adverse events
params = {
"api_key": api_key,
"search": "patient.drug.medicinalproduct:aspirin",
"limit": 10
}
response = requests.get(url, params=params)
data = response.json()
```
```python
# Count most common reactions for a drug
params = {
"api_key": api_key,
"search": "patient.drug.medicinalproduct:metformin",
"count": "patient.reaction.reactionmeddrapt.exact"
}
```
### 2. Drug Product Labeling
**Endpoint**: `https://api.fda.gov/drug/label.json`
**Purpose**: Access structured product information including prescribing information, warnings, indications, and usage for FDA-approved and marketed drug products.
**Data Source**: Structured Product Labeling (SPL)
**Key Fields**:
- `openfda.brand_name` - Brand name(s) of the drug
- `openfda.generic_name` - Generic name(s)
- `indications_and_usage` - Approved uses
- `warnings` - Important safety warnings
- `adverse_reactions` - Known adverse reactions
- `dosage_and_administration` - How to use the drug
- `description` - Chemical and physical description
- `pharmacodynamics` - How the drug works
- `contraindications` - When not to use the drug
- `drug_interactions` - Known drug interactions
- `active_ingredient` - Active ingredients
- `inactive_ingredient` - Inactive ingredients
**Common Use Cases**:
- Clinical decision support
- Drug information lookup
- Patient education materials
- Formulary management
- Drug comparison analysis
**Example Queries**:
```python
# Get full labeling for a brand-name drug
params = {
"api_key": api_key,
"search": "openfda.brand_name:Lipitor",
"limit": 1
}
response = requests.get("https://api.fda.gov/drug/label.json", params=params)
label_data = response.json()
# Extract specific sections
if "results" in label_data:
label = label_data["results"][0]
indications = label.get("indications_and_usage", ["Not available"])[0]
warnings = label.get("warnings", ["Not available"])[0]
```
```python
# Search labels containing specific warnings
params = {
"api_key": api_key,
"search": "warnings:*hypertension*",
"limit": 10
}
```
### 3. National Drug Code (NDC) Directory
**Endpoint**: `https://api.fda.gov/drug/ndc.json`
**Purpose**: Access the NDC Directory containing information about drug products identified by National Drug Codes.
**Data Source**: FDA NDC Directory
**Key Fields**:
- `product_ndc` - 10-digit NDC product identifier
- `generic_name` - Generic drug name
- `labeler_name` - Company that manufactures/distributes
- `brand_name` - Brand name if applicable
- `dosage_form` - Form (tablet, capsule, solution, etc.)
- `route` - Administration route (oral, injection, topical, etc.)
- `product_type` - Type of drug product
- `marketing_category` - Regulatory pathway (NDA, ANDA, OTC, etc.)
- `application_number` - FDA application number
- `active_ingredients` - List of active ingredients with strengths
- `packaging` - Package descriptions and NDC codes
- `listing_expiration_date` - When listing expires
**Common Use Cases**:
- NDC lookup and validation
- Product identification
- Supply chain management
- Prescription processing
- Insurance claims processing
**Example Queries**:
```python
# Look up drug by NDC code
params = {
"api_key": api_key,
"search": "product_ndc:0069-2110",
"limit": 1
}
response = requests.get("https://api.fda.gov/drug/ndc.json", params=params)
```
```python
# Find all products from a specific manufacturer
params = {
"api_key": api_key,
"search": "labeler_name:Pfizer",
"limit": 100
}
```
```python
# Get all oral tablets of a generic drug
params = {
"api_key": api_key,
"search": "generic_name:lisinopril+AND+dosage_form:TABLET",
"limit": 50
}
```
### 4. Drug Recall Enforcement Reports
**Endpoint**: `https://api.fda.gov/drug/enforcement.json`
**Purpose**: Access drug product recall enforcement reports issued by the FDA.
**Data Source**: FDA Enforcement Reports
**Key Fields**:
- `status` - Current status (Ongoing, Completed, Terminated)
- `recall_number` - Unique recall identifier
- `classification` - Class I, II, or III (severity)
- `product_description` - Description of recalled product
- `reason_for_recall` - Why product was recalled
- `product_quantity` - Amount of product recalled
- `code_info` - Lot numbers, serial numbers, NDCs
- `distribution_pattern` - Geographic distribution
- `recalling_firm` - Company conducting recall
- `recall_initiation_date` - When recall began
- `report_date` - When FDA received notice
- `voluntary_mandated` - Type of recall
**Classification Levels**:
- **Class I**: Dangerous or defective products that could cause serious health problems or death
- **Class II**: Products that might cause temporary health problems or pose slight threat of serious nature
- **Class III**: Products unlikely to cause adverse health reaction but violate FDA labeling/manufacturing regulations
**Common Use Cases**:
- Quality assurance monitoring
- Supply chain risk management
- Patient safety alerts
- Regulatory compliance tracking
**Example Queries**:
```python
# Find all Class I (most serious) drug recalls
params = {
"api_key": api_key,
"search": "classification:Class+I",
"limit": 20,
"sort": "report_date:desc"
}
response = requests.get("https://api.fda.gov/drug/enforcement.json", params=params)
```
```python
# Search for recalls of a specific drug
params = {
"api_key": api_key,
"search": "product_description:*metformin*",
"limit": 10
}
```
```python
# Find ongoing recalls
params = {
"api_key": api_key,
"search": "status:Ongoing",
"limit": 50
}
```
### 5. Drugs@FDA
**Endpoint**: `https://api.fda.gov/drug/drugsfda.json`
**Purpose**: Access comprehensive information about FDA-approved drug products from Drugs@FDA database, including approval history and regulatory information.
**Data Source**: Drugs@FDA Database (most drugs approved since 1939)
**Key Fields**:
- `application_number` - NDA/ANDA/BLA number
- `sponsor_name` - Company that submitted application
- `openfda.brand_name` - Brand name(s)
- `openfda.generic_name` - Generic name(s)
- `products` - Array of approved products under this application
- `products.active_ingredients` - Active ingredients with strengths
- `products.dosage_form` - Dosage form
- `products.route` - Route of administration
- `products.marketing_status` - Current marketing status
- `submissions` - Array of regulatory submissions
- `submissions.submission_type` - Type of submission
- `submissions.submission_status` - Status (approved, pending, etc.)
- `submissions.submission_status_date` - Status date
- `submissions.review_priority` - Priority or standard review
**Common Use Cases**:
- Drug approval research
- Regulatory pathway analysis
- Historical approval tracking
- Competitive intelligence
- Market access research
**Example Queries**:
```python
# Find approval information for a specific drug
params = {
"api_key": api_key,
"search": "openfda.brand_name:Keytruda",
"limit": 1
}
response = requests.get("https://api.fda.gov/drug/drugsfda.json", params=params)
```
```python
# Get all drugs approved by a specific sponsor
params = {
"api_key": api_key,
"search": "sponsor_name:Moderna",
"limit": 100
}
```
```python
# Find drugs with priority review designation
params = {
"api_key": api_key,
"search": "submissions.review_priority:Priority",
"limit": 50
}
```
### 6. Drug Shortages
**Endpoint**: `https://api.fda.gov/drug/drugshortages.json`
**Purpose**: Access information about current and resolved drug shortages affecting the United States.
**Data Source**: FDA Drug Shortages Database
**Key Fields**:
- `product_name` - Name of drug in shortage
- `status` - Current status (Currently in Shortage, Resolved, Discontinued)
- `reason` - Reason for shortage
- `shortage_start_date` - When shortage began
- `resolution_date` - When shortage was resolved (if applicable)
- `discontinuation_date` - If product was discontinued
- `active_ingredient` - Active ingredients
- `marketed_by` - Companies marketing the product
- `presentation` - Dosage form and strength
**Common Use Cases**:
- Formulary management
- Supply chain planning
- Patient care continuity
- Therapeutic alternative identification
- Procurement planning
**Example Queries**:
```python
# Find current drug shortages
params = {
"api_key": api_key,
"search": "status:Currently+in+Shortage",
"limit": 100
}
response = requests.get("https://api.fda.gov/drug/drugshortages.json", params=params)
```
```python
# Search for shortages of a specific drug
params = {
"api_key": api_key,
"search": "product_name:*amoxicillin*",
"limit": 10
}
```
```python
# Get shortage history (both current and resolved)
params = {
"api_key": api_key,
"search": "active_ingredient:epinephrine",
"limit": 50
}
```
## Integration Tips
### Error Handling
```python
import requests
import time
def query_fda_drug(endpoint, params, max_retries=3):
"""
Query FDA drug database with error handling and retry logic.
Args:
endpoint: Full URL endpoint (e.g., "https://api.fda.gov/drug/event.json")
params: Dictionary of query parameters
max_retries: Maximum number of retry attempts
Returns:
Response JSON data or None if error
"""
for attempt in range(max_retries):
try:
response = requests.get(endpoint, params=params, timeout=30)
response.raise_for_status()
return response.json()
except requests.exceptions.HTTPError as e:
if response.status_code == 404:
print(f"No results found for query")
return None
elif response.status_code == 429:
# Rate limit exceeded, wait and retry
wait_time = 60 * (attempt + 1)
print(f"Rate limit exceeded. Waiting {wait_time} seconds...")
time.sleep(wait_time)
else:
print(f"HTTP error occurred: {e}")
return None
except requests.exceptions.RequestException as e:
print(f"Request error: {e}")
if attempt < max_retries - 1:
time.sleep(5)
else:
return None
return None
```
### Pagination for Large Result Sets
```python
def get_all_results(endpoint, search_query, api_key, max_results=1000):
"""
Retrieve all results for a query using pagination.
Args:
endpoint: API endpoint URL
search_query: Search query string
api_key: FDA API key
max_results: Maximum total results to retrieve
Returns:
List of all result records
"""
all_results = []
skip = 0
limit = 100 # Max per request
while len(all_results) < max_results:
params = {
"api_key": api_key,
"search": search_query,
"limit": limit,
"skip": skip
}
data = query_fda_drug(endpoint, params)
if not data or "results" not in data:
break
results = data["results"]
all_results.extend(results)
# Check if we've retrieved all available results
if len(results) < limit:
break
skip += limit
time.sleep(0.25) # Rate limiting courtesy
return all_results[:max_results]
```
## Best Practices
1. **Always use HTTPS** - HTTP requests are not accepted
2. **Include API key** - Provides higher rate limits (120,000/day vs 1,000/day)
3. **Use exact matching for aggregations** - Add `.exact` suffix to field names in count queries
4. **Implement rate limiting** - Stay within 240 requests/minute
5. **Cache results** - Avoid redundant queries for the same data
6. **Handle errors gracefully** - Implement retry logic for transient failures
7. **Use specific field searches** - More efficient than full-text searches
8. **Validate NDC codes** - Use standard 11-digit format with hyphens removed
9. **Monitor API status** - Check openFDA status page for outages
10. **Respect data limitations** - OpenFDA contains public data only, not all FDA data
## Additional Resources
- OpenFDA Drug API Documentation: https://open.fda.gov/apis/drug/
- API Basics: See `api_basics.md` in this references directory
- Python examples: See `scripts/fda_drug_query.py`
- Field reference guides: Available at https://open.fda.gov/apis/drug/[endpoint]/searchable-fields/