客户已要求我们将ICD-9代码合并到系统中。
我正在寻找一个很好的资源来获得最终将在SQL数据库中的代码和描述的完整列表。
不幸的是,网络服务是不可能的,因为相当多的时间人员将使用该应用程序离线。
我找到了http://icd9cm.chrisendres.com/和http://www.icd9data.com/,但都没有提供我能找到的数据的下载/导出。
我还发现http://www.cms.hhs.gov/MinimumDataSets20/07_RAVENSoftware.asp有一个ICD-9代码数据库,但它们格式不正确,我不能100%确定如何正确转换(它显示代码5566,这是真的556.6但我找不到关于如何/何时将代码转换为包含小数的规则
我用医疗和数据标记这个,因为我不是100%确定应该在哪里真正标记...任何帮助也会受到赞赏。
答案 0 :(得分:11)
想要了解如何更正代码小数位。首先,需要考虑四个要点:
因此,如何解决错误的一般逻辑是
If first character = E:
If 5th character = '':
Ignore
Else replace XXXXX with XXXX.X
Else If 4th-5th Char is not '': (XXXX or XXXXX)
replace XXXXX with XXX + . + remainder (XXX.XX or XXX.X)
(All remaining are XXX)
我用两个SQL Update语句实现了这个:
第1号,非电子代码:
USE MainDb;
UPDATE "dbo"."icd9cm_diagnosis_codes"
SET "DIAGNOSIS CODE" = SUBSTRING("DIAGNOSIS CODE",1,3)+'.'+SUBSTRING("DIAGNOSIS CODE",4,5)
FROM "dbo"."icd9cm_diagnosis_codes"
WHERE
SUBSTRING("DIAGNOSIS CODE",4,5) != ''
AND
LEFT("DIAGNOSIS CODE",1) != 'E'
2号 - 对于E代码:
UPDATE "dbo"."icd9cm_diagnosis_codes"
SET "DIAGNOSIS CODE" = SUBSTRING("DIAGNOSIS CODE",1,4)+'.'+SUBSTRING("DIAGNOSIS CODE",5,5)
FROM "dbo"."icd9_Diagnosis_table"
WHERE
LEFT("DIAGNOSIS CODE",1) = 'E'
AND
SUBSTRING("DIAGNOSIS CODE",5,5) != ''
似乎为我做了这个技巧(使用SQL Server 2008)。
答案 1 :(得分:9)
我前一段时间遇到了同样的问题,最终从头开始构建我自己的解决方案。最近,我提供了一个开放的API,供其他人使用的代码:http://aqua.io/codes/icd9/documentation
您只需下载JSON中的所有代码(http://api.aqua.io/codes/beta/icd9.json)或提取单个代码(http://api.aqua.io/codes/beta/icd9/250-1.json)。拉一个代码不仅可以为您提供ICD-10“人行横道”(等效),还可以提供一些额外的好处,例如相关的维基百科链接。
答案 2 :(得分:4)
我终于找到了以下内容:
“ICD-9-CM主要诊断代码和其他诊断代码的字段长度为6个字符,除V代码外的所有诊断代码的第3位和第4位之间都有小数点。小数表示为V代码在第二和第三位之间。“
因此,我能够获得完整的ICD-9列表,并根据需要重新格式化。
答案 3 :(得分:3)
您可能会发现ICD-9代码遵循以下格式:
答案 4 :(得分:3)
我自己也在这个问题上挣扎了很长时间。我能找到的最好的资源是这里的zip文件:
https://www.cms.gov/ICD9ProviderDiagnosticCodes/06_codes.asp
这很不幸,因为他们(奇怪地)缺少小数位,但正如其他几个海报所指出的那样,添加它们相当容易,因为规则是已知的。我能够在文本编辑器中使用基于“查找和替换”的正则表达式来添加它们。如果你走这条路线,要注意的一件事是你最终会得到一个尾随“。”的代码。但之后没有归零。这是无效的,所以你可能需要通过另一个查找/替换来清理它们。
上面链接中关于数据文件的令人讨厌的事情是与类别没有关系。根据您的应用程序,您可能需要哪些。我最终选择了一个我在网上找到的基于RTF的类别文件,并重新格式化它以获得每个类别的范围。在具有一些创造性正则表达式的文本编辑器中,这仍然是可行的。
答案 5 :(得分:1)
我能够在这里使用有用的答案,创建一个groovy脚本来对代码进行十进制化,并将长短描述组合成一个制表符分隔列表。如果这有助于任何人,我在这里包括我的代码:
import org.apache.log4j.BasicConfigurator
import org.apache.log4j.Level
import org.apache.log4j.Logger
import java.util.regex.Matcher
import java.util.regex.Pattern
Logger log = Logger.getRootLogger()
BasicConfigurator.configure();
Logger.getRootLogger().setLevel(Level.INFO);
Map shortDescMap = [:]
new File('CMS31_DESC_SHORT_DX.txt').eachLine {String l ->
int split = l.indexOf(' ')
String code = l[0..split].trim()
String desc = l[split+1..-1].trim()
shortDescMap.put(code, desc)
}
int shortLenCheck = 40 // arbitrary lengths, but provide some sanity checking...
int longLenCheck = 300
File longDescFile = new File('CMS31_DESC_LONG_DX.txt')
Map cmsRows = [:]
Pattern p = Pattern.compile(/^(\w*)\s+(.*)$/)
new File('parsedICD9.csv').withWriter { out ->
out.write('ICD9 Code\tShort Description\tLong Description\n')
longDescFile.eachLine {String row ->
Matcher m = row =~ p
if (m.matches()) {
String code = m.group(1)
String shortDescription = shortDescMap.get(code)
String longDescription = m.group(2)
if(shortDescription.size() > shortLenCheck){
log.info("Not short? $shortDescription")
}
if(longDescription.size() > longLenCheck){
log.info("${longDescription.size()} == Too long? $longDescription")
}
log.debug("Match 1:${code} -- 2:${longDescription} -- orig:$row")
if (code.startsWith('V')) {
if (code.size() > 3) {
code = code[0..2] + '.' + code[3..-1]
}
log.info("Code: $code")
} else if (code.startsWith('E')) {
if (code.size() > 4) {
code = code[0..3] + '.' + code[4..-1]
}
log.info("Code: $code")
} else if (code.size() > 3) {
code = code[0..2] + '.' + code[3..-1]
}
if (code) {
cmsRows.put(code, ['longDesc': longDescription])
}
out.write("$code\t$shortDescription\t$longDescription\n")
} else {
log.warn "No match for row: $row"
}
}
}
我希望这有助于某人。
肖恩