Подтвердить что ты не робот

Ищете ресурсы для кодов ICD-9

Мы попросили клиента включить коды ICD-9 в систему.

Я ищу хороший ресурс, чтобы получить полный список кодов и описаний, которые попадут в базу данных SQL.

К сожалению, в веб-службе не может быть и речи, поскольку значительное количество времени, которое люди будут отключать, использует приложение.

Я нашел http://icd9cm.chrisendres.com/ и http://www.icd9data.com/, но не предлагает загрузки/экспорта данных, которые я мог найти.

Я также нашел http://www.cms.hhs.gov/MinimumDataSets20/07_RAVENSoftware.asp, который имеет базу данных кодов ICD-9, но они не в правильном формате, m не на 100% уверен, как правильно преобразовать (он показывает код 5566, который действительно 556.6, но я не могу найти правило о том, как/когда конвертировать код, чтобы включить десятичную).

Я отмечаю это с помощью медицинских данных и данных, так как я не уверен на 100% там, где это действительно должно быть помечено... любая помощь также будет оценена.

4b9b3361

Ответ 1

Я столкнулся с этой проблемой еще некоторое время назад и в итоге создал собственное решение с нуля. Недавно я открыл открытый 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

Просто хотел перезвонить, как исправить десятичные числа кода. Во-первых, необходимо рассмотреть четыре общих вопроса:

  • Стандартные коды имеют десятичное место XXX.XX
  • Некоторые коды Не имеют конечных десятичных знаков
  • V Коды также соответствуют формату XXX.XX → V54.31
  • E Коды следуют XXXX.X → E850.9

Таким образом, общая логика исправления ошибок:

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, для не E-кодов:

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).

Ответ 3

Наконец я нашел следующее:

"Поле для основных и других диагностических кодов ICD-9-CM имеет длину шесть символов, причем десятичная точка подразумевается между третьей и четвертой цифрами для всех кодов диагностики, отличных от V-кодов. Десятичное значение подразумевается для V кодов между второй и третьей цифрой."

Таким образом, я смог получить полный список ICD-9 и переформатировать по мере необходимости.

Ответ 4

Я тоже долго боролся с этой проблемой. Лучший ресурс, который я смог найти для них, - это zip файлы здесь:

https://www.cms.gov/ICD9ProviderDiagnosticCodes/06_codes.asp

Это печально, потому что им (странно) не хватает десятичных знаков, но, как отметили несколько других плакатов, их добавление довольно просто, поскольку правила известны. Я смог использовать регулярное выражение на основе поиска и замены в текстовом редакторе, чтобы добавить их. Одна вещь, на которую следует обратить внимание, если вы идете по этому маршруту, состоит в том, что вы можете получить коды, имеющие конечный ".". но после него нет нуля. Это недействительно, поэтому вам может потребоваться пройти и сделать еще один поиск/замену, чтобы очистить их.

Досадная вещь о файлах данных в приведенной выше ссылке заключается в том, что нет никакой связи с категориями. Что вам может понадобиться в зависимости от вашего приложения. Я закончил тем, что взял один из файлов категорий на основе RTF, которые я нашел в Интернете, и переформатировал его, чтобы получить диапазоны каждой категории. Это все еще возможно в текстовом редакторе с некоторыми творческими регулярными выражениями.

Ответ 5

Вы можете обнаружить, что коды ICD-9 соответствуют следующему формату:

  • Все коды длиной 6 символов
  • Десятичная точка находится между 3-м и 4-м символами
  • Если код начинается с символа V, десятичная точка находится между вторым и третьим символами.

Проверьте это: http://en.wikipedia.org/wiki/List_of_ICD-9_codes

Ответ 6

Я смог использовать полезные ответы здесь, чтобы создать groovy script, чтобы децимализовать код и объединить длинные и короткие описания в список, разделенный вкладкой. Если это кому-то поможет, я включаю здесь свой код:

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"
        }
    }
}

Я надеюсь, что это поможет кому-то.

Шон