Adding classifications

SkillFiles & storage

Skill for populating the `classifications` top-level block of a dismech Disease entry. Covers Harrison's Part assignment, mechanistic nosology, lysosomal storage, IUIS immunodeficiency, channelopathy, and ICD-O morphology fields, with a lookup table from common clinical phrasing to controlled-vocabulary keys.

Available today. Use it from your connected AI after setup.

Connect ahel once, and every AI you use reads what you have installed.

Then ask your AI: use the Adding classifications skill

What this skill tells your AI

The instructions your AI receives, as published by monarch-initiative/dismech in .claude/skills/disease-classification/SKILL.md and read by ahel’s review.

The classifications block carries multiple disease-taxonomy assignments, each ranged by its own enum. Curators populate the slot(s) most relevant to the disease — most entries will set harrisons_chapter plus zero or more of the more specific category slots (mechanistic_category, lysosomal_storage_category, etc.).

classifications:
  harrisons_chapter:
  - classification_value: ENDOCRINOLOGY_METABOLISM
  - classification_value: GENETICS_ENVIRONMENT_DISEASE
  mechanistic_category:
  - classification_value: tauopathy

All classification_value slots are enum-typed: free-text values will fail schema validation. Use the controlled keys below.

Every slot in DiseaseClassifications renders on the disorder page automatically — the Classifications card is generated from the schema, labelled by each slot's LinkML title, and grouped by slot_group. You do not need to touch the template when curating, and a slot you populate will never silently fail to appear.

Harrison's Part (harrisons_chapter)

Despite the slot name, the controlled vocabulary lives at the Part level of Harrison's Principles of Internal Medicine (21st edition), not at individual chapter granularity. The full enum is defined in src/dismech/schema/dismech.yaml as HarrisonsChapterEnum. The slot is multivalued — assign every Part that contains a relevant chapter.

Lookup table (common phrasings → enum key)

Use this table to translate the natural-language category you want to express into the right enum key.

You want to say…Use this key
cancer / solid tumor / leukemia / lymphoma / sarcomaONCOLOGY_HEMATOLOGY
hematologic malignancy / anemia / coagulation disorderONCOLOGY_HEMATOLOGY
bacterial / viral / fungal / parasitic / infectious diseaseINFECTIOUS_DISEASES
cardiomyopathy / coronary / vascular / cardiac channelopathyCARDIOVASCULAR
asthma / COPD / lung / allergic respiratory diseaseRESPIRATORY
sepsis / ARDS / critical illnessCRITICAL_CARE
kidney / glomerular / electrolyte / urinary tractKIDNEY_URINARY_TRACT
GI / hepatic / pancreatic / IBD / pepticGASTROINTESTINAL
autoimmune / connective tissue / rheumatology / arthritisIMMUNE_RHEUMATOLOGIC
musculoskeletalIMMUNE_RHEUMATOLOGIC
diabetes / thyroid / adrenal / pituitary / metabolicENDOCRINOLOGY_METABOLISM
inborn error of metabolism (general)ENDOCRINOLOGY_METABOLISM
neurodegenerative / movement disorder / epilepsy / strokeNEUROLOGIC
psychiatric / demyelinating / neuromuscularNEUROLOGIC
skin disorderDERMATOLOGY
poisoning / overdose / envenomationPOISONING_ENVENOMATION
environmental exposure (altitude, radiation, hypothermia)ENVIRONMENTAL_EXPOSURES
hereditary / RASopathy / ciliopathy / mitochondrial diseaseGENETICS_ENVIRONMENT_DISEASE
hearing loss / vestibular disorderDISORDER_OF_EAR
symptom-defined entry (e.g., chronic pain, fatigue)CARDINAL_MANIFESTATIONS
does not fit any PartOTHER

How to pick Parts

  • Prefer the organ-system Part where Harrison's would publish the primary chapter on the disease (e.g., asthma → RESPIRATORY, not IMMUNE_RHEUMATOLOGIC).
  • Add a second Part when the disease has a major mechanistic axis that Harrison's covers separately. Example: Familial Mediterranean Fever → IMMUNE_RHEUMATOLOGIC (primary clinical home) plus GENETICS_ENVIRONMENT_DISEASE (Mendelian inheritance is a recurring theme).
  • Skeletal dysplasias and other hereditary musculoskeletal conditions generally go to GENETICS_ENVIRONMENT_DISEASE. Reserve IMMUNE_RHEUMATOLOGIC for inflammatory / immune-mediated entities.
  • Cancers always go to ONCOLOGY_HEMATOLOGY; an organ-system Part is optional and usually unnecessary unless the entry is about an organ-specific paraneoplastic syndrome.

