Comorbidity Assessment

Charlson Comorbidity Index and genetic risk integration

methodology
comorbidity
chronic disease
Author

Preact Health

Published

February 17, 2026

Overview

The comorbidity scoring system quantifies chronic disease burden and family health history using the evidence-based Charlson Comorbidity Index (CCI). This component reduces overall health scores based on existing conditions and genetic predisposition.

Implementation: preact/health_scorer/comorbidity_factor.py


What is Comorbidity?

Comorbidity refers to the presence of multiple chronic health conditions in an individual. These conditions:

  • Complicate disease management
  • Increase healthcare costs
  • Reduce quality of life
  • Worsen health outcomes

Example: A person with diabetes and heart disease has worse outcomes than someone with either condition alone.


Charlson Comorbidity Index

Background

The Charlson Comorbidity Index (CCI) is a validated clinical tool that: - Assigns weighted scores to 19 chronic conditions - Predicts 10-year mortality risk - Used in hospitals worldwide since 1987

Condition Weights

Each condition receives a weight from 0-6 based on mortality risk:

Weight Conditions
1 Myocardial infarction, CHF, peripheral vascular disease, cerebrovascular disease, dementia, COPD, connective tissue disease, ulcer disease, mild liver disease, diabetes (uncomplicated)
2 Hemiplegia, moderate/severe renal disease, diabetes with end-organ damage, any tumor (within 5 years), leukemia, lymphoma
3 Moderate or severe liver disease
6 Metastatic solid tumor, AIDS

Mathematical Formula

For a set of conditions \(C\) with Charlson weights \(w_i\):

\[ \text{Raw Charlson Score} = \sum_{i=1}^{N} w_i \cdot m \]

Where: - \(w_i \in [0, 6]\) = Charlson weight for condition \(i\) - \(m\) = Severity multiplier (default 1.0) - \(N\) = Number of present conditions

Note: Conditions without Charlson weights (e.g., mental health diagnoses) are tracked but don’t contribute to raw Charlson score.


Family History Integration

Genetic Component

Family health history provides genetic risk information. Our system:

  1. Identifies genetic conditions: Only conditions flagged has_genetic_component=TRUE contribute
  2. Deduplicates: Multiple family members with same condition count once
  3. Weights appropriately: Family history carries less weight than personal diagnosis

Deduplication Example

Input:

Father - hypertension
Mother - hypertension
Aunt - arthritis

Processing: - Hypertension appears twice → Count once - Arthritis appears once → Count once - Final unique conditions: {hypertension, arthritis}

Family History Formula

For unique family conditions \(F\) with weights \(w_j\):

\[ \text{Family History Score} = \sum_{j \in \text{unique}(F)} \max(w_j, 1.0) \cdot r_j \cdot m_{fh} \]

Where: - \(\text{unique}(F)\) = Deduplicated condition set - \(w_j\) = Charlson weight (or 1.0 if no weight defined) - \(r_j\) = Family risk weight (default 0.1) - \(m_{fh}\) = Family multiplier (default 0.1)

Combined effect: Family history contributes ~1% of personal diagnosis weight


Total Comorbidity Calculation

Step 1: Raw Charlson Points

\[ \text{Total Charlson} = \text{Condition Score} + \text{Family History Score} \]

Step 2: Nonlinear Penalty Model

The comorbidity penalty uses a bounded nonlinear function to avoid excessive penalties:

Baseline Penalty: \[ \text{Comorbidity Baseline} = \begin{cases} 0.15 & \text{if Total Charlson} > 0 \\ 0 & \text{otherwise} \end{cases} \]

Capping: \[ \text{Capped Charlson} = \min(\text{Total Charlson}, 6) \]

Normalization (logarithmic): \[ \text{Normalized} = \frac{\ln(1 + \text{Capped Charlson})}{\ln(1 + 6)} \]

Modifier: \[ \text{Charlson Modifier} = \max\left(1 - 0.35 \cdot \text{Normalized}, 0.65\right) \]

Final Comorbidity Factor: \[ \text{Comorbidity Factor} = \text{Comorbidity Baseline} \times \text{Charlson Modifier} \]

Why Logarithmic?

Linear scaling would over-penalize severe multi-morbidity. The logarithmic function: - Captures rapid increase in risk with first few conditions - Prevents excessive penalties for complex patients - Reflects diminishing marginal impact of additional diagnoses


Special Cases

Age 0 (Infants)

\[ \text{Comorbidity Factor}_{\text{age}=0} = 0 \]

Rationale: Infants are assumed to have no chronic comorbidities unless explicitly diagnosed.

Missing Data

If no comorbidity data provided: - Assume no chronic conditions - Comorbidity Factor = 0

Conservative assumption: Better than falsely penalizing users


Data Sources

Condition Data

Conditions are mapped via dim_health_conditions database table: - Condition name - Charlson weight - ICD-10 code - Genetic component flag - Category

Survey Integration

Users report conditions through: - Multi-select condition checklist - Free-text family history (with fuzzy matching) - Medical history upload (future)


Validation

Clinical Correlation

  • Hospital readmissions: CCI predicts 30-day readmissions (AUC 0.73)
  • Mortality: Strong correlation with 1-year and 10-year mortality
  • Healthcare costs: Linear relationship with annual costs

Our Implementation

Validated against: - Known high-risk cases: Correctly identifies severe multi-morbidity - Family history: Appropriately reduces but doesn’t eliminate genetic risk - Edge cases: Handles missing data, age extremes, rare conditions

See Scoring Audit for detailed validation.


Limitations

Self-report accuracy: Users may not know all diagnoses or family history

Undiagnosed conditions: Cannot capture conditions not yet diagnosed

Family history quality: Depends on user knowledge of relatives’ health

Population generalizability: CCI validated primarily in Western healthcare systems


Future Enhancements

  • EHR integration: Direct import of diagnosed conditions
  • Medication inference: Infer conditions from medication lists
  • Genomic data: Incorporate polygenic risk scores
  • Dynamic weights: Adjust Charlson weights based on modern outcomes data

Open Source

Full implementation: github.com/preacterik/preact-health-scoring/blob/main/preact/health_scorer/v020/comorbidity_factor.py

Review the algorithm or contribute improvements.


References

  1. Charlson ME, et al. A new method of classifying prognostic comorbidity in longitudinal studies. Journal of Chronic Diseases (1987)
  2. Quan H, et al. Updating and validating the Charlson Comorbidity Index. Medical Care (2011)
  3. CDC. Family Health History and Chronic Disease. (2021)
  4. Elixhauser A, et al. Comorbidity measures for use with administrative data. Medical Care (1998)

Last updated: February 17, 2026