What is the difference between BNF, dm+d and SNOMED CT codes?

At the time of writing there are three coding systems in use on OpenCodelists where you may see medicines available. In this blog, one of our resident pharmacists Brian MacKenna sets out some brief information on how we currently build medicines* codelists on OpenSAFELY. Very briefly, we build and agree our codelist using the pseudoBNF coding system and convert this to dm+d for use in study definitions.

It may also be useful for those who have ever wondered what the difference between dm+d, BNF and SNOMED CT codes is!


You can read a detailed description of the pseudoBNF codes and their structure on the OpenPrescribing blog. Briefly, this coding system is maintained by NHS Business Services Authority and is a by-product of NHS community pharmacy reimbursement mechanisms. It has a code for every medicine that has ever been reimbursed in primary care. Its hierarchical structure is human readable and relates to the old chapter structure of the British National Formulary, although the actual BNF has no responsibility for administration of these codes. The pseudoBNF structure makes it easy for clinicians experienced with the BNF to very quickly make comprehensive lists of medicines. Once the codelist has been built it is then converted to dm+d format, which is the coding system used in GP systems.

NHS Dictionary of Medicines and Devices (dm+d)

You can read a detailed description of the dm+d codes and their structure on the OpenPrescribing blog. Briefly, dm+d is the standard dictionary for the medicines and devices mandated for use across the NHS. In order to identify prescriptions issued by general practices in OpenSAFELY you must use a codelist in dm+d and the with_these_medications command. dm+d is not human readable nor does it have a clinically meaningful hierarchy which makes it difficult to quickly establish a medication codelist. Medicines in dm+d have a unique identifier, the same unique identifier used in SNOMED CT. We think of dm+d as a local UK extension** of SNOMED CT for medicines containing additional UK specific information for each medicine such as price.


SNOMED CT is an international standard for clinical terms and has comprehensive detailed codes for medicines. Importantly SNOMED CT is also an NHS standard and widely used across England. We use SNOMED CT to build codelists for clinical events using the command with_these_clinical_events, but we do not use it for prescriptions as general practices in England use the Electronic Prescription Service which mandates the use of dm+d to represent medications. If you build a SNOMED CT codelist of medicines and use with_these_clinical_events you may return some results but this will not be for prescriptions issued by the practice.

Get in touch!

If you have any questions or comments about this blog, or want to suggest a topic for a future blog, get in touch! bennett@phc.ox.ac.uk


Thank you to members of the OpenSAFELY user community, NHS Digital and NHS Business Services Authority for comments on an earlier version of this work.

*please see here for information on vaccines specifically

** This is not technically correct. There is a local UK SNOMED CT drug extension produced but this is derived from dm+d not directly from SNOMED CT itself. You can read more on this nerdy detail here.