Implantable device list - 2015 ONC MU3 a14


(Rachel Ellison) #1

Hi all, if no one else is currently working on item a14 “Implantable device list” I might take a first pass at it.

To get the conversation started:
Here is the list of Meaningful Use 3 Certification Criteria and test procedures:

For A14 Specifically they say:

  • A Unique Device Identifier (UDI) is a unique numeric or alphanumeric code that consists of two parts: (1) a device identifier (DI), a mandatory, fixed portion of a UDI that identifies the labeler and the specific version or model of a device, and (2) a production identifier (PI), a conditional, variable portion of a UDI that identifies one or more of the following when included on the label of a device: the lot or batch number within which a device was manufactured; the serial number of a specific device; the expiration date of a specific device; the date a specific device was manufactured; the distinct identification code required by 21 CFR 1271.290© for a human cell, tissue, or cellular and tissue-based product (HCT/P) regulated as a device. 21 CFR 801.3. See also
  • The health IT must be able to satisfy this criterion using the three UDI formats from the three issuing agencies. The allowable issuing agency formats and sample labels are available at:
  • The National Library of Medicine has made available a number of application program interfaces (APIs) to assist with the parsing of UDIs, to access GUDID data elements, and other functions related to UDIs. These APIs are available at: Note that if a developer certifies to this certification criterion using any of the NLM APIs to perform the function(s) required by this certification criterion, the developer must list the(se) API(s) as relied-upon software.
  • FDA accredits organizations to be issuing agencies for assignment of UDIs through an application process. The list of FDA-accredited agencies and the dates of their accreditations are listed at:
  • Paragraphs (a)(14)(i) and (a)(14)(ii)(A) may or may not be separate steps. The certified health IT must be able to record the UDIs for a patient. By record, we mean that the software must store the UDI in the patient’s record, whence it can later be retrieved by a user and displayed and used according to paragraphs (a)(14)(ii)-(vi). If the developer chooses to meet the recording requirement by parsing the UDI and storing it in that parsed state, then paragraph (a)(14)(ii)(A) could be demonstrated while demonstrating paragraph (a)(14)(i). By contrast, if the developer chooses to record the UDI in its unparsed state, it would have to separately demonstrate that it can parse the UDI as needed to perform the capabilities described in paragraphs (a)(14)(ii)-(vi).
  • ONC refers to FDA for best practices. For further recommendations on best practices for UDI downloads, please consult the FDA support resources for guidance:
  • Implantable Medical Devices are entered in a Procedure Activity Procedure section of the C-CDA 2.1. This section requires that a medical device is entered as an entry underneath the procedure it is related to. Thus, in the optimal case, the procedure is coded as the device is implanted or removed. In this case, ideal coding would include the detailed code that accurately reflects the procedure performed. However, for various reasons, it may not be possible at the time of the procedure or when coding a device after the actual procedure occurred to obtain a granular code reflecting the specific procedure performed. In this case, it is appropriate to either use a generic code or a null value to enter the UDI.
  • There are some examples on the C-CDA Examples Task Force webpage, available at: [ Site Disclaimers](, that highlight for implementers how the information may be coded.

The test procedure looks like it’s a “self declaration document” reviewed by a tester.

There are 3 UDI issuing agencies as of this post.
" GS1, Health Industry Business
Communications Council (HIBCC), and International Council for Commonality in Blood Banking
Automation (ICCBBA). Each issuing agency has a unique unique device identifier (UDI) format that was
reviewed and approved by FDA as part of the its process for accrediting issuing agencies. Any changes
to the format of the UDI by an issuing agency must be approved by FDA before implementation.
The below linked document gives information about the format and composition by each of the three UDI agencies.

The FDA maintains a databases of these UDIs called Global Unique Device Identification Database.(GUIDID)
It is updated daily and searchable here:

A database is updated daily and available for download here:

(Rachel Ellison) #2

Some more information on the GUDID database.

A new full release is created the first of every month. As of January 2020 the zip file is 227 MB with 2,398,867 device identifier records.

When you open the zip file you’ll find that the database is composed of .xml files. As of 1/1/20’s release there are 96 files in the latest release.

The naming convention is as follows.(Using file 31 as an example. The single digits do not use a leading zero e.g 1 vs 01)

Next let’s take a look at the file structure. I’m using Notepadd++ as my xml viewer.

(Rachel Ellison) #3

Instead of doing downloading the xml zip file, AccessGUDID offers “Delimited files” as well.

Available here is a zip file containing some txt files where the data is deliminated(separated) by the pipe character “|”

So you’ll want to download the zip file for the latest or next to latest release.

Then copy it to wherever your sql data is stored. If using xampp you’ll want to paste it in


Using winzip or zip or similar slect extract to a folder within the openemr folder, I called mine AccessGUDID_Delimited_Full_Release_20200101 by default.

The files have the following names and column names



PrimaryDI|sizeType|size (Unit)|size (Value)|sizeText

PrimaryDI|storageHandlingType|storageHandlingHigh (Unit)|storageHandlingHigh (Value)|storageHandlingLow (Unit)|storageHandlingLow (Value)|storageHandlingSpecialConditionText

This file is 1.3 Gigabytes, it’s too large for notepad and several other text editors to open.





Luckily for us, AccesGUDID provides a some information on how to import the data into several database systems.

Let’s take a look at the MySQL load data script.

(Rachel Ellison) #4

First download the import scripts.

In this zip file it contains 4 folders. Bad, data, discard, and mysql.

mysql’s folder has these scripts and a bat file to run them on a windows machine and .sh for linux.

The data folder contains these files.

They follow the same pattern as the delimited files but appear to be significantly shortened. I suppose to test that the data loader is working. You can probably delete these.

I think you want to put the mysql folder scripts into the xampp/mysql folder.

I had you put the delimited files into the data directory’s openemr folder but the webpage says to use the data directory.

Next open the “runner script” with the appropriate extension for your system using your editor of choice. It should now be in your mysql folder.
I’m using visual studio code… Chose the .bat file for windows .sh for other.

(Rachel Ellison) #5

Here’s an example of parameters you might fill out.

You can find your mysql database information in xampp by clicking on MySQL, config, and selecting the file my.ini.

If you’re running openemr locally you’ll want to give the ip address The database name is openemr.

It looks like this script is hardcoded to look for the data files to import in the folder above the one the .bat file is in, inside a folder called “data”. So I made a new folder in C:/xampp, called it “data” and copied the flat .txt files into it.

If you run into any issues, look in the log file described. The data is loaded into tables within the openemr database preceeded by the characteres “ag_”

I noticed that when it populates the ag_gmdn_terms table it’s defined as being a varchar(2000) data field but the definition appears to get cut off in the phpmyadmin view.

I notice running queries on a primary_di (product ID code) it’s pretty slow. Maybe try setting it to an index or primary key. Can be done manually in PHPmyAdmin structure tab by clicking the icon that looks like a gold key or with the following command:
“ALTER TABLE ag_gmdn_terms ADD PRIMARY KEY(primary_di);”

or this one:
“ALTER TABLE ag_gmdn_terms ADD INDEX(primary_di);”

When I tried to set primary key in ag_premarket_solutions I got the below duplicate error.


So for this table in particular, maybe try setting primary_di to index instead of primary key.