Skip to content

22 Slice Regulatory Approvals

Status: SHARP CORE VERTICAL / IN-PLACE PUBLICATION. Fixture-complete multi-authority capture, live FDA approval, REMS/CDx, and scoped label capture, source-current effective claims, normalization, evidence, resolution, canonical assertions, product protections, six query models, contracts, and provenance are implemented. Live compound-label approved-use decomposition, non-FDA live adapters, and approval-notification/designation feeds remain source expansions; atomic approvals-family publication remains an activation gate. Denoising state: sharp (noise -> rough -> sharp -> converged) Updated: 2026-07-25

Model regulatory approval intelligence: source approvals, labels, designations, indication language, safety programs, companion diagnostics, product exclusivity/patent records, and structured label-derived evidence. This slice turns regulator-published artifacts into quality-passing regulatory assertions that agents can query through SQL; reviewed curation overlays apply only when the normal pipeline needs correction.

Legacy Data Gov treated approvals as a multi-regulator unification problem: FDA, EMA, KEGG/PMDA, and CDE/NMPA sources were collected into source tables, matched to canonical drugs, assembled into unified DrugApproval records, enriched with labels, and parsed into structured indications (../bioloupe-data-gov/docs/drug-approvals.md, ../bioloupe-data-gov/lib/tasks/regulatory/, ../bioloupe-data-gov/app/models/drug_approval.rb).

Regulatory approvals produce evidence-backed approval and indication assertions, not merely a list of approved products. The slice owns source-specific regulatory identity and label evidence; drug/disease/biomarker identities are resolved through exact/cross-reference/verifier policy before publishing to q_*; curation is the reviewed override path.

flowchart LR
  FDA[FDA / openFDA / Drugs@FDA / labels]
  FDASupp[FDA REMS / companion diagnostics]
  EMA[EMA public medicines data]
  KEGG[KEGG / PMDA-derived drug source]
  CDE[CDE / NMPA source records + labels]
  Raw[Raw approval snapshots]
  LabelRaw[Immutable FDA label versions]
  SuppRaw[Raw supplement snapshots]
  Normalized[Normalized approval records]
  SuppNorm[Normalized supplement records]
  SuppLinks[Approval supplement links]
  Evidence[Approval / indication / label evidence claims]
  Resolution[Drug, disease, biomarker, organisation resolution]
  Verify[Verifier / accepted basis]
  Curation[Reviewed curation overlay]
  Canonical[Canonical approval assets]
  Query["q_drug_approvals family"]

  FDA --> Raw
  FDASupp --> SuppRaw
  EMA --> Raw
  KEGG --> Raw
  CDE --> Raw
  Raw --> Normalized --> Evidence --> Resolution --> Verify --> Canonical --> Query
  FDA --> LabelRaw --> Evidence
  SuppRaw --> SuppNorm --> SuppLinks --> Evidence
  Curation -. optional override .-> Canonical
