web-dev-qa-db-fra.com

Liste de codes ICD-9 au format XML, CSV ou base de données

Je recherche une liste complète des codes de la CIM-9 (codes médicaux) pour les maladies et les procédures dans un format qui peut être importé dans une base de données et référencé par programme. Ma question est fondamentalement exactement la même que Recherche de ressources pour les codes de la CIM-9 , mais l'affiche originale a négligé de mentionner où exactement "il a obtenu" sa liste complète.

Google n'est certainement pas mon ami ici, car j'ai passé de nombreuses heures à rechercher le problème et à trouver de nombreuses listes de types de texte riche (comme le CDC) ou des sites Web où je peux explorer la liste complète de manière interactive, mais je ne trouve pas où obtenir la liste qui remplirait ces sites Web et peut être analysée dans une base de données. Je crois que les fichiers ici ftp://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD9-CM/2009/ ont ce que je recherche, mais les fichiers sont au format texte riche et contiennent beaucoup de déchets et de mise en forme qui seraient difficiles à supprimer avec précision.

Je sais que cela a dû être fait par d'autres et j'essaie d'éviter de dupliquer les efforts des autres, mais je ne trouve tout simplement pas de liste xml/CSV/Excel.

31
TJ.

Après avoir supprimé le RTF il n'a pas été trop difficile d'analyser le fichier et de le transformer en CSV. Mes fichiers analysés résultants contenant tous les codes 2009 de la CIM-9 pour les maladies et les procédures sont ici: - http://www.jacotay.com/files/Disease_and_ProcedureCodes_Parsed.Zip Mon analyseur que j'ai écrit est ici: http://www.jacotay.com/files/RTFApp.Zip Fondamentalement, il s'agit d'un processus en deux étapes - prenez les fichiers du site FTP du CDC et supprimez-les RTF, puis sélectionnez les fichiers sans RTF et analysez-les dans les fichiers CSV. Le code ici c'est assez difficile car je n'ai eu besoin de sortir les résultats qu'une seule fois.

Voici le code de l'application d'analyse au cas où les liens externes tomberaient (retour à un formulaire qui vous permet de sélectionner un nom de fichier et de cliquer sur les boutons pour le faire fonctionner)

Public Class Form1

Private Sub btnBrowse_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnBrowse.Click
    Dim p As New OpenFileDialog With {.CheckFileExists = True, .Multiselect = False}
    Dim pResult = p.ShowDialog()
    If pResult = Windows.Forms.DialogResult.Cancel OrElse pResult = Windows.Forms.DialogResult.Abort Then
        Exit Sub
    End If
    txtFileName.Text = p.FileName
End Sub

Private Sub btnGo_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnGo.Click
    Dim pFile = New IO.FileInfo(txtFileName.Text)
    Dim FileText = IO.File.ReadAllText(pFile.FullName)
    FileText = RemoveRTF(FileText)
    IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_fixed" & pFile.Extension), FileText)

End Sub


Function RemoveRTF(ByVal rtfText As String)
    Dim rtBox As System.Windows.Forms.RichTextBox = New System.Windows.Forms.RichTextBox

    '// Get the contents of the RTF file. Note that when it is
    '// stored in the string, it is encoded as UTF-16.
    rtBox.Rtf = rtfText
    Dim plainText = rtBox.Text

    Return plainText
