SPB Git forge

spb/cancerindex

Public
37commits 1branches 0releases
2.9 MBsize
maindefault branch
10 days agolast push
TypeScript 97.2% SQL 1.5% CSS 0.6% JavaScript 0.5%
5.5 KB · 76 lines typescript
Raw Blame History
1/**2 * Explicitly curated metadata (CLAUDE.md §8 allows curated metadata; §246-247 require a3 * mutually exclusive top-level set for the global master ranking).4 *5 * The top-level set follows the GLOBOCAN / ICD-10 site groups so that registry burden estimates6 * can be attached without double counting. Each entry maps a site group to its NCIt anchor concept7 * (codes verified against the EVS REST API on 2026-09-08, NCIt 26.08e) and to the ICD-10 range8 * used by registries. Codes are recorded on `cancer_codes` with match type CURATED_EXACT.9 *10 * This list is *not* the taxonomy — it is a ranking scope definition (entity_level = "top").11 */12export interface TopLevelCancer {13  key: string;14  name: string; // display name (registry phrasing); the canonical NCIt name is kept on the entity15  ncit: string;16  icd10: string[]; // ICD-10 code ranges, e.g. "C33-C34"17  hematologic?: boolean;18  globocanCode?: number; // GLOBOCAN cancer code (reference only; ingestion is gated by license review)19  notes?: string;20}2122export const TOP_LEVEL_CANCERS: TopLevelCancer[] = [23  { key: 'lip-oral-cavity', name: 'Lip and Oral Cavity Cancer', ncit: 'C9316', icd10: ['C00-C06'], globocanCode: 1 },24  { key: 'salivary-gland', name: 'Salivary Gland Cancer', ncit: 'C3811', icd10: ['C07-C08'], globocanCode: 2 },25  { key: 'oropharynx', name: 'Oropharyngeal Cancer', ncit: 'C7398', icd10: ['C09-C10'], globocanCode: 3 },26  { key: 'nasopharynx', name: 'Nasopharyngeal Cancer', ncit: 'C9321', icd10: ['C11'], globocanCode: 4 },27  { key: 'hypopharynx', name: 'Hypopharyngeal Cancer', ncit: 'C7190', icd10: ['C12-C13'], globocanCode: 5 },28  { key: 'esophagus', name: 'Esophageal Cancer', ncit: 'C7478', icd10: ['C15'], globocanCode: 6 },29  { key: 'stomach', name: 'Stomach Cancer', ncit: 'C9331', icd10: ['C16'], globocanCode: 7 },30  { key: 'colon', name: 'Colon Cancer', ncit: 'C9242', icd10: ['C18'], globocanCode: 8 },31  { key: 'rectum', name: 'Rectal Cancer', ncit: 'C7418', icd10: ['C19-C20'], globocanCode: 9 },32  { key: 'anus', name: 'Anal Cancer', ncit: 'C7379', icd10: ['C21'], globocanCode: 10 },33  { key: 'liver', name: 'Liver Cancer', ncit: 'C190593', icd10: ['C22'], globocanCode: 11, notes: 'ICD-10 C22 includes intrahepatic bile ducts' },34  { key: 'gallbladder', name: 'Gallbladder Cancer', ncit: 'C7481', icd10: ['C23-C24'], globocanCode: 12, notes: 'ICD-10 C23-C24 includes extrahepatic biliary tract; NCIt anchor is gallbladder' },35  { key: 'pancreas', name: 'Pancreatic Cancer', ncit: 'C9005', icd10: ['C25'], globocanCode: 13 },36  { key: 'larynx', name: 'Laryngeal Cancer', ncit: 'C7484', icd10: ['C32'], globocanCode: 14 },37  { key: 'lung', name: 'Lung Cancer', ncit: 'C7377', icd10: ['C33-C34'], globocanCode: 15 },38  { key: 'melanoma-skin', name: 'Melanoma of Skin', ncit: 'C3510', icd10: ['C43'], globocanCode: 16 },39  { key: 'non-melanoma-skin', name: 'Non-Melanoma Skin Cancer', ncit: 'C4914', icd10: ['C44'], globocanCode: 17, notes: 'registries differ on inclusion (CLAUDE.md §210)' },40  { key: 'mesothelioma', name: 'Mesothelioma', ncit: 'C4456', icd10: ['C45'], globocanCode: 18 },41  { key: 'kaposi-sarcoma', name: 'Kaposi Sarcoma', ncit: 'C9087', icd10: ['C46'], globocanCode: 19 },42  { key: 'breast', name: 'Breast Cancer', ncit: 'C9335', icd10: ['C50'], globocanCode: 20 },43  { key: 'vulva', name: 'Vulvar Cancer', ncit: 'C7502', icd10: ['C51'], globocanCode: 21 },44  { key: 'vagina', name: 'Vaginal Cancer', ncit: 'C7410', icd10: ['C52'], globocanCode: 22 },45  { key: 'cervix', name: 'Cervical Cancer', ncit: 'C9311', icd10: ['C53'], globocanCode: 23 },46  { key: 'corpus-uteri', name: 'Uterine Corpus Cancer', ncit: 'C61574', icd10: ['C54'], globocanCode: 24, notes: 'C3556 (same name) is Retired_Concept in NCIt 26.08e; C61574 is the active concept' },47  { key: 'ovary', name: 'Ovarian Cancer', ncit: 'C7431', icd10: ['C56'], globocanCode: 25 },48  { key: 'penis', name: 'Penile Cancer', ncit: 'C7547', icd10: ['C60'], globocanCode: 26 },49  { key: 'prostate', name: 'Prostate Cancer', ncit: 'C7378', icd10: ['C61'], globocanCode: 27 },50  { key: 'testis', name: 'Testicular Cancer', ncit: 'C7251', icd10: ['C62'], globocanCode: 28 },51  { key: 'kidney', name: 'Kidney Cancer', ncit: 'C7548', icd10: ['C64-C65'], globocanCode: 29 },52  { key: 'bladder', name: 'Bladder Cancer', ncit: 'C9334', icd10: ['C67'], globocanCode: 30 },53  { key: 'brain-cns', name: 'Brain and Central Nervous System Cancer', ncit: 'C4627', icd10: ['C70-C72'], globocanCode: 31 },54  { key: 'thyroid', name: 'Thyroid Cancer', ncit: 'C7510', icd10: ['C73'], globocanCode: 32 },55  { key: 'hodgkin-lymphoma', name: 'Hodgkin Lymphoma', ncit: 'C9357', icd10: ['C81'], hematologic: true, globocanCode: 33 },56  { key: 'non-hodgkin-lymphoma', name: 'Non-Hodgkin Lymphoma', ncit: 'C3211', icd10: ['C82-C86', 'C96'], hematologic: true, globocanCode: 34 },57  { key: 'multiple-myeloma', name: 'Multiple Myeloma', ncit: 'C3242', icd10: ['C88', 'C90'], hematologic: true, globocanCode: 35 },58  { key: 'leukemia', name: 'Leukemia', ncit: 'C3161', icd10: ['C91-C95'], hematologic: true, globocanCode: 36 },59];6061export const TOP_LEVEL_BY_NCIT = new Map(TOP_LEVEL_CANCERS.map((t) => [t.ncit, t]));6263/** NCIt roots used to build the multi-dimensional hierarchy (verified 2026-09-08). */64export const NCIT_ROOTS = {65  neoplasm: 'C3262',66  malignantNeoplasm: 'C9305',67  neoplasmBySite: 'C3263',68  neoplasmByMorphology: 'C4741',69  carcinoma: 'C2916',70  malignantSolidNeoplasm: 'C132146',71  hematopoieticLymphoidCellNeoplasm: 'C27134',72  hematopoieticLymphaticSystemNeoplasm: 'C35813',73  childhoodMalignantNeoplasm: 'C4005',74  nervousSystemNeoplasm: 'C3268',75} as const;76