SourceGreenfield roleSource identifiersLegacy evidenceWeb/reference evidence
FDA openFDA / Drugs@FDAUS application/product/label sourceNDA/BLA/ANDA application number, submission number, SPL set id where availableregulatory:fda:*, FdaDatum, FDA label enrichment (../bioloupe-data-gov/docs/drug-approvals.md)openFDA exposes drug endpoints including product labeling and Drugs@FDA data: https://open.fda.gov/apis/drug/
FDA Orange Booklive FDA product approval/exclusivity/patent source, not a stale legacy cacheapplication number, product numberlegacy supplementary Orange Book records are used but local rows were stale in June 2026FDA publishes Orange Book data files: https://www.fda.gov/drugs/drug-approvals-and-databases/orange-book-data-files
FDA Purple Booklive biological product approval source and biologic relationship evidenceBLA/application/product namesregulatory:purplebook:sync, PurplebookRecord were active in June 2026FDA Purple Book downloads list current CSV/XLSX files: https://purplebooksearch.fda.gov/downloads
DailyMed / SPL labelsofficial structured label sections for indications, warnings, dosing, adverse reactionsSPL set id/version, application numbersFda::LabelSync, Fda::DailyMedClient, boxed warnings extractionDailyMed provides SPL labeling resources; openFDA also exposes product labeling: https://dailymed.nlm.nih.gov/dailymed/ and https://open.fda.gov/apis/drug/label/
EMA public medicines dataEU centralized medicine authorizations and product informationEMA product number, medicine name, authorization statusregulatory:ema:download_and_extract, EmaApprovedDrugEMA publishes human medicines data and product information downloads: https://www.ema.europa.eu/en/medicines
KEGG drug databaseJapan/PMDA-linked approval/reference drug sourceKEGG drug id / remark codesKeggApprovedDrug, KEGG scraperKEGG DRUG is a drug information resource with REST access patterns: https://www.kegg.jp/kegg/drug/
CDE / NMPAChina chemical/marketed approval source and official labelsCDE/NMPA application/source ids; Chinese source fieldsregulatory:cde:collect, ChinaApprovedDrug, CDE PDF label processing (../bioloupe-data-gov/docs/drug-approvals.md)CDE public portal/source systems: https://www.cde.org.cn/
FDA companion diagnostics / REMSlive supplementary regulatory facts linked to approval context; not approval rowsdevice/test ids, REMS program ids, source application numberscompanion diagnostics and REMS tasks/models were active in June 2026FDA publishes companion diagnostic and REMS resources through official pages: https://www.fda.gov/medical-devices/in-vitro-diagnostics/list-cleared-or-approved-companion-diagnostic-devices-in-vitro-and-imaging-tools and https://www.fda.gov/drugs/drug-safety-and-availability/risk-evaluation-and-mitigation-strategies-rems
FDA approval notifications / breakthrough designationsdeferred regulatory events/designations, not approval rows or safety claimsnotification URLs, event dates, designation idsnotifications and breakthroughs tasks/models were active in June 2026FDA publishes approval-notification resources through official pages: https://www.fda.gov/drugs/resources-information-approved-drugs/hematologyoncology-cancer-approvals-safety-notifications

Model FDA, EMA, KEGG, and CDE as first-class source families because the product intentionally unifies all four. The complete fixture graph exercises every family. FDA has live approval and supplement adapters; EMA, KEGG, and CDE remain fixture/import-ready until their exact public live contracts are implemented. That adapter maturity never changes the region-aware canonical model.

FDA labels remain part of this regulatory domain but use a separate source interface: regulatory_label_source. The label endpoint has a different configured cohort, paging limit, document-version selector, and activation scope from the bulk approval/product downloads. Its Dagster definition and fixture live under defs/sources/regulatory/; reusable mechanics remain in the deeper lib/sources/regulatory_labels/ module. This is one domain owner with two runtime interfaces, not a second SOC-owned source family.

evidence.approval_claims_effective, evidence.indication_claims_effective, and evidence.regulatory_safety_claims_effective admit claims only from each normalized record’s current immutable source artifact; supplement claims also require the current accepted supplement-to-approval link. Canonical rebuilds read these effective views, so a corrected source snapshot cannot leave stale prior-artifact approval facts active. Migration 20260725_0008 applies the same rule to an already-versioned database.

flowchart TD
  SourceSystems[[Regulatory sources]]
  Raw[sources.regulatory.*_snapshots]
  SuppRaw[sources.regulatory.fda_supplement_snapshots]
  Normalized[normalized.approval_source_records]
  LabelRaw[sources.regulatory.fda_label_snapshots]
  EmbeddedLabelNorm[normalized.label_documents]
  LabelNorm[normalized.regulatory_label_records]
  SuppNorm[normalized.regulatory_supplement_records]
  SuppLinks[resolution.approval_supplement_links]
  ApprovalClaims[evidence.approval_claims]
  IndicationClaims[evidence.indication_claims]
  SafetyClaims[evidence.regulatory_safety_claims]
  Resolution[resolution.regulatory_entities]
  Curation[[curation.effective_overrides]]
  Canonical[canonical.drug_approvals]
  Query["q_drug_approvals family"]

  SourceSystems --> Raw --> Normalized --> ApprovalClaims --> Resolution
  SourceSystems --> SuppRaw --> SuppNorm --> SuppLinks --> SafetyClaims
  Raw --> EmbeddedLabelNorm --> IndicationClaims --> Resolution
  LabelRaw --> LabelNorm
  LabelNorm --> SafetyClaims --> Resolution
  Resolution --> Canonical --> Query
  Curation -. reviewed overrides .-> Canonical
