2022 CDC Clinical Practice Guideline for Prescribing Opioids Implementation Guide
2022.1.0 - CI Build

2022 CDC Clinical Practice Guideline for Prescribing Opioids Implementation Guide, published by Centers for Disease Control and Prevention (CDC). This guide is not an authorized publication; it is the continuous build for version 2022.1.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/opioid-cds-r4/ and changes regularly. See the Directory of published versions

PlanDefinition: Recommendation #10 - Urine Drug Testing (patient-view) (Experimental)

Official URL: http://fhir.org/guides/cdc/opioid-cds/PlanDefinition/opioidcds-10-patient-view Version: 2022.1.0
Draft as of 2024-04-22 Realm: United States of America flag Computable Name: PlanDefinition_Recommendation_10_Patient_View
Other Identifiers: cdc-opioid-guidance (use: official)

Usage:Clinical Focus: Chronic pain (finding), Clinical Focus: Subacute pain

Copyright/Legal: © CDC 2016+.

When prescribing opioids for subacute or chronic pain, clinicians should consider the benefits and risks of toxicology testing to assess for prescribed medications as well as other prescribed and nonprescribed controlled substances.

The 2022 CDC Clinical Practice Guideline for Prescribing Opioids for Pain is intended to improve communication between clinicians and patients about the benefits and risks of pain treatments, including opioid therapy; improve the effectiveness and safety of pain treatment; mitigate pain; improve function and quality of life for patients with pain; and reduce risks associated with opioid pain therapy, including opioid use disorder, overdose, and death. The recommendations do not apply to pain related to sickle cell disease or cancer or to patients receiving palliative or end-of-life care.

Id: opioidcds-10-patient-view
Url: Recommendation #10 - Urine Drug Testing (patient-view)
Version: 2022.1.0
Identifier:

value: cdc-opioid-guidance

Name: PlanDefinition_Recommendation_10_Patient_View
Title: Recommendation #10 - Urine Drug Testing (patient-view)
Status: draft
Experimental: true
Type:

system: PlanDefinitionType

code: eca-rule

display: ECA Rule

Date: 2024-04-22
Publisher: Centers for Disease Control and Prevention (CDC)
Description: When prescribing opioids for subacute or chronic pain, clinicians should consider the benefits and risks of toxicology testing to assess for prescribed medications as well as other prescribed and nonprescribed controlled substances.
Logic Definitions:
Library NameNamesequence
OpioidCDSCommon Active Ambulatory Opioid Rx 0
define "Active Ambulatory Opioid Rx":
    if Config."Can the implementing EHR support queries for past medications by date range?" then
      (
        "Get MedicationRequest Medication as Code"("Get Active Ambulatory Medication Requests"([MedicationRequest]))
      ) Rx
        where date from Rx.authoredOn 2 years or less on or before Today()
          and Rx.medication in "Opioid analgesics with ambulatory misuse potential"
    else
        List<FHIR.MedicationRequest>{}


Library NameNamesequence
OpioidCDSREC10PatientView Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions 1
define "Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions":
  Common."Active Ambulatory Opioid Rx" AmbulatoryOpioidPrescription
    where Routines."Is Subacute or Chronic Pain Prescription?"(AmbulatoryOpioidPrescription)


Library NameNamesequence
OpioidCDSREC10PatientView Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential 2
define "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential":
  exists ("Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions")


Library NameNamesequence
OpioidCDSRoutines Patient Age Less Than 18 3
define "Patient Age Less Than 18":
  if (Config."Age Less than 18 Years Is Enabled") then
    AgeInYearsAt(Today()) < 18
  else
    false


Library NameNamesequence
OpioidCDSRoutines Condition Positive for Sickle Cell 4
define "Condition Positive for Sickle Cell":
      if (Config."Sickle Cell Check Enabled") then
        exists(
            Common."Positive Sickle Cell Condition"
        )  else
        false


Library NameNamesequence
OpioidCDSCommon US Core-Categorized Conditions 5
// 3. Medications indicating end of life
    /* or exists (
      "Medications Indicating End of Life"
    ) */
