Long acting opioids greater than or equal to 120mg per day OME

PH3542 / 8609

OpenSAFELY

Jan 26, 2026

REGISTERING DOI...

OpenCodelists Phenotype
  1. Overview

    Codelist ID
    opensafely/long-acting-opioids-greater-than-or-equal-to-120mg-per-day-ome
    Version ID
    2261801e
    Coding System
    BNF codes
    Collections
    OpenCodelistPhenotype Library
    Tags
    No data
  2. Definition

    This codelist was taken from OpenCodelists, created by OpenSAFELY. We recommend viewing this Phenotype on the OpenCodelist website to view the most recent version.

    ##### User requirements A codelist is needed of all long acting opioids with an oral morphine equivalence (OME) of >\= 120mg - used for analgesia (any route) excluding cough suppression, motility, general anaesthesia, opiate use disorder - this is for a project looking at opioid prescribing for patients on hospital waiting lists.

    Sensitivity versus specificity

    Any opioid as a modified release formulation or transdermal patch with daily OME >\=120mg based on standard dosing.

    Relevant definitions or links to important reference sources

    Opioid equivalence - https://fpm.ac.uk/opioids-aware-structured-approach-opioid-prescribing/dose-equivalents-and-changing-opioids

    Existing relevant codelists

    Nil

    © University of Oxford for the Bennett Institute for Applied Data Science 2025. This work may be copied freely for non-commercial research and study.

  3. Methodology

    Search terms / synonyms / search strategy

    BigQuery used to identify relevant products from BNF data. dm+d data used to filter for modified release/patch versions as appropriate. Faculty of Pain Medicine OME conversions used to calculate daily OME - usual licensed dosing used to determine OME (for example morphine sulphate MR products licensed for twice a day administration (with exception of MXL) - so if prescribed 60mg tablet assume taking twice a day (120mg / day total) - or for MXL assume taking once a day so would be prescribed 120mg tablet to meet 120mg/day total.

      SELECT DISTINCT presentation_code as code, presentation as term
      FROM hscic.bnf p 
      INNER JOIN dmd.vmp vmp ON CONCAT(SUBSTR(p.presentation_code,0,9),'AA', SUBSTR(p.presentation_code,-2), SUBSTR(p.presentation_code,-2)) = vmp.bnf_code
      INNER JOIN dmd.vpi AS vpi ON vmp.id = vpi.vmp
      INNER JOIN dmd.ont AS ont ON vmp.id = ont.vmp
      INNER JOIN dmd.ontformroute AS route ON ont.form = route.cd
      WHERE
      ((vpi.ing = (60886004) AND route.descr LIKE '%modified-release.oral' AND p.presentation NOT LIKE '%MXL%' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=60) /* Morphine Sulfate MR oral preps [excluding MXL as 24hr] (strengths equal to or higher than 60mg) (ing code) */
      OR (vpi.ing = (60886004) AND route.descr LIKE '%modified-release.oral' AND p.presentation LIKE '%MXL%' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=120) /* MXL (strengths equal to or higher than 120mg) (ing code) */
      OR (vpi.ing = 387024006 AND route.descr LIKE '%modified-release.oral' AND p.presentation NOT LIKE '%Onexila%' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=40) /* Oxycodone MR oral preps [excluding Onexila as 24hr] (strengths equal to or higher than 40mg) (ing code) */
      OR (vpi.ing = 387024006 AND route.descr LIKE '%modified-release.oral' AND p.presentation LIKE '%Onexila%' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=80) /* Oxycodone MR oral preps [only Onexila as 24hr] (strengths equal to or higher than 80mg) (ing code) */
      OR (vpi.ing IN (441757005, 442699004,40755011000001109)  AND route.descr LIKE '%modified-release.oral' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=150) /* Tapentadol HCl/Phosphate MR oral preps (strengths equal to or higher than 150mg) (ing code) */
      OR (vpi.ing IN (386858008, 108505002) AND route.descr LIKE '%modified-release.oral' AND (p.presentation NOT LIKE '%Tradorec XL%' OR p.presentation NOT LIKE '%Zamadol 24hr%' OR p.presentation NOT LIKE '%Zydol XL%' OR p.presentation NOT LIKE '%Dromadol XL%') AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=600) /* Tramadol HCl/ Tramadol MR 12 hour oral preps (strengths equal to or higher than x) (ing code) */
      OR (vpi.ing IN (386858008, 108505002) AND route.descr LIKE '%modified-release.oral' AND (p.presentation LIKE '%Tradorec XL%' OR p.presentation LIKE '%Zamadol 24hr%' OR p.presentation LIKE '%Zydol XL%' OR p.presentation LIKE '%Dromadol XL%') AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=1200) /* Tramadol HCl/ Tramadol MR 24 hour oral preps (strengths equal to or higher than x) (ing code) */
      OR (vpi.ing IN (44508008, 387485001) AND route.descr LIKE '%modified-release.oral' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=12) /* Hydromorphone (strengths equal to or higher than 120mg) (ing code) */
      OR (vpi.ing IN (322538006, 387322000) AND route.descr LIKE '%modified-release.oral' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=600) /* Dihydrocodeine (strengths equal to or higher than 120mg) (ing code) */
      OR (vpi.ing = (387173000)  AND route.descr LIKE 'patch.transdermal' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=52.5) /* Buprenorphine patches (strengths equal to or higher than 52.5mg/hour) (ing code) */
      OR (vpi.ing = 373492002 AND route.descr = 'patch.transdermal' AND strnt_nmrtr_val/(COALESCE(strnt_dnmtr_val,1)) >=50)) /* Fentanyl patches (strengths equal to or higher than 50mcg/hour) (ing code) */
      GROUP BY code, term
    
    
    Inclusion criteria for codes

    Any modified release or transdermal opioid with daily OME >120mg/day (based on licensed dosing).

    Exclusion criteria for codes

    N/A

    Borderline cases

    N/A

  4. References

  5. Clinical Codelist

  6. API

    To Export Phenotype Details:

    FormatAPI
    JSON site_root/api/v1/phenotypes/PH3542/version/8609/detail/?format=json
    R Package

    # Download here

    library(ConceptLibraryClient)


    # Connect to API

    client = ConceptLibraryClient::Connection$new(public=TRUE)


    # Get details of Phenotype

    phenotype_details = client$phenotypes$get_detail(
     'PH3542',
     version_id=8609
    )

    Py Package

    # Download here

    from pyconceptlibraryclient import Client


    # Connect to API

    client = Client(public=True)


    # Get details of Phenotype

    phenotype_detail = client.phenotypes.get_detail(
     'PH3542',
     version_id=8609
    )

    To Export Phenotype Code List:

    FormatAPI
    JSON site_root/api/v1/phenotypes/PH3542/version/8609/export/codes/?format=json
    R Package

    # Download here

    library(ConceptLibraryClient)


    # Connect to API

    client = ConceptLibraryClient::Connection$new(public=TRUE)


    # Get codelist of Phenotype

    phenotype_codelist = client$phenotypes$get_codelist(
     'PH3542',
     version_id=8609
    )

    Py Package

    # Download here

    from pyconceptlibraryclient import Client


    # Connect to API

    client = Client(public=True)


    # Get codelist of Phenotype

    phenotype_codelist = client.phenotypes.get_codelist(
     'PH3542',
     version_id=8609
    )

  7. Version History

    Version IDNameOwnerPublish date
    Long acting opioids greater than or equal to 120mg per day OME ieuan.scanlon2026-01-26 23:21