LayerAsset keyGrainNotes
sourcesources.regulatory.approval_snapshot_storeone physical append-only multi-authority storeSingle DDL owner; family capture assets depend on it and never create the table themselves.
sourcesources.regulatory.fda_snapshotsone FDA application/product source snapshotPreserve raw openFDA/Orange Book/Purple Book payload and source retrieval metadata.
sourcesources.regulatory.fda_label_snapshotsone immutable FDA SPL/openFDA label versionExact label capture with an explicit active-version selector and scoped activation metadata.
sourcesources.regulatory.fda_supplement_snapshotsone FDA REMS program or CDx device-list row artifactPreserve raw grouped REMS CSV payloads and official CDx table rows; not approval rows.
sourcesources.regulatory.ema_snapshotsone EMA product row/document snapshotStore source export version and product-info locator.
sourcesources.regulatory.kegg_snapshotsone KEGG drug/source snapshotKeep KEGG id and scraper/parser provenance.
sourcesources.regulatory.cde_snapshotsone CDE API/PDF/source snapshotPreserve Chinese source fields, extracted text, translation provenance.
normalizednormalized.approval_source_recordsone source approval/product recordSource-faithful, not canonicalized.
normalizednormalized.label_documentsone embedded multi-authority label/document identityMetadata projected from an approval snapshot; not the exact FDA section store.
normalizednormalized.regulatory_label_recordsone selected FDA label document/section/study/outcome/AE recordProjects only explicitly active label versions; live compound indication sections remain source text until governed decomposition.
normalizednormalized.regulatory_supplement_recordsone source-faithful REMS/CDx routing recordCarries source application numbers, drug terms, biomarker terms, and artifact locator.
evidenceevidence.approval_claimsone approval/status/date/region claimApproval status, region, date, application number, product identity.
evidenceevidence.indication_claimsone parsed indication assertionDisease, line/setting, biomarker, population, indication type.
evidenceevidence.regulatory_safety_claimsone label warning/REMS/boxed warning/CDx claimSafety and diagnostic linkage facts.
resolutionresolution.approval_supplement_linksone accepted REMS/CDx-to-approval linkExact source application-number link to normalized.approval_source_records; no fuzzy auto-link.
resolutionresolution.regulatory_entitiesone candidate set per source term/subjectDrug, disease, biomarker, organisation, regulator identity.
canonicalcanonical.drug_approvalsone effective approval assertionRegion/source-specific approval fact.
queryquery.q_drug_approvals*agent-facing grains belowMaterialized SQL read models.

Regulatory source capture must follow the source-resource standard in 12-source-first-ingestion.md. The implementation seam is one RegulatorySourceResource in lib/sources/regulatory/resource.py; the Dagster assets in defs/sources/regulatory/ remain thin.

class RegulatorySourceResource(dg.ConfigurableResource):
fda_approval_mode: Literal["fixture", "live"] = "fixture"
fda_supplement_mode: Literal["fixture", "live"] = "fixture"
max_live_records: int | None = None
source_http: SourceHttpResource
def approval_capture(self, source_family: Literal["fda", "ema", "kegg", "cde"]) -> RegulatoryApprovalCapture: ...
def supplement_capture(self) -> RegulatorySupplementCapture: ...

Exact FDA label capture uses a separate typed interface because its variation and activation semantics differ:

class RegulatoryLabelSourceResource(dg.ConfigurableResource):
mode: Literal["fixture", "live", "import"] = "fixture"
application_numbers: list[str] = []
search_query: str = ""
max_live_records: int | None = None
source_http: SourceHttpResource
def capture(self) -> RegulatoryLabelCapture: ...

Complete exact-application live capture may replace only those applications; complete free-query capture may upsert only observed label sets; bounded or incomplete capture cannot change the active selector; live capture can never replace the global inventory. Operator imports are captured immutably but do not activate automatically.

max_live_records is only a bounded live-smoke guard. Full source refreshes leave it unset. Any bounded live run must publish capture_scope=bounded_smoke and is_complete_source_capture=false so downstream users do not mistake the sample for the full regulatory corpus.

File/moduleRequired role
lib/sources/regulatory/models.pytyped approval/supplement capture records, source locator/value objects, source-mode metadata
lib/sources/regulatory/adapters.pyfixture and live adapters for openFDA/Drugs@FDA, Orange Book, Purple Book, REMS, CDx, later EMA/KEGG/CDE
lib/sources/regulatory/resource.pysource mode, max_live_records, base URLs, nested source_http, retry/error classification
lib/sources/regulatory/repository.pyDDL/upsert into sources_regulatory.approvals_snapshots and sources_regulatory.supplement_snapshots, source-artifact registration
defs/sources/regulatory/approvals.pyDagster asset declarations only: keys, groups, pools, resource calls, repository writes, metadata
defs/sources/regulatory/supplements.pysame as approvals; no env flag branch and no direct low-level HTTP dependency
defs/sources/regulatory/labels.pythin FDA label asset declaration; owns no HTTP, parsing, or activation logic
lib/sources/regulatory_labels/label-specific model, fixture/live/import adapters, active-version policy, and immutable repository