define "US Core-Categorized Conditions":
  [Condition: category in "Encounter Diagnosis Condition Category"]
    union [Condition: category in "Problem List Condition Category"]
    union [Condition: category in "US Core Health Concern Condition Category"]


Library NameNamesequence
OpioidCDSRoutines Conditions Indicating End Of Life Present 6
define "Conditions Indicating End Of Life Present":
  exists (
    Common."US Core-Categorized Conditions" LLEC
      where LLEC.code in Common."Limited life expectancy conditions"
        and LLEC.clinicalStatus in Common."Active Condition"
  )


Library NameNamesequence
OpioidCDSRoutines Is Active Cancer Treatment? 7
define "Is Active Cancer Treatment?":
  if (Config."Active Cancer Treatment Encounters Condition Is Enabled") then
      "Has Two or More Encounters with Cancer Diagnosis During Encounter Period"
    else
      false


Library NameNamesequence
OpioidCDSRoutines Conditions Including Cancer To Exclude Opioid Management Indicating End-Stage Disease Present 8
define "Conditions Including Cancer To Exclude Opioid Management Indicating End-Stage Disease Present":
  if (Config."End-Stage Disease Criteria Enabled") then
    exists (
      Common."US Core-Categorized Conditions" EOLC
        where EOLC.code in Common."Conditions likely terminal for opioid prescribing"
          and EOLC.clinicalStatus in Common."Active Condition"
    )
  else
    false


Library NameNamesequence
OpioidCDSRoutines Is Opioid Review Useful? 9
define "Is Opioid Review Useful?":
  not "Patient Age Less Than 18"
    and not "Condition Positive for Sickle Cell"
    and not "Conditions Indicating End Of Life Present"
    and not "Is Active Cancer Treatment?"
    and not "Conditions Including Cancer To Exclude Opioid Management Indicating End-Stage Disease Present"


Library NameNamesequence
OpioidCDSREC10Common UDS Lookback Period 10
// Constants
define "UDS Lookback Period":
  Interval[Today() - 12 months - 1 days, Today()]


Library NameNamesequence
OpioidCDSREC10Common All Opioid or Non-opioid UDS in Lookback Period 11
define "All Opioid or Non-opioid UDS in Lookback Period":
  (
    [Observation: Common."All Drug Urine Screening"] Lab
      where date from Lab.effective in day of "UDS Lookback Period"
        and not (Lab.status.value in { 'unknown', 'entered-in-error', 'cancelled' })
  ) X sort by date from FHIRHelpers.ToDateTime(effective as FHIR.dateTime) desc


Library NameNamesequence
OpioidCDSREC10Common Inclusion Criteria For UDS Recommendation 12
/*
@description: Determines whether an opioid review is appropriate for the patient and whether they had a UDS performed in the past year
*/
define "Inclusion Criteria For UDS Recommendation":
  Routines."Is Opioid Review Useful?"
    and not exists ("All Opioid or Non-opioid UDS in Lookback Period")


Library NameNamesequence
OpioidCDSCommon Conditions Indicating End of Life or With Limited Life Expectancy 13
define "Conditions Indicating End of Life or With Limited Life Expectancy":
  (
    "US Core-Categorized Conditions" C
      where C.code in "Conditions likely terminal for opioid prescribing"
        and C.clinicalStatus in "Active Condition"
  )
  union
  (
    "US Core-Categorized Conditions" C
      where C.code in "Limited life expectancy conditions"
        and C.clinicalStatus in "Active Condition"
  )


Library NameNamesequence
OpioidCDSCommon Admitted/Referred/Discharged to Hospice Care 14
define "Admitted/Referred/Discharged to Hospice Care":
  (
    if (Config."Hospice Findings Exclusion Enabled") then
      [Observation: code in "Hospice Finding Codes"] O
        where not (O.status.value in { 'unknown', 'entered-in-error', 'cancelled' })
    else
      {}
  )
  union
  (
    [Encounter] E
      where date from E.period.start 1 year or less on or before Today()
        and (
          if E.hospitalization.dischargeDisposition.coding is null
              or not exists (E.hospitalization.dischargeDisposition.coding)
            then false
          else E.hospitalization.dischargeDisposition in "Hospice Disposition"
        )
        and E.status.value in { 'planned', 'arrived', 'in-progress', 'finished', 'onleave' }
  )


