2009-10-05 14 views
11

Zostaliśmy poproszeni przez klienta o wprowadzenie kodów ICD-9 do systemu.Poszukuję zasobów dla kodów ICD-9

Szukam dobrego zasobu, aby uzyskać pełną listę kodów i opisów, które znajdą się w bazie danych SQL.

Niestety usługa internetowa nie wchodzi w rachubę, ponieważ przez pewien czas ludzie będą wyłączeni przy użyciu aplikacji.

Znalazłem http://icd9cm.chrisendres.com/ i http://www.icd9data.com/, ale żadne z nich nie oferuje pobierania/eksportu danych, które mogłem znaleźć.

Znalazłem także , który ma bazę kodów ICD-9, ale nie są one w odpowiednim formacie i nie jestem w 100% pewny, jak poprawnie przekonwertować (Pokazuje kod 5566, który jest naprawdę 556,6, ale ja nie mogę znaleźć reguły, jak/kiedy przekonwertować kod, aby zawierał dziesiętny)

Oznaczam to medycznymi i danymi, ponieważ nie jestem w 100% pewny, gdzie naprawdę powinien być oznaczony ... wszelka pomoc będzie również doceniona.

Odpowiedz

9

Wpadłem na ten sam problem jakiś czas temu i skończyło się budowaniem własnego rozwiązania od zera. Ostatnio, kładę się otwartego API dla kodów dla innych, aby użyć: http://aqua.io/codes/icd9/documentation

można tylko pobrać wszystkie kody w JSON (http://api.aqua.io/codes/beta/icd9.json) lub ciągnąć indywidualny kod (http://api.aqua.io/codes/beta/icd9/250-1.json). Wybranie jednego kodu daje nie tylko "przejście dla pieszych" ICD-10 (odpowiedniki), ale także kilka dodatkowych udogodnień, takich jak odpowiednie linki do Wikipedii.

+0

Dzięki Michael ... to będzie ogromna pomoc. Jak aktualizujesz listę? – Jason

+0

Wyciągam kody ICD-9 ze strony CDC. Kody ICD-10 pochodzą od WHO. Zwykle każdego roku publikują aktualizację CM. – Michael

+0

@michael To jest niesamowite! Będę w kontakcie. Chcę z Tobą porozmawiać o przyszłych planach tego API. –

4

końcu stwierdzono, co następuje:

„pola w zakresie głównych ICD-9 cm i inne kody diagnoza jest sześć znaków, z przecinku domniemanych pomiędzy trzecim i czwartym cyfrę wszystkich kodów diagnostycznych inne niż kody V. Wartość dziesiętna jest domniemana dla kodów V między drugą a trzecią cyfrą. "

Udało mi się zdobyć kompletną listę ICD-9 i sformatować ją zgodnie z wymaganiami.

2

Może się okazać, że ICD-9 kody mają następujący format:

  • Wszystkie kody są 6 znaków
  • Punkt dziesiętny pochodzi między 3 i 4 znaków
  • Jeśli kod rozpoczyna ze znakiem V punkt dziesiętny pochodzi między 2. i 3. znaków

to sprawdzić: http://en.wikipedia.org/wiki/List_of_ICD-9_codes

3

Ja też długo walczyłem z tym problemem. Najlepszym źródłem udało mi się znaleźć dla nich są pliki zip tutaj:

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

To niefortunne, ponieważ oni (dziwnie) brakuje miejsca po przecinku, ale jak kilka innych plakatów podkreśliło, dodając je jest dość łatwy, ponieważ zasady są znane. Byłem w stanie użyć wyrażenia regularnego "znajdź i zamień" w edytorze tekstu, aby je dodać. Jedną z rzeczy, na którą należy zwrócić uwagę, jeśli idziesz tą trasą, jest to, że możesz skończyć z kodami, które mają końcowe "." ale zero po tym. To nie jest poprawne, więc możesz potrzebować przejść i wykonać inne wyszukiwanie/zastąpienie, aby je wyczyścić.

Denerwujące w plikach danych w powyższym linku jest brak związku z kategoriami. Które mogą być potrzebne w zależności od aplikacji. Skończyło się na tym, że wybrałem jeden z plików kategorii opartych na RTF, które znalazłem online i ponownie sformatowałem, aby uzyskać zakresy każdej kategorii. Było to nadal możliwe do wykonania w edytorze tekstów z pewnymi kreatywnymi wyrażeniami regularnymi.

+0

CMS jest jedynym źródłem, z którego warto korzystać, ponieważ płaci za tak dużą część roszczeń, a prywatne rozliczenia następuje po CMS. – raider33

10

Po prostu chciałem podpowiedzieć, jak poprawić kod po przecinku. Po pierwsze, istnieją cztery główne punkty do rozważenia:

  1. kody standardowe mieć miejsca po przecinku xxx.xx
  2. Niektóre kody nie mają końcowe miejsca dziesiętne
  3. V Kody również zgodne z formatem xxx.xx -> V54.31
  4. Kody E śledzić xxxx.x -> E850.9

Zatem ogólna logika, jak naprawić błędy jest

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) 

I wdrożone to z dwóch instrukcji SQL UPDATE:
numer 1, dla non è kodów:

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' 

Numer 2 - dla kodów 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) != '' 

Wydawało się rade dla mnie (przy użyciu SQL Server 2008).

+0

Rozwiązanie Regex: kody zwykłe i E - "(E)? (\ D {3}) (\ d {1,2})", kody V: '(V) (\ d {2}) (\ d { 1,2})). Zastąp '$ 1 $ 2. $ 3' dla obu – Stetzon

1

Udało mi się wykorzystać pomocne odpowiedzi tutaj, stworzyć świetny skrypt, aby zdziesiątkować kod i połączyć długie i krótkie opisy w oddzielonej tabulatorami liście. Na wypadek, gdyby to pomogło komuś, dołączam tutaj mój kod:

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

Mam nadzieję, że to pomoże komuś.

Sean

Powiązane problemy