The source assets use pool="source_fda" for FDA live calls and pool="postgres" when bulk database writes are the bottleneck. Default test and dev materializations use fixtures. Live smoke tests mock source_http by default and only hit the real internet under an explicit opt-in run.

Rejected alternatives:

AlternativeRejection
Keep BIOLOUPE_LIVE_SOURCE_FDA_ENABLED / BIOLOUPE_LIVE_SOURCE_FDA_SUPPLEMENTS_ENABLED in asset bodiesThe asset body becomes the variation seam, source mode is hidden from run config, and tests couple to branching instead of contracts.
Put openFDA download logic directly in approvals.pyMakes an already large Dagster definition file own HTTP, parsing, persistence, and graph metadata.
Separate fda_source, ema_source, kegg_source, cde_source resources immediatelyPrematurely expands the approval interface. One approval resource is deeper until authority-specific auth/runtime constraints force a split.
Put FDA labels inside RegulatorySourceResource only to minimize resource countResource count is not the design goal. Label API, cohort, paging, version selection, and activation vary together and justify one small stable interface.

Regulatory approvals stress regionality, source authority, label versioning, and indication decomposition.

EntityGrainCanonical key recommendationNotes
Regulatory source recordone source-published product/application rowreg_source:{source}:{source_record_id}Source identity remains stable even if canonical links change.
Regulatory supplement artifactone REMS program or CDx device-list row artifactreg_supplement:{source}:{artifact_kind}:{source_record_id}Routes official supplemental evidence to approvals without becoming an approval row.
Approval assertionone product/drug approval in one region/source contextapproval:{source}:{source_record_identity}:{region}:{status_or_date_hash}Source-record identity is product-grained where the source is product-grained; application number alone is not unique.
Label document/versionone official label/source document versionlabel:{source}:{document_id}:{version_or_seen_at}Label text is evidence, not the canonical indication itself.
Indication assertionone structured use from a label/source recordindication:{approval_key}:{disease_context}:{line_setting_biomarker_hash}A single label can yield many indications.
Regulatory designationone designation/program factdesignation:{source}:{designation_type}:{subject_id}Breakthrough, orphan, PRIME, accelerated, conditional, etc.
Regulatory product protection recordone source-scoped product + patent/exclusivity recordproduct_protection:{source}:{application}:{product}:{kind}:{source_record_id}Patent and regulatory exclusivity are distinct. An expiry date is source context, not a universal loss-of-exclusivity date.
Safety program / warningone REMS/boxed-warning/safety claimsafety:{source}:{program_or_warning_id}Safety evidence may be approval-wide or indication-specific.
Companion diagnostic linkone drug/biomarker/test/indication relationcdx:{source}:{test_or_device_id}:{drug_or_indication}Requires drug + biomarker/test resolution.
Applicant / holder / partner roleone organisation role on an approvalapproval_org_role:{approval_key}:{role}:{org_term_hash}Ownership/partner semantics may be time-sensitive.
  • Approval facts are region- and source-scoped. A US FDA approval is not equivalent to EMA/CDE/KEGG approval.
  • Drug approval is not the same grain as indication. One approval/label can contain multiple indications; one indication can require multiple biomarker/disease/treatment-line constraints.
  • Label-derived evidence must retain the label/source document version and text locator.
  • Translated CDE label claims must retain original Chinese text, translation version, and source PDF/API locator.
  • Innovation type (original, generic, biosimilar, etc.) is a derived claim with source-specific mapping evidence, not a universal raw field.
  • Patent and regulatory-exclusivity records retain source, region, application/product linkage, protection kind, source code/identifier, expiry date, use code where present, and source release. They do not collapse into one global loss_of_exclusivity fact.
  • REMS and CDx source artifacts link to approvals only through accepted resolution.approval_supplement_links rows. Exact source application number is the first implemented basis; approval notifications and breakthrough designations remain separate event/designation work.