Library NameNamesequence
OpioidCDSCommon End of Life Assessment 15
define "End of Life Assessment":
    // 1. Conditions indicating end of life or with limited life expectancy
    exists (
      "Conditions Indicating End of Life or With Limited Life Expectancy"
    )
    // 2. Admitted/referred/discharged to hospice care
    or exists (
      "Admitted/Referred/Discharged to Hospice Care"
    )


Library NameNamesequence
OpioidCDSREC10Common Exclusion Criteria 16
define "Exclusion Criteria":
  Common."End of Life Assessment"


Library NameNamesequence
OpioidCDSREC10PatientView Is Perform Drug Screen Recommendation Applicable? 17
define "Is Perform Drug Screen Recommendation Applicable?":
  "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential"
    and Rec10Common."Inclusion Criteria For UDS Recommendation"
    and not Rec10Common."Exclusion Criteria"


Library NameNamesequence
OpioidCDSREC10Common Amphetamine Simple Identifier 18
define "Amphetamine Simple Identifier": 'Amphetamine'


Library NameNamesequence
OpioidCDSREC10Common Amphetamine Screenings In Lookback Period 19
// Amphetamines
define "Amphetamine Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Amphetamine Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Amphetamine Screenings In Lookback Period 20
define "Positive Amphetamine Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Amphetamine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Amphetamine Screenings In Lookback Period 21
define "Negative Amphetamine Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Amphetamine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Rx Lookback Period 22
define "Rx Lookback Period":
  Interval[Today() - 12 months - 31 days, Today()]


Library NameNamesequence
OpioidCDSREC10Common Normalize Rx In Lookback Period 23
define "Normalize Rx In Lookback Period":
  Common."Get MedicationRequest Medication as Code"(
    [MedicationRequest: status in { 'active', 'completed', 'stopped' }] Rx
      where Rx.category in Common."Community"
        and Rx.intent = 'order'
        and Rx.authoredOn.value in day of "Rx Lookback Period"
  )


Library NameNamesequence
OpioidCDSREC10Common Amphetamine Rx In Lookback Period 24
define "Amphetamine Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Amphetamine Medications"


Library NameNamesequence
OpioidCDSREC10Common Barbiturate Simple Identifier 25
define "Barbiturate Simple Identifier": 'Barbiturate'


Library NameNamesequence
OpioidCDSREC10Common Barbiturate Screenings In Lookback Period 26
// Barbiturates
define "Barbiturate Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Barbiturate Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Barbiturate Screenings In Lookback Period 27
define "Positive Barbiturate Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Barbiturate Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Barbiturate Screenings In Lookback Period 28
define "Negative Barbiturate Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Barbiturate Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Barbiturate Rx In Lookback Period 29
define "Barbiturate Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Barbiturate Medications"


Library NameNamesequence
OpioidCDSREC10Common Benzodiazepine Simple Identifier 30
define "Benzodiazepine Simple Identifier": 'Benzodiazepine'


Library NameNamesequence
OpioidCDSREC10Common Benzodiazepine Screenings In Lookback Period 31
// Benzodiazepines
define "Benzodiazepine Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Benzodiazepine Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Benzodiazepine Screenings In Lookback Period 32
define "Positive Benzodiazepine Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Benzodiazepine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Benzodiazepine Screenings In Lookback Period 33
define "Negative Benzodiazepine Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Benzodiazepine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Benzodiazepine Rx In Lookback Period 34
define "Benzodiazepine Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Benzodiazepine medications"


Library NameNamesequence
OpioidCDSREC10Common Buprenorphine Simple Identifier 35
define "Buprenorphine Simple Identifier": 'Buprenorphine'


