diff --git a/src/components/ApiStatus.tsx b/src/components/ApiStatus.tsx index b17cfc8a5..d58523222 100644 --- a/src/components/ApiStatus.tsx +++ b/src/components/ApiStatus.tsx @@ -19,6 +19,7 @@ let endpointKeys = [ 'druglabel', 'ndc', 'drugenforcement', + 'drugorangebook', 'drugsfda', 'drugshortages', 'deviceevent', @@ -47,6 +48,7 @@ const catMap: Record = Object.freeze({ 'cosmeticevent': 'Cosmetics › Adverse Events', 'drugevent': 'Drugs › Adverse Events', 'druglabel': 'Drugs › Labeling', + 'drugorangebook': 'Drugs › Orange Book', 'ndc': 'Drugs › NDC Directory', 'drugenforcement': 'Drugs › Enforcement Reports', 'drugsfda': 'Drugs › Drugs@FDA', @@ -78,6 +80,7 @@ const endpointLinkMap: Record = Object.freeze({ 'druglabel': 'drug/label', 'ndc': 'drug/ndc', 'drugenforcement': 'drug/enforcement', + 'drugorangebook': 'drug/orangebook', 'drugsfda': 'drug/drugsfda', 'drugshortages': 'drug/shortages', 'deviceevent': 'device/event', diff --git a/src/components/ApiUsage.tsx b/src/components/ApiUsage.tsx index ec9e7e5f8..2c974eb0f 100644 --- a/src/components/ApiUsage.tsx +++ b/src/components/ApiUsage.tsx @@ -444,13 +444,13 @@ if (!bp.mob && hasWindow) { Animal & Veterinary Adverse Event Reports{this.docCount('animalandveterinarydrugevent')} - - Drugs - + + Drugs Adverse Event Reports{this.docCount('drugevent')} Labeling{this.docCount('druglabel')} NDC Directory{this.docCount('ndc')} Enforcement Reports{this.docCount('drugenforcement')} + Orange Book{this.docCount('drugorangebook')} Drugs@FDA{this.docCount('drugsfda')} Drug Shortages{this.docCount('drugshortages')} @@ -510,6 +510,7 @@ if (!bp.mob && hasWindow) { Labeling{this.downloadCount('druglabel')} NDC Directory{this.downloadCount('ndc')} Enforcement Reports{this.downloadCount('drugenforcement')} + Orange Book{this.downloadCount('drugorangebook')} Drugs@FDA{this.downloadCount('drugsfda')} Drug Shortages{this.downloadCount('drugshortages')} diff --git a/src/components/DataDictionary.tsx b/src/components/DataDictionary.tsx index 7e667c9bb..f48e7bb47 100644 --- a/src/components/DataDictionary.tsx +++ b/src/components/DataDictionary.tsx @@ -101,6 +101,7 @@ class DataDictionary extends React.Component<{}, DataDictionaryState> { '510k': '510k Clearance', 'enforcement': 'Enforcement', 'nsde': 'NSDE', + 'orangebook': 'Orange Book', 'drugsfda': 'Drugs@FDA', 'drugshortages': 'Drug Shortages', 'covid19serology': 'COVID-19 Serology', diff --git a/src/components/EndpointBox.tsx b/src/components/EndpointBox.tsx index 9a9273cd7..c916b0435 100644 --- a/src/components/EndpointBox.tsx +++ b/src/components/EndpointBox.tsx @@ -19,6 +19,7 @@ type EndpointName = | 'covid19serology' | 'label' | 'ndc' + | 'orangebook' | 'drugsfda' | 'drugshortages' | 'historicaldocument' @@ -75,6 +76,7 @@ const EndpointBox = (props: tPROPS) => { 'label': 'Structured product information, including prescribing information, for approved drug products.', 'ndc': 'NDC directory containing information on the National Drug Code (NDC)', 'enforcement': 'Drug product recall enforcement reports.', + 'orangebook': 'Approved Drug Products with Therapeutic Equivalence Evaluations (Orange Book).', 'drugsfda': 'Drugs@FDA includes most of the drug products approved since 1939.', 'drugshortages': 'Drug Shortages can occur for many reasons, including manufacturing and quality problems, delays, and discontinuations.' }, @@ -119,6 +121,7 @@ const EndpointBox = (props: tPROPS) => { 'label': 'Product labeling', 'ndc': 'NDC Directory', 'enforcement': 'Recall enforcement reports', + 'orangebook': 'Orange Book', 'drugsfda': 'Drugs@FDA', 'drugshortages': 'Drug shortages' }, @@ -173,6 +176,7 @@ const EndpointBox = (props: tPROPS) => { 'label':
, 'ndc':
, 'enforcement':
, + 'orangebook':
, 'drugsfda':
, 'drugshortages':
}, @@ -217,6 +221,7 @@ const EndpointBox = (props: tPROPS) => { 'label': '/apis/drug/label/', 'ndc': '/apis/drug/ndc/', 'enforcement': '/apis/drug/enforcement/', + 'orangebook': '/apis/drug/orangebook/', 'drugsfda': '/apis/drug/drugsfda/', 'drugshortages': '/apis/drug/drugshortages/' }, diff --git a/src/components/FieldDownload.tsx b/src/components/FieldDownload.tsx index 6019276a6..4ab335ed4 100644 --- a/src/components/FieldDownload.tsx +++ b/src/components/FieldDownload.tsx @@ -10,6 +10,7 @@ const pdfDownloadMap: Readonly> = Object.freeze({ 'druglabel': '/fields/druglabel_reference.pdf', 'drugndc': '/fields/drugndc_reference.pdf', 'drugenforcement': '/fields/drugenforcement_reference.pdf', + 'drugorangebook': '/fields/drugorangebook_reference.pdf', 'drugsfda': '/fields/drugsfda_reference.pdf', 'drugshortages': '/fields/drugshortages_reference.pdf', 'deviceevent': '/fields/deviceevent_reference.pdf', @@ -37,6 +38,7 @@ const xlsxDownloadMap: Readonly> = Object.freeze({ 'druglabel': '/fields/druglabel_reference.xlsx', 'drugndc': '/fields/drugndc_reference.xlsx', 'drugenforcement': '/fields/drugenforcement_reference.xlsx', + 'drugorangebook': '/fields/drugorangebook_reference.xlsx', 'drugsfda': '/fields/drugsfda_reference.xlsx', 'drugshortages': '/fields/drugshortages_reference.xlsx', 'deviceevent': '/fields/deviceevent_reference.xlsx', @@ -64,6 +66,7 @@ const yamlDownloadMap: Readonly> = Object.freeze({ 'druglabel': '/fields/druglabel.yaml', 'drugndc': '/fields/drugndc.yaml', 'drugenforcement': '/fields/drugenforcement.yaml', + 'drugorangebook': '/fields/drugorangebook.yaml', 'drugsfda': '/fields/drugsfda.yaml', 'drugshortages': '/fields/drugshortages.yaml', 'deviceevent': '/fields/deviceevent.yaml', diff --git a/src/components/Infographic.tsx b/src/components/Infographic.tsx index 6e0a3ec8d..9fc0c559f 100644 --- a/src/components/Infographic.tsx +++ b/src/components/Infographic.tsx @@ -109,6 +109,7 @@ const Infographic = (props: tPROPS) => { // Don't render if there is no data, or the field we are trying to // count by (visualize) is unknown const fieldDefinition: void|Object = yamlGet(nextCountParam, fields) + console.log("fielddef: ", fieldDefinition, "nextcountParam: ", nextCountParam, "fields: ", fields) const error: boolean = data?.error || !fieldDefinition // if fieldDef has description, then docs-ify it @@ -192,53 +193,8 @@ const Infographic = (props: tPROPS) => { borderBottom: bp.mob ? '1px solid #e4e2e0' : 0, borderRight: '2px solid #e4e2e0', }}> -

- View: -

-
- -

-
Filter:

diff --git a/src/components/RenderContentObject/KeyFacts.tsx b/src/components/RenderContentObject/KeyFacts.tsx index 1525ec879..f5400c1e7 100644 --- a/src/components/RenderContentObject/KeyFacts.tsx +++ b/src/components/RenderContentObject/KeyFacts.tsx @@ -33,6 +33,7 @@ const source: Record> = { 'label': 'FDA SPL files', 'ndc': 'NDC Directory', 'enforcement': 'FDA Recall Enterprise System (RES)', + 'orangebook': 'Approved Drug Products with Therapeutic Equivalence Evaluations (Orange Book)', 'drugsfda': 'Drugs@FDA', 'shortages': 'Drug Shortages' }, @@ -74,6 +75,7 @@ const sourceLink: any = { 'label': '/data/spl/', 'ndc': '/data/ndc/', 'enforcement': '/data/res/', + 'orangebook': '/data/orangebook/', 'drugsfda': '/data/drugsfda/', 'shortages': '/data/drugshortages' }, @@ -117,6 +119,7 @@ const timePeriod: any = { 'label': 'The bulk of the data is from June 2009 (when labeling was first posted publicly in the SPL format) to the present. However, there are a small number of records from earlier than mid-2009. The last update was on', 'ndc': 'Last updated on', 'enforcement': '2004 to', + 'orangebook': 'Content current as of:', 'drugsfda': '1939 to', 'shortages': '2012 to' }, @@ -161,6 +164,7 @@ const frequency = { 'label': 'Weekly', 'ndc': 'Daily', 'enforcement': 'Weekly', + 'orangebook': 'Monthly', 'drugsfda': 'Daily (Monday-Friday)', 'shortages': 'Daily' }, diff --git a/src/constants/api.tsx b/src/constants/api.tsx index 46581b082..742a3c93d 100644 --- a/src/constants/api.tsx +++ b/src/constants/api.tsx @@ -1,4 +1,4 @@ -export const API_LINK: string = "https://api.fda.gov" +export const API_LINK: string = "https://openfda-api.preprod.fda.gov" export const API_NAME: string = "api.fda.gov" export default { API_LINK, diff --git a/src/constants/fields/drugorangebook.yaml b/src/constants/fields/drugorangebook.yaml new file mode 100644 index 000000000..b26140ae8 --- /dev/null +++ b/src/constants/fields/drugorangebook.yaml @@ -0,0 +1,181 @@ +properties: + product_number: + description: "The FDA assigned number to identify the application products. Each strength is a separate product. May repeat for multiple part products." + format: + is_exact: false + possible_values: + type: string + approval_date: + description: "The date the product was approved as stated in the FDA approval letter to the applicant." + format: date + is_exact: false + possible_values: + type: string + approved_prior_to_1982: + description: 'Products approved prior to the January 1, 1982 contain the phrase: "Approved prior to Jan 1, 1982".' + format: + is_exact: false + possible_values: + type: boolean + products: + type: array + items: + properties: + active_ingredients: + type: object + properties: + name: + description: "The names of the active, medicinal ingredients in the drug product." + format: + is_exact: true + possible_values: + type: string + strength: + description: "The strength of the active, medicinal ingredients in the drug product." + format: + is_exact: false + possible_values: + type: string + dosage_form: + description: "The drug’s dosage form. There is no standard, but values may include terms like `tablet` or `solution for injection`." + format: + is_exact: true + possible_values: + type: string + route: + description: "The route of administration of the drug product." + format: + is_exact: true + possible_values: + type: string + brand_name: + description: "Brand or trade name of the drug product." + format: + is_exact: true + possible_values: + type: string + application_name: + description: "Name of the Applicant for the drug product." + format: + is_exact: true + possible_values: + type: string + application_full_name: + description: "The full name of the firm holding legal responsibility for the new drug application." + format: + is_exact: true + possible_values: + type: string + application_type: + description: "The type of new drug application approval." + format: + is_exact: false + possible_values: + type: string + application_number: + pattern: ^[BLA|ANDA|NDA]{3,4}[0-9]{6}$ + description: "The FDA assigned number to the application." + format: + is_exact: false + possible_values: + type: string + therapeutic_equivalence_codes: + type: array + items: + description: "The TE Code indicates the therapeutic equivalence rating of generic to innovator Rx products." + format: + is_exact: true + possible_values: + type: string + reference_listed_drug: + description: "The RLD is a drug product approved under section 505(c) of the FD&C Act for which FDA has made a finding of safety and effectiveness. In the electronic Orange Book, an RLD is identified by “RLD” in the RLD column." + format: + is_exact: false + possible_values: + type: boolean + reference_standard: + description: "A highly purified compound that is well characterized." + format: + is_exact: false + possible_values: + type: boolean + product_type: + description: "The group or category of approved drugs." + format: + is_exact: true + possible_values: + type: string + patents: + type: array + items: + properties: + patent_number: + description: "Patent numbers as submitted by the applicant holder for patents covered by the statutory provisions. May repeat for multiple applications and multiple products. Includes pediatric exclusivity granted by the agency." + format: + is_exact: false + possible_values: + type: string + expiration_date: + description: "The date the patent expires as submitted by the applicant holder including applicable extensions." + format: date + is_exact: false + possible_values: + type: string + drug_substance_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug substance flag indicating the sponsor submitted the patent as claiming the drug substance." + format: + is_exact: false + possible_values: + type: boolean + drug_product_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug product flag indicating the sponsor submitted the patent as claiming the drug product." + format: + is_exact: false + possible_values: + type: boolean + patent_use_code: + description: "A code to designate a method of use that covers the approved indication or use of a drug product." + format: + is_exact: false + possible_values: + type: string + patent_use_code_definition: + description: "The definition of the patent use code." + format: + is_exact: false + possible_values: + type: string + patent_delist_flag: + description: "The flag is set to 'Y' when an applicant holder has requested a patent to be delisted but the patent cannot be delisted." + format: + is_exact: false + possible_values: + type: boolean + patent_submission_date: + description: "The date on which the FDA receives patent information from the applicant holder. Patent submission date data is included for patents submitted after 2013." + format: date + is_exact: false + possible_values: + type: string + exclusivity: + type: array + items: + properties: + exclusivity_code: + description: "Code to designate exclusivity granted by the FDA to a drug product." + format: + is_exact: false + possible_values: + type: string + exclusivity_code_definition: + description: "The definition of the exclusivity code." + format: + is_exact: false + possible_values: + type: string + exclusivity_expiration_date: + description: "The date the exclusivity expires." + format: date + is_exact: false + possible_values: + type: string \ No newline at end of file diff --git a/src/constants/fields/master_fields.yaml b/src/constants/fields/master_fields.yaml index c36556306..c8a09f9cf 100644 --- a/src/constants/fields/master_fields.yaml +++ b/src/constants/fields/master_fields.yaml @@ -7103,6 +7103,188 @@ drug: possible_values: type: string type: object + orangebook: + properties: + product_number: + description: "The FDA assigned number to identify the application products. Each strength is a separate product. May repeat for multiple part products." + format: + is_exact: false + possible_values: + type: string + approval_date: + description: "The date the product was approved as stated in the FDA approval letter to the applicant." + format: date + is_exact: false + possible_values: + type: string + approved_prior_to_1982: + description: 'Products approved prior to the January 1, 1982 contain the phrase: "Approved prior to Jan 1, 1982".' + format: + is_exact: false + possible_values: + type: boolean + products: + type: array + items: + properties: + active_ingredients: + type: object + properties: + name: + description: "The names of the active, medicinal ingredients in the drug product." + format: + is_exact: true + possible_values: + type: string + strength: + description: "The strength of the active, medicinal ingredients in the drug product." + format: + is_exact: false + possible_values: + type: string + dosage_form: + description: "The drug’s dosage form. There is no standard, but values may include terms like `tablet` or `solution for injection`." + format: + is_exact: true + possible_values: + type: string + route: + description: "The route of administration of the drug product." + format: + is_exact: true + possible_values: + type: string + brand_name: + description: "Brand or trade name of the drug product." + format: + is_exact: true + possible_values: + type: string + application_name: + description: "Name of the Applicant for the drug product." + format: + is_exact: true + possible_values: + type: string + application_full_name: + description: "The full name of the firm holding legal responsibility for the new drug application." + format: + is_exact: true + possible_values: + type: string + application_type: + description: "The type of new drug application approval." + format: + is_exact: false + possible_values: + type: string + application_number: + pattern: ^[BLA|ANDA|NDA]{3,4}[0-9]{6}$ + description: "The FDA assigned number to the application." + format: + is_exact: false + possible_values: + type: string + therapeutic_equivalence_codes: + type: array + items: + description: "The TE Code indicates the therapeutic equivalence rating of generic to innovator Rx products." + format: + is_exact: true + possible_values: + type: string + reference_listed_drug: + description: "The RLD is a drug product approved under section 505(c) of the FD&C Act for which FDA has made a finding of safety and effectiveness. In the electronic Orange Book, an RLD is identified by “RLD” in the RLD column." + format: + is_exact: false + possible_values: + type: boolean + reference_standard: + description: "A highly purified compound that is well characterized." + format: + is_exact: false + possible_values: + type: boolean + product_type: + description: "The group or category of approved drugs." + format: + is_exact: true + possible_values: + type: string + patents: + type: array + items: + properties: + patent_number: + description: "Patent numbers as submitted by the applicant holder for patents covered by the statutory provisions. May repeat for multiple applications and multiple products. Includes pediatric exclusivity granted by the agency." + format: + is_exact: false + possible_values: + type: string + expiration_date: + description: "The date the patent expires as submitted by the applicant holder including applicable extensions." + format: date + is_exact: false + possible_values: + type: string + drug_substance_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug substance flag indicating the sponsor submitted the patent as claiming the drug substance." + format: + is_exact: false + possible_values: + type: boolean + drug_product_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug product flag indicating the sponsor submitted the patent as claiming the drug product." + format: + is_exact: false + possible_values: + type: boolean + patent_use_code: + description: "A code to designate a method of use that covers the approved indication or use of a drug product." + format: + is_exact: false + possible_values: + type: string + patent_use_code_definition: + description: "The definition of the patent use code." + format: + is_exact: false + possible_values: + type: string + patent_delist_flag: + description: "The flag is set to 'Y' when an applicant holder has requested a patent to be delisted but the patent cannot be delisted." + format: + is_exact: false + possible_values: + type: boolean + patent_submission_date: + description: "The date on which the FDA receives patent information from the applicant holder. Patent submission date data is included for patents submitted after 2013." + format: date + is_exact: false + possible_values: + type: string + exclusivity: + type: array + items: + properties: + exclusivity_code: + description: "Code to designate exclusivity granted by the FDA to a drug product." + format: + is_exact: false + possible_values: + type: string + exclusivity_code_definition: + description: "The definition of the exclusivity code." + format: + is_exact: false + possible_values: + type: string + exclusivity_expiration_date: + description: "The date the exclusivity expires." + format: date + is_exact: false + possible_values: + type: string drugsfda: properties: application_number: diff --git a/src/pages/about/updates/updates.yaml b/src/pages/about/updates/updates.yaml index 2d21d6f1e..df2cb58f0 100644 --- a/src/pages/about/updates/updates.yaml +++ b/src/pages/about/updates/updates.yaml @@ -151,3 +151,7 @@ updates: path: /apis/cosmetic/event/ date: 2025-09-13 desc: "The dataset Cosmetic Adverse Events is now available." + - title: "New openFDA Dataset - Orange Book" + path: /apis/drug/orangebook/ + date: 2025-12-04 + desc: "The dataset Orange Book is now available." \ No newline at end of file diff --git a/src/pages/apis/doc-links.yaml b/src/pages/apis/doc-links.yaml index 1bfabf1f4..d38365d56 100644 --- a/src/pages/apis/doc-links.yaml +++ b/src/pages/apis/doc-links.yaml @@ -144,6 +144,24 @@ link: /apis/drug/enforcement/download/ - title: Searchable fields link: /apis/drug/enforcement/searchable-fields/ + - title: Orange Book + id: drug-orange-book + collapse: true + items: + - title: Overview + link: /apis/drug/orangebook/ + - title: How to use the API + link: /apis/drug/orangebook/how-to-use-the-endpoint/ + - title: Example API queries + link: /apis/drug/orangebook/example-api-queries/ + - title: Explore the API with an interactive chart + link: /apis/drug/orangebook/explore-the-api-with-an-interactive-chart/ + - title: Understanding the API Results + link: /apis/drug/orangebook/understanding-the-api-results/ + - title: Download the dataset + link: /apis/drug/orangebook/download/ + - title: Searchable fields + link: /apis/drug/orangebook/searchable-fields/ - title: Drugs@FDA id: drug-drugs-fda collapse: true diff --git a/src/pages/apis/drug/index.tsx b/src/pages/apis/drug/index.tsx index 6e2641648..58f5977e1 100644 --- a/src/pages/apis/drug/index.tsx +++ b/src/pages/apis/drug/index.tsx @@ -23,6 +23,10 @@ export default () => ( noun_name='drug' endpoint_name='enforcement' /> + +

Download the dataset

+

Use the links below to download the dataset manually, or review the Downloads documentation for more information about other download methods.

+ + + ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/example-api-queries/index.tsx b/src/pages/apis/drug/orangebook/example-api-queries/index.tsx new file mode 100644 index 000000000..f564f728b --- /dev/null +++ b/src/pages/apis/drug/orangebook/example-api-queries/index.tsx @@ -0,0 +1,52 @@ +import React from "react" + +import QueryTour from '../../../../../components/QueryTour' +import explorers from '../_explorers.yaml' + +class IndexRoute extends React.Component { + render () { + + const oneProduct = explorers.oneProduct + const singleSource = explorers.singleSource + const expiring2020 = explorers.expiring2020 + const countByType = explorers.countByType + + + return ( +
+

Example Orange Book queries

+

To help get you started, we have provided some query examples below. Use the Run query button to call the Application Programming Interface and get back results. You can experiment by editing the example queries in the black text box.

+ + + + +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/explore-the-api-with-an-interactive-chart/index.tsx b/src/pages/apis/drug/orangebook/explore-the-api-with-an-interactive-chart/index.tsx new file mode 100644 index 000000000..3184305b1 --- /dev/null +++ b/src/pages/apis/drug/orangebook/explore-the-api-with-an-interactive-chart/index.tsx @@ -0,0 +1,31 @@ +import React from "react" + +import InteractiveInfographicTour from '../../../../../components/InteractiveInfographicTour' + +import infographics from '../_infographics.yaml' +import fields from '../../../../../constants/fields/drugorangebook.yaml' +import meta from '../_meta.yaml' +import mapFields from "../../../../../utils/mapFields" +import flattenFields from "../../../../../utils/flattenFields" + +class IndexRoute extends React.Component { + render () { + + const fieldsMapped = mapFields(fields.properties) + const fieldsFlattened = flattenFields(fieldsMapped) + + return ( +
+ +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/how-to-use-the-endpoint/index.tsx b/src/pages/apis/drug/orangebook/how-to-use-the-endpoint/index.tsx new file mode 100644 index 000000000..cc9337b5d --- /dev/null +++ b/src/pages/apis/drug/orangebook/how-to-use-the-endpoint/index.tsx @@ -0,0 +1,35 @@ +import React from "react" +import Link from "gatsby-link" + +import APIUseSteps from "../../../../../components/APIUseSteps" +import APIQueryBreakdown from "../../../../../components/APIQueryBreakdown" + + +class IndexRoute extends React.Component { + render () { + + return ( +
+

How to use the API

+

Getting started with and learning how to use the Application Programming Interface is relatively straightforward. Here are some recommended steps:

+ +

Then, when you are ready, obtain an Application Programming Interface Key. While you don’t need an Application Programming Interface Key to use the Application Programming Interface, we recommend you get one if you are planning to use the Application Programming Interface on a regular basis. For more information on Application Programming Interface Keys, see the Authentication documentation.

+ +

Making a simple API Call

+

You can call the Application Programming Interface from a web browser. Simply type a valid query in your browser’s address bar and press the Enter key.

+

In the example below, we are searching the records in the Drug Orange Book endpoint for matches with AP in the products.therapeutic_equivalence_codes field. We are requesting to see the first 5 records that match.

+ + +

Some key pointers

+
    +
  • An openFDA query always begins with the base endpoint, which in this case is: https://api.fda.gov/drug/orangebook.json
  • +
  • Searches have a special syntax: search=field:term
  • +
  • Unless otherwise specified, the Application Programming Interface will return only one matching record for a search. You can specify the number of records to be returned by using the limit parameter. The maximum limit allowed is 99 for any single Application Programming Interface call. If no limit is set, the Application Programming Interface will return one matching record.
  • +
+

It is possible to construct very complex queries using the openFDA Application Programming Interface. Review the Construct the query documentation to learn more about all the available query parameters, how to handle quotations, spaces, phrase matches, and groupings, how to search on dates and ranges, and more.

+
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/index.tsx b/src/pages/apis/drug/orangebook/index.tsx new file mode 100644 index 000000000..5c38f0a5b --- /dev/null +++ b/src/pages/apis/drug/orangebook/index.tsx @@ -0,0 +1,37 @@ +import React from "react" +import Link from "gatsby-link" + +import KeyFacts from '../../../../components/RenderContentObject/KeyFacts' +import meta from './_meta.yaml' + +class IndexRoute extends React.Component { + render () { + + return ( +
+

Drug Orange Book Overview

+

The publication Approved Drug Products with Therapeutic Equivalence Evaluations (commonly known as the Orange Book) identifies drug products approved on the basis of safety and effectiveness by the Food and Drug Administration (FDA) under the Federal Food, Drug, and Cosmetic Act (the Act) and related patent and exclusivity information.

+

The main criterion for the inclusion of any product is that the product is the subject of an application with an approval that has not been withdrawn for safety or efficacy reasons.

+

Inclusion of products in the Orange Book is independent of any current regulatory action through administrative or judicial means against a drug product. In addition, the Orange Book contains therapeutic equivalence evaluations for approved multisource prescription drug products.

+ + + + +

Additional Information About Orange book

+

To read more about Orange Book, please visit:

+ + +

Responsible use of the data

+

Do not rely on openFDA to make decisions regarding medical care. Always speak to your health provider about the risks and benefits of FDA-regulated products. We may limit or otherwise restrict your access to the Application Programming Interface in line with our Terms of Service

+
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/searchable-fields/index.tsx b/src/pages/apis/drug/orangebook/searchable-fields/index.tsx new file mode 100644 index 000000000..dd508047d --- /dev/null +++ b/src/pages/apis/drug/orangebook/searchable-fields/index.tsx @@ -0,0 +1,24 @@ +import React from "react" + +import FieldExplorer from '../../../../../components/FieldExplorer' + +import meta from '../_meta.yaml' +import fields from '../../../../../constants/fields/drugorangebook.yaml' + +class IndexRoute extends React.Component { + render () { + + return ( +
+

Searchable Fields

+

Use the fields explorer below to find detailed explanations of every field in the dataset.

+ +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/apis/drug/orangebook/understanding-the-api-results/_examples.json b/src/pages/apis/drug/orangebook/understanding-the-api-results/_examples.json new file mode 100644 index 000000000..90f0689ed --- /dev/null +++ b/src/pages/apis/drug/orangebook/understanding-the-api-results/_examples.json @@ -0,0 +1,24 @@ +{ + "count": { + "meta": { + "disclaimer": "Do not rely on openFDA to make decisions regarding medical care. While we make every effort to ensure that data is accurate, you should assume all results are unvalidated. We may limit or otherwise restrict your access to the API in line with our Terms of Service.", + "terms": "https://open.fda.gov/terms/", + "license": "https://open.fda.gov/license/", + "last_updated": "2019-01-14" + }, + "results": [ + { + "term": "HUMAN PRESCRIPTION DRUG", + "count": 20718 + }, + { + "term": "DISCONTINUED", + "count": 15863 + }, + { + "term": "HUMAN OTC DRUG", + "count": 717 + } + ] + } +} \ No newline at end of file diff --git a/src/pages/apis/drug/orangebook/understanding-the-api-results/index.tsx b/src/pages/apis/drug/orangebook/understanding-the-api-results/index.tsx new file mode 100644 index 000000000..a51fd412a --- /dev/null +++ b/src/pages/apis/drug/orangebook/understanding-the-api-results/index.tsx @@ -0,0 +1,29 @@ +import React from "react" +import Highlight from 'react-highlight.js' + +import examples from './_examples.json' + +class IndexRoute extends React.Component { + render () { + const example: string = JSON.stringify(examples.count, null, ' ') || '' + + return ( +
+

Understanding the API Results

+

For search queries (such as: https://api.fda.gov/drug/orangebook.json?search=products.therapeutic_equivalence_codes:"AP"&limit=1), the results section includes matching records returned by the API.

+

Each record consists of these major sections:

+
    +
  • Standard orange book fields.
  • +
  • An openfda section: An annotation with additional product identifiers, such as UPC and brand name, of the drug products listed in the labeling.
  • +
+

For count queries (such as: https://api.fda.gov/drug/orangebook.json?count=products.product_type.exact), the results section will look something like the following:

+ + {example} + +
+ ) + } +} + +export default IndexRoute diff --git a/src/pages/data/downloads/index.tsx b/src/pages/data/downloads/index.tsx index 143200592..981d901f3 100644 --- a/src/pages/data/downloads/index.tsx +++ b/src/pages/data/downloads/index.tsx @@ -15,6 +15,7 @@ import drug_enforcement_meta from '../../apis/drug/enforcement/_meta.yaml' import drug_event_meta from '../../apis/drug/event/_meta.yaml' import drug_label_meta from '../../apis/drug/label/_meta.yaml' import drug_ndc_meta from '../../apis/drug/ndc/_meta.yaml' +import drug_orangebook_meta from '../../apis/drug/orangebook/_meta.yaml' import drug_drugsfda_meta from '../../apis/drug/drugsfda/_meta.yaml' import drug_drugshortages_meta from '../../apis/drug/drugshortages/_meta.yaml' import device_510k_meta from '../../apis/device/510k/_meta.yaml' @@ -50,6 +51,7 @@ const endpoint_list = { 'Human Drugs@FDA': drug_drugsfda_meta, 'Human Drug Shortages': drug_drugshortages_meta, 'Human Drug Enforcement': drug_enforcement_meta, + 'Human Drug Orange Book': drug_orangebook_meta, 'Medical Device': 'device_header', 'Medical Device 510k': device_510k_meta, 'Medical Device Classification': device_classification_meta, diff --git a/src/pages/data/orangebook/_meta.yaml b/src/pages/data/orangebook/_meta.yaml new file mode 100644 index 000000000..e3f0f2365 --- /dev/null +++ b/src/pages/data/orangebook/_meta.yaml @@ -0,0 +1,30 @@ +type: dataset +documentTitle: 'openFDA › Datasets › Orange Book' +crumbs: + - openFDA + - Datasets + - Orange Book +title: 'Approved Drug Products with Therapeutic Equivalence Evaluations (Orange Book)' +description: 'The publication Approved Drug Products with Therapeutic Equivalence Evaluations (commonly known as the Orange Book) identifies drug products approved on the basis of safety and effectiveness by the Food and Drug Administration (FDA) under the Federal Food, Drug, and Cosmetic Act (the Act) and related patent and exclusivity information.' +source: + name: 'Orange Book' + nameLong: 'Orange Book' + link: 'https://www.fda.gov/drugs/drug-approvals-and-databases/approved-drug-products-therapeutic-equivalence-evaluations-orange-book' + linkDownload: 'https://www.fda.gov/media/76860/download?attachment' +license: + name: 'Public Domain and CC0' + link: 'http://creativecommons.org/publicdomain/zero/1.0/' + time: + start: + current: + delay: + frequency: 'Daily' +provider: + name: 'FDA' + link: 'http://www.fda.gov/' +additionalContent: + - 'The main criterion for the inclusion of any product is that the product is the subject of an application with an approval that has not been withdrawn for safety or efficacy reasons.' + - 'Inclusion of products in the Orange Book is independent of any current regulatory action through administrative or judicial means against a drug product.' + - 'In addition, the Orange Book contains therapeutic equivalence evaluations for approved multisource prescription drug products.' + - 'These evaluations have been prepared to serve as public information and advice to state health agencies, prescribers, and pharmacists to promote public education in the area of drug product selection and to foster containment of health care costs.' + - 'Therapeutic equivalence evaluations in this publication are not official FDA actions affecting the legal status of products under the FD&C Act.' \ No newline at end of file diff --git a/src/pages/data/orangebook/index.tsx b/src/pages/data/orangebook/index.tsx new file mode 100644 index 000000000..6db3d63c4 --- /dev/null +++ b/src/pages/data/orangebook/index.tsx @@ -0,0 +1,11 @@ +import React from 'react' + +import Dataset from '../../../components/Dataset' + +import meta from './_meta.yaml' + +export default () => ( + +) diff --git a/src/utils/yamlGet.tsx b/src/utils/yamlGet.tsx index 4b9fe566c..79836220f 100644 --- a/src/utils/yamlGet.tsx +++ b/src/utils/yamlGet.tsx @@ -26,12 +26,13 @@ const yamlGet = function (field: any, fieldsYAML: FieldsYAML): any { const newPathParts: string[] = [] pathParts.forEach(part => { + console.log("part: ", part) newPathParts.push(part) // openfda -> openfda.route -> openfda.route.exact let currentPath: string = newPathParts.join('.') // currentPath must be the absolute path to get field let currentResult: any = get(fieldsYAML.properties, currentPath) - + console.log("current path: ", currentPath) if (!currentResult || !currentResult.type) return const type: string = currentResult.type.toLowerCase() diff --git a/static/fields/drugorangebook.yaml b/static/fields/drugorangebook.yaml new file mode 100644 index 000000000..b26140ae8 --- /dev/null +++ b/static/fields/drugorangebook.yaml @@ -0,0 +1,181 @@ +properties: + product_number: + description: "The FDA assigned number to identify the application products. Each strength is a separate product. May repeat for multiple part products." + format: + is_exact: false + possible_values: + type: string + approval_date: + description: "The date the product was approved as stated in the FDA approval letter to the applicant." + format: date + is_exact: false + possible_values: + type: string + approved_prior_to_1982: + description: 'Products approved prior to the January 1, 1982 contain the phrase: "Approved prior to Jan 1, 1982".' + format: + is_exact: false + possible_values: + type: boolean + products: + type: array + items: + properties: + active_ingredients: + type: object + properties: + name: + description: "The names of the active, medicinal ingredients in the drug product." + format: + is_exact: true + possible_values: + type: string + strength: + description: "The strength of the active, medicinal ingredients in the drug product." + format: + is_exact: false + possible_values: + type: string + dosage_form: + description: "The drug’s dosage form. There is no standard, but values may include terms like `tablet` or `solution for injection`." + format: + is_exact: true + possible_values: + type: string + route: + description: "The route of administration of the drug product." + format: + is_exact: true + possible_values: + type: string + brand_name: + description: "Brand or trade name of the drug product." + format: + is_exact: true + possible_values: + type: string + application_name: + description: "Name of the Applicant for the drug product." + format: + is_exact: true + possible_values: + type: string + application_full_name: + description: "The full name of the firm holding legal responsibility for the new drug application." + format: + is_exact: true + possible_values: + type: string + application_type: + description: "The type of new drug application approval." + format: + is_exact: false + possible_values: + type: string + application_number: + pattern: ^[BLA|ANDA|NDA]{3,4}[0-9]{6}$ + description: "The FDA assigned number to the application." + format: + is_exact: false + possible_values: + type: string + therapeutic_equivalence_codes: + type: array + items: + description: "The TE Code indicates the therapeutic equivalence rating of generic to innovator Rx products." + format: + is_exact: true + possible_values: + type: string + reference_listed_drug: + description: "The RLD is a drug product approved under section 505(c) of the FD&C Act for which FDA has made a finding of safety and effectiveness. In the electronic Orange Book, an RLD is identified by “RLD” in the RLD column." + format: + is_exact: false + possible_values: + type: boolean + reference_standard: + description: "A highly purified compound that is well characterized." + format: + is_exact: false + possible_values: + type: boolean + product_type: + description: "The group or category of approved drugs." + format: + is_exact: true + possible_values: + type: string + patents: + type: array + items: + properties: + patent_number: + description: "Patent numbers as submitted by the applicant holder for patents covered by the statutory provisions. May repeat for multiple applications and multiple products. Includes pediatric exclusivity granted by the agency." + format: + is_exact: false + possible_values: + type: string + expiration_date: + description: "The date the patent expires as submitted by the applicant holder including applicable extensions." + format: date + is_exact: false + possible_values: + type: string + drug_substance_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug substance flag indicating the sponsor submitted the patent as claiming the drug substance." + format: + is_exact: false + possible_values: + type: boolean + drug_product_flag: + description: "Patents submitted on FDA Form 3542 and listed after August 18, 2003 may have a drug product flag indicating the sponsor submitted the patent as claiming the drug product." + format: + is_exact: false + possible_values: + type: boolean + patent_use_code: + description: "A code to designate a method of use that covers the approved indication or use of a drug product." + format: + is_exact: false + possible_values: + type: string + patent_use_code_definition: + description: "The definition of the patent use code." + format: + is_exact: false + possible_values: + type: string + patent_delist_flag: + description: "The flag is set to 'Y' when an applicant holder has requested a patent to be delisted but the patent cannot be delisted." + format: + is_exact: false + possible_values: + type: boolean + patent_submission_date: + description: "The date on which the FDA receives patent information from the applicant holder. Patent submission date data is included for patents submitted after 2013." + format: date + is_exact: false + possible_values: + type: string + exclusivity: + type: array + items: + properties: + exclusivity_code: + description: "Code to designate exclusivity granted by the FDA to a drug product." + format: + is_exact: false + possible_values: + type: string + exclusivity_code_definition: + description: "The definition of the exclusivity code." + format: + is_exact: false + possible_values: + type: string + exclusivity_expiration_date: + description: "The date the exclusivity expires." + format: date + is_exact: false + possible_values: + type: string \ No newline at end of file diff --git a/static/fields/drugorangebook_reference.pdf b/static/fields/drugorangebook_reference.pdf new file mode 100644 index 000000000..acc14e09a Binary files /dev/null and b/static/fields/drugorangebook_reference.pdf differ diff --git a/static/fields/drugorangebook_reference.xlsx b/static/fields/drugorangebook_reference.xlsx new file mode 100644 index 000000000..864364b8e Binary files /dev/null and b/static/fields/drugorangebook_reference.xlsx differ