Subject kindSource term examplesCandidate target typesPublishable basisHigh-impact?
approval_drug_linkbrand name, active ingredient, product name, CDE English fieldsdrug spine resolved_drug_key / brand product / ingredient conceptexact synonym, source cross-reference, context-verified, verifier-passed fuzzy/LLM, reviewed curation overrideyes
approval_indication_disease_linklabel disease language, CDE translated disease termscanonical Disease / NCIt disease conceptexact/NCIt, context-verified, verifier-passed semantic/LLM, reviewed curation overrideyes
approval_biomarker_linkPD-L1, HER2, EGFR mutation, companion diagnostic biomarkercanonical Biomarker / gene/protein/variantexact/cross-reference/context-verified/reviewed curation overrideyes
approval_organisation_linkapplicant, MAH, sponsor, license holder, partnercanonical Organisationexact legal name/alias, source cross-reference, reviewed curation overridemedium/high
companion_diagnostic_linktest/device/biomarker/drug pairdiagnostic test/device + biomarker + drugFDA exact device list, source cross-reference, reviewed curation overridehigh
approval_trial_linklabel clinical-study reference, NCT in labelcanonical Trialexact registry id or verifier or reviewed curation overridemedium/high

No approval-drug or indication-disease fuzzy match publishes without deterministic basis, verifier acceptance, or reviewed curation override. Legacy ActiveAdmin locks and source drug_id matches become explicit resolution receipts or curation overlays, not mutable columns.

Implemented approval-drug resolution is ingredient-first, product-name fallback. The resolver first tries the source active-ingredient/generic drug_term against the drug spine’s resolution.entity_names; if that does not produce a resolved key, it tries the source product_name/brand against the same spine. This uses source-derived canonical.drug_brands populated from approval/product evidence, so branded approvals like KEYTRUDA can resolve to drug:pembrolizumab without reading legacy brand_drugs, minting approval-local drug identity, or requiring NCIt/RxNorm authority enrichment to finish first. Authority-vocabulary external ids improve q_drugs; they are not a prerequisite for resolving a regulator’s own product row.

FieldMeaning
claim_idstable id from source snapshot + field path + extractor version
source_familyFDA / EMA / KEGG / CDE / supplementary FDA source
source_record_keysource-scoped source id
application_numberNDA/BLA/ANDA/etc when present
product_namesource product/brand name
regionUSA/EU/Japan/China/etc
approval_statusapproved, withdrawn, pending, conditional, etc. source-faithful then normalized
approval_datesource date + precision
claim_valuestructured JSON for source-specific fields
source_locatorAPI/download/PDF row locator

Supplement evidence claims reuse evidence.regulatory_safety_claims after the supplement artifact has an accepted approval_supplement_link. REMS emits safety_type='rems'; CDx emits safety_type='companion_diagnostic'. The source_record_key remains the linked approval source record so existing canonical/query assets materialize downstream, while source_artifact_key and source_locator point to the REMS/CDx artifact, not the approval snapshot.

FieldMeaning
approval_keyparent approval/source record
label_keysource label/document version
source_artifact_keyimmutable label/API/PDF/source snapshot key
source_locatorSPL section, label section, API row, PDF page/span, or source field locator
raw_indication_textexact label/source text span
disease_context_termraw disease phrase
line_or_settingtreatment line, adjuvant/metastatic/maintenance/etc
biomarker_requirementsraw and structured biomarker constraints
population_constraintsage, prior therapy, disease subtype, geography, etc
indication_typetreatment / diagnosis / prevention / mitigation / unknown
resolution_subject_keysdisease/biomarker/drug/org subjects
Subject kindWhy overrideableExample curation decision
approval_drug_linkWrong drug match corrupts approvals, SOC, forecasting, and competitive landscape.FDA application X resolves to Drug Y, not same-name unrelated brand.
approval_indication_assertionLabels often contain compound, nested indication language.Split one label paragraph into two disease-specific indications.
approval_indication_disease_linkDisease/subtype matching determines downstream SOC and market context.“HER2-positive gastric cancer” resolves to disease + biomarker context.
innovation_type_assertionSource-specific codes are not semantically uniform.CDE category 5.1 maps to original for this source context.
approval_organisation_roleApplicant/holder/partner impacts ownership analytics.Label applicant is legal holder, not commercial owner.
companion_diagnostic_linkCDx claims combine test, biomarker, drug, and indication.FDA CDx row links test A to biomarker B and drug C for indication D.
product_protection_linkApplication/product mismatches corrupt exclusivity context and commercial summaries.Repoint an Orange Book patent/exclusivity row to the source product it actually covers.
Canonical assetGrainBuilt from
canonical.drug_approvalsone effective approval assertionapproval claims + drug/org resolution/verifier receipts; curation overlay when present
canonical.approval_indicationsone structured indicationlabel/source text + disease/biomarker resolution/verifier receipts; curation overlay when present
canonical.regulatory_designationsone designation/program factbreakthrough/orphan/conditional/etc source claims
canonical.companion_diagnostic_linksone drug-biomarker-test relationFDA CDx evidence + entity resolution
canonical.regulatory_product_protectionsone source-scoped product patent/exclusivity recordversioned Orange Book or equivalent regulator files + product/approval resolution