Verifying the enum

uv run python -c "
import yaml
with open('src/dismech/schema/dismech.yaml') as f:
    data = yaml.safe_load(f)
for k in data['enums']['HarrisonsChapterEnum']['permissible_values']:
    print(k)
"

Other classification slots

The same classifications block accepts several more specific taxonomies when they apply. All use classification_value: ranged by their own enum.

  • mechanistic_category — pathway / mechanism-based nosology (tauopathy, synucleinopathy, proteotoxic disease, RASopathy, ciliopathy, mitochondrial disease, intermediate filament disease, etc.). Multivalued.
  • lysosomal_storage_category — biochemical classification of lysosomal storage disorders (glycoproteinosis, disorder of glycogen metabolism, etc.). Single-valued.
  • iuis_category — IUIS primary-immunodeficiency classification. Single-valued.
  • channelopathy_category — organ-system grouping for channelopathies (cardiac channelopathy, neurological channelopathy, etc.). Single-valued.
  • icdo_morphology — ICD-O cancer-morphology category. Apply to neoplastic entries. Single-valued. See the dedicated section below.
  • icimd_category — International Classification of Inherited Metabolic Disorders (ICIMD) category/group. Apply to inherited metabolic disorders (inborn errors of metabolism). Multivalued. See the dedicated section below.
  • isds_skeletal_category — ISDS Nosology group (2023 revision) for genetic skeletal disorders (skeletal dysplasias, dysostoses, metabolic bone disorders, skeletal malformation/reduction syndromes). Multivalued in the schema, but a single ISDS-listed disorder takes exactly one group. See the dedicated section below.
  • ilo_agent_category / ilo_disease_category — the two orthogonal axes of the ILO List of Occupational Diseases (revised 2010). Apply to any disease with a recognised occupational form. Both multivalued.
  • eu_occupational_category — item(s) of the European schedule of occupational diseases (Rec. 2003/670/EC as amended). Multivalued. See the dedicated section below.

ICD-O morphology (icdo_morphology)

