Id: opioidcds-07 Url: Recommendation #7 - Opioid Therapy Risk Assessment Version: 2022.1.0 Identifier: value: cdc-opioid-guidance Name: PlanDefinition_Recommendation_07_Order_Sign Title: Recommendation #7 - Opioid Therapy Risk Assessment Status: draft Experimental: true Type: system: http://terminology.hl7.org/CodeSystem/plan-definition-type code: eca-rule display: ECA Rule Date: 2025-07-01 Publisher: Centers for Disease Control and Prevention (CDC) Description: Clinicians should evaluate benefits and risks with patients within 1-4 weeks of starting opioid therapy for subacute or chronic pain or of dosage escalation. Clinicians should regularly reevaluate benefits and risks of continued opioid therapy with patients. Logic Definitions: Library Name Name sequence OpioidCDSREC07 Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions 0 define "Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions": ( Common."Is Opioid Analgesic with Ambulatory Misuse Potential?"( ContextPrescriptions ) ) AmbulatoryOpioidPrescription where Routines."Is Subacute or Chronic Pain Prescription?"( AmbulatoryOpioidPrescription ) Library Name Name sequence OpioidCDSREC07 Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential 1 define "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential": exists( "Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions" ) Library Name Name sequence OpioidCDSRoutines Patient Age Less Than 18 2 define "Patient Age Less Than 18": if (Config."Age Less than 18 Years Is Enabled") then AgeInYearsAt(Today()) < 18 else false Library Name Name sequence OpioidCDSRoutines Condition Positive for Sickle Cell 3 define "Condition Positive for Sickle Cell": if (Config."Sickle Cell Check Enabled") then exists( Common."Positive Sickle Cell Condition" ) else false Library Name Name sequence OpioidCDSRoutines Is Active Cancer Treatment? 4 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" or "Has Active Cancer Diagnosis on Problem List" else false Library Name Name sequence OpioidCDSRoutines Conditions Likely Terminal for Opioid Prescribing 5 define "Conditions Likely Terminal for Opioid Prescribing": 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 Name Name sequence OpioidCDSRoutines Is Opioid Review Useful? 6 define "Is Opioid Review Useful?": not "Patient Age Less Than 18" and not "Condition Positive for Sickle Cell" and not "Is Active Cancer Treatment?" and not "Conditions Likely Terminal for Opioid Prescribing" Library Name Name sequence OpioidCDSREC07 Risk Assessment Interval 7 define "Risk Assessment Interval": Interval[Today() - 91 days, Today() - 1 day] Library Name Name sequence OpioidCDSREC07 Opioid Risk Assessment in Past 90 Days 8 define "Opioid Risk Assessment in Past 90 Days": [Procedure: Common."Opioid misuse assessment procedure"] riskAssessment where start of (riskAssessment.performed as FHIR.Period) in day of "Risk Assessment Interval" Library Name Name sequence OpioidCDSREC07 Previous 10 Days Interval 9 define "Previous 10 Days Interval": Interval[Today() - 10 days, Today()] Library Name Name sequence OpioidCDSREC07 Encounter Interval 10 define "Encounter Interval": Interval[Today() - 12 months - 1 days, Today() - 1 day] Library Name Name sequence OpioidCDSREC07 Prescribed Opioids for 7 of Past 10 Days with an Encounter 11 define "Prescribed Opioids for 7 of Past 10 Days with an Encounter": Common."Days on Opioids during Period"( "Previous 10 Days Interval" ) >= 7 and exists ( [Encounter: Common."Office Visit"] AmbulatoryEncounter where AmbulatoryEncounter.period during "Encounter Interval" ) Library Name Name sequence OpioidCDSCommon First Month 12 define "First Month": Interval[Today() - 3 months, Today() - 2 months] Library Name Name sequence OpioidCDSCommon Second Month 13 define "Second Month": Interval[Today() - 2 months, Today() - 1 months] Library Name Name sequence OpioidCDSCommon Third Month 14 define "Third Month": Interval[Today() - 1 months, Today()] Library Name Name sequence OpioidCDSCommon Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months 15 define "Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months": "Days on Opioids during Period"("First Month") >= 21 and "Days on Opioids during Period"("Second Month") >= 21 and "Days on Opioids during Period"("Third Month") >= 21 Library Name Name sequence OpioidCDSREC07 Inclusion Criteria 16 define "Inclusion Criteria": "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential" and Routines."Is Opioid Review Useful?" and not exists ( "Opioid Risk Assessment in Past 90 Days" ) and ( "Prescribed Opioids for 7 of Past 10 Days with an Encounter" or Common."Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months" ) Library Name Name sequence OpioidCDSCommon US Core-Categorized Conditions 17 // 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 Name Name sequence OpioidCDSCommon Conditions Indicating End of Life or With Limited Life Expectancy 18 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 Name Name sequence OpioidCDSCommon Admitted/Referred/Discharged to Hospice Care 19 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 Name Name sequence OpioidCDSCommon End of Life Assessment 20 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 Name Name sequence OpioidCDSREC07 Exclusion Criteria 21 define "Exclusion Criteria": Common."End of Life Assessment" Library Name Name sequence OpioidCDSREC07 Is Recommendation Applicable? 22 define "Is Recommendation Applicable?": "Inclusion Criteria" and not "Exclusion Criteria" Library Name Name sequence OpioidCDSCommon Is Opioid Analgesic with Ambulatory Misuse Potential? 23 define function "Is Opioid Analgesic with Ambulatory Misuse Potential?"(value List<MedicationRequest>): ("Get MedicationRequest Medication as Code"(value)) Rx where Rx.medication in "Opioid analgesics with ambulatory misuse potential" and Rx.category in "Community" Library Name Name sequence OpioidCDSCommon Get MedicationRequest Medication as Code 24 define function "Get MedicationRequest Medication as Code"(value List<MedicationRequest>): value Rx let Med: if Rx.medication is Reference then singleton from ( [Medication] M where M.id = (Last(Split((Rx.medication as FHIR.Reference).reference, '/'))) ) else null return MedicationRequest { id: Rx.id, status: Rx.status, intent: Rx.intent, category: Rx.category, medication: if Rx.medication is Reference then Med.code else Rx.medication as CodeableConcept, subject: Rx.subject, authoredOn: Rx.authoredOn, recorder: Rx.recorder, dosageInstruction: Rx.dosageInstruction, dispenseRequest: Rx.dispenseRequest } Library Name Name sequence FHIRHelpers ToConcept 25 define function ToConcept(concept FHIR.CodeableConcept): if concept is null then null else System.Concept { codes: concept.coding C return ToCode(C), display: concept.text.value } Library Name Name sequence OpioidCDSRoutines Is Subacute or Chronic Pain Prescription? 26 // End of Active Cancer Treatment Routine /* ** Routine #4 ** For Subacute or Chronic Pain Routine ** ** Definition | Answer to Proceed | Details | Data (Terminology) Requirement ** ----------------------------------------------------------------------------------------------------------------------------------- ** Order for opioid analgesic | Yes | Order for opioid analgesics with ambulatory | Opioid analgesics with ** with expected supply | | misuse potential with a supply duration of >= | ambulatory misuse potential ** duration >= 28 days | | 28 days | ** | | | ** | | - Subacute definition = order for opioid | ** | | analgesics with ambulatory misuse | ** | | potential with a supply duration of one to | ** | | two months. | ** | | - Chronic pain definition = order for opioid | ** | | analgesics with ambulatory misuse | ** | | potential with a supply duration of >= two | ** | | months. | ** ----------------------------------------------------------------------------------------------------------------------------------- ** */ define function "Is Subacute or Chronic Pain Prescription?"(prescription FHIR.MedicationRequest): "Is Subacute or Chronic Pain Using Expected Supply Duration"(prescription) or "Is Subacute or Chronic Pain Using Validity Period"(prescription) Library Name Name sequence OpioidCDSRoutines Is Subacute or Chronic Pain Using Expected Supply Duration 27 define function "Is Subacute or Chronic Pain Using Expected Supply Duration"(prescription FHIR.MedicationRequest): ( prescription.dispenseRequest is not null and prescription.dispenseRequest.expectedSupplyDuration is not null and ( Common.GetDurationInDays(prescription.dispenseRequest.expectedSupplyDuration) >= 28 days ) ) Library Name Name sequence OpioidCDSCommon GetDurationInDays 28 define function GetDurationInDays(value FHIR.Duration): if value is null then null else case when value.code.value ~ 'a' then System.Quantity{ value: value.value.value * 365.0, unit: 'days' } when value.code.value ~ 'mo' then System.Quantity{ value: value.value.value * 30.0, unit: 'days' } when value.code.value ~ 'wk' then System.Quantity{ value: value.value.value * 7.0, unit: 'days' } when value.code.value ~ 'd' then System.Quantity{ value: value.value.value, unit: 'days' } when value.code.value ~ 'h' then System.Quantity{ value: value.value.value / 24.0, unit: 'days' } when value.code.value ~ 'min' then System.Quantity{ value: value.value.value / 60.0 / 24.0, unit: 'days' } when value.code.value ~ 's' then System.Quantity{ value: value.value.value / 60.0 / 60.0 / 24.0, unit: 'days' } when value.code.value ~ 'ms' then System.Quantity{ value: value.value.value / 60.0 / 60.0 / 24.0 / 1000.0, unit: 'days' } when value.code.value is null then Message(1000, true, 'Undefined', 'Error', 'Duration unit code is null') else Message(1000, true, 'Undefined', 'Error', 'Unsupported duration unit code: ' + value.code.value) end Library Name Name sequence OpioidCDSRoutines Is Subacute or Chronic Pain Using Validity Period 29 define function "Is Subacute or Chronic Pain Using Validity Period"(prescription FHIR.MedicationRequest): ( prescription.dispenseRequest is not null and prescription.dispenseRequest.validityPeriod is not null and ( days between prescription.dispenseRequest.validityPeriod.start and prescription.dispenseRequest.validityPeriod.end >= 28 ) ) Library Name Name sequence FHIRHelpers ToDateTime 30 define function ToDateTime(value dateTime): value.value Library Name Name sequence FHIRHelpers ToInterval 31 define function ToInterval(period FHIR.Period): if period is null then null else if period."start" is null then Interval(period."start".value, period."end".value] else Interval[period."start".value, period."end".value] Library Name Name sequence OpioidCDSCommon Days on Opioids during Period 32 define function "Days on Opioids during Period"(period Interval<Date>): Sum( ( collapse ( [MedicationRequest: "Opioid analgesics with ambulatory misuse potential"] OpioidPrescription return "Prescription Relevant Period"( OpioidPrescription ) intersect period ) ) OpioidUseInterval return days between start of OpioidUseInterval and end of OpioidUseInterval ) Library Name Name sequence FHIRHelpers ToString 33 define function ToString(value string): value.value Library Name Name sequence OpioidCDSCommon Prescription Relevant Period 34 define function "Prescription Relevant Period"(prescription FHIR.MedicationRequest): if ( prescription.authoredOn is not null and prescription.dispenseRequest is not null and prescription.dispenseRequest.expectedSupplyDuration is not null ) then Interval[ date from prescription.authoredOn, date from prescription.authoredOn + GetDurationInDays(prescription.dispenseRequest.expectedSupplyDuration) ] else null Knowledge Capability: shareable computable executable publishable Use Context: code value display focus 182888003 Medication requested (situation) focus 82423001 Chronic pain (finding) focus 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: In addition to evaluating benefits and risks of opioids before starting opioid therapy (see Recommendation 2), clinicians should evaluate patients to assess benefits and risks of opioids within 1-4 weeks of starting long-term opioid therapy or of dosage escalation. Copyright: © CDC 2016+. Related Artifacts: Documentation 2022 CDC Clinical Practice Guideline for Prescribing Opioids for Pain Libraries: Library - Recommendation #7 - Opioid Therapy Risk Assessment Actions: Regularly Evaluate the Benefits and Risks of Opioid Therapy: Recommend that clinicians evaluate benefits and risks with patients within 1-4 weeks of starting opioid therapy for subacute or chronic pain or of dosage escalation. Clinicians should also regularly reevaluate the benefits and risks of continued opioid therapy with patients.#xD; #xD; For additional guidance regarding opioid therapy patient consultations, see [Recommendation 7 of the 2022 CDC Clinical Practice Guideline for additional guidance](https://www.cdc.gov/mmwr/volumes/71/rr/rr7103a1.htm#Recommendation7) When: Named Event: order-sign If: Applicability: Check whether the patient has a current order is for an opioid with ambulatory misuse potential for subacute or chronic pain, a risk assessment has been performed in the past 90 days, has taken an opioid with abuse potential for 7 of the past 10 days or 63 of the past 90 days and if an opioid review is appropriate. (Is Recommendation Applicable?) Then: : Document - Conducted benefit and risk assessment Then: : Snooze* - Conducted assessment, snooze 3 months Then: : Snooze* - N/A see comment, snooze 3 months Then:
Value set Opioid analgesics with ambulatory misuse potential
Value set Opioid misuse assessment procedure
Value set Encounter Diagnosis Condition Category
Value set Problem List Condition Category
Value set US Core Health Concern Condition Category
Value set Conditions likely terminal for opioid prescribing
Value set Limited life expectancy conditions
Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions
define "Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions": ( Common."Is Opioid Analgesic with Ambulatory Misuse Potential?"( ContextPrescriptions ) ) AmbulatoryOpioidPrescription where Routines."Is Subacute or Chronic Pain Prescription?"( AmbulatoryOpioidPrescription )
Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential
define "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential": exists( "Chronic Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions" )
define "Patient Age Less Than 18": if (Config."Age Less than 18 Years Is Enabled") then AgeInYearsAt(Today()) < 18 else false
define "Condition Positive for Sickle Cell": if (Config."Sickle Cell Check Enabled") then exists( Common."Positive Sickle Cell Condition" ) else false
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" or "Has Active Cancer Diagnosis on Problem List" else false
Conditions Likely Terminal for Opioid Prescribing
define "Conditions Likely Terminal for Opioid Prescribing": 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
define "Is Opioid Review Useful?": not "Patient Age Less Than 18" and not "Condition Positive for Sickle Cell" and not "Is Active Cancer Treatment?" and not "Conditions Likely Terminal for Opioid Prescribing"
define "Risk Assessment Interval": Interval[Today() - 91 days, Today() - 1 day]
define "Opioid Risk Assessment in Past 90 Days": [Procedure: Common."Opioid misuse assessment procedure"] riskAssessment where start of (riskAssessment.performed as FHIR.Period) in day of "Risk Assessment Interval"
define "Previous 10 Days Interval": Interval[Today() - 10 days, Today()]
define "Encounter Interval": Interval[Today() - 12 months - 1 days, Today() - 1 day]
Prescribed Opioids for 7 of Past 10 Days with an Encounter
define "Prescribed Opioids for 7 of Past 10 Days with an Encounter": Common."Days on Opioids during Period"( "Previous 10 Days Interval" ) >= 7 and exists ( [Encounter: Common."Office Visit"] AmbulatoryEncounter where AmbulatoryEncounter.period during "Encounter Interval" )
define "First Month": Interval[Today() - 3 months, Today() - 2 months]
define "Second Month": Interval[Today() - 2 months, Today() - 1 months]
define "Third Month": Interval[Today() - 1 months, Today()]
Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months
define "Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months": "Days on Opioids during Period"("First Month") >= 21 and "Days on Opioids during Period"("Second Month") >= 21 and "Days on Opioids during Period"("Third Month") >= 21
define "Inclusion Criteria": "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential" and Routines."Is Opioid Review Useful?" and not exists ( "Opioid Risk Assessment in Past 90 Days" ) and ( "Prescribed Opioids for 7 of Past 10 Days with an Encounter" or Common."Prescribed Opioids for 21 or more of 30 Days for each of the past 3 Months" )
// 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"]
Conditions Indicating End of Life or With Limited Life Expectancy
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" )
Admitted/Referred/Discharged to Hospice Care
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' } )
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" )
define "Exclusion Criteria": Common."End of Life Assessment"
define "Is Recommendation Applicable?": "Inclusion Criteria" and not "Exclusion Criteria"
Is Opioid Analgesic with Ambulatory Misuse Potential?
define function "Is Opioid Analgesic with Ambulatory Misuse Potential?"(value List<MedicationRequest>): ("Get MedicationRequest Medication as Code"(value)) Rx where Rx.medication in "Opioid analgesics with ambulatory misuse potential" and Rx.category in "Community"
Get MedicationRequest Medication as Code
define function "Get MedicationRequest Medication as Code"(value List<MedicationRequest>): value Rx let Med: if Rx.medication is Reference then singleton from ( [Medication] M where M.id = (Last(Split((Rx.medication as FHIR.Reference).reference, '/'))) ) else null return MedicationRequest { id: Rx.id, status: Rx.status, intent: Rx.intent, category: Rx.category, medication: if Rx.medication is Reference then Med.code else Rx.medication as CodeableConcept, subject: Rx.subject, authoredOn: Rx.authoredOn, recorder: Rx.recorder, dosageInstruction: Rx.dosageInstruction, dispenseRequest: Rx.dispenseRequest }
define function ToConcept(concept FHIR.CodeableConcept): if concept is null then null else System.Concept { codes: concept.coding C return ToCode(C), display: concept.text.value }
Is Subacute or Chronic Pain Prescription?
// End of Active Cancer Treatment Routine /* ** Routine #4 ** For Subacute or Chronic Pain Routine ** ** Definition | Answer to Proceed | Details | Data (Terminology) Requirement ** ----------------------------------------------------------------------------------------------------------------------------------- ** Order for opioid analgesic | Yes | Order for opioid analgesics with ambulatory | Opioid analgesics with ** with expected supply | | misuse potential with a supply duration of >= | ambulatory misuse potential ** duration >= 28 days | | 28 days | ** | | | ** | | - Subacute definition = order for opioid | ** | | analgesics with ambulatory misuse | ** | | potential with a supply duration of one to | ** | | two months. | ** | | - Chronic pain definition = order for opioid | ** | | analgesics with ambulatory misuse | ** | | potential with a supply duration of >= two | ** | | months. | ** ----------------------------------------------------------------------------------------------------------------------------------- ** */ define function "Is Subacute or Chronic Pain Prescription?"(prescription FHIR.MedicationRequest): "Is Subacute or Chronic Pain Using Expected Supply Duration"(prescription) or "Is Subacute or Chronic Pain Using Validity Period"(prescription)
Is Subacute or Chronic Pain Using Expected Supply Duration
define function "Is Subacute or Chronic Pain Using Expected Supply Duration"(prescription FHIR.MedicationRequest): ( prescription.dispenseRequest is not null and prescription.dispenseRequest.expectedSupplyDuration is not null and ( Common.GetDurationInDays(prescription.dispenseRequest.expectedSupplyDuration) >= 28 days ) )
define function GetDurationInDays(value FHIR.Duration): if value is null then null else case when value.code.value ~ 'a' then System.Quantity{ value: value.value.value * 365.0, unit: 'days' } when value.code.value ~ 'mo' then System.Quantity{ value: value.value.value * 30.0, unit: 'days' } when value.code.value ~ 'wk' then System.Quantity{ value: value.value.value * 7.0, unit: 'days' } when value.code.value ~ 'd' then System.Quantity{ value: value.value.value, unit: 'days' } when value.code.value ~ 'h' then System.Quantity{ value: value.value.value / 24.0, unit: 'days' } when value.code.value ~ 'min' then System.Quantity{ value: value.value.value / 60.0 / 24.0, unit: 'days' } when value.code.value ~ 's' then System.Quantity{ value: value.value.value / 60.0 / 60.0 / 24.0, unit: 'days' } when value.code.value ~ 'ms' then System.Quantity{ value: value.value.value / 60.0 / 60.0 / 24.0 / 1000.0, unit: 'days' } when value.code.value is null then Message(1000, true, 'Undefined', 'Error', 'Duration unit code is null') else Message(1000, true, 'Undefined', 'Error', 'Unsupported duration unit code: ' + value.code.value) end
Is Subacute or Chronic Pain Using Validity Period
define function "Is Subacute or Chronic Pain Using Validity Period"(prescription FHIR.MedicationRequest): ( prescription.dispenseRequest is not null and prescription.dispenseRequest.validityPeriod is not null and ( days between prescription.dispenseRequest.validityPeriod.start and prescription.dispenseRequest.validityPeriod.end >= 28 ) )
define function ToDateTime(value dateTime): value.value
define function ToInterval(period FHIR.Period): if period is null then null else if period."start" is null then Interval(period."start".value, period."end".value] else Interval[period."start".value, period."end".value]
define function "Days on Opioids during Period"(period Interval<Date>): Sum( ( collapse ( [MedicationRequest: "Opioid analgesics with ambulatory misuse potential"] OpioidPrescription return "Prescription Relevant Period"( OpioidPrescription ) intersect period ) ) OpioidUseInterval return days between start of OpioidUseInterval and end of OpioidUseInterval )
define function ToString(value string): value.value
define function "Prescription Relevant Period"(prescription FHIR.MedicationRequest): if ( prescription.authoredOn is not null and prescription.dispenseRequest is not null and prescription.dispenseRequest.expectedSupplyDuration is not null ) then Interval[ date from prescription.authoredOn, date from prescription.authoredOn + GetDurationInDays(prescription.dispenseRequest.expectedSupplyDuration) ] else null
Recommendation #7 - Opioid Therapy Risk Assessment
Centers for Disease Control and Prevention (CDC)
Clinicians should evaluate benefits and risks with patients within 1-4 weeks of starting opioid therapy for subacute or chronic pain or of dosage escalation. Clinicians should regularly reevaluate benefits and risks of continued opioid therapy with patients.
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.
In addition to evaluating benefits and risks of opioids before starting opioid therapy (see Recommendation 2), clinicians should evaluate patients to assess benefits and risks of opioids within 1-4 weeks of starting long-term opioid therapy or of dosage escalation.
2022 CDC Clinical Practice Guideline for Prescribing Opioids for Pain
Regularly Evaluate the Benefits and Risks of Opioid Therapy
Recommend that clinicians evaluate benefits and risks with patients within 1-4 weeks of starting opioid therapy for subacute or chronic pain or of dosage escalation. Clinicians should also regularly reevaluate the benefits and risks of continued opioid therapy with patients. For additional guidance regarding opioid therapy patient consultations, see [Recommendation 7 of the 2022 CDC Clinical Practice Guideline for additional guidance](https://www.cdc.gov/mmwr/volumes/71/rr/rr7103a1.htm#Recommendation7)
Check whether the patient has a current order is for an opioid with ambulatory misuse potential for subacute or chronic pain, a risk assessment has been performed in the past 90 days, has taken an opioid with abuse potential for 7 of the past 10 days or 63 of the past 90 days and if an opioid review is appropriate.
Document - Conducted benefit and risk assessment
Snooze* - Conducted assessment, snooze 3 months
Snooze* - N/A see comment, snooze 3 months