Having defined a list of ICD-9 codes with a collective meaning as a “policy,” we are now embarking on using the GEMs (downloaded from CMS.gov in part 5) to help build a policy translation system. The GEMs, by the way, can be used to underpin types of code translations other than policy translations, so be warned that we are not talking about any sort of GEM-based code translation now – only policy translation. We will get to other types later.
When you unzip the files you downloaded from CMS, you get two text files and some PDFs. We encourage you to read the PDFs. The two text files – one is a 10-to-9 map and the other a 9-to-10 map – are what we are going to be working with. Both have the same structure. Each line consists of a “source” code (followed by a blank for easy reading), a “target” code (again a blank), and five digits generally known as “the flags.”
In the 10-to-9 map, an ICD-10 code is the “source” and an ICD-9 code or cluster is the “target.” In the 9-to-10 map, an ICD-9 code is the “source” and an ICD-10 code or cluster is the “target.”
Pitfall #5: People think that if they “have” an ICD-9 code (for example, in their policy) then all they have to do is look it up in the 9-to-10 GEM and assume all the rows with that ICD-9 code as source will give all possible target ICD-10 alternatives that may be substituted in its place. The GEMs do not work that way. You can read the PDF Guides or mine as well as Rhonda Butler’s old blog posts to see why not. If you want to achieve the better-than-1% discrepancy rate for your policies (especially for groups of interrelated of policies), you’ll have to follow the more complicated recipes I’m giving you now.
Ignore the first three flags. The “approximate” flag doesn’t tell you anything you can use in your policy conversions. A GEM entry is an “exact match” – approximate flag 0 – only if the wording of the Tabular and Index entries for the source and target codes are identical or nearly so. This rarely happens, and when it does it just means there is absolutely nothing you have to do about it. Besides, what are you going to do when you only have one GEMs alternative between an ICD-10 code and ICD-9 (which happens 92% of the time for diagnoses, and 81% of the time for procedures) and it is not an “exact match?” It’s the only match in town, so the fact that it is not “exact” is a distinction without a difference. If the GEMs pairs ICD-10 code A with ICD-9 code B and nothing else, it is telling you that, in the informed and publically reviewed opinion of the Cooperating Parties, if a coder correctly codes a record in ICD-10, she will use A, and if ICD-9, she will most likely use B, and without scraping up the time and coding resources for a dual-coded record set you can use to test that assertion, this “approximate” one-to-one mapping is as good as you are going to get.
Pitfall #6: Getting hung up on the approximate flag (as I just did). Ignore it.
The next two flags are redundant. The “no map” flag shows up:
- In the 10-to-9 diagnosis map when the ICD-10 diagnosis is so new that ICD-9 never had a way to code it. The target will be “NoDx”
- In the 9-to-10 diagnosis map when the information in the ICD-9 code cannot be expressed without using an ICD-10 cluster. The target will be “NoDx”
- Not at all in the 10-to-9 procedure map
- In the 9-to-10 procedure map for ICD-9 “adjunct” codes that are not actually procedures and so cannot be used alone. The target will be “NoPCS”
In short, your programs can look for “NoDx” or “NoPCS” in the target and you don’t need the flag to detect it.
The “Combination” flag is only set when the fourth digit, “Scenario” is non-zero, so you don’t need the flag to detect that either.
So now we come to clusters. Go refill your coffee mug, because now you actually have to pay attention. I recommend that you load the GEMs into four tables:
- All the rows in the 10-to-9 map where scenario is zero, to be called the “10-to-9 singles” table. The columns are “I10code” and “I9code.” The table will have to be indexed on both columns because the ICD-10 code can be related to more than one ICD-9 code. Create a “reverse index”: first I9code then I10code. We’ll explain why later.
- All the rows in the 10-to-9 map where scenario is non-zero, to be called the “10-to-9 clusters” table. Columns are “I10code,” “Scenario,” ”Choices,” and “I9Code.” The table will have to be indexed on all four columns. We’ll explain what they mean when we get to the part of the process that uses this table.
- All the rows in the 9-to-10 map where scenario is zero, to be called the “9-to-10 singles” table. The columns are “I9code” and “I10code.” The table will have to be indexed on both columns because the ICD-9 code can be related to more than one ICD-10 code.
- All the rows in the 9-to-10 map where scenario is non-zero, to be called the “9-to-10 clusters” table. Columns are “I9code,” “Scenario,” ”Choices,” and “I10Code.” The table will have to be indexed on all four columns.
Now you’ve loaded the GEMs. Unless you have the codebooks memorized, you will probably want to link code titles to the codes. For the ICD-10 codes, I’ve already had you download the files you need. Commonly called the “order files” for reasons I won’t distract us with here, they both have the same structure. They include both headers and codes, distinguished by a 0 or 1 respective in column 15. Ignore the headers. The ICD-10 code is in columns 7-13. An abbreviated code title (up to 60 characters) is in columns 17-76 and a full code title is in column 78 through the end of the record.
ICD-9 code titles are available as free downloads from CMS. The file format is self-explanatory.
Now that you have the four GEMs tables linked up with code titles, let’s get down to the business of translating your policies.
Ron Mills is a Software Developer for the Clinical & Economic Research department of 3M Health Information Systems.
You can find the complete DIY ICD-10 series here.