Library NameNamesequence
OpioidCDSREC10Common Buprenorphine Screenings In Lookback Period 36
// Buprenorphine
define "Buprenorphine Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Buprenorphine Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Buprenorphine Screenings In Lookback Period 37
define "Positive Buprenorphine Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Buprenorphine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Buprenorphine Screenings In Lookback Period 38
define "Negative Buprenorphine Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Buprenorphine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Buprenorphine Rx In Lookback Period 39
define "Buprenorphine Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Buprenorphine Medications"


Library NameNamesequence
OpioidCDSREC10Common Cannabinoid Simple Identifier 40
define "Cannabinoid Simple Identifier": 'Cannabinoid'


Library NameNamesequence
OpioidCDSREC10Common Cannabinoid Screenings In Lookback Period 41
// Cannabinoids
define "Cannabinoid Screenings In Lookback Period":
  if Config."Cannabinoid Urine Screening Check Enabled"
    then (
      "All Opioid or Non-opioid UDS in Lookback Period" Lab
        where Lab.code in Common."Cannabinoid Urine Tests"
    ) else null


Library NameNamesequence
OpioidCDSCommonConfig Cannabinoid Urine Screening Check Enabled 42
define "Cannabinoid Urine Screening Check Enabled":
  false


Library NameNamesequence
OpioidCDSREC10Common Positive Cannabinoid Screenings In Lookback Period 43
define "Positive Cannabinoid Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Cannabinoid Screenings In Lookback Period", Config."Cannabinoid Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Negative Cannabinoid Screenings In Lookback Period 44
define "Negative Cannabinoid Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Cannabinoid Screenings In Lookback Period", Config."Cannabinoid Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Cocaine Simple Identifier 45
define "Cocaine Simple Identifier": 'Cocaine'


Library NameNamesequence
OpioidCDSREC10Common Cocaine Screenings In Lookback Period 46
// Cocaine
define "Cocaine Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Cocaine Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Cocaine Screenings In Lookback Period 47
define "Positive Cocaine Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Cocaine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Cocaine Screenings In Lookback Period 48
define "Negative Cocaine Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Cocaine Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Fentanyl Simple Identifier 49
define "Fentanyl Simple Identifier": 'Fentanyl'


Library NameNamesequence
OpioidCDSREC10Common Fentanyl Screenings In Lookback Period 50
// Fentanyl
define "Fentanyl Screenings In Lookback Period":
  if Config."Opiate Urine Screening Check Enabled"
  then (
    "All Opioid or Non-opioid UDS in Lookback Period" AllLabs
      where AllLabs.code in Common."Fentanyl Urine Tests"
  ) else null


Library NameNamesequence
OpioidCDSCommonConfig Opiate Urine Screening Check Enabled 51
// Recommendation 10
define "Opiate Urine Screening Check Enabled":
  true


Library NameNamesequence
OpioidCDSREC10Common Positive Fentanyl Screenings In Lookback Period 52
define "Positive Fentanyl Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Fentanyl Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Negative Fentanyl Screenings In Lookback Period 53
define "Negative Fentanyl Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Fentanyl Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Fentanyl Rx In Lookback Period 54
define "Fentanyl Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
    where Rx.medication in Common."Fentanyl Medications"


Library NameNamesequence
OpioidCDSREC10Common Heroin Simple Identifier 55
define "Heroin Simple Identifier": 'Heroin (6-AM)'


Library NameNamesequence
OpioidCDSREC10Common Heroin Screenings In Lookback Period 56
// Heroin
define "Heroin Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Heroin Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Heroin Screenings In Lookback Period 57
define "Positive Heroin Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Heroin Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Heroin Screenings In Lookback Period 58
define "Negative Heroin Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Heroin Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Methadone Simple Identifier 59
define "Methadone Simple Identifier": 'Methadone'


Library NameNamesequence
OpioidCDSREC10Common Methadone Screenings In Lookback Period 60
// Methadone
define "Methadone Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" Lab
    where Lab.code in Common."Methadone Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive Methadone Screenings In Lookback Period 61
define "Positive Methadone Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Methadone Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative Methadone Screenings In Lookback Period 62
define "Negative Methadone Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Methadone Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Methadone Rx In Lookback Period 63
define "Methadone Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Methadone Medications"


