A small proposal: Common Drug Codes

As mSupply has grown and it has become used across provinces within countries, and in the majority of countries in some regions, we think it’s time to put forward a proposal to provide a harmonised drug code that can be used for:

  • collation of reporting data across countries
  • electronic interchange of information (such as tenders and purchase orders) between suppliers and their customers.

Here’s a diagram of what we’re proposing (click it for the larger version).

The approach

  • This is strictly generics. If you want to define brand names, look somewhere else.
  • The main attributes of a common code
    • Unique
    • Unambiguous
  • We’re trying to keep it simple. The idea is to provide a unique identifier primarily to aid in answering questions like “How many Amoxycillin 250mg tabs were issued in 2010 in region X?”
  • The codes are somewhat human readable, so for common items you’ll know an item from it’s code.
  • We are not trying to store a hierarchy of categories or classifications in the code. Such (meta) information will be stored in other fields.
  • It allows for producing code128 barcodes that give a full product description by using AI (Application Identifiers) after the code
    • e.g. amo250tb(90)1000(17)141130(10)b23498 represents a Amoxycillin 250mg tabs/caps in a pack of 1000 with an expiry of 30th November 2014 (that’s the “141130” in yymmdd format) and a batch number of b23498
    • more options here

How will you maintain them?

  • We’ll keep a publicly accessible database of codes.
  • We will make a RESTful interface so anyone can get back a list of matching items when a query is submitted.
    • e.g.
      • “http://codes.msupply.org.nz/get/item/Amoxy” would return records that match “Amoxy”
      • “http://codes.msupply.org.nz/get/code/amo250tb” would return the one record that matches the code “amo250tb”

  • The database would have a single table with fields something like this:
    Field Notes
    Common_code that’s the bit we’re interested in here
    Item name e.g Amoxycillin 250mg tabs
    DDD Defined daily dose
    DDD factor How many of this item in a DDD
    ATC Code this is the most common ATC code
    ATC Codes other a comma separated list of other ATC code(s)
    WHO EDL classification.   in dot notation form e.g. 6.2.1
    Units i.e. what does “1” refer to? 1 tablet? 1 bottle [e.g. for eye drops]?
    Last modification date in timestamp format
    Notes Relevant information

  • We’ll make a pdf available too, so users can have an easy reference.
  • Is it tied to mSupply? No. We intend to get the ball rolling, and to make something usable to stop still-birth by committee. If in the future it catches on, we’d be happy to hand it over to an independent body. We maintain no copyright or anything ridiculous like that.


  • ATC codes won’t work as a common code as there are multiple codes for the same item when used for more than one therapeutic purpose
  • The database will have fields to store meta information about the item such as it’s ATC code, and it’s WHO EML list category.
  • Item code (the first three letters)
    • Usually the first three characters of the generic name, but can modify for disambiguation here too.
  • Strength
    • No decimal places
    • Must be 3 alphanumeric characters, so padding with leading zeroes if you don’t have a strength.
    • Can use units: e.g. amo03gsc would work for amoxycillin 3g sachets.
  • Code length:
    • The codes are always a minimum of 8 characters.
    • An eight character code is the same as a nine character code with a disambiguation character of zero (i.e. amo250tb = amo250tb0 )
  • Pack sizes and units
    • We’ve got a bit of work to do here. The basic idea is that we aren’t interested in pack sizes in the same way a supplier is. For reporting we only care how many amoxy tabs were issued, not what pack size they came in. And by “how many” we mean how many tablets, not how many packs.
    • There’s obviously a problem with the likes of creams and liquids, where it’s common to refer to a tube or a bottle, and not to the number of ml or gm of a the item.
    • We’re thinking to specify the units in a separate field, and software vendors should allow a “unit_factor” field for each batch which converts the pack size used back to grams or ml.
    • That said, we can see the need to an extension so you can specify a pack size to clearly identify a particular item- we’ll think about that a bit more. We’re tending towards using the bar coding spec above to specify pack sizes when needed. The trouble is that manufacturers tend to make a separate bar code for each pack size, which is good for them, but not so useful for trying to produce reports that collate data per item, irrespective of pack size supplied


Item Code
Amoxycillin 250mg tabs/caps amo250tb
Ampicillin 500mg injection amp500in
Amoxy/Clavulanic Acid 500/125mg tabs amc500tb
Chloramphenicol eye drops 0.5% cho005id01
Chloramphenicol ear drops cho000id02
Propranolol 10mg tabs pro010tb or pro010tb0
Prochlorperazine 10mg tabs pro010tb1

That’s all folks. Comments welcome below.

  1. that’s no "small" proposal; it's very far reaching.
    Wonder if you're familiar with the product codification developed by MSF (Doctors wthout Borders) and subsequently introduced with some changes) by the Intl Federation of the Red Cross (IFRC)
    grouping items by type of use (drugs, oral = DORA, drugs, injectables = DINJ ,.. followed by the molecule (generic name) and followed by an indication of strength and form. The IFRC catalog is online; for an example have a look at:

    perhaps this is of some use

    — paul · Aug 14, 03:51 am · #

  2. Hi Paul,
    Thanks for the comment.
    Please contact us directly if you’d like to continue this discussion in more detail.
    Having had a quick look at the IRC system, it is quite close to our proposal.
    Questions we have include
    • Having each code start with four letters for the form seems a little unwieldily. Sorting a list by code would group all items of the same form together- not especially useful.
    • If we were to adopt (say) the IRC's system:
      • how do we know it will be immutable?
      • Do they have process to handle any issues that arise?
      • Will they run (or allow us to run) servers that can be queried to return a code?
    We’d appreciate your thoughts.

    Craig · Aug 15, 04:04 am · #

  3. Hi,

    Good initiative as we use a lot of comparisons with other countries to determine how we are performing in terms of procurement and use.

    Please do let us how i can contribute to this development.

    — Apolosi Vosanibola · Oct 26, 02:10 am · #

Add a new comment....

Formatting: Textile help

Note: All comments are moderated- they will appear after being cleared by the web site moderator..