CMS-HCC V28 PY2027 · COMMUNITY_NA

Two ICD-10 codes change HCC on the patient's sex, and the swing is 10×

339 ICD-10 codes map to more than one CMS-HCC V28 category — 189 conditionally on age or sex, and 150 simultaneously. Hemophilia A and B swing 10.3× on sex alone.

Reproduce this

Every figure above comes from two public CMS files. Put them in an empty directory and run these — each command prints exactly the numbers published here. Outputs below are pasted verbatim from a real run.

  1. 0Confirm which ICD-10-CM edition you have. Run this first.

    python3 -c "
    import xml.etree.ElementTree as ET
    r = ET.parse('icd10cm_index_2026.xml').getroot()
    for mt in r.iter('mainTerm'):
        if (mt.findtext('title','') or '').strip().lower() == 'tumor':
            for t in mt.iter('term'):
                if (t.findtext('title','') or '').strip().lower() == 'neuroendocrine':
                    code = t.findtext('code')
                    print('Tumor > neuroendocrine =', code)
                    print('edition =', 'April 1 2026' if code.startswith('C7A')
                                       else 'October 1 2025' if code.startswith('D3A')
                                       else 'unrecognised')
    "

    Output

    Tumor > neuroendocrine = C7A.-
    edition = April 1 2026
  2. 1The two sex-conditional codes

    python3 -c "
    import csv
    for row in csv.DictReader(open('ICD10_CC_mappings_CMS_HCC_2027_v28_initial.csv')):
        if row['ICD10'] in ('D66','D67'):
            print(row['ICD10'], '-> HCC', row['CC'],
                  '| age:', row['AGE_EDIT_CONDITION'] or '-',
                  '| sex:', row['SEX_EDIT_CONDITION'] or '-')
    "

    Output

    D66 -> HCC 111.0 | age: age < 65 | sex: 1.0
    D66 -> HCC 111.0 | age: age >= 65 | sex: 1.0
    D66 -> HCC 112.0 | age: - | sex: 2.0
    D67 -> HCC 111.0 | age: age < 65 | sex: 1.0
    D67 -> HCC 111.0 | age: age >= 65 | sex: 1.0
    D67 -> HCC 112.0 | age: - | sex: 2.0
  3. 2The coefficients

    python3 -c "
    import csv
    for row in csv.reader(open('V28_CE_Relative_Factors.csv', encoding='utf-8-sig')):
        if row and row[0].strip() in ('HCC111','HCC112','HCC22','HCC23'):
            print(f'{row[0].strip():8s} community_NA={row[2]:6s} {row[1].strip()[:52]}')
    "

    Output

    HCC22    community_NA=0.363  Bladder, Colorectal, and Other Cancers
    HCC23    community_NA=0.186  Prostate, Breast, and Other Cancers and Tumors
    HCC111   community_NA=4.639  Hemophilia, Male
    HCC112   community_NA=0.45   Immune Thrombocytopenia and Specified Coagulation De
  4. 3The 339, split into conditional and simultaneous

    python3 -c "
    import csv, collections
    rows = list(csv.DictReader(open('ICD10_CC_mappings_CMS_HCC_2027_v28_initial.csv')))
    by = collections.defaultdict(list)
    for r in rows: by[r['ICD10']].append(r)
    multi = {k: v for k, v in by.items() if len({r['CC'] for r in v}) > 1}
    sex  = [k for k, v in multi.items() if any(r['SEX_EDIT_CONDITION'] for r in v)]
    cond = [k for k, v in multi.items() if any(r['SEX_EDIT_CONDITION'] or r['AGE_EDIT_CONDITION'] or r['MCE_AGE_CONDITION'] for r in v)]
    print('codes mapping to more than one HCC:', len(multi))
    print('  ...conditional on age or sex:', len(cond))
    print('  ...conditional on SEX:', len(sex), sorted(sex))
    print('  ...unconditional (both HCCs apply at once):', len(multi) - len(cond))
    "

    Output

    codes mapping to more than one HCC: 339
      ...conditional on age or sex: 189
      ...conditional on SEX: 2 ['D66', 'D67']
      ...unconditional (both HCCs apply at once): 150

If you write your own parser, traverse the whole tree. root.iter('term') misses the cells under <mainTerm>— the table's head row — and comes up exactly one cell short in every column. And normalise cells with .replace(".","").rstrip("-"): a lone -means “no code”, while a trailing hyphen on a real stem means “more characters required”. Those are different things.

Sources and method

ICD-10-CM
ICD-10-CM FY2026, April 1 2026 release. The Neoplasm Table is unchanged from the October 1 2025 release — both statements are true, and either download reproduces every figure. april-1-2026-code-tables-tabular-index.zip
CMS-HCC model
CMS-HCC V28, Payment Year 2027 initial model software (Python package). 2027-initial-model-software-python.zip
Segment
All coefficients are COMMUNITY_NA — community, non-dual, aged. Other segments carry different values and some invert; a coefficient without its segment is meaningless.

Published by Eviora Health Tech LLC on . These pages describe how the CMS-HCC payment model behaves. They are not coding advice — code selection follows the ICD-10-CM Official Guidelines and the provider's documentation.

Codes referenced here