2009-10-05 74 views
11

Chúng tôi đã được khách hàng yêu cầu kết hợp các mã ICD-9 vào một hệ thống.Tìm kiếm tài nguyên cho mã ICD-9

Tôi đang tìm một nguồn tài nguyên tốt để có được danh sách đầy đủ các mã và mô tả sẽ kết thúc trong cơ sở dữ liệu SQL.

Thật không may là một dịch vụ web không nằm trong số các câu hỏi vì số tiền hợp lý của những người sẽ bị mất thời gian sử dụng ứng dụng.

Tôi đã tìm thấy http://icd9cm.chrisendres.com/http://www.icd9data.com/ nhưng không cung cấp tải xuống/xuất dữ liệu mà tôi có thể tìm thấy. Tôi cũng tìm thấy http://www.cms.hhs.gov/MinimumDataSets20/07_RAVENSoftware.asp có cơ sở dữ liệu mã ICD-9 nhưng không đúng định dạng và tôi không chắc chắn 100% cách chuyển đổi đúng cách (Mã này hiển thị mã 5566 thực sự là 556.6 nhưng tôi không thể tìm thấy quy tắc về cách thức/thời điểm chuyển đổi mã để bao gồm một số thập phân)

Tôi đang gắn thẻ này với dữ liệu y tế và vì tôi không chắc chắn vị trí thực sự được gắn thẻ ... bất kỳ trợ giúp nào cũng sẽ được đánh giá cao.

Trả lời

9

Tôi đã gặp phải sự cố tương tự này trong khi quay lại và kết thúc xây dựng giải pháp của riêng tôi từ đầu. Gần đây, tôi đã tạo API mở cho các mã để người khác sử dụng: http://aqua.io/codes/icd9/documentation

Bạn chỉ có thể tải xuống tất cả các mã bằng JSON (http://api.aqua.io/codes/beta/icd9.json) hoặc kéo một mã riêng lẻ (http://api.aqua.io/codes/beta/icd9/250-1.json). Kéo một mã duy nhất không chỉ cung cấp cho bạn ICD-10 "crosswalk" (tương đương), mà còn thêm một số tính năng bổ sung, như liên kết Wikipedia có liên quan.

+0

Cảm ơn Michael ... đây sẽ là một trợ giúp lớn. Làm cách nào để bạn cập nhật danh sách? – Jason

+0

Tôi đang kéo các mã ICD-9 từ trang CDC. Mã ICD-10 là từ WHO. Mỗi người họ thường xuất bản bản cập nhật CM mỗi năm. – Michael

+0

@michael Thật tuyệt vời! Tôi sẽ liên lạc với bạn sau. Tôi muốn nói chuyện với bạn về các kế hoạch tương lai cho API này. –

4

cuối cùng tôi đã tìm thấy những điều sau đây:

"Các lĩnh vực cho chính ICD-9-CM và Codes Chẩn đoán khác là sáu ký tự, với điểm thập phân ngụ ý giữa các chữ số thứ ba và thứ tư cho tất cả các mã chẩn đoán khác với mã V. Chữ số thập phân được ngụ ý cho mã V giữa chữ số thứ hai và thứ ba. "

Vì vậy, tôi có thể nắm giữ danh sách ICD-9 hoàn chỉnh và định dạng lại theo yêu cầu.

2

Bạn có thể thấy rằng các mã ICD-9 theo các định dạng sau:

  • Tất cả các mã dài 6 ký tự
  • Các dấu thập phân đến từ ngày 3 ký tự thứ 4
  • Nếu mã bắt đầu với ký tự V, dấu thập phân xuất hiện giữa các ký tự thứ 2 và thứ 3

Kiểm tra điều này: http://en.wikipedia.org/wiki/List_of_ICD-9_codes

3

Tôi cũng phải vật lộn với vấn đề này trong một thời gian dài. Các nguồn tốt nhất mà tôi đã có thể tìm thấy cho đó là những file zip ở đây:

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

Đó là bất hạnh vì họ (kỳ quặc) đang thiếu chữ số thập phân, nhưng như một số áp phích khác đã chỉ ra, bổ sung chúng khá dễ dàng vì các quy tắc được biết đến. Tôi đã có thể sử dụng cụm từ thông dụng dựa trên "tìm và thay thế" trong trình soạn thảo văn bản của tôi để thêm chúng. Một điều cần lưu ý nếu bạn đi tuyến đường đó là bạn có thể kết thúc bằng các mã có dấu "." nhưng không có số không sau nó. Đó là không hợp lệ, vì vậy bạn có thể cần phải đi qua và làm khác tìm/thay thế để làm sạch những người lên.

Điều khó chịu về tệp dữ liệu trong liên kết ở trên là không có mối quan hệ với danh mục. Mà bạn có thể cần tùy thuộc vào ứng dụng của bạn. Tôi đã kết thúc bằng việc lấy một trong các tệp danh mục dựa trên RTF mà tôi đã tìm thấy trực tuyến và định dạng lại nó để có được phạm vi của từng danh mục. Điều đó vẫn có thể thực hiện được trong trình soạn thảo văn bản với một số cụm từ thông dụng sáng tạo.

+0

CMS chỉ là nguồn đáng sử dụng vì họ trả tiền cho một phần lớn các xác nhận quyền sở hữu và thanh toán riêng sau CMS. – raider33

10

Chỉ muốn kêu gọi cách sửa mã thập phân. Thứ nhất, có bốn điểm rộng để xem xét:

  1. mã tiêu chuẩn có Decimal nơi XXX.XX
  2. Một số Codes Đừng có đuôi chữ số thập phân
  3. V Mã cũng làm theo các định dạng XXX.XX -> V54.31
  4. E Codes theo XXXX.X -> E850.9

Như vậy logic chung về cách để sửa chữa các lỗi là

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) 

tôi thực hiện điều này với hai SQL Cập nhật báo cáo:
Số 1, cho Non E-mã:

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' 

Số 2 - Đối với E Codes:

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) != '' 

Dường như để làm các trick cho tôi (Sử dụng SQL Server 2008).

+0

Giải pháp Regex: Mã thông thường và E - '(E)? (\ D {3}) (\ d {1,2})', mã V: '(V) (\ d {2}) (\ d { 1,2}) '. Thay thế bằng '$ 1 $ 2. $ 3' cho cả hai – Stetzon

1

Tôi đã có thể sử dụng các câu trả lời hữu ích ở đây tạo một tập lệnh hấp dẫn để thập phân mã và kết hợp các mô tả dài và ngắn thành danh sách được phân tách bằng tab. Trong trường hợp điều này giúp mọi người, tôi bao gồm mã của tôi ở đây:

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

Tôi hy vọng điều này sẽ giúp ai đó.

Sean