Monday, October 1, 2012

New in V30

The DRG definitions were finalized early this year, allowing us to ship products on September 28, 2012 instead of our usual target of the first week in October.

This is a quiet year for DRG version change. The only real DRG change we have to report is the addtion of two new HACs (see glossary), 13 and 14.

Probably also because of the impending switch from ICD9 to ICD10, there are no new or revised or deleted ICD-9-CM diagnosis codes for V30. There are also no revised or deleted ICD-9-CM procedure codes for V30 and only one new procedure code:

00.95    Injection or infusion of glucarpidase

For details, visit the CMS site:

https://www.cms.gov/Medicare/Coding/ICD9ProviderDiagnosticCodes/

Conversion from ICD9 codes for diagnoses and procedures to ICD10 codes is still coming, but it isn't here yet. We will continue to produce ICD10 versions of our products as an aid to cutting over.

Friday, September 28, 2012

V30 for ICD10

We have a pre-release of V30 for ICD10 codes in the works. We expect CMS to release a definitions manual in the next few weeks, at which point we can ensure that our implementation is correct.

We expect CMS to release their V30 ICD10 grouper early next year, 2013. We intend to release ours on or before February 1st, 2013.

Thursday, September 27, 2012

V30 Release Early

Since there were no changes to V30 in the past few weeks, our pre-release V30 is being promoted to a full release today. While the official release date will be October 1st this year, we expect to finish our internal validation and distribution today, at which point we will fill our standing orders. We will update our website and on-line store tomorrow.

Thanks for your patience.

Thursday, August 16, 2012

F30 Pre-Release

We have received a pre-release of F30 from our development group to accommodate a DRG Assignment Service (DAS) client who wanted to try out F30 ahead of its official release on October 1st, 2012.

We put the pre-release F30 through our basic validation process, upgraded our DAS system and have used it successfully.

We are in the process of finishing the internal F30 roll-out.

Barring changes from CMS or bug reports, this will become our official F30 release on October 1st, 2012.

Thursday, May 31, 2012

DRG Weights

QUESTION

How do I check the DRG weights in your software?

ANSWER

You can confirm our weights by cross-checking against the source:

http://www.herc.research.va.gov/resources/faq_f03.asp

Wednesday, May 2, 2012

Calling mhicd()

There is some confusion, partly caused by bad documentation on our part, about calling mhicd(), the function which gives you the short description of the specified ICD9cm code.


ORIGINAL EMAIL

I get the following error message when I try to compile the examples in DRGMAN.pdf.
        'mhicd' : function does not take 4 arguments...
Can it be that the version differs?



ANSWER


You are right, the example is wrong, it is missing the final argument. We will fix that as soon as we can.

The mhicd() function takes 5 arguments:

(1) which kind of code: D=diagnosis, P or S=procedure
(2) the file name to use as the ICD9 look up table
(3) the ICD9 code to be looked up
(4) the buffer into which to put the name
(5) the length of the buffer
 
So the examples should look like this:


Visual BASIC

Private Sub dx_Change(index As Integer)
    Dim retval As String * 24
   
    Call mhicd("d", _
        Command & "/icd9.tab", Me.dx(index).Text, retval, 23)
    Me.ddesc(index).Caption = retval
End Sub


C VERSION


    if ((i=mhicd("d","icd9.tab","56409",retval,23))) {
        printf("Error from mhicd(): %d\n",i);
    } else {
        printf("%s\n",retval);
    }

Tuesday, April 3, 2012

C-Callable Shared Object Version?

QUESTION

How do I figure out which version of the C-Callable Shared Object I am using?


ANSWER

There is no good way because as of this writing, April-2012, the C-Callable Shared Object's API is missing the usual method for retrieving this information.

Instead, to see if your shared object will support a given version, you have to use the errdesc() function, like so:

-------------------------sample code starts

/* declare the functions inside the shared object: */
char * mhdrg();
extern char * errdesc();

int main() {
    char * retval;
    char * p;
    char * a[RETURNED];
    char * expected;
    int i;

    /* call the grouper, store results in reval */
    retval = mhdrg(
        "f29",                  /* which DRG version you want */
        "/drbd/mnh/src/SWIG",   /* path to masks files */
        "1",                    /* discharge status */
        "49",                   /* patient age on admission */
        "2",                    /* patient sex (1=male, 2=female) */
        /* ICD DX codes */
        //"99679   25041   5859    2767    25051   36904   25061   3371    40290   2859                    ",
        "71500  Y",
        /* ICD procedure codes */
//       0123456012345601234560123456
//      "3942   3993   3995                                                                  ",
        "8134   8135   ",
        8,                      /* length of each ICD DX code */
        7                       /* length of each ICD procedure code */
    );

    /* if there was an error, alert the user */
    if (retval == NULL) {
        printf("M+H grouper argument or environment error: %s\n", errdesc());
        exit(-1);
    }

    /* show the raw return value */
    printf("Raw return value from mhdrg:\n%s\n\n",retval);

    /* deconstruct return from mhdrg() */
    p = strtok(retval,DELIM);
    for (i = 0; i < RETURNED && p != NULL; i++) {
        a[i] = p;
        p = strtok(NULL,DELIM);
    }

    puts("Deconstructed return value from mhdrg:");
    printf("rc=%s, mdc=%s, drg=%s, ovn=%s, weight=",a[0],a[1],a[2],a[3]);
    printf("%s, mean=%s, porm=%s\ndesc=%s\ndx flags:%s, px flags: %s\n",a[4],a[5],a[6],a[7],a[8],a[9]);

    /* last two return values are bit-strings of which ICD codes were
     * used in the grouping
     */

    puts("\nSignificant ICD codes:");
    p = a[8];
    for (i = 0; i < 32 && p[i] != '\000'; i++) {
        if (p[i] == '1') {
            printf(" * DX code %2d was used\n",(i+1));
        }
    }
    p = a[9];
    for (i = 0; i < 32 && p[i] != '\000'; i++) {
        if (p[i] == '1') {
            printf(" * Proc code %2d was used\n",(i+1));
        }
    }

    exit(0);
}