normalized.label_documents is the embedded multi-authority document-identity registry produced from approval snapshots. Exact FDA documents and sections are separately owned by sources_regulatory.fda_label_* and normalized.regulatory_label_*; this prevents approval rows from pretending to be complete label capture. Warning, boxed-warning, and REMS claims remain evidence-layer facts in evidence.regulatory_safety_claims and are surfaced through q_label_evidence; promote them to canonical.regulatory_safety_claims only when a reviewed safety-claim overlay exists. Approval organisation roles are deferred to the organisation-intelligence slice instead of modelled as a ghost canonical table here.

Query modelGrainPurpose
q_drug_approvalsone effective approvalregion-aware approval search by drug, source, date, status, innovation type
q_approval_indicationsone indication assertiondisease/biomarker/treatment-line indication discovery
q_label_evidenceone label/REMS/warning evidence spantrace label-derived and supplement-derived claims to source text
q_regulatory_designationsone designation/program factorphan/breakthrough/accelerated/conditional/PRIME/etc tracking
q_companion_diagnosticsone drug-biomarker-test relationCDx intelligence for biomarker-linked therapies
q_regulatory_product_protectionsone regulator product + protection recordinspect patent/exclusivity context and source expiry dates without pretending one date is universal LOE
q_provenance receipts, optionally exposed through q_regulatory_provenanceone or more receipts per provenance-required row/factglobal source snapshots + extraction runs + evidence claims + resolution/verifier receipts + curation overlays when applicable; q_regulatory_provenance may exist only as a convenience view over q_provenance

q_regulatory_product_protections requires regulatory_product_protection_key, source/region, application and product identifiers, resolved approval/drug/brand keys, protection_kind (patent or regulatory_exclusivity), source code/identifier, patent/use code when applicable, expiry date and precision, source release, assertion/supersession state, and provenance_key. The source record is authoritative for what the regulator file reports; legal validity, litigation outcomes, pediatric extensions, and market-entry predictions require separate evidence. 35-slice-commercial-intelligence.md may project selected protection context into a product summary but does not own or duplicate these records.

resolved_approval_key(s) used by downstream slices (regulatory-event mentions in 24-slice-news-intelligence.md, approval-backed evidence in 25-slice-standard-of-care.md and forecasting readiness in 28-slice-forecasting-tpp.md) is defined here as a stable key into q_drug_approvals — the same identity as the approval_key domain key (approval:{source}:{source_record_identity}:{region}:{status_or_date_hash}). It stays region- and source-scoped: a downstream resolved_approval_key is never a global “approved” flag, and downstream slices reference it rather than minting approval identity. Drug, disease, biomarker, and organisation identities inside this slice resolve into their owner spines (resolved_drug_key29, resolved_disease_key/resolved_biomarker_keys30, resolved_org_key26).

q_approval_indications comparative fact contract

Section titled “q_approval_indications comparative fact contract”

