NIH Highlighted-Topic Classification
dismech carries a secondary, non-primary classification that tags disease entries and curation projects with the NIH "Highlighted Topics" funding priorities they are relevant to. It records grant-strategy relevance — which funding calls a body of curation could support — and is deliberately not a disease nosology. An entry may carry several tags or none, alongside its primary classifications (Harrison's chapter, mechanistic nosology, ICIMD, …).
Why it is generated, not hand-written
Each NIH highlighted topic carries a ~2-year expiration date, so the list is transient. Rather than hand-maintain an enum, the classification is generated from a dated snapshot:
| Artifact | Path |
|---|---|
| Snapshot data (72 topics) | data/nih_highlighted_topics/topics.tsv |
| Snapshot manifest (date, source URL) | data/nih_highlighted_topics/MANIFEST.yaml |
| Generator script | scripts/gen_nih_topics_enum.py |
| Generated LinkML enum | src/dismech/schema/classifications/nih_research_priorities.yaml |
Do not hand-edit the generated enum. To refresh after NIH updates the list:
# 1. Re-scrape the topic pages into data/nih_highlighted_topics/topics.tsv
# (each topic lives at .../highlighted-topics/<topic_number>)
# 2. Update MANIFEST.yaml (snapshot_date, topic_count)
# 3. Regenerate the enum:
python scripts/gen_nih_topics_enum.py
# 4. Verify it is in sync (used in CI/tests):
python scripts/gen_nih_topics_enum.py --check
Enum key format
Keys are NIH_HT_<topic_number>_<short_slug>, e.g.
NIH_HT_89_cellular_quiescence_senescence_cell_death_in. The topic number is
the stable anchor (it is the NIH URL slug); the trailing slug is for
human readability and may shift if NIH rewords a title. Each value's description
carries the full title, expiration date, and the canonical topic URL.
Tagging a disease entry
Add assignments under the disease's classifications.nih_research_priority list.
Use notes to justify the relevance; add evidence only where a specific claim
backs it.
classifications:
harrisons_chapter:
- classification_value: IMMUNE_RHEUMATOLOGIC
nih_research_priority:
- classification_value: NIH_HT_89_cellular_quiescence_senescence_cell_death_in
notes: >-
Osteoarthritis conforms to the cellular_senescence module (senescent
chondrocyte accumulation with SASP driving cartilage degradation),
making it relevant to NIH Highlighted Topic 89.
Worked example: kb/disorders/Osteoarthritis.yaml.
Tagging a curation project
Add a nih_topics list to the project's YAML frontmatter (see
Curation projects). The keys are validated against the same enum
and render as blue linked chips on the project page.
---
title: Cancer Curation Project
nih_topics:
- NIH_HT_42_rare_cancers_across_cancer_control_continuum
- NIH_HT_68_childhood_adolescent_young_adult_aya_cancer
---
Worked example: projects/CANCER.md.
Bulk tagging by structural signal
scripts/tag_nih_topics.py applies topic tags to disease entries using the
structural signals already in the KB — currently conforms_to module edges
— so every tag is mechanism-grounded and auditable, never keyword-guessed. It is
idempotent (an entry already carrying a topic tag is left unchanged) and
preserves file formatting via ruamel round-trip.
python scripts/tag_nih_topics.py --dry-run # report what would change
python scripts/tag_nih_topics.py # apply
The current rule set tags NIH Topic 89 on entries whose pathophysiology
conforms to an aging/senescence-hallmark module (cellular_senescence,
senescence_tumor_suppression, genomic_instability_aging, inflammaging,
telomere_attrition, loss_of_proteostasis). Extend the RULES table as new
defensible structural signals emerge.
Topics that require per-entry human judgement (rare-cancer status, pediatric onset, broad autoimmune scope) are deliberately not auto-applied — tag those by hand where the evidence supports it.
Coverage summary page
scripts/gen_nih_topics_summary.py builds a self-contained, client-side-filterable
HTML page (pages/nih-topics/index.html) that aggregates every nih_research_priority
disease tag and nih_topics project tag live from the KB, grouped by topic. It has a
search box and an "only tagged topics" toggle, and each disease/project pill links to
its page.
python scripts/gen_nih_topics_summary.py # regenerate
python scripts/gen_nih_topics_summary.py --check # fail if stale
just gen-nih-topics-page # via justfile
The page is DERIVED (like all of pages/) — regenerated by just gen-all (it is
wired into that target), so don't hand-edit it. It is intentionally not linked from
the top-level nav.