FY2026 ICD-10-CM · CMS-HCC V28 PY2027 · COMMUNITY_NA
Carcinoma in situ risk-adjusts at zero — all 59 codes, with one exception
The Ca in situ column of the ICD-10-CM Neoplasm Table resolves to 59 distinct codes. Not one maps to a CMS-HCC V28 category.
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.
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 20261Count the Ca in situ column — cells, dashes, and distinct codes
python3 -c " import xml.etree.ElementTree as ET r = ET.parse('icd10cm_neoplasm_2026.xml').getroot() cells = [(c.text or '').strip() for c in r.iter('cell') if c.get('col') == '4'] codes = {x.replace('.','').rstrip('-') for x in cells if x not in ('-','--','')} print('cells in Ca in situ column:', len(cells)) print('cells with no code (dashes):', sum(1 for x in cells if x in ('-','--'))) print('DISTINCT codes:', len(codes)) "Output
cells in Ca in situ column: 1819 cells with no code (dashes): 901 DISTINCT codes: 592How many of them map to a CMS-HCC V28 category
python3 -c " import xml.etree.ElementTree as ET, csv r = ET.parse('icd10cm_neoplasm_2026.xml').getroot() codes = {(c.text or '').strip().replace('.','').rstrip('-') for c in r.iter('cell') if c.get('col') == '4'} - {'-','--',''} hcc = {row['ICD10'] for row in csv.DictReader(open('ICD10_CC_mappings_CMS_HCC_2027_v28_initial.csv'))} print('Ca in situ codes that map to a V28 HCC:', len(codes & hcc)) "Output
Ca in situ codes that map to a V28 HCC: 03D03 is absent from the column — and D03 is what maps
python3 -c " import xml.etree.ElementTree as ET, csv r = ET.parse('icd10cm_neoplasm_2026.xml').getroot() codes = {(c.text or '').strip().replace('.','').rstrip('-') for c in r.iter('cell') if c.get('col') == '4'} - {'-','--',''} print('categories in the Ca in situ column:', sorted({c[:3] for c in codes})) hcc = {row['ICD10']: row['CC'] for row in csv.DictReader(open('ICD10_CC_mappings_CMS_HCC_2027_v28_initial.csv'))} d03 = {k: v for k, v in hcc.items() if k.startswith('D03')} print('D03 codes that DO map:', len(d03), '-> HCC', sorted(set(d03.values()))) "Output
categories in the Ca in situ column: ['D00', 'D01', 'D02', 'D04', 'D05', 'D06', 'D07', 'D09'] D03 codes that DO map: 23 -> HCC ['23.0']
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.