| 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 |
| OpioidCDSCommonConfig |
Age Less than 18 Years Is Enabled |
2 |
// CDC 2022 General Inclusion Criteria
define "Age Less than 18 Years Is Enabled":
true
| Library Name | Name | sequence |
| 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 Name | Name | sequence |
| OpioidCDSCommonConfig |
Sickle Cell Check Enabled |
4 |
// Sickle Cell
define "Sickle Cell Check Enabled":
true
| Library Name | Name | sequence |
| OpioidCDSCommonConfig |
Sickle Cell Assumed Active |
5 |
define "Sickle Cell Assumed Active":
true
| Library Name | Name | sequence |
| OpioidCDSCommon |
US Core-Categorized Conditions |
6 |
// 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 |
Positive Sickle Cell Condition |
7 |
define "Positive Sickle Cell Condition":
if Config."Sickle Cell Check Enabled" and not Config."Sickle Cell Assumed Active"
then (
"US Core-Categorized Conditions" C
where C.code in "Sickle Cell Diseases"
and C.clinicalStatus in "Active Condition"
) else if Config."Sickle Cell Check Enabled" and Config."Sickle Cell Assumed Active"
then (
"US Core-Categorized Conditions" C
where C.code in "Sickle Cell Diseases"
)
else null
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Condition Positive for Sickle Cell |
8 |
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 |
| OpioidCDSCommonConfig |
Active Cancer Treatment Encounters Condition Is Enabled |
9 |
// Active Cancer Treatment
define "Active Cancer Treatment Encounters Condition Is Enabled":
true
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Encounter Period |
10 |
// End of Opioid Naive Routine
/*
** Routine #3
** Active Cancer Treatment Routine
**
** Definition | Answer to Proceed | Details | Data (Terminology) Requirement
** ---------------------------------------------------------------------------------------------------------------------------------
** Two office visits within the | No | Look for a minimum of two distinct | Office Visit
** past 12 months | | encounters within 12 months of the date |
** | | of the current visit for which each of the |
** | | following is true: |
** | | - the encounter diagnosis (primary or |
** | | secondary or co-morbidity diagnosis) |
** | | is listed in the CDC Malignant Cancer |
** | | Conditions value set |
** ---------------------------------------------------------------------------------------------------------------------------------
** Office visits with an | No | The encounter is performed by an | Oncology specialty
** oncology specialist | | oncologist as defined in the oncology | designations (NUCC)
** present | | specialty designations using the |
** | | National Uniform Claim Committee |
** | | (NUCC) classifications |
** ---------------------------------------------------------------------------------------------------------------------------------
** Office visits including CDC | No | The encounter diagnosis (primary or | CDC malignant cancer
** malignant cancer | | secondary or co-morbidity diagnosis) | conditions
** condition | | is listed in the CDC Malignant Cancer |
** | | Conditions value set |
** ----------------------------------------------------------------------------------------------------------------------------------
**
*/
define "Encounter Period":
Interval[Today() - 12 months, Today())
| Library Name | Name | sequence |
| OpioidCDSCommon |
USCore Encounter Cancer Diagnoses |
11 |
define "USCore Encounter Cancer Diagnoses":
[Condition: category in "Encounter Diagnosis Condition Category"] CancerDiagnoses
where CancerDiagnoses.code in "CDC malignant cancer conditions"
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Encounters with Cancer Diagnosis During Encounter Period |
12 |
// encounter-diagnosis, problem-list and health-concern Conditions
// define "US Core-Categorized Cancer Diagnoses":
// Common."US Core-Categorized Conditions" C
// where C.code in Common."CDC malignant cancer conditions"
// define "Encounters with Cancer Diagnosis During Encounter Period":
// [Encounter] Encounter
// with "US Core-Categorized Cancer Diagnoses" CancerDiagnosis
// such that date from Encounter.period."start".value in day of "Encounter Period"
// and EndsWith(CancerDiagnosis.encounter.reference, Encounter.id)
define "Encounters with Cancer Diagnosis During Encounter Period":
[Encounter] Encounters
where date from Encounters.period."start" in day of "Encounter Period"
and exists (
Common."USCore Encounter Cancer Diagnoses" CancerDiagnoses
where EndsWith(CancerDiagnoses.encounter.reference, Encounters.id)
)
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Number of Encounters with Cancer Diagnosis During Encounter Period |
13 |
define "Number of Encounters with Cancer Diagnosis During Encounter Period":
Count ("Encounters with Cancer Diagnosis During Encounter Period")
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Has Two or More Encounters with Cancer Diagnosis During Encounter Period |
14 |
define "Has Two or More Encounters with Cancer Diagnosis During Encounter Period":
"Number of Encounters with Cancer Diagnosis During Encounter Period" >= 2
| Library Name | Name | sequence |
| OpioidCDSCommon |
USCore Problem List Cancer Diagnoses |
15 |
define "USCore Problem List Cancer Diagnoses":
[Condition: category in "Problem List Condition Category"] CancerDiagnoses
where CancerDiagnoses.code in "CDC malignant cancer conditions"
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Has Active Cancer Diagnosis on Problem List |
16 |
define "Has Active Cancer Diagnosis on Problem List":
exists (
Common."USCore Problem List Cancer Diagnoses" CancerDiagnoses
where CancerDiagnoses.category in Common."Problem List Condition Category"
and exists(
CancerDiagnoses.clinicalStatus.coding ClinicalStatus
where ClinicalStatus.code ~ 'active'
)
)
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Is Active Cancer Treatment? |
17 |
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 |
| OpioidCDSCommonConfig |
End-Stage Disease Criteria Enabled |
18 |
// CDC 2022 General Inclusion Criteria
define "End-Stage Disease Criteria Enabled":
true
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Conditions Likely Terminal for Opioid Prescribing |
19 |
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 |
CDC 2022 Guideline General Inclusion Criteria |
20 |
define "CDC 2022 Guideline General Inclusion Criteria":
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 |
21 |
define "Risk Assessment Interval":
Interval[Today() - 91 days, Today() - 1 day]
| Library Name | Name | sequence |
| OpioidCDSREC07 |
Opioid Risk Assessment in Past 90 Days |
22 |
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 |
23 |
define "Previous 10 Days Interval":
Interval[Today() - 10 days, Today()]
| Library Name | Name | sequence |
| OpioidCDSREC07 |
Encounter Interval |
24 |
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 |
25 |
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 |
26 |
define "First Month":
Interval[Today() - 3 months, Today() - 2 months]
| Library Name | Name | sequence |
| OpioidCDSCommon |
Second Month |
27 |
define "Second Month":
Interval[Today() - 2 months, Today() - 1 months]
| Library Name | Name | sequence |
| OpioidCDSCommon |
Third Month |
28 |
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 |
29 |
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 |
30 |
define "Inclusion Criteria":
"Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential"
and Routines."CDC 2022 Guideline General Inclusion Criteria"
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 |
Conditions Indicating End of Life or With Limited Life Expectancy |
31 |
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 |
| OpioidCDSCommonConfig |
Hospice Findings Exclusion Enabled |
32 |
// OpioidCDSCommon
define "Hospice Findings Exclusion Enabled":
false
| Library Name | Name | sequence |
| OpioidCDSCommon |
Admitted/Referred/Discharged to Hospice Care |
33 |
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 |
34 |
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 |
35 |
define "Exclusion Criteria":
Common."End of Life Assessment"
| Library Name | Name | sequence |
| OpioidCDSREC07 |
Is Recommendation Applicable? |
36 |
define "Is Recommendation Applicable?":
"Inclusion Criteria"
and not "Exclusion Criteria"
| Library Name | Name | sequence |
| OpioidCDSCommon |
Is Opioid Analgesic with Ambulatory Misuse Potential? |
37 |
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 |
38 |
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 |
ToString |
39 |
define function ToString(value string): value.value
| Library Name | Name | sequence |
| FHIRHelpers |
ToConcept |
40 |
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 |
| FHIRHelpers |
ToCode |
41 |
define function ToCode(coding FHIR.Coding):
if coding is null then
null
else
System.Code {
code: coding.code.value,
system: coding.system.value,
version: coding.version.value,
display: coding.display.value
}
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Is Subacute or Chronic Pain Prescription? |
42 |
// 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 |
43 |
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 |
44 |
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 |
45 |
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 |
46 |
define function ToDateTime(value dateTime): value.value
| Library Name | Name | sequence |
| FHIRHelpers |
ToInterval |
47 |
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 |
48 |
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 |
| OpioidCDSCommon |
Prescription Relevant Period |
49 |
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
|