ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

OpenMed ICD-10-CM 章节路由实战:FY2025 章范围表与 ICD-10-PCS 节定位指南

2026/9/19 3:08:03 拓冰建站 浏览量
OpenMed ICD-10-CM 章节路由实战:FY2025 章范围表与 ICD-10-PCS 节定位指南 OpenMed ICD-10-CM 章节路由实战FY2025 章范围表与 ICD-10-PCS 节定位指南【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmedICD-10-CM 编码的第一步往往不是查码而是先把诊断片段路由到正确的章。本文以 OpenMed 仓库中 coding-icd10 技能参考文档 为骨架完整讲解 FY2025 版 ICD-10-CM 的 22 个章范围、ICD-10-PCS 的 16 个手术节以及如何在 OpenMed 的「本地 NER 抽取 → 章路由 → 候选码检索 → 人工复核」工作流中落地使用同时结合 icd10cm 加载器 与 ICD-10-CM 链接器 的源码实现讲清章路由背后的数据结构和排序原理。读完你将掌握一套可直接复制运行、且始终保留人类编码员最终定码边界的诊断编码决策支持方案。为什么编码要先做章路由OpenMed 是本地优先local-first的医疗 AI 套件其 NER 模型能从病历文本中抽取DISEASE、CONDITION、PATHOLOGY等诊断片段。但 ICD-10-CM 全库约有数万个可计费码直接全文检索既慢又容易命中错义项。参考文档给出的策略非常明确Use the first-letter / code-range to route an OpenMed diagnosis span to the right chapter before searching for a specific code.即先用诊断片段的临床主题首字母/码段把搜索空间收缩到某一章再在章内查找具体码。这一步能同时达成两个目的缩小候选集、以及快速暴露明显错配例如把内分泌问题路由到循环系统章。需要特别强调的是OpenMed 与 coding-icd10 技能产出的只是给持证编码员的决策支持candidate suggestions最终的可计费码必须由人工编码员验证绝不自动出账——这一点在 SKILL.md 中被反复强调。ICD-10-CM 章范围总表FY2025参考文档 icd10-chapters.md 给出了 FY2025 官方章块。路由时先用首字母或码段前缀命中下表章码范围标题1A00–B99某些传染病和寄生虫病Certain infectious and parasitic diseases2C00–D49肿瘤Neoplasms3D50–D89血液及造血器官疾病和某些涉及免疫机制的疾患Diseases of the blood and blood-forming organs and certain disorders involving the immune mechanism4E00–E89内分泌、营养和代谢疾病Endocrine, nutritional and metabolic diseases5F01–F99精神、行为及神经发育障碍Mental, behavioral and neurodevelopmental disorders6G00–G99神经系统疾病Diseases of the nervous system7H00–H59眼和附器疾病Diseases of the eye and adnexa8H60–H95耳和乳突疾病Diseases of the ear and mastoid process9I00–I99循环系统疾病Diseases of the circulatory system10J00–J99呼吸系统疾病Diseases of the respiratory system11K00–K95消化系统疾病Diseases of the digestive system12L00–L99皮肤和皮下组织疾病Diseases of the skin and subcutaneous tissue13M00–M99肌肉骨骼系统和结缔组织疾病Diseases of the musculoskeletal system and connective tissue14N00–N99泌尿生殖系统疾病Diseases of the genitourinary system15O00–O9A妊娠、分娩和产褥期Pregnancy, childbirth and the puerperium16P00–P96起源于围生期的某些情况Certain conditions originating in the perinatal period17Q00–Q99先天性畸形、变形和染色体异常Congenital malformations, deformations and chromosomal abnormalities18R00–R99症状、体征和异常的临床与实验室所见不可归类在他处者Symptoms, signs and abnormal clinical and laboratory findings, not elsewhere classified19S00–T88损伤、中毒和外因的某些其他后果Injury, poisoning and certain other consequences of external causes20V00–Y99疾病和死亡的外因External causes of morbidity21Z00–Z99影响健康状态和与保健机构接触的因素Factors influencing health status and contact with health services22U00–U85特殊目的编码Codes for special purposes例如 U07.1 COVID-19、紧急使用如何读这张表三字符类目Category是路由锚点ICD-10-CM 码的前三位即类目category这正是章路由的锚点。例如E11.222 型糖尿病伴糖尿病慢性肾病→ 类目E11→ 第 4 章E00–E89内分泌I10原发性高血压→ 类目I10→ 第 9 章I00–I99循环系统J18.9未特指的肺炎→ 类目J18→ 第 10 章J00–J99呼吸系统这一结构与 OpenMed grounding 模块的代码实现完全吻合在 icd10cm_loader.py 中官方码的校验模式被定义为ICD10CM_CODE_PATTERN r[A-Z][0-9]{2}(?:\.[A-Z0-9]{1,4})?即1 个字母 2 位数字的类目后可跟点号与 1~4 位字母/数字子类目。注释明确说明点号后的扩展位可能含字母例如第七位遭遇情景扩展码所以模式不把扩展位限制为纯数字。同一个文件还把ICD10CM_SYSTEM_URI钉为 FHIR 标准的http://hl7.org/fhir/sid/icd-10-cm见 systems.py 中的系统注册表这与 SKILL 工作流第 6 步要求产出的{system: http://hl7.org/fhir/sid/icd-10-cm, code, display}编码片段一一对应。章路由与 NER 标签的映射示例coding-icd10 技能与 OpenMed 的 疾病/病理 NER 模型 配合使用时可按临床主题做如下直觉映射来自参考文档的思路 OpenMed 的 Icd10cmLinker 支持CONDITION、DISEASE、PATHOLOGY、CANCER标签的事实诊断片段主题典型标签路由章章码范围肺炎、哮喘、COPD 急性加重DISEASE/CONDITION第 10 章 呼吸系统J00–J992 型糖尿病、甲减DISEASE第 4 章 内分泌E00–E89高血压、心衰、卒中CONDITION第 9 章 循环系统I00–I99乳腺癌、结肠癌CANCER第 2 章 肿瘤C00–D49抑郁症、痴呆CONDITION第 5 章 精神行为F01–F99急性阑尾炎、胃溃疡DISEASE第 11 章 消化系统K00–K95注意第 18 章R00–R99是症状与异常所见章当病案只记录了症状如发热、咳嗽而未明确诊断时候选码往往落在这里——这也是特异性规则中宁可标记 documentation insufficient也不要硬套 .9 未特指码的典型场景。ICD-10-PCS 节住院手术首字符ICD-10-PCS 是独立的 7 位字符手术编码系统与诊断用的 ICD-10-CM 完全不同。路由 PCS 时看首字符定位到节section字符节0内科与外科Medical and Surgical1产科Obstetrics2置入Placement3给药Administration4测量与监测Measurement and Monitoring5体外或全身辅助与支持Extracorporeal or Systemic Assistance and Performance6体外或全身治疗Extracorporeal or Systemic Therapies7整骨疗法Osteopathic8其他操作Other Procedures9脊柱按摩疗法ChiropracticB影像ImagingC核医学Nuclear MedicineD放射治疗Radiation TherapyF物理康复与诊断听力学Physical Rehabilitation and Diagnostic AudiologyG精神健康Mental HealthH物质滥用治疗Substance Abuse TreatmentX新技术New TechnologyCM 与 PCS 的分工边界参考文档的 Notes 部分明确划定了三条边界成文时必须牢记ICD-10-CM 诊断码门诊与住院通用ICD-10-PCS 仅住院手术码。二者用途不可互换。门诊手术由CPT/HCPCS覆盖而 CPT 是AMA 许可的受限码表——不在本技能范围内如需使用须在用户自己的 AMA 许可下另行获取。OpenMed 的 grounding 系统注册表systems.py把cpt明确列入RESTRICTED_SYSTEMS在 api.py 中请求cpt会直接抛出RestrictedVocabularyError从代码层面杜绝把受限码表混入本地流程。GEMsGeneral Equivalence Mappings通用等价映射用于 ICD-9 ↔ ICD-10 交叉对照是近似、多对多的映射绝不能把 GEM 命中当作精确、可计费的映射详见下文专节。实战把章路由嵌入 OpenMed 编码工作流SKILL.md 给出了完整的 6 步工作流章路由是其中承上启下的第 2 步抽取用 OpenMed 的 Disease/Pathology 模型抽取诊断/手术片段路由到章依据片段的临床主题和章范围表内分泌 → E00–E89、循环 → I00–I99……缩小搜索空间并暴露明显错配检索在本地 CMS 码表或 NLM 术语 API 中按文本检索候选码套用特异性规则在理由中说明侧别laterality、急性/慢性、就诊环节episode of care、with/due to 组合码、code first / use additional code 注释并标记病案缺失的、可计费码所必需的细节排序给出前几个候选码附理由和细节缺失警示而非自动选定单一码输出产出{system: http://hl7.org/fhir/sid/icd-10-cm, code, display}标记status: needs-coder-review并携带 OpenMed 源文偏移量start/end。路径 A本地加载 CMS 公开码表ICD-10-CM/PCS 是公共领域数据CMS 每年免费发布完整码文件、增补与索引许可证无壁垒这与受限的 CPT 完全不同。一次性下载后即可本地检索# CMS 发布 order/addenda 文件将其加载为 code-description 表。 # 列位code不带点description显示时自行插入点号。 icd10cm {} # E1122 - Type 2 diabetes mellitus with diabetic chronic kidney disease with open(icd10cm_order_2025.txt, encodinglatin-1) as fh: for line in fh: code line[6:13].strip() billable line[14] 1 # 1 valid billable code long_desc line[77:].strip() if billable: icd10cm[code] long_desc def search_local(term: str, limit: int 5): t term.lower() hits [(c, d) for c, d in icd10cm.items() if t in d.lower()] return sorted(hits, keylambda cd: len(cd[1]))[:limit]这与 OpenMed 的 Icd10cmLoader 的设计哲学一致加载器只读取调用方提供的发布文件绝不自行下载、嵌入或再分发 ICD-10-CM 内容模块文档与ICD10CM_LICENSE_NOTE均明确声明。加载器支持目录、zip 归档、以及 CSV/TSV/JSON/JSONL 投影便于离线部署与合成测试。路径 BFHIR 术语服务器 / NLM Clinical Tables API若本地无码表也可走托管 ICD-10-CM 的公开 FHIR 术语服务例如 NLM Clinical Tables 端点或自建的 HAPI/Ontoserverimport requests # NLM Clinical Tables公开、免密钥——ICD-10-CM 自动补全/检索 def search_icd10cm(term: str, count: int 7): r requests.get( https://clinicaltables.nlm.nih.gov/api/icd10cm/v3/search, params{sf: code,name, terms: term, maxList: count}, timeout10, ) r.raise_for_status() _total, codes, _extra, display r.json() return list(zip(codes, [d[1] for d in display])) # [(code, name), ...] print(search_icd10cm(type 2 diabetes nephropathy))从 OpenMed 的 analyze_text 接手诊断片段openmed.analyze_text(..., output_formatdict)返回的entities中每条包含text、label、confidence、start、end。SKILL.md 给出的接管代码把章路由与检索串成一条流水线import openmed note Assessment: type 2 diabetes with diabetic nephropathy; CAP. result openmed.analyze_text( note, model_namedisease_detection_superclinical, # Disease category output_formatdict, ) DX_LABELS {DISEASE, CONDITION, PATHOLOGY} for ent in result[entities]: if ent[label] in DX_LABELS: candidates search_icd10cm(ent[text], count5) print(ent[text], ent[start], ent[end], f(conf {ent[confidence]:.2f}) -, candidates) # surface as SUGGESTIONS for a coder — never auto-bill两个隐私与追溯要点只把 OpenMed 的start/end偏移量随候选码一并保留让编码员能跳到原文精确定位支持语句建议日志中只存偏移量与码绝不存原始病历文本。源码纵深OpenMed 本地的 ICD-10-CM 加载与链接原理章路由表在 OpenMed 中并非孤立的纸面文档——grounding 子系统的两个核心文件把它落成了可执行能力。加载器层级、计费状态与词法索引icd10cm_loader.py 的Icd10cmCode数据类在解析时同时保留层级与计费状态dataclass(frozenTrue) class Icd10cmCode: code: str display: str billable: bool parent: str | None None category_path: tuple[str, ...] () # (A00, A00.1) 这类根到叶路径 aliases: tuple[str, ...] ()category_path给出从三位类目到当前码的完整祖先路径类目A00只有单元素路径而A00.1的路径为(A00, A00.1)——这正是章 → 类目 → 子类目层级在代码中的直接体现resolve()L257-L314返回按分数排序的ConceptMatch并在分数相同时让可计费的叶码排在类目头之前随后依次是更特异的码、字典序更小的码is_valid_code(code, billable_onlyTrue)/is_billable_code(code)区分类目头有效但不可计费与可计费叶码供导出前做最后闸门ancestors()/children()/descendants()提供层级遍历便于实现第 4 章内 E11 类目下所有子码这类查询。链接器点号格式化与叶码优先linkers/icd10cm.py 的Icd10cmLinker专为诊断片段设计在共享的VocabLinker基座上做了两点 ICD-10 特有处理class Icd10cmLinker(VocabLinker): system ICD10CM key icd10cm required_label CONDITION compatible_labels frozenset({CANCER, DISEASE, PATHOLOGY}) def _format_code(self, code: str) - str: code str(code).strip().upper() if . in code or len(code) 3: return code # ICD-10-CM: 3-character category, then a dot, then the subcategory. return f{code[:3]}.{code[3:]}点号格式化E119→E11.93 位类目 点号 子类目排序偏好分数降序然后优先更长的即更特异的可计费叶码再按码的字典序做确定性平局裁决——对应_rank_key中的(-candidate.score, -specificity, candidate.code)。单元测试 test_linker_icd10cm.py 从行为上验证了上述原则可作为章路由 叶码优先的可复现基准linker.link(type 2 diabetes mellitus)[0].code E11.9可计费叶码优先于E11类目linker.link(high blood pressure)[0].code I10同义词命中linker.link(type 2 diabetes mellitus with hyperglycemia)[0].code E11.65更长子类目格式化正确非CONDITION/DISEASE类标签如DATE会被标签闸门直接拦截返回空列表。测试所用的样例数据位于 tests/fixtures/clinical/grounding/icd10cm_sample.jsonlGolden 评测语料见 openmed/eval/golden/grounding/icd10cm.jsonl均可作为自建本地码表的格式参照。特异性规则与组合码路由之后的精细决策章路由只是把候选集缩小到正确的章真正的编码质量取决于章内选码。SKILL.md 归纳的规则在写 rationale 时必须逐条检查侧别laterality许多肌肉骨骼、眼耳类码要求左右侧病案未写侧别时不要臆造标记为文档不足以选特异码急性/慢性同一疾病在 ICD-10-CM 中往往按急性/慢性/亚急性拆分如I21急性心梗 vsI25慢性缺血性心脏病就诊环节episode of care第七位字符扩展常编码初诊、后续、后遗症等环节组合码combination codes一个码打包多个相关状况。例如E11.22 2 型糖尿病伴糖尿病慢性肾病此时不得拆成两个独立码让检索结果自然暴露组合码code first / use additional code / Excludes1 / Excludes2这些排序注释决定哪些码可以/必须共存应作为给编码员的 rationale 一并携带未特指码.9很多可计费码要求的细节病案并未记载。优先标记文档不足以选特异码而不是硬套.9。在 OpenMed grounding 流水线中这些上下文可以被结构化地传入ground() 接受canonical_label、assertion否定/时态/确定性、section病历小节等字段RerankContext携带小节与断言信息参与排序GroundedSpan结果保留源偏移量与断言上下文供后续 FHIR/OMOP 导出时做确定性还原。GEMs 交叉映射近似、多对多、不可直接计费参考文档对 GEMs 的定性是近似、多对多、有损其原始用途是帮助理解 ICD-9 ↔ ICD-10 之间的对应关系例如用于历史数据迁移、纵向研究对齐而非直接出账。正确姿势是把 GEM 命中当作起点提示随后在 ICD-10 侧重新做章路由与特异性校验任何 GEM 结果都不应作为可计费映射直接提交。OpenMed 的交叉映射实现见 crosswalk.py它支持ICD10CM ↔ SNOMEDCT双向映射并强制要求调用方提供本地的 UMLSMRCONSO/MRMAP文件UMLS 是受限词表代码中没有默认数据源、没有下载客户端、不捆绑词表内容。需要 ICD-10-CM 精确词级落库时优先使用前述 icd10cm 加载器 的本地发布文件路径。年度更新与版本钉扎ICD-10 码每年变更一次财政年度从 10 月 1 日开始。参考文档与 SKILL 均强调加载码表时钉住文件年份如上面的icd10cm_order_2025.txt对应 FY2025并每年 10 月刷新记录产出该建议所用的版本——OpenMed 的VocabLoader在离线/本地模式下通过snapshot_provenance输出词表快照系统、URI、内容哈希ground_payload的响应契约api.py中schema_version、snapshots、results三件套即为版本追溯的落地形态参考文档的章范围表标注为 FY2025使用前请与当前财政年度的 CMS 官方文件核对。边界与合规要点小结把参考文档、SKILL 与源码中的约束合并落地时的红线如下Human-in-the-loop 是强制项ICD-10-CM 编码具有法律与财务权重输出候选 rationale最终可计费码由持证编码员指定任何建议都不得呈现为已授权的索赔claim。许可证边界ICD-10-CM/PCS 是公共领域CMS 发布不引入 CPT/HCPCS 或其他需 AMA 许可的专有码映射——受限词表由用户自行提供、进程外使用OpenMed 在代码层面对cpt直接抛错拒绝。Local-first 隐私OpenMed NER 全程在设备/本地运行若使用 NLM API 检索只发送去标识化后的诊断字符串不发送任何 PHI。上游衔接需要临床语义SNOMED CT编码时参考 mapping-to-snomed 技能需要把 ICD-10-CM 码进一步归并为 CMS-HCC 风险类别、估算 RAF 分数时参考 coding-hcc-risk-adjustment 技能——后者明确先出 ICD-10-CM 码再归并 HCC的调用顺序。至此从 FY2025 章范围表出发你已经掌握了章路由 → 章内候选检索 → 特异性校验 → 带理由输出 → 人工复核的完整链路以及 OpenMed 在加载器、链接器、测试与评测语料四个层面提供的源码级支撑。把它与 coding-icd10 技能 配合即可在本地搭建一条合规、可追溯、可审计的 ICD-10 编码决策支持流水线。【免费下载链接】openmedLocal-first healthcare AI: clinical NER HIPAA PII de-identification that runs 100% on-device. 2,200 medical models, 21 languages, Apple MLX Python, no cloud, no patient data leaving your network. Apache-2.0项目地址: https://gitcode.com/GitHub_Trending/ope/openmed创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考