验证ICD-10-CM

时间:2014-10-08 14:19:22

标签: c#

是否有人为ICD-10-CM编写了验证(正则表达式或其他)?

我对琐碎的解决方案(3-7字母数字)不感兴趣,我想知道如何处理第7位数要求的合并。

6 个答案:

答案 0 :(得分:7)

我没有为ICD-10-CM编写正则表达式,但我已经编写了一个查找引擎。您可以通过将official XML file解析为SQL数据库,并在数据库中搜索代码(如果未找到结果,代码无效)来执行相同操作。不幸的是,由于各种NDAs,我不能在这里发布我的代码,但做同样的事情应该是微不足道的。好处是,您只能获得有效的代码(而不是代码"外观"与ICD-10-CM一样但是无效,就像使用正则表达式一样)。

或者(我不推荐)你可以在一个简单的正则表达式上对XML文件本身进行全文搜索,但它会有错误(来自经验)。< / p>

答案 1 :(得分:6)

我刚为所有2016年ICD10代码编写了一个正则表达式:

/^[A-TV-Z]\d[0-9AB](?:\.([\dA-KXZ]|[\dA-KXZ][\dAX-Z]|[\dA-KXZ][\dAX-Z][\dX]|[\dA-KXZ][\dAX-Z][\dX][0-59A-HJKMNP-S]))?$/

这个正则表达式假设在第三个字符应该出现之后存在点; CDC使用省略的点分发代码列表。

在我关于ICD10代码结构的研究中,并未记录所有规则和陷阱。这个正则表达式是根据实际存在的代码构建的,因为在线发现ICD10结构的文档并不能说明整个故事。

第一个字符是alpha,除了U。

第二个字符是数字。

第三个字符是数字,A或B(最近添加了这些字母)。

代码长度超过3个字符的点(在任何代码规则描述中都不称为字符)。

第四个字符是数字或字母ABCDEFGHIJKXZ。

第五个字母是数字或字母AXYZ。

第六个字符是数字或X.

X作为占位符显示为第四个,第五个或第六个字符(但绝不是最后一个字符)。

第七个字符比任何参考建议都复杂。 A,D,s用于后遗症。某些其他代码集也有自己的扩展名;对于骨折,这些是ABCDEFGHJKMNPQRS,其中ADS仍表示后遗症但可能提供额外信息。存在在此位置使用数字01234的代码。

根本不是直截了当的。文档说明1 == right,2 == left,这通常是正确的。但是,3 ==双边,9 ==未指定(第5个字符)和0 ==未指定(第6个字符)并非总是如此。

有许多代码,其中偏侧性与其他东西一起表示,通常是肢体。在这些代码中,左,右,未指定用1,2,3表示; 4,5,6; 7,8,9代表另一个因素。使用0的双重非特定代码也可能存在。

此外,表达偏侧性的角色并不总是前六个角色的最后一个角色。

一些横向代码的描述暗示了另一个“其他”方面。

答案 2 :(得分:4)

ICD10实际上是一个代码树,其中可用代码是叶子,每个节点包含适用于自身和所有后代的元数据。

如其他答案中所述,某些代码可能看起来像ICD10代码但实际上无效。但是,它们确实包含了所有代码的平面列表

http://www.cdc.gov/nchs/icd/icd10cm.htm

此代码列表不包含~50个代码上的UTF-8编码字符, 比如

H81.01 Ménière's disease, right ear

包含非ascii字符,但包含所有69823 可用代码的说明。因此,您可以立即告知26*10*10*10*10*10*26的最大可能代码基数远大于69823,因此正则表达式正确。

为了获得所有第7个字符信息,需要解析XML并根据“规则”进行扩展。如果您正在寻找每个代码的元数据,那么平面代码文件就没有它。您将不得不为该元数据解析XML(或使用API​​等)

最好的例子是:

  <diag>
    <name>H40.11</name>
    <desc>Primary open-angle glaucoma</desc>
    <inclusionTerm>
      <note>Chronic simple glaucoma</note>
    </inclusionTerm>
    <sevenChrNote>
      <note>One of the following 7th characters is to be assigned to code H40.11 to designate the stage of glaucoma</note>
    </sevenChrNote>
    <sevenChrDef>
      <extension char="0">stage unspecified</extension>
      <extension char="1">mild stage</extension>
      <extension char="2">moderate stage</extension>
      <extension char="3">severe stage</extension>
      <extension char="4">indeterminate stage</extension>
    </sevenChrDef>
  </diag>

在XML解析中,要正确获取第7个字符,必须解析字符串One of the following 7th characters is to be assigned to code H40.11 to designate the stage of glaucoma并将代码H40.11展开到<extension>下的每个<sevenChrDef></>。因此,通过上面的示例,您将获得每个代码:

