NCIT P302 Treatment Indications (Accepted_Therapeutic_Use_For)

In progress treatmentsstructured-sourcescompletenessncit NIH: Enhancing Data Usage and Utility to Advance Biomedical Research

NCIT P302 Treatment Indications

NCIT:P302 = Accepted_Therapeutic_Use_For:

"A property representing a disease or condition for which this drug is an accepted treatment. Used in the Drug, Food, Chemical or Biomedical Material branch." (range xsd:string)

It links a drug NCIT concept to a free-text description of the disease / condition it is an accepted treatment for — e.g. Midostaurin (NCIT:C1872) → "acute myeloid leukemia (AML) who are FLT3 mutation-positive (FLT3+)". 796 NCIT drug/chemical concepts carry it.

This is the indication, not the molecular target. The coded molecular-target relation in NCIT is a separate predicate (NCIT:A7 Has_Target, e.g. Midostaurin → FLT3 / PKC / VEGFR2); it is not ingested here but is a natural follow-on for the same generic source.

Two uses

  1. Evidence for treatments. P302 is a curated NCI assertion (no PMID), so it is ingested as a structured-database reference source (like ORPHA:, CGGV:, ICEES:) rather than the PMID-snippet path. Each drug becomes one references_cache/NCIT_<Cxxxx>.md cache file holding a unified edge table:

| ID | LABEL | PRED | TARGET_ID | TARGET_LABEL | METADATA |

A curator cites the assertion directly:

yaml treatments: - name: Midostaurin treatment_term: preferred_term: Pharmacotherapy term: { id: NCIT:C15986, label: Pharmacotherapy } therapeutic_agent: - preferred_term: midostaurin term: { id: NCIT:C1872, label: Midostaurin } evidence: - reference: NCIT:C1872 supports: SUPPORT evidence_source: OTHER snippet: "Midostaurin | Accepted_Therapeutic_Use_For | - | - | acute myeloid leukemia (AML) who are FLT3 mutation-positive (FLT3+)" explanation: NCI Thesaurus asserts accepted therapeutic use for FLT3+ AML.

The reference validator substring-checks the snippet against the cache file exactly as it does for ORPHA/ClinGen rows (verified: a wrong snippet fails, the exact row passes).

  1. Completeness checking. The P302 indication string is left verbatim as the evidence snippet — it is not parsed. scripts/ncit_p302_audit.py therefore does a pure identifier join on the drug (NCIT concept id, or its ChEBI cross-reference via NCIT P368) against dismech therapeutic_agent ids, flagging each P302 drug PRESENT_WITH_EVIDENCE / PRESENT_NO_EVIDENCE / ABSENT.

How it is built

The generic, manifest-driven OntologyEdgeSource (src/dismech/structured_sources/ontology_edges.py) selects predicate edges out of the OAK-managed sqlite:obo:ncit database — the ontology .db is never committed; only the 796 selectively generated cache files are. The NCIT selection is pinned in data/ncit-edges/MANIFEST.yaml (ontology version 26.02d, predicate NCIT:P302).

just ncit-edges-refresh                 # ensure OAK NCIT db present, check version
just ncit-edges-rebuild                 # regenerate all references_cache/NCIT_*.md
just ncit-edges-rebuild --id NCIT:C1872 # one drug
just ncit-p302-audit --format summary             # per-drug coverage digest
just ncit-p302-audit --format summary --by-class  # rolled up by NCIT is-a class
just ncit-p302-audit --format tsv --out output/ncit_p302_audit.tsv

Audit snapshot (NCIT 26.02d)

The join is on drug identity only (no parsing of the indication text), so these counts are exact, not heuristic. A committed snapshot of all 796 rows lives at projects/NCIT_TREATMENT_INDICATIONS/audit.tsv.

Rolled up by NCIT is-a drug class (--by-class)

The flat list is more actionable rolled up by the NCIT rdfs:subClassOf drug class (transitive named ancestors; anonymous OWL restrictions and universal roots dropped). present = used as a dismech therapeutic_agent. This turns "796 drugs" into class-level coverage and aligns mechanism classes to existing modules via an advisory module_hint. Full table: projects/NCIT_TREATMENT_INDICATIONS/class_audit.tsv. Examples:

NCIT class total present absent module hint
Immune Checkpoint Inhibitor (NCIT:C143250) 14 9 5 immune_checkpoint_blockade
Monoclonal Antibody (NCIT:C20401) 87 33 54
Protein Kinase Inhibitor (NCIT:C1404) 89 22 67
Macrolide Antibiotic (NCIT:C261) 3 2 1 bacterial_protein_synthesis_inhibition
Beta-Lactam Antibiotic (NCIT:C260) 4 0 4 bacterial_cell_wall_synthesis_inhibition

87 classes with ≥3 drugs have zero dismech coverage (e.g. radiopharmaceuticals, 5-HT3/serotonin antagonists, bisphosphonates, anthracyclines) — class-level gaps. The is-a rollup is a completeness/grouping lens only; is-a is not added to the evidence cache files (it is classification metadata, not a therapeutic-use assertion).

Data-quality caveat: P302 itself can be wrong

P302 is curated NCI editorial text and occasionally carries upstream errors. A confirmed example in NCIT 26.02d: Ramucirumab (NCIT:C70792, an anti-VEGFR2 antibody for gastric/colorectal/HCC) carries a second P302 value "multicentric Castleman's disease (MCD)" — clinically wrong (MCD is treated with the anti-IL-6 antibody siltuximab, NCIT:C61084). The cache faithfully records both rows verbatim; the error is in NCIT, not the extraction. dismech therefore cites only ramucirumab's gastric row and does not propagate the Castleman's row onto Castleman_Disease.yaml. This is why the curator confirmation step (does the indication string actually match the disorder?) is mandatory and not skippable: it guards against over-broad indications and genuine upstream data errors, not just NER mismatches.

Goal / "be complete"