q_approval_indications is the regulatory-label side of the shared therapeutic-fact model in 20-pipeline-families.md. It is an approved-use assertion from a regulator/source artifact, not a clinical outcome row. FDA labeling guidance treats the INDICATIONS AND USAGE section as the place to state approved uses and clinically significant limitations; DailyMed/openFDA expose structured label artifacts, while EMA/CDE/KEGG need source-family-specific locators and translations where applicable (FDA labeling guidance: https://www.fda.gov/media/114443/download; DailyMed SPL resources: https://dailymed.nlm.nih.gov/dailymed/; openFDA label endpoint: https://open.fda.gov/apis/drug/label/).

Contract fieldRequired meaning
PurposeAnswer: “For what patient population/context is this product approved or regulator-described, from which label/source, and with what constraints?”
GrainOne structured indication assertion for one approval/product/source label context + disease/population/line/biomarker slice.
Stable row keyapproval_indication:{source_family}:{approval_key}:{label_key}:{indication_hash}.
Required columnsapproval_indication_key, approval_key, label_key, source_family, region, regulator, application_number, product_name, resolved_drug_key, disease_term, resolved_disease_key, biomarker_terms, resolved_biomarker_keys, line_or_setting, population_constraints, indication_type, approval_status, approval_date, raw_indication_text, source_artifact_key, source_locator, translation_version, source_language, assertion_state, provenance_key.
Search affordancesfilters on region/source/regulator, drug, disease, biomarker, line/setting, approval status/date, indication type; full text/trigram on raw indication text and product names.
Provenance ruleprovenance_grain=bundle for every indication row; field receipts for raw_indication_text, approval_status, approval_date, line_or_setting, population_constraints, and translated fields.
Refresh/materializationcurrent runtime is an in-place plain view after label-document extraction, indication decomposition, disease/biomarker/drug resolution, verifier gates, and applicable curation-review gates; it is not last-known-good protected until the approvals family adopts atomic generation publication.
Blocking checksschema_contract, provenance_coverage, source_artifact_immutability, source_locator, document_version, source_authority, resolution_basis, llm_verifier_required, curation_review_state when override applies.

Allowed fact_path examples:

approval_indication:approval=fda-nda-123:label=spl-abc:disease=nsclc:attr=label_text
approval_indication:approval=fda-nda-123:label=spl-abc:disease=nsclc:attr=approval_status
approval_indication:approval=cde-456:label=pdf-789:disease=gastric_cancer:attr=translation_version

This row can support SOC assertions, forecasting readiness, and competitive-landscape queries, but it remains source/regulator-scoped. It must not become a global drug is approved flag without region, source, indication, and provenance.

Current boundary: q_approval_indications materializes structured source fields from the approval-source path. The exact FDA label adapter captures live indications_and_usage sections but does not yet decompose compound section text into atomic approved-use claims. Those rows fail closed before downstream review candidates. Implementing and evaluating that governed regulatory extraction is a live activation blocker, not evidence that every raw section is already queryable as a structured indication. Per ADR-0011, even a successfully decomposed approved use remains distinct from standard of care.

q_approval_indications column contract seed

Section titled “q_approval_indications column contract seed”
ColumnTypeNullabilitySemantic typeProvenance
approval_indication_keytextnot nullquery row keyrow
approval_keytextnot nullapproval assertion keyrow
label_keytextnullablelabel artifact/version keybundle when label-derived
source_familytextnot nullsource familyrow
regiontextnot nullgeography/regulatory regionrow
regulatortextnullableregulatorrow
application_numbertextnullablesource application idbundle when present
product_nametextnot nullsource product namebundle
resolved_drug_keytextnullableresolved drug keyfield when present
disease_termtextnullablesource disease phrasebundle when present
resolved_disease_keytextnullableresolved disease keyfield when present
biomarker_termstext[]nullablesource biomarker phrasesbundle when present
resolved_biomarker_keystext[]nullableresolved biomarker keysfield when present
line_or_settingtextnullabletreatment line/settingfield when present
population_constraintsjsonbnullablepatient population constraintsfield when present
indication_typetextnot nulltreatment/diagnosis/prevention/etcbundle
approval_statustextnot nullregulatory statusfield
approval_datedatenullableapproval/effective datefield when present
raw_indication_texttextnullablelabel/source textfield when present
source_artifact_keytextnot nullimmutable source artifactbundle
source_locatorjsonbnot nullsource locatorbundle
translation_versiontextnullabletranslation versionfield for translated sources
source_languagetextnullablelanguage coderow
source_authority_tiertextnot nullauthority tierrow
assertion_statetextnot nulleffective assertion state; curation overlay if applicablerow
provenance_keyuuidnot nullprovenance bundlebundle

Catalog notes: region, source_family, and indication_type should be controlled vocabularies. raw_indication_text is nullable only for non-label source records that express indication as structured fields; in that case source_locator must identify the source fields exactly.

q_approval_indications vocab/search/example seed

Section titled “q_approval_indications vocab/search/example seed”

Legacy data-shape pressure from local datalake confirms that regulatory values should be normalized but source-preserving: drug_approvals.region is currently concentrated in USA, CN, EU, and JP; source_type includes FDA, China/CDE, EMA, KEGG, and Purple Book-derived records; approval_status includes drug_approved, drug_discontinued, drug_approval_unknown, drug_pending, and drug_rejected; indications.indication_type includes treatment, prevention, diagnosis, mitigation, and symptom_relief (public.drug_approvals, public.indications, sampled from local datalake).

Controlled vocabularies:

FieldControlled values / normalization
regionUSA, EU, CN, JP, with room for future ISO/region expansion.
source_familyfda, dailymed, openfda, ema, cde, nmpa, kegg, purple_book, orange_book, curation_overlay.
approval_statusapproved, discontinued, withdrawn, pending, rejected, unknown, plus source-specific raw value retained in evidence.
indication_typetreatment, diagnosis, prevention, mitigation, symptom_relief, unknown.
innovation_type if exposed on sibling approval modeloriginal, generic, non_original, biosimilar, biosimilar_interchangeable, unknown.
source_authority_tierregulator_label, regulator_approval_database, regulator_supplementary, third_party_regulatory_projection, curation_overlay.

Search/index contract:

Search needRequired index/affordance
Approval/indication lookup by drug/regionbtree on (resolved_drug_key, region, approval_status).
Disease/biomarker indication discoverybtree on resolved_disease_key; GIN on resolved_biomarker_keys.
Label/source text searchgenerated tsvector and trigram index over raw_indication_text, product_name, and disease_term.
Temporal/regulatory filteringbtree on approval_date, source_family, regulator.
Provenance auditbtree on source_artifact_key; hash/btree on provenance_key; btree on source_authority_tier.
Translation QApartial index where source_language <> 'en' or translation_version is not null.

Example row shape:

approval_indication_key: approval_indication:fda:nda-123456:spl-abc:nsclc-pdl1
approval_key: approval:fda:nda-123456:usa:approved
label_key: label:dailymed:spl-abc:v2026-01-01
source_family: fda
region: USA
regulator: FDA
application_number: NDA123456
product_name: Examplemab
resolved_drug_key: drug:examplemab
resolved_disease_key: disease:nsclc
biomarker_terms: [PD-L1 TPS >= 50%]
line_or_setting: first_line_metastatic
indication_type: treatment
approval_status: approved
raw_indication_text: indicated for first-line treatment of metastatic...
source_authority_tier: regulator_label
provenance_key: <uuid>

Pathological examples the implementation must handle:

CaseWhy it is dangerousRequired behavior
Label indication has no explicit disease phrase but structured source fields imply oneSome source records expose indication via fields rather than a clean label text span.Permit raw_indication_text is null only when source_locator identifies exact source fields and the indication decomposition is provenance-complete.
CDE/NMPA translated indication lacks original Chinese textTranslation can change disease, line, and biomarker meaning.Block accepted query publication until original text, translation version, and source artifact locator are present.
Publication result is tempting to treat as approvalA publication can support efficacy evidence but is not a regulator approval source.Never publish q_approval_indications from publication-only authority; keep it in publication evidence/SOC support surfaces.
Same drug has different approval status across regionsA global approved flag erases regulatory reality.Keep rows region/source scoped; agents must filter region, source_family, and approval_status.

Blocking:

  • every approval assertion has source family, source record key, region, and provenance bundle;
  • every published approval-drug link has accepted basis;
  • every resolved_drug_key, resolved_disease_key, resolved_biomarker_keys, and resolved_org_key value resolves to an active row in its owner q_* model (referential_integrity gate in 08-contracts-and-quality.md);
  • every indication row has raw source text or source field locator;
  • translated CDE-derived claims retain original text + translation provenance;
  • every product protection row resolves to an exact source application/product record, preserves protection kind and source release, and does not publish a derived universal LOE date;
  • schema of q_drug_approvals family matches generated q_catalog;
  • no high-impact unresolved conflict publishes as accepted indication/drug truth.

Warning:

  • source freshness drift by regulator;
  • sudden count change by source/status/region;
  • unmapped source submission class or innovation code;
  • label parser section drift;
  • unusually high unresolved indication/disease terms.
  • Add sampled, contract-tested live adapters for EMA, KEGG/PMDA, and CDE/NMPA without changing the source/evidence/query grains.
  • Add FDA approval-notification and breakthrough-designation capture as event/designation sources, not approval rows.
  • Expand label evidence from exact locators and bounded excerpts to fuller section capture only when storage, licensing, and agent retrieval needs justify it.
  • Extend source-specific innovation mappings as evidence claims; never infer one universal innovation class from incompatible regulator codes.