Library NameNamesequence
OpioidCDSREC10Common Opiate Simple Identifier 64
define "Opiate Simple Identifier": 'Opiate'


Library NameNamesequence
OpioidCDSREC10Common Opiate Screenings In Lookback Period 65
// Opiates
define "Opiate Screenings In Lookback Period":
  if Config."Opiate Urine Screening Check Enabled"
    then (
      "All Opioid or Non-opioid UDS in Lookback Period" Lab
        where Lab.code in Common."General Opiate Urine Tests"
    ) else null


Library NameNamesequence
OpioidCDSREC10Common Positive Opiate Screenings In Lookback Period 66
define "Positive Opiate Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Opiate Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Negative Opiate Screenings In Lookback Period 67
define "Negative Opiate Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Opiate Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Opiate Rx In Lookback Period 68
define "Opiate Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Opiate Medications"


Library NameNamesequence
OpioidCDSREC10Common Oxycodone Simple Identifier 69
define "Oxycodone Simple Identifier": 'Oxycodone'


Library NameNamesequence
OpioidCDSREC10Common Oxycodone Screenings In Lookback Period 70
// Oxycodone
define "Oxycodone Screenings In Lookback Period":
  if Config."Opiate Urine Screening Check Enabled"
    then (
      "All Opioid or Non-opioid UDS in Lookback Period" Lab
        where Lab.code in Common."Oxycodone Urine Tests"
    ) else null


Library NameNamesequence
OpioidCDSREC10Common Positive Oxycodone Screenings In Lookback Period 71
define "Positive Oxycodone Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("Oxycodone Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Negative Oxycodone Screenings In Lookback Period 72
define "Negative Oxycodone Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("Oxycodone Screenings In Lookback Period", Config."Opiate Urine Screening Check Enabled")


Library NameNamesequence
OpioidCDSREC10Common Oxycodone Rx In Lookback Period 73
define "Oxycodone Rx In Lookback Period":
  "Normalize Rx In Lookback Period" Rx
      where Rx.medication in Common."Oxycodone Medications"


Library NameNamesequence
OpioidCDSREC10Common PCP Simple Identifier 74
define "PCP Simple Identifier": 'Phencyclidine (PCP)'


Library NameNamesequence
OpioidCDSREC10Common PCP Screenings In Lookback Period 75
// PCP
define "PCP Screenings In Lookback Period":
  "All Opioid or Non-opioid UDS in Lookback Period" AllLabs
    where AllLabs.code in Common."PCP Urine Tests"


