Drug Regulatory Research
Regulatory status depends on jurisdiction. FDA approval does not equal EMA approval — check the specific market the user is asking about. Generic availability depends on BOTH patent expiry AND regulatory approval — a patent may have expired but no ANDA may yet be filed or approved. Exclusivity codes (NCE, ODE, PED) can block generics even after patent expiry; always check FDAOrangeBookget_exclusivity before concluding a generic can enter. A 505(b)(2) NDA is not a generic — it requires its own clinical data and gets its own exclusivity period.
LOOK UP DON'T GUESS: never assume NDA numbers, exclusivity dates, or ATC codes — always call FDAGSRS, Orange Book, and RxClass tools to retrieve current data; regulatory status changes with new approvals and expirations.
Regulatory intelligence for drugs: identify FDA substances, classify drugs by therapeutic category, check approval and generic status, retrieve label sections, and find clinical trials.
When to Use
- "What is the FDA regulatory status of semaglutide?"
- "Is there a generic for Humira?"
- "What ATC class does metformin belong to?"
- "Get adverse reactions from the ibuprofen drug label"
- "When does the patent for Eliquis expire?"
- "List all drugs in the ACE inhibitor class"
- "Find clinical trials for a biosimilar of adalimumab"
NOT for (use other skills instead)
- Drug-drug interactions -> Use
tooluniverse-drug-drug-interaction
- Pharmacogenomics / dosing by genotype -> Use
tooluniverse-pharmacogenomics
- Drug mechanism of action / target binding -> Use
tooluniverse-drug-mechanism-research
- Drug repurposing / new indications -> Use
tooluniverse-drug-repurposing
Workflow Overview
Input (drug name / brand name / UNII)
|
v
Phase 1: Substance Identification -- FDAGSRS_search_substances, FDAGSRS_get_substance
|
v
Phase 2: Drug Classification -- RxClass_get_drug_classes, RxClass_find_classes
|
v
Phase 3: Approval & Generic Status -- FDA_OrangeBook_search_drug, FDA_OrangeBook_check_generic_availability
|
v
Phase 4: Patent & Exclusivity -- FDA_OrangeBook_get_patent_info, FDA_OrangeBook_get_exclusivity
|
v
Phase 5: Label Parsing -- DailyMed_parse_adverse_reactions, DailyMed_parse_dosing, etc.
|
v
Phase 6: Clinical Trials -- search_clinical_trials
|
v
Phase 7: Pharmacovigilance -- FAERS_count_reactions_by_drug_event (param: medicinalproduct)
|
v
Phase 8: Literature & Approval -- PubMed_search_articles, OpenFDA_get_approval_history, RxNorm_get_drug_names
Supplementary tools (not in core phases but useful):
- OpenFDAgetapproval_history — full FDA submission/approval history (requires operation param)
- FAERScountreactionsbydrug_event — top adverse events by report count (param: medicinalproduct, ALL CAPS)
- RxNormgetdrug_names — resolve drug to RXCUI and brand names
- drugbankvocabsearch — DrugBank ID, CAS, UNII lookup
- PubMedsearcharticles — regulatory and clinical literature
Phase 1: Substance Identification (FDAGSRS)
FDAGSRSsearchsubstances: query (string REQUIRED -- drug name, UNII, InChIKey, or formula), substanceclass (string, optional: "chemical"/"protein"/"nucleic acid"/"polymer"/"mixture"), limit (int, 1-50, default 10). Returns {status, data: {substances: [{unii, name, substanceclass, status, cross_references: [{type, value}]}]}}.
cross_references contains DrugBank IDs, WHO-ATC codes, CAS numbers, CFR citations.
- Use to get the official UNII identifier before calling
FDAGSRSgetsubstance.
FDAGSRSgetsubstance: unii (string REQUIRED, 10-char FDA UNII code). Returns complete substance record including all synonyms, names, structure, and cross-references.
- Provides definitive list of all registered names (INN, USAN, brand, chemical).
FDAGSRSgetstructure: unii (string REQUIRED). Returns {status, data: {smiles, formula, inchikey, molfile, molecularweight, stereochemistry, opticalactivity}}.
- Only works for chemical substances; returns error for biologics, mixtures, polymers.
# Full substance lookup workflow
search = tu.tools.FDAGSRS_search_substances(query="semaglutide")
unii = search["data"]["substances"][0]["unii"]
full = tu.tools.FDAGSRS_get_substance(unii=unii)
Phase 2: Drug Classification (RxClass)
RxClassgetdrugclasses: drugname (string, drug name), rxcui (string, RxNorm RXCUI -- alternative to drugname), relasource (string, optional: "ATC"/"FDASPL"/"MESH"/"VA"), limit (int, default 20). Returns {status, data: {classes: [{classid, classname, class_type, rela}]}}.
- Returns ALL classification systems unless
rela_source filters to one.
class_type values: "ATC1-4", "EPC" (FDA Established Pharmacologic Class), "MoA", "VA", "MESH".
- Use to find a drug's ATC code, pharmacological class, mechanism of action label.
RxClassfindclasses: query (string REQUIRED, keyword e.g., "beta blocker"), class_type (string, optional: "ATC1-4"/"EPC"/"MoA"), limit (int, default 20). Returns matching drug classes with class IDs.
- Use when you need to find a class ID before calling
RxClassgetclass_members.
RxClassgetclassmembers: classid (string REQUIRED, e.g., "M01AE"), rela_source (string, optional: "ATC"/"FDASPL"), ttys (string, optional: "IN" for ingredients), limit (int, default 50). Returns all drug ingredients in the class with RXCUIs and names.
ttys="IN" restricts to active ingredient-level entries (recommended).
# Find all proton pump inhibitors
classes = tu.tools.RxClass_find_classes(query="proton pump inhibitor", class_type="EPC")
class_id = classes["data"]["classes"][0]["class_id"]
members = tu.tools.RxClass_get_class_members(class_id=class_id, ttys="IN")
Phase 3: Approval & Generic Status (FDA Orange Book)
FDAOrangeBooksearchdrug: brandname (string), genericname (string), applicationnumber (string), limit (int, default 10). Returns {status, data: {products: [{brandname, genericname, dosageform, strength, tecode, applicationnumber, approvaldate}]}}.
- Use brand name (UPPERCASE) or generic name to find NDA/ANDA numbers and approval info.
te_code: Therapeutic Equivalence code (e.g., "AB" = therapeutically equivalent).
FDAOrangeBookcheckgenericavailability: brandname (string), genericname (string). Returns {status, data: {referencelisteddrug, genericsavailable: bool, genericscount, generic_products: [...]}}.
- Primary tool for "is there a generic?" questions.
FDAOrangeBookgettecode: No special params beyond brandname/applicationnumber. Returns therapeutic equivalence codes for substitutability assessment.
FDAOrangeBookgetapprovalhistory: application_number (string, e.g., "NDA020402"). Returns chronological approval history including supplemental approvals and label changes.
# Check generic availability
result = tu.tools.FDA_OrangeBook_check_generic_availability(brand_name="LIPITOR")
# result["data"]["generics_available"] -> True
# result["data"]["generics_count"] -> N
Phase 4: Patent & Exclusivity
FDAOrangeBookgetpatentinfo: applicationnumber (string), brandname (string). Returns patent information. Note: Full patent numbers and expiration dates require Orange Book data files.
FDAOrangeBookgetexclusivity: applicationnumber (string), brandname (string). Returns {status, data: {exclusivities: [{exclusivitycode, exclusivity_date, description}]}}.
exclusivity_code values: "NCE" (New Chemical Entity, 5 years), "ODE" (Orphan Drug, 7 years), "PED" (Pediatric, 6 months), "NP" (New Product), "M" (new formulation).
Phase 5: Label Parsing (DailyMed)
All DailyMed parse tools accept either setid (SPL Set ID UUID) OR drugname (auto-lookup). Using drugname is recommended when the setid is unknown.
DailyMedparseadversereactions: setid or drugname. Returns structured adverse reaction table with frequencies and severity.
DailyMedparsedosing: setid or drug_name. Returns dosage and administration section (doses, schedules, renal/hepatic adjustments).
DailyMedparsecontraindications: setid or drug_name. Returns contraindications section.
DailyMedparsedruginteractions: setid or drugname. Returns drug-drug interaction section with clinical management guidance.
DailyMedparseclinicalpharmacology: setid or drugname. Returns PK/PD data (Cmax, AUC, half-life, protein binding, metabolism pathway).
DailyMedsearchspls: drug_name (string), returns SPL Set IDs for that drug. Use to find setid when needed explicitly.
# Parse adverse reactions for apixaban
ae = tu.tools.DailyMed_parse_adverse_reactions(drug_name="apixaban")
Phase 6: Clinical Trials
searchclinicaltrials: condition (string), intervention (string), queryterm (string), pageSize (int, alias: maxresults/limit), overallstatus (array, alias: status). Returns {status, data: {studies: [{NCT ID, brieftitle, briefsummary, overallstatus, phase}], total_count}}.
- Use
intervention for drug name, condition for disease.
- Filter
overall_status=["RECRUITING"] for active enrollment.
total_count may be None even when results exist; check len(studies) > 0.
# Find recruiting trials for a biosimilar
trials = tu.tools.search_clinical_trials(
intervention="adalimumab biosimilar",
overall_status=["RECRUITING"],
pageSize=10
)
Example Workflows
Workflow 1: Full Regulatory Profile for a Drug
1. FDAGSRS_search_substances(query="apixaban")
-> UNII, substance class, ATC/DrugBank cross-refs
2. RxClass_get_drug_classes(drug_name="apixaban", rela_source="ATC")
-> ATC code B01AF02 (direct factor Xa inhibitor)
3. FDA_OrangeBook_search_drug(brand_name="ELIQUIS")
-> NDA206518, approval date, TE code
4. FDA_OrangeBook_check_generic_availability(brand_name="ELIQUIS")
-> Generic availability status
5. FDA_OrangeBook_get_exclusivity(brand_name="ELIQUIS")
-> Exclusivity codes and expiration dates
6. DailyMed_parse_adverse_reactions(drug_name="apixaban")
-> Bleeding rates and other AEs from label
Workflow 2: List All Drugs in a Therapeutic Class
1. RxClass_find_classes(query="ACE inhibitor", class_type="EPC")
-> class_id for "Angiotensin-Converting Enzyme Inhibitor"
2. RxClass_get_class_members(class_id=<id>, ttys="IN")
-> All ACE inhibitors (enalapril, lisinopril, ramipril, etc.)
3. For each drug: RxClass_get_drug_classes(drug_name=drug)
-> Confirm ATC code and additional classifications
Workflow 3: Drug Label Review
1. DailyMed_parse_adverse_reactions(drug_name="metformin")
-> AE frequencies (GI: lactic acidosis, nausea, diarrhea)
2. DailyMed_parse_contraindications(drug_name="metformin")
-> eGFR thresholds, renal impairment contraindications
3. DailyMed_parse_drug_interactions(drug_name="metformin")
-> Iodinated contrast, carbonic anhydrase inhibitor interactions
4. DailyMed_parse_clinical_pharmacology(drug_name="metformin")
-> Half-life, renal clearance, bioavailability
Common Mistakes
- Orange Book
brand_name must be UPPERCASE (e.g., "LIPITOR")
FDAGSRSgetsubstance requires UNII, not drug name — call FDAGSRSsearchsubstances first
FDAGSRSgetstructure only works for chemical substances, not biologics
RxClassgetclass_members: pass ttys="IN" to restrict to active ingredients
searchclinicaltrials overall_status must be an array: ["RECRUITING"]
Reasoning Framework
Interpretation Guidance
Approval pathways: A 505(b)(1) NDA is a full new drug application with complete safety/efficacy data from the sponsor. A 505(b)(2) NDA relies partly on published literature or FDA findings for an already-approved drug (common for reformulations, new routes). An ANDA (Abbreviated NDA) is the generic pathway requiring only bioequivalence to the reference listed drug.
Orange Book patent and exclusivity: NCE (New Chemical Entity) exclusivity gives 5 years of data protection. ODE (Orphan Drug Exclusivity) gives 7 years. PED (Pediatric) adds 6 months to existing patents/exclusivity. A TE code of "AB" means the generic is therapeutically equivalent and substitutable. No TE code or "BX" means substitutability is not established.
DailyMed label sections: The "Adverse Reactions" section distinguishes clinical trial rates (controlled) from post-marketing reports (uncontrolled, signal-only). "Contraindications" are absolute; "Warnings and Precautions" are conditional risks. "Clinical Pharmacology" provides PK parameters (Cmax, AUC, half-life) essential for drug interaction and dosing assessment.
Synthesis Questions
A complete drug regulatory report should answer:
- What is the current FDA approval status and pathway (NDA vs ANDA vs 505(b)(2))?
- Are generic equivalents available, and what is their therapeutic equivalence rating?
- When do key patents and exclusivities expire (or have they already)?
- What drug class does this belong to (ATC, EPC, MoA), and what are peer drugs in the class?
- What are the most clinically significant adverse reactions and contraindications from the label?