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

375 lines
10 KiB
Markdown

# FDA Food Databases
This reference covers FDA food-related API endpoints accessible through openFDA.
## Overview
The FDA food databases provide access to information about food products, including adverse events and enforcement actions. These databases help track food safety issues, recalls, and consumer complaints.
## Available Endpoints
### 1. Food Adverse Events
**Endpoint**: `https://api.fda.gov/food/event.json`
**Purpose**: Access adverse event reports for food products, dietary supplements, and cosmetics.
**Data Source**: CAERS (CFSAN Adverse Event Reporting System)
**Key Fields**:
- `date_started` - When adverse event began
- `date_created` - When report was created
- `report_number` - Unique report identifier
- `outcomes` - Event outcomes (e.g., hospitalization, death)
- `reactions` - Adverse reactions/symptoms reported
- `consumer.age` - Consumer age
- `consumer.age_unit` - Age unit (years, months, etc.)
- `consumer.gender` - Consumer gender
- `products` - Array of products involved
- `products.name_brand` - Product brand name
- `products.industry_code` - Product category code
- `products.industry_name` - Product category name
- `products.role` - Product role (Suspect, Concomitant)
**Product Categories (industry_name)**:
- Bakery Products/Dough/Mixes/Icing
- Beverages (coffee, tea, soft drinks, etc.)
- Dietary Supplements
- Ice Cream Products
- Cosmetics
- Vitamins and nutritional supplements
- Many others
**Common Use Cases**:
- Food safety surveillance
- Dietary supplement monitoring
- Adverse event trend analysis
- Product safety assessment
- Consumer complaint tracking
**Example Queries**:
```python
import requests
api_key = "YOUR_API_KEY"
url = "https://api.fda.gov/food/event.json"
# Find adverse events for dietary supplements
params = {
"api_key": api_key,
"search": "products.industry_name:Dietary+Supplements",
"limit": 10
}
response = requests.get(url, params=params)
data = response.json()
```
```python
# Count most common reactions
params = {
"api_key": api_key,
"search": "products.industry_name:*Beverages*",
"count": "reactions.exact"
}
```
```python
# Find serious outcomes (hospitalizations, deaths)
params = {
"api_key": api_key,
"search": "outcomes:Hospitalization",
"limit": 50,
"sort": "date_created:desc"
}
```
```python
# Search by product brand name
params = {
"api_key": api_key,
"search": "products.name_brand:*protein+powder*",
"limit": 20
}
```
### 2. Food Enforcement Reports
**Endpoint**: `https://api.fda.gov/food/enforcement.json`
**Purpose**: Access food 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
- `product_description` - Description of recalled food product
- `reason_for_recall` - Why product was recalled
- `product_quantity` - Amount of product recalled
- `code_info` - Lot numbers, batch codes, UPCs
- `distribution_pattern` - Geographic distribution
- `recalling_firm` - Company conducting recall
- `recall_initiation_date` - When recall began
- `report_date` - When FDA received notice
- `voluntary_mandated` - Voluntary or FDA-mandated recall
- `city` - Recalling firm city
- `state` - Recalling firm state
- `country` - Recalling firm country
- `initial_firm_notification` - How firm was notified
**Classification Levels**:
- **Class I**: Dangerous or defective products that could cause serious health problems or death (e.g., undeclared allergens with severe risk, botulism contamination)
- **Class II**: Products that might cause temporary health problems or pose slight threat (e.g., minor allergen issues, quality defects)
- **Class III**: Products unlikely to cause adverse health reactions but violate FDA regulations (e.g., labeling errors, quality issues)
**Common Recall Reasons**:
- Undeclared allergens (milk, eggs, peanuts, tree nuts, soy, wheat, fish, shellfish, sesame)
- Microbial contamination (Listeria, Salmonella, E. coli, etc.)
- Foreign material contamination (metal, plastic, glass)
- Labeling errors
- Improper processing/packaging
- Chemical contamination
**Common Use Cases**:
- Food safety monitoring
- Supply chain risk management
- Allergen tracking
- Retailer recall coordination
- Consumer safety alerts
**Example Queries**:
```python
# Find all Class I food recalls (most serious)
params = {
"api_key": api_key,
"search": "classification:Class+I",
"limit": 20,
"sort": "report_date:desc"
}
response = requests.get("https://api.fda.gov/food/enforcement.json", params=params)
```
```python
# Search for allergen-related recalls
params = {
"api_key": api_key,
"search": "reason_for_recall:*undeclared+allergen*",
"limit": 50
}
```
```python
# Find Listeria contamination recalls
params = {
"api_key": api_key,
"search": "reason_for_recall:*listeria*",
"limit": 30,
"sort": "recall_initiation_date:desc"
}
```
```python
# Get recalls by specific company
params = {
"api_key": api_key,
"search": "recalling_firm:*General+Mills*",
"limit": 20
}
```
```python
# Find ongoing recalls
params = {
"api_key": api_key,
"search": "status:Ongoing",
"limit": 100
}
```
```python
# Search by product type
params = {
"api_key": api_key,
"search": "product_description:*ice+cream*",
"limit": 25
}
```
## Integration Tips
### Allergen Monitoring System
```python
def monitor_allergen_recalls(allergens, api_key, days_back=30):
"""
Monitor food recalls for specific allergens.
Args:
allergens: List of allergens to monitor (e.g., ["peanut", "milk", "soy"])
api_key: FDA API key
days_back: Number of days to look back
Returns:
List of matching recalls
"""
import requests
from datetime import datetime, timedelta
# Calculate date range
end_date = datetime.now()
start_date = end_date - timedelta(days=days_back)
date_range = f"[{start_date.strftime('%Y%m%d')}+TO+{end_date.strftime('%Y%m%d')}]"
url = "https://api.fda.gov/food/enforcement.json"
all_recalls = []
for allergen in allergens:
params = {
"api_key": api_key,
"search": f"reason_for_recall:*{allergen}*+AND+report_date:{date_range}",
"limit": 100
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
if "results" in data:
for result in data["results"]:
result["detected_allergen"] = allergen
all_recalls.append(result)
return all_recalls
```
### Adverse Event Analysis
```python
def analyze_product_adverse_events(product_name, api_key):
"""
Analyze adverse events for a specific food product.
Args:
product_name: Product name or partial name
api_key: FDA API key
Returns:
Dictionary with analysis results
"""
import requests
from collections import Counter
url = "https://api.fda.gov/food/event.json"
params = {
"api_key": api_key,
"search": f"products.name_brand:*{product_name}*",
"limit": 1000
}
response = requests.get(url, params=params)
data = response.json()
if "results" not in data:
return {"error": "No results found"}
results = data["results"]
# Extract all reactions
all_reactions = []
all_outcomes = []
for event in results:
if "reactions" in event:
all_reactions.extend(event["reactions"])
if "outcomes" in event:
all_outcomes.extend(event["outcomes"])
# Count frequencies
reaction_counts = Counter(all_reactions)
outcome_counts = Counter(all_outcomes)
return {
"total_events": len(results),
"most_common_reactions": reaction_counts.most_common(10),
"outcome_distribution": dict(outcome_counts),
"serious_outcomes": sum(1 for o in all_outcomes if o in ["Hospitalization", "Death", "Disability"])
}
```
### Recall Alert System
```python
def get_recent_recalls_by_state(state_code, api_key, days=7):
"""
Get recent food recalls for products distributed in a specific state.
Args:
state_code: Two-letter state code (e.g., "CA", "NY")
api_key: FDA API key
days: Number of days to look back
Returns:
List of recent recalls affecting the state
"""
import requests
from datetime import datetime, timedelta
url = "https://api.fda.gov/food/enforcement.json"
# Calculate date range
end_date = datetime.now()
start_date = end_date - timedelta(days=days)
date_range = f"[{start_date.strftime('%Y%m%d')}+TO+{end_date.strftime('%Y%m%d')}]"
params = {
"api_key": api_key,
"search": f"distribution_pattern:*{state_code}*+AND+report_date:{date_range}",
"limit": 100,
"sort": "report_date:desc"
}
response = requests.get(url, params=params)
if response.status_code == 200:
data = response.json()
return data.get("results", [])
return []
```
## Best Practices
1. **Monitor allergen recalls** - Critical for food service and retail
2. **Check distribution patterns** - Recalls may be regional or national
3. **Track recall status** - Status changes from "Ongoing" to "Completed"
4. **Filter by classification** - Prioritize Class I recalls for immediate action
5. **Use date ranges** - Focus on recent events for operational relevance
6. **Cross-reference products** - Same product may appear in both adverse events and enforcement
7. **Parse code_info carefully** - Lot numbers and UPCs vary in format
8. **Consider product categories** - Industry codes help categorize products
9. **Track serious outcomes** - Hospitalization and death require immediate attention
10. **Implement alert systems** - Automate monitoring for critical products/allergens
## Common Allergens to Monitor
The FDA recognizes 9 major food allergens that must be declared:
1. Milk
2. Eggs
3. Fish
4. Crustacean shellfish
5. Tree nuts
6. Peanuts
7. Wheat
8. Soybeans
9. Sesame
These account for over 90% of food allergies and are the most common reasons for Class I recalls.
## Additional Resources
- OpenFDA Food API Documentation: https://open.fda.gov/apis/food/
- CFSAN Adverse Event Reporting: https://www.fda.gov/food/compliance-enforcement-food/cfsan-adverse-event-reporting-system-caers
- Food Recalls: https://www.fda.gov/safety/recalls-market-withdrawals-safety-alerts
- API Basics: See `api_basics.md` in this references directory
- Python examples: See `scripts/fda_food_query.py`