Library NameNamesequence
OpioidCDSREC10Common Positive PCP Screenings In Lookback Period 76
define "Positive PCP Screenings In Lookback Period":
  GetPositiveLabsInLookbackPeriod("PCP Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Negative PCP Screenings In Lookback Period 77
define "Negative PCP Screenings In Lookback Period":
  GetNegativeLabsInLookbackPeriod("PCP Screenings In Lookback Period", true)


Library NameNamesequence
OpioidCDSREC10Common Unexpected Details 78
// Details Logic
define "Unexpected Details":
  {
    CreateDetailWithPossibleUnexpectedNegative(
      "Amphetamine Simple Identifier", "Positive Amphetamine Screenings In Lookback Period", 
      "Negative Amphetamine Screenings In Lookback Period", "Amphetamine Rx In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Barbiturate Simple Identifier", "Positive Barbiturate Screenings In Lookback Period", 
      "Negative Barbiturate Screenings In Lookback Period", "Barbiturate Rx In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Benzodiazepine Simple Identifier", "Positive Benzodiazepine Screenings In Lookback Period", 
      "Negative Benzodiazepine Screenings In Lookback Period", "Benzodiazepine Rx In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Buprenorphine Simple Identifier", "Positive Buprenorphine Screenings In Lookback Period", 
      "Negative Buprenorphine Screenings In Lookback Period", "Buprenorphine Rx In Lookback Period"
    ),
    CreateDetailWithoutPossibleUnexpectedNegative(
      "Cannabinoid Simple Identifier", "Positive Cannabinoid Screenings In Lookback Period", 
      "Negative Cannabinoid Screenings In Lookback Period"
    ),
    CreateDetailWithoutPossibleUnexpectedNegative(
      "Cocaine Simple Identifier", "Positive Cocaine Screenings In Lookback Period", 
      "Negative Cocaine Screenings In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Fentanyl Simple Identifier", "Positive Fentanyl Screenings In Lookback Period", 
      "Negative Fentanyl Screenings In Lookback Period", "Fentanyl Rx In Lookback Period"
    ),
    CreateDetailWithoutPossibleUnexpectedNegative(
      "Heroin Simple Identifier", "Positive Heroin Screenings In Lookback Period", 
      "Negative Heroin Screenings In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Methadone Simple Identifier", "Positive Methadone Screenings In Lookback Period", 
      "Negative Methadone Screenings In Lookback Period", "Methadone Rx In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Opiate Simple Identifier", "Positive Opiate Screenings In Lookback Period", 
      "Negative Opiate Screenings In Lookback Period", "Opiate Rx In Lookback Period"
    ),
    CreateDetailWithPossibleUnexpectedNegative(
      "Oxycodone Simple Identifier", "Positive Oxycodone Screenings In Lookback Period", 
      "Negative Oxycodone Screenings In Lookback Period", "Oxycodone Rx In Lookback Period"
    ),
    CreateDetailWithoutPossibleUnexpectedNegative(
      "PCP Simple Identifier", "Positive PCP Screenings In Lookback Period", 
      "Negative PCP Screenings In Lookback Period"
    )
  }


Library NameNamesequence
OpioidCDSREC10Common Inclusion Criteria For Unexpected Results 79
define "Inclusion Criteria For Unexpected Results":
  AnyTrue(
    "Unexpected Details" Details
      return (exists Details.unexpectedPosDetails) or (exists Details.unexpectedNegDetails)
  )


Library NameNamesequence
OpioidCDSREC10PatientView Applicable Because of Unexpected Results 80
define "Applicable Because of Unexpected Results":
  "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential"
    and Rec10Common."Inclusion Criteria For Unexpected Results"
    and not Rec10Common."Exclusion Criteria"


Library NameNamesequence
OpioidCDSCommon Style Header 81
define "Style Header":
  '<style>\r\n  .alert-body {\r\n    width: 670px;\r\n    font-family: segoe-ui, sans-serif;\r\n    background-color: #FEFFF1;\r\n  }\r\n\r\n  .details-table {\r\n    border-collapse:collapse;\r\n    border-style: ridge;\r\n    background-color: #FEFFF1;\r\n    padding: 2px;\r\n  }\r\n\r\n  .details-caption {\r\n    border-style: ridge;\r\n    border-bottom: none;\r\n    background-color: #FEFFF1;\r\n    padding: 2px;\r\n  }\r\n\r\n  .details-table-header {\r\n    border-style: ridge;\r\n    padding: 5px;\r\n  }\r\n\r\n  .details-table-cell {\r\n    border-style: ridge;\r\n    padding: 5px;\r\n  }\r\n\r\n  .details-table-footer-cell {\r\n    border-style: ridge;\r\n    padding: 5px;\r\n    font-size: small;\r\n  }\r\n\r\n  .details-table-cell-unexpected {\r\n    border-style: ridge;\r\n    padding: 5px;\r\n    color: red;\r\n    font-weight: bold;\r\n  }\r\n\r\n  .more-text {\r\n    position: relative;\r\n    margin-bottom: 2em;\r\n  }\r\n  \r\n  .more {\r\n    display:none;\r\n  }\r\n\r\n  #box .show-more:checked + .more {\r\n    display:block;\r\n  }\r\n<\/style>'


Library NameNamesequence
OpioidCDSREC10Common Unexpected Div Start 82
define "Unexpected Div Start":
  '<div class=\"alert-body\"><div><p>Patient may have <strong>unexpected urine toxicology test results<\/strong> in the past year.<\/p><\/div>'


Library NameNamesequence
OpioidCDSREC10Common Table Start 83
define "Table Start":
  '<div><table class=\"details-table\"><caption class=\"details-caption\">Urine Toxicology Results<\/caption><tr><th class=\"details-table-header\">Substance<\/th>'


Library NameNamesequence
OpioidCDSREC10Common All Lab Dates in Lookback Period 84
define "All Lab Dates in Lookback Period":
  (
    "All Opioid or Non-opioid UDS in Lookback Period" Lab
      return date from FHIRHelpers.ToDateTime(Lab.effective as FHIR.dateTime)
  ) X sort desc


Library NameNamesequence
OpioidCDSREC10Common Table Headers 85
define "Table Headers":
  "All Lab Dates in Lookback Period" LabDate
    return '<th class=\"details-table-header\">' + ToString(LabDate) + '<\/th>'


Library NameNamesequence
OpioidCDSREC10Common Generate Table Rows 86
define "Generate Table Rows":
  "Unexpected Details" BOT
    let row: ToString(IndexOf("Unexpected Details", BOT) + 1)
    return '<tr>' + GetExpectedColumn(BOT.ingredient) + Combine(
      "All Lab Dates in Lookback Period" LabDate
        let col: ToString(IndexOf("All Lab Dates in Lookback Period", LabDate) + 2)
        return all (
          if BOT.unexpectedPosDetails.date contains LabDate
            then GetUnexpectedColumn('pos', row + ':' + col)
          else if BOT.unexpectedNegDetails.udsDate contains LabDate
            then GetUnexpectedColumn('neg', row + ':' + col)
          else if BOT.posDates contains LabDate
            then GetExpectedColumn('pos')
          else if BOT.negDates contains LabDate
            then GetExpectedColumn('neg')
          else GetExpectedColumn('n/a')
        )
    ) + '<\/tr>'


Library NameNamesequence
OpioidCDSREC10Common Generate Footer Rows 87
define "Generate Footer Rows":
  "Unexpected Details" BOT
      let row: ToString(IndexOf("Unexpected Details", BOT) + 1),
      colspan: Length("All Lab Dates in Lookback Period") + 1
      return Combine(
        "All Lab Dates in Lookback Period" LabDate
          let col: ToString(IndexOf("All Lab Dates in Lookback Period", LabDate) + 2)
          return all (
            if BOT.unexpectedPosDetails.date contains LabDate
              then singleton from (
                BOT.unexpectedPosDetails PosDetail
                  where PosDetail.date = LabDate
                    return '<tr>' + GetFooterColumn(colspan, row + ':' + col + ' - Possible unprescribed substance found: ' + PosDetail.udsDetail) + '<\/tr>'
              )
            else if BOT.unexpectedNegDetails.udsDate contains LabDate
              then singleton from (
                BOT.unexpectedNegDetails NegDetail
                  where NegDetail.udsDate = LabDate
                    return '<tr>' + GetFooterColumn(colspan, row + ':' + col + ' - Possible unexpected negative result found: prescribed ' + NegDetail.rxDetail + ' on ' + ToString(NegDetail.rxDate)) + '<\/tr>'
              )
            else ''
          )
      )


Library NameNamesequence
OpioidCDSREC10Common Table End 88
define "Table End":
  '<\/table><\/div>'


Library NameNamesequence
OpioidCDSREC10Common Details Table 89
define "Details Table": 
  "Table Start" + Combine("Table Headers") 
    + '<tbody>' + Combine("Generate Table Rows") + '</tbody>' 
    + '<tfoot>' + Combine("Generate Footer Rows") + '<\/tfoot>' 
  + "Table End"


Library NameNamesequence
OpioidCDSREC10Common Details More Info 90
define "Details More Info":
  '<div id=\"box\">\r\n  <p>Note on false positives and unexpected negative results...<\/p>\r\n  <input type=\"checkbox\" class=\"show-more\"> Show more\r\n  <div class=\"more\">\r\n  <p>Positive results may be a false positives or could represent occasional use or possible substance use disorder.<br\/><br\/>For a review regarding interpreting possible false positive urine toxicology results, see <a target=\"_blank\" href=\"https:\/\/pubmed.ncbi.nlm.nih.gov\/24986836\">http:\/\/pubmed.ncbi.nlm.nih.gov\/24986836<\/a>. It is unknown if the findings reported in this article can be extrapolated to other laboratory analyzers that were not used in the referenced studies.<br\/><br\/>For guidance regarding evaluating and addressing unexpected toxicology tests results, see <a target=\"_blank\" href=\"https:\/\/www.cdc.gov\/mmwr\/volumes\/71\/rr\/rr7103a1.htm#Recommendation10\">Recommendation 10 of the 22 CDC Clinical Practice Guideiline<\/a>.<\/p>\r\n  <p>An unexpectedly negative test may be due to diversion, intermittent use, aberrant drug use behavior, or other factors, including a false negative result. Clinicians should interpret this result in the context of the overall treatment plan.<\/p>\r\n  <\/div>\r\n<\/div>'


Library NameNamesequence
OpioidCDSREC10Common Div End 91
define "Div End": '<\/div>'


Library NameNamesequence
OpioidCDSREC10Common Get HTML Details 92
// HTML Generation
define "Get HTML Details":
  Common."Style Header" + "Unexpected Div Start" + "Details Table" + "Details More Info" + "Div End"


Library NameNamesequence
OpioidCDSREC10PatientView Detail 93
define "Detail":
  Rec10Common."Get HTML Details"


Knowledge Capability: shareable computable executable publishable
Use Context:
codevaluedisplay
focus 82423001 Chronic pain (finding)
focus
Jurisdiction: US
Purpose:

The 2022 CDC Clinical Practice Guideline for Prescribing Opioids for Pain is intended to improve communication between clinicians and patients about the benefits and risks of pain treatments, including opioid therapy; improve the effectiveness and safety of pain treatment; mitigate pain; improve function and quality of life for patients with pain; and reduce risks associated with opioid pain therapy, including opioid use disorder, overdose, and death. The recommendations do not apply to pain related to sickle cell disease or cancer or to patients receiving palliative or end-of-life care.

Usage: Before starting opioids and periodically (at least annually) during opioid therapy, clinicians should consider the benefits and risks of toxicology testing to assess for prescribed opioids and other prescription and nonprescription controlled substances that increase risk for overdose when combined with opioids, including nonprescribed and illicit opioids and benzodiazepines.
Copyright:

© CDC 2016+.

Related Artifacts:

Documentation

Libraries:
Library - Recommendation #10 Patient View - Urine Drug Testing
Actions:
1. Consider the Benefits and Risks of Conducting a Urine Toxicology Screen: Consider the benefits and risks of toxicology testing to assess for prescribed medications as well as other prescribed and nonprescribed controlled substances. For guidance regarding utilizing toxicology tests when prescribing opioids, see [Recommendation 10 of the 2022 CDC Clinical Practice Guideline](https://www.cdc.gov/mmwr/volumes/71/rr/rr7103a1.htm#:~:text=evidence%20type%3A%204).-,Implementation%20Considerations,-Toxicology%20testing%20should).
When: named-event: patient-view
If: applicability: Patient has not had a urine screening in the past 12 months (Is Perform Drug Screen Recommendation Applicable?)
Then:
: Document - Ordered toxicology screen
Then:
: Document - Risks outweigh benefits
Then:
: Snooze* - N/A see comment, snooze 3 months
Then:
2. Patient May Have Unexpected Toxicology Test Results: Patient may have unexpected urine toxicology test results in the past year
When: named-event: patient-view
If: applicability: Urine screening tested positive for cocaine, opiates or PCP (Applicable Because of Unexpected Results)
Then:
: Document - Will repeat urine drug screen more frequently
Then:
: Document - Will assess patient for substance use disorder
Then:
: Snooze* - Patient's test results were expected, snooze for 3 months
Then:
: Snooze* - N/A snooze for 3 months
Then: