Effort: thorough
Build a transparent disease-priority score that ranks every disease
in disease_ontology_catalog by where SciDEX should invest agent
attention next. The score combines (a) global disease burden (DALYs from
Global Burden of Disease 2021 study), (b) tractability (number of
clinically-validated targets, stage of pipeline), and (c) current
SciDEX coverage (gaps + hypotheses + open-questions per disease) to
emit a per-disease "attention dividend" — high burden + tractable +
underserved by SciDEX = top of the list.
Without an explicit prioritization, fleet attention skews toward
whatever has the most existing hypotheses (path dependence) or the
most papers (publication-volume bias). A burden-weighted score lets
the Senate steer compute toward diseases the world actually needs work
on (e.g. tuberculosis is high burden in low-income regions, low SciDEX
attention) and prevents the platform from drifting into a
neuroscience-only echo chamber.
disease_priority_score(mondo_id PRIMARY KEY,scidex/senate/disease_priority.py (≤500 LoC):load_gbd_burden() — pulls DALYs from IHME GBD 2021 resultshttps://vizhub.healthdata.org/gbd-results/); cacheddata/gbd/2021/.compute_tractability(mondo_id) — counts clinical-trialchembl-drug-targets + search-trials helpers) and weightedcompute_coverage(mondo_id) — counts SciDEX hypotheses, gaps,log1p(n_hyps) +
log1p(n_gaps) + 2*log1p(n_open_questions).attention_dividend = (dalys_z + tractability_z) -
coverage_z — diseases with high need + tractable butscidex-disease-priority.timer weekly Sundayscore_version.
/senate/disease-priorities page renders the ranked table withscidex/agora/gap_pipeline.py consultsattention_dividendscore_version plus the GBD bundle SHAcommit_artifact so the historical score canchembl-drug-targets and search-trials.
hypotheses, gaps,open_questions joined to entity_disease_canonical fromq-vert-disease-ontology-catalog.
configs/disease_priority.yaml.q-vert-disease-ontology-catalog — catalog + canonical resolver.chembl-drug-targets, search-trials skills.Files created/modified:
migrations/add_disease_priority_score.py — creates disease_priority_score table with mondo_id PK, dalys_2021, n_validated_targets, n_pipeline_drugs, scidex_coverage_score, attention_dividend, dalys_z, tractability_z, coverage_z, score_version, computed_at; indexes on attention_dividend DESC and (score_version, computed_at)scidex/senate/disease_priority.py (360 LoC) — full module: load_gbd_burden(), compute_tractability(), compute_coverage(), compute_all_scores(), get_top_decile_mondo_ids(), get_scores_ranked(), run()configs/disease_priority.yaml — tunable weights for burden/tractability/coverage, live_tractability flag, gap_top_decile_bonusapi.py — /senate/disease-priorities route with colorblind-safe stacked-bar tablescidex/agora/gap_pipeline.py — compute_enrichment_priority() applies +0.3 bonus to gaps in top-decile attention-dividend diseases; get_disease_priority_top_decile() fetches MONDO IDs; review_gaps() wired to use bonusdeploy/scidex-disease-priority.service + .timer — weekly Sunday 06:00 UTCtests/test_disease_priority.py — 12 tests, all passingdata/gbd/2021/gbd_dalys.csv when presentlive_tractability: false default to avoid bulk HTTP requests; opt-in per configknowledge_gaps.mondo_id + domain ILIKE pattern + hypotheses.disease ILIKE patternopen_questions and disease_ontology_catalog tables