End Function


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    Dim pFile = New IO.FileInfo(txtFileName.Text)
    Dim FileText = IO.File.ReadAllText(pFile.FullName)
    Dim DestFileLine As String = ""
    Dim DestFileText As New System.Text.StringBuilder

    'Need to parse at lines with numbers, lines with all caps are thrown away until next number
    FileText = Strings.Replace(FileText, vbCr, "")
    Dim pFileLines = FileText.Split(vbLf)
    Dim CurCode As String = ""
    For Each pLine In pFileLines
        If pLine.Length = 0 Then
            Continue For
        End If
        pLine = pLine.Replace(ChrW(9), " ")
        pLine = pLine.Trim

        Dim NonCodeLine As Boolean = False
        If IsNumeric(pLine.Substring(0, 1)) OrElse (pLine.Length > 3 AndAlso (pLine.Substring(0, 1) = "E" OrElse pLine.Substring(0, 1) = "V") AndAlso IsNumeric(pLine.Substring(1, 1))) Then
            Dim SpacePos As Int32
            SpacePos = InStr(pLine, " ")
            Dim NewCode As String
            NewCode = ""
            If SpacePos >= 3 Then
                NewCode = Strings.Left(pLine, SpacePos - 1)
            End If

            If SpacePos < 3 OrElse Strings.Mid(pLine, SpacePos - 1, 1) = "." OrElse InStr(NewCode, "-") > 0 Then
                NonCodeLine = True
            Else
                If CurCode <> "" Then
                    DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
                    DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
                    DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
                    CurCode = ""
                    DestFileLine = ""
                End If

                CurCode = NewCode
                DestFileLine = Strings.Mid(pLine, SpacePos + 1)
            End If
        Else
            NonCodeLine = True
        End If


        If NonCodeLine = True AndAlso CurCode <> "" Then 'If we are not on a code keep going, otherwise check it
            Dim pReg As New System.Text.RegularExpressions.Regex("[a-z]")
            Dim pRegCaps As New System.Text.RegularExpressions.Regex("[A-Z]")
            If pReg.IsMatch(pLine) OrElse pLine.Length <= 5 OrElse pRegCaps.IsMatch(pLine) = False OrElse (Strings.Left(pLine, 3) = "NOS" OrElse Strings.Left(pLine, 2) = "IQ") Then
                DestFileLine &= " " & pLine
            Else 'Is all caps Word
                DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
                DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
                DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
                CurCode = ""
                DestFileLine = ""
            End If
        End If
    Next

    If CurCode <> "" Then
        DestFileLine = Strings.Replace(DestFileLine, ",", "&#44;")
        DestFileLine = Strings.Replace(DestFileLine, """", "&quot;").Trim
        DestFileText.AppendLine(CurCode & ",""" & DestFileLine & """")
        CurCode = ""
        DestFileLine = ""
    End If

    IO.File.WriteAllText(Replace(pFile.FullName, pFile.Extension, "_parsed" & pFile.Extension), DestFileText.ToString)
End Sub

Fin de classe

11
TJ.

Centers for Medicaid & Medicare services fournit des fichiers Excel qui contiennent uniquement les codes et le diagnostic, qui peuvent être importés directement dans certaines bases de données SQL, sans conversion.

Fichiers Excel zippés, par numéro de version

(Mise à jour: nouveau lien basé sur le commentaire ci-dessous)

22
chris

Le Center for Medicare Services (CMS) est en fait chargé de l'ICD, donc je pense que les versions CDC auxquelles vous faites référence peuvent être simplement des copies ou des copies retraitées. Voici la page (~ difficile à trouver) de l'assurance-maladie qui, je pense, contient les données brutes originales ("source de vérité").

http://www.cms.gov/Medicare/Coding/ICD9ProviderDiagnosticCodes/codes.html

Il semblerait que la dernière version soit la v32. Le fichier Zip que vous téléchargez contiendra 4 fichiers en texte brut qui mappent le code à la description (un fichier pour chaque combinaison de DIAG | PROC et SHORT | LONG). Il contient également deux fichiers Excel (un pour DIAG_PROC chacun) qui ont trois colonnes afin de mapper le code sur les deux descriptions (longues et court).

5
Benny

De toute évidence, un fil très ancien, mais j'ai récemment entrepris cette tâche et l'ai écrit ici avec des liens vers les données source -

http://colinwhite.net/dropplets/ICD

J'essayais d'obtenir à la fois la CIM-9 et la CIM-10 dans une base de données SQLite.

Semble avoir bien fonctionné.

4
Colin

Vous pouvez obtenir les fichiers de code originaux RTF ici http://ftp.cdc.gov/pub/Health_Statistics/NCHS/Publications/ICD9-CM/2009/

3