H40.11X0 Primary open-angle glaucoma, stage unspecified
H40.11X1 Primary open-angle glaucoma, mild stage
H40.11X2 Primary open-angle glaucoma, moderate stage
H40.11X3 Primary open-angle glaucoma, severe stage
H40.11X4 Primary open-angle glaucoma, indeterminate stage

X是一个'占位符',用于确保7个字符的代码长度。

情况变得更糟......

考虑以T64开头的代码分支:

<diag>
<name>T64</name>
<desc>Toxic effect of aflatoxin and other mycotoxin food contaminants</desc>
<sevenChrNote>
  <note>The appropriate 7th character is to be added to each code from category T64</note>
</sevenChrNote>
<sevenChrDef>
  <extension char="A">initial encounter</extension>
  <extension char="D">subsequent encounter</extension>
  <extension char="S">sequela</extension>
</sevenChrDef>
<diag>
  <name>T64.0</name>
  <desc>Toxic effect of aflatoxin</desc>
  <diag>
    <name>T64.01</name>
    <desc>Toxic effect of aflatoxin, accidental (unintentional)</desc>
  </diag>
  <diag>
    <name>T64.02</name>
    <desc>Toxic effect of aflatoxin, intentional self-harm</desc>
  </diag>
  <diag>
    <name>T64.03</name>
    <desc>Toxic effect of aflatoxin, assault</desc>
  </diag>...

T64不是叶节点,因此不可计费。但是,它仍然具有第7个字符元数据。这意味着您必须按其<sevenCharDef>ADS应用或“乘以”每个子代码,以获取代码:

T6401XA Toxic effect of aflatoxin, accidental (unintentional), initial encounter
T6401XD Toxic effect of aflatoxin, accidental (unintentional), subsequent encounter
T6401XS Toxic effect of aflatoxin, accidental (unintentional), sequela

T6402XA Toxic effect of aflatoxin, intentional self-harm, initial encounter
T6402XD Toxic effect of aflatoxin, intentional self-harm, subsequent encounter
T6402XS Toxic effect of aflatoxin, intentional self-harm, sequela

T6403XA Toxic effect of aflatoxin, assault, initial encounter
T6403XD Toxic effect of aflatoxin, assault, subsequent encounter
T6403XS Toxic effect of aflatoxin, assault, sequela

我们希望获得以JSON格式重新打印/补充ICD10代码的许可,其中每个代码都有明确的元数据,但在此之前,这是您最好的选择。

如果只需要确定ICD10代码的有效性,只需加载平面文件的第一列(以\r分隔)。

答案 3 :(得分:1)

问题是ICD10代码可以是三到七个字符。您可以根据行开头和行尾要求添加^和$。

这个适用于7个字符

[A-TV-Z]\d[0-9AB]\.[\dA-KXZ][\dAX-Z][\dX][0-59A-HJKMNP-S]

这个适用于6个字符

[A-TV-Z]\d[0-9AB]\.[\dA-KXZ][\dAX-Z][\dX]

等。完成的正则表达式在此处提供7,然后是6等三个字符:https://regex101.com/r/VYPHXZ/3位于工作测试网站上,下方位于文本中。

问题在于,正则表达式从未被设计为处理扩展操作码的数量。但这是可以完成的。从7到3,正则表达式是一组OR分组。如果你不熟悉捕获组,那么()中的任何内容都将默认为捕获组。通过使用?:,我选择覆盖此行为。在寻找“扩展代码”时总是首先寻找最长的一个,然后按长度的降序排列。

^(?:(?:[A-TV-Z]\d[0-9AB]\.[\dA-KXZ][\dAX-Z][\dX][0-59A-HJKMNP-S])|(?:[A-TV-Z]\d[0-9AB]\.[\dA-KXZ][\dAX-Z][\dX])|(?:[A-TV-Z]\d[0-9AB]\.[\dA-KXZ][\dAX-Z])|(?:[A-TV-Z]\d[0-9AB]\.[\dA-KXZ])|(?:[A-TV-Z]\d[0-9AB]\.)|(?:[A-TV-Z]\d[0-9AB]))$

答案 4 :(得分:0)

已经实施了ICD9几次,并且已经看过ICD10,据我所知ICD(9或10)从来都不是你可以用正则表达式完全检查的东西。当然,理论上,如果你知道所有的语言&#34;关键字&#34;你可以为它实现DFA,但它并不实用。

我写了一个快速查找功能(它是2006年的移动设备,所以SQL引擎当时有点慢)。只需在启动时将ICD数据库读入哈希表,并将其保留在那里,哈希查找的速度与DFA一样快。

FWIW我仍然拥有EMR引擎(并且拥有许可证)的源代码,但它在C ++中。它就像描述方法一样容易(如上所述)。

答案 5 :(得分:0)

COVID 诊断代码更新:字母“U”自 2020 年起生效。