A coarse histogenetic vocabulary for neoplastic entries. It is not a slot for four-digit ICD-O codes — there is nowhere in the schema to put one yet (monarch-initiative/dismech#7548).

The values

GroupValues
EpithelialCarcinoma, Adenocarcinoma, Squamous Cell Carcinoma, Adenoma, Trophoblastic Tumor, Mesothelial Neoplasm
MesenchymalSarcoma, Pericytic Neoplasm
Neural / meningealGlioma, Nerve Sheath Neoplasm, Meningioma
MelanocyticMelanoma
Germ cell / gonadal stromalGerm Cell Tumor, Sex Cord-Stromal Tumor
NeuroendocrineNeuroendocrine Neoplasm
HaematolymphoidLeukemia, Lymphoma, Plasma Cell Neoplasm, Multiple Myeloma, Myeloproliferative Neoplasm, Myelodysplastic Syndrome, Histiocytic and Dendritic Cell Neoplasm
EmbryonalEmbryonal Neoplasm

Picking one

  • Match histogenesis, not site. Medulloblastoma is Embryonal Neoplasm, not Glioma; meningioma is Meningioma, not Glioma. Both are intracranial and neither is glial.
  • Match histogenesis, not name. Embryonal carcinoma is a germ cell tumour (Germ Cell Tumor), not Embryonal Neoplasm — that value covers the blastomas, CNS embryonal tumours and Wilms tumour. Merkel cell "carcinoma" and medullary thyroid "carcinoma" are neuroendocrine.
  • Most values are behaviour-neutral. Nerve Sheath Neoplasm, Pericytic Neoplasm, Mesothelial Neoplasm, Sex Cord-Stromal Tumor, Trophoblastic Tumor and Neuroendocrine Neoplasm all cover benign and malignant members. Assigning one asserts histogenesis, not malignancy. Where ICD-O splits a family on behaviour the values follow it — use Adenoma for a benign glandular neoplasm and never round it up to Adenocarcinoma.
  • Prefer the family over a split-out subtype unless the entry really is that subtype. Plasma Cell Neoplasm for the family, Multiple Myeloma for myeloma itself; the same relation holds for Carcinoma vs Adenocarcinoma.
  • Myeloid entries are not all Leukemia. Polycythaemia vera, essential thrombocythaemia and primary myelofibrosis are Myeloproliferative Neoplasm; MDS is Myelodysplastic Syndrome.

When nothing fits

Omit the slot and say why — in the entry's notes or a CURATION_TODO discussion. There is deliberately no Other value. Forcing a wrong value is the failure mode this vocabulary keeps hitting (mesothelioma tagged Carcinoma, polycythaemia vera tagged Leukemia), and the recorded omissions are what tell us which family to add next — the 2026-08 expansion came straight out of the notes on Glomus Tumor, Choriocarcinoma, Pheochromocytoma-Paraganglioma and GNAS-related pituitary adenoma. Entries still without a home include thymoma, chordoma, craniopharyngioma, the odontogenic tumours and GIST; see docs/reports/icdo-morphology-enum-review-2026-08-27.md.

Occupational disease (ilo_agent_category, ilo_disease_category, eu_occupational_category)

Two sanctioned occupational nosologies, plus six agent-level exposure axes that do NOT go in this block. Full guidance: docs/occupational-environmental-classifications.md.

First, the split that matters. classifications: classifies the disease. Facts about the agent — IARC carcinogen group, GHS hazard class, route, duration, hazard type, exposome domain — belong on the environmental: entry under exposure_classifications:, never here. "Benzene is IARC Group 1" is a statement about benzene, not about any disease it causes.

classifications:
  harrisons_chapter:
  - classification_value: RESPIRATORY
  ilo_disease_category:              # sections 2 and 4 -> disease-category axis
  - classification_value: pneumoconiosis_from_fibrogenic_mineral_dust
    notes: 'ILO List of Occupational Diseases (revised 2010), item 2.1.1.'
  eu_occupational_category:
  - classification_value: silicosis
    notes: 'European schedule Annex I item 301.11 "Silicosis".'

environmental:
- name: Occupational Respirable Crystalline Silica Exposure
  exposure_classifications:          # <- agent-level, NOT in classifications:
    hazard_agent_type:
    - classification_value: CHEMICAL
    exposure_route:
    - classification_value: INHALATION
    iarc_carcinogen_group:
      classification_value: GROUP_1

Assign both nosologies when both apply — they are separate instruments, not substitutes, and neither implies the other. The EU schedule is finer-grained (separate items for silicosis 301.11 / asbestosis 301.21 / mesothelioma 301.22 where ILO has one item 2.1.1 plus a cancer item 3.1.1) and uniquely carries COVID-19 (408) and the 2025 asbestos additions (311–314).

The ILO list is biaxial — pick the slot by section. The two axes are separate slots over separate enums, so a value from one axis will not validate in the other's slot:

ILO sectionsSlotEnumItems name
1 (chemical/physical/biological agents), 3 (cancer)ilo_agent_categoryILOCausativeAgentEnumthe agent
2 (by target organ system), 4 (other diseases)ilo_disease_categoryILODiseaseCategoryEnumthe disease

A disease commonly takes one from each — occupational asthma from isocyanates is both isocyanates (1.1.35, agent slot) and occupational_asthma (2.1.7, disease slot). Both slots stay multivalued because more than one item from a single axis is normal (silicosis takes 2.1.1 and 2.1.2). Do NOT carry the ISDS "exactly one group" rule over to this instrument.

The three occupational slots share a LinkML slot_group (occupational_classification), but that is display grouping only and enforces nothing — the separate enum ranges are what bind each axis.

Assign only when an occupational form is recognised. An exposure existing is not enough — lead poisoning from contaminated water is not ILO 1.1.8; lead poisoning in a smelter worker is. A disease with both occupational and non-occupational forms (asthma, COPD, mesothelioma, hearing loss) still takes the item; the assignment records that an occupational form is recognised, not that every case is occupational. Say which in notes.

Annex II is "suspected", not recognised. EU keys prefixed suspected_ come from Annex II — the additional list of diseases suspected of being occupational. Never report one as a recognised occupational disease; say so in notes.

Record provenance in notes (revision, item number, annex). As with ICIMD and ISDS this is a definitional taxonomy mapping, not an empirical disease claim, so prefer notes over a manufactured evidence snippet.

Do NOT put the citing identifier for the instrument in notes prose — that lives in the schema, on the enum's source: metaslot. The eight European items added by the 2022 and 2025 amendments additionally carry a per-value source:, so if a value has its own source it is a recent addition.

Worked examples: Silicosis, Asbestosis, Malignant_Mesothelioma, Noise_Induced_Hearing_Loss.

ICIMD (icimd_category) — inherited metabolic disorders

For inherited metabolic disorders, assign the ICIMD category/group from ICIMDEnum (defined in src/dismech/schema/classifications/icimd.yaml, transcribed from Ferreira et al. 2021, PMID:33340416). ICIMD is a consensus, mechanism-first nosology of inborn errors of metabolism.

The enum is hierarchical: it encodes the 24 ICIMD categories (layer 1) as top-level values and the ~113 disease groups (layer 2) as children that declare their parent category via is_a. Both levels are valid assignments.

Assign the most specific applicable node — usually a group. The parent category is derivable through is_a, so you do not also need to list the category. Assign at category level only when the specific group is unknown. The slot is multivalued: add more than one node when a disorder genuinely spans groups.

classifications:
  harrisons_chapter:
  - classification_value: ENDOCRINOLOGY_METABOLISM
  icimd_category:
  - classification_value: organic_acidurias        # group; rolls up to amino_acid_metabolism
    notes: >-
      ICIMD (Ferreira et al. 2021, PMID:33340416): group "Organic acidurias"
      under category "Disorders of amino acid metabolism".

Record provenance in notes: (as above) for the ICIMD assignment. An ICIMD placement is a definitional taxonomy mapping, not an empirical disease claim, and the ICIMD paper's abstract carries no per-disease sentence that would serve as an exact-quote snippet: supporting a specific group. A formal evidence: block (identical shape to any other dismech evidence — cached PMID + exact-quote snippet) is still valid and welcome when a source genuinely states the placement (e.g. the iembase entry text or a disease-specific review); prefer notes: over a generic snippet that only supports the framework rather than the assignment.

Pair icimd_category with harrisons_chapter (usually ENDOCRINOLOGY_METABOLISM and/or GENETICS_ENVIRONMENT_DISEASE) the same way other specific taxonomies are set alongside Harrison's. ICIMD is finer-grained and metabolism-specific; the lysosomal storage diseases in particular can carry both lysosomal_storage_category and an ICIMD group under complex_molecule_degradation.

To list the available categories/groups:

uv run python -c "
from linkml_runtime.utils.schemaview import SchemaView
sv = SchemaView('src/dismech/schema/dismech.yaml')
for k, pv in sv.get_enum('ICIMDEnum').permissible_values.items():
    print(('  ' if pv.is_a else '') + k + (f'  (is_a {pv.is_a})' if pv.is_a else '  [CATEGORY]'))
"

ISDS Nosology (isds_skeletal_category) — genetic skeletal disorders

For genetic skeletal disorders, assign the group from ISDSNosologyGroupEnum (defined in src/dismech/schema/classifications/isds_skeletal_nosology.yaml, transcribed from the ISDS Nosology of Genetic Skeletal Disorders, 2023 revision — Unger et al., PMID:36779427). That revision lists 771 entries across 552 genes in 41 groups, mixing molecular, radiographic, and anatomical/pathogenetic organizing principles. It supersedes the 2019 revision (Mortier et al., PMID:31633310), whose group names are retained as structured_aliases and whose four dissolved groups are retained as deprecated values — never assign a deprecated value.

The enum is flat, not hierarchical, and the nosology deliberately lists each disorder exactly once. So:

  • Assign one group. The slot is multivalued only for an entry that lumps several distinct nosology disorders. Do not add a second group because the biology overlaps — Table 1 handles overlap with "see also" cross-references, not dual membership.
  • Only assign to listed disorders. This is a transcription of an expert nosology, not an inference engine. If the entry is not in Table 1 (and is not an unambiguous subtype or synonym of a Table 1 disorder), leave the slot empty — plenty of disorders with skeletal phenotypes were deliberately not included.
  • Watch for cross-group traps: FGFR3 craniosynostosis belongs to the craniosynostosis group, not the FGFR3 group; Hajdu-Cheney is osteolysis, not OI/bone fragility; brachydactyly-hypertension is a syndromic brachydactyly, not acromelic.
  • Group numbers are not stable across revisions — the brachydactyly groups moved from 37/38 to 18/19 between 2019 and 2023. Cite the group by name and revision in notes:, never by bare number.
  • Entities the nosology flags but declines to decompose get the group on the entity only. Fanconi anemia is the worked case: it sits in group 38 "Limb hypoplasia – reduction defects" in the 2023 revision (group 39 in 2019 — note the shift, and that 2023 group 39 is a different group, "Split hand/foot"). Its gene column reads "(several)" and the group footnote says the complementation groups are "acknowledged but not further listed". That is a caveat about genetic decomposition, not about membership — so assign limb_hypoplasia_reduction_defects to Fanconi anemia, note the caveat, and do not invent per-complementation-group placements. Assign the enum key, not a number: the key is revision-stable, the number is not.
classifications:
  harrisons_chapter:
  - classification_value: GENETICS_ENVIRONMENT_DISEASE
  isds_skeletal_category:
  - classification_value: fgfr3_chondrodysplasia
    notes: >-
      ISDS Nosology of Genetic Skeletal Disorders, 2023 revision
      (Unger et al., PMID:36779427), group 1 "FGFR3 chondrodysplasias";
      listed as "Achondroplasia, FGFR3-related".

Groups carry no meaning:; three carry a close_mappings: to a MONDO class (FGFR3 chondrodysplasias, TRPV4 disorders, and acromesomelic dysplasias — the gene-defined series). A candidate MONDO class is rejected whenever it contains an entity ISDS lists in a different group, so do not add mappings without running that check. See docs/isds-skeletal-nosology.md for the accepted and rejected sets.

As with ICIMD, record provenance in notes: and prefer it over evidence:. The paper's PubMed record is abstract-only, so no exact-quote snippet from it can support a specific group placement — the abstract states only that the nosology exists and has 771 entries across 552 genes in 41 groups. Quote it only if you are supporting that framework claim, never a per-disorder assignment.

To list the groups:

uv run python -c "
from linkml_runtime.utils.schemaview import SchemaView
sv = SchemaView('src/dismech/schema/dismech.yaml')
for k, pv in sv.get_enum('ISDSNosologyGroupEnum').permissible_values.items():
    print(k, '-', (pv.description or '').split('.')[0])
"

When the same concept fits both Harrison's and a more specific slot, set both. Example: a tauopathy gets harrisons_chapter: NEUROLOGIC and mechanistic_category: tauopathy.

Backing classifications with evidence

Every classification_value entry is a ClassificationAssignment and carries optional evidence: and notes: slots inherited from the base class. Cite an authoritative source whenever you can — this turns the classification from "curator opinion" into a checkable annotation and prevents AI-fabricated taxonomy drift over time.

Do not quote Harrison's Principles of Internal Medicine directly: the textbook is copyrighted and snippets are not redistributable. Cite the open-access peer-reviewed alternatives below instead. The pattern is the same as any other dismech evidence block — exact-quote snippet from the cited reference's abstract or text.

harrisons_chapter:
- classification_value: GASTROINTESTINAL
  evidence:
  - reference: PMID:39101000
    supports: SUPPORT
    evidence_source: HUMAN_CLINICAL
    snippet: "Inflammatory bowel disease (IBD), comprising Crohn's disease and ulcerative colitis, is a chronic relapsing inflammatory disorder of the gastrointestinal tract."
    explanation: Recent review characterises IBD as a gastrointestinal-tract inflammatory disorder, supporting placement in Harrison's GI Part.

Authoritative classification sources per Part

For each Part, the table below names a reusable family of citable sources. Prefer the most disease-specific source available, but these are good fallbacks when a disorder-specific recent review isn't at hand.

Shortened here. Read the whole file on GitHub.

Signals

GitHub stars
61
Forks
12
Last commit
Sep 2026
Advanced
Catalog kind
skill
Gateway key
disease-classification
Source
github.com/monarch-initiative/dismech