| Library Name | Name | sequence |
| OpioidCDSREC01 |
Acute Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions |
0 |
define "Acute Pain Opioid Analgesic with Ambulatory Misuse Potential Prescriptions":
( Common."Is Opioid Analgesic with Ambulatory Misuse Potential?"( ContextPrescriptions ) ) AmbulatoryOpioidPrescription
where Routines."Is Acute Pain Prescription?"( AmbulatoryOpioidPrescription )
| Library Name | Name | sequence |
| OpioidCDSREC01 |
Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential |
1 |
define "Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential":
exists( "Acute 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 |
| OpioidCDSRoutines |
Has Opioid RX with Ambulatory Abuse Potential In Past 90 Days |
7 |
define "Has Opioid RX with Ambulatory Abuse Potential In Past 90 Days":
if (Config."Opioid Naive Prescription Condition Is Enabled") then
exists ("Opioid RX with Ambulatory Abuse Potential In Past 90 Days")
else false
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Has Opioid Dispense with Ambulatory Abuse Potential In Past 90 Days |
8 |
define "Has Opioid Dispense with Ambulatory Abuse Potential In Past 90 Days":
if (Config."Opioid Naive Prescription Condition Is Enabled") then
exists ("Opioid Dispense with Ambulatory Abuse Potential In Past 90 Days")
else false
| Library Name | Name | sequence |
| OpioidCDSRoutines |
Is Opioid Naive? |
9 |
// NOTE: MedicationStatement-dependent logic comment out due to bug in Publisher not supporting MedicationStatement in AllTypes.
define "Is Opioid Naive?":
not ("Has Opioid RX with Ambulatory Abuse Potential In Past 90 Days")
/* and not ("Has Report of Opioid with Ambulatory Care Abuse Potential Reported in Past 90 Days") */
and not ("Has Opioid Dispense with Ambulatory Abuse Potential In Past 90 Days")
| Library Name | Name | sequence |
| OpioidCDSREC01 |
Inclusion Criteria |
10 |
define "Inclusion Criteria":
"Patient Is Being Prescribed Opioid Analgesic with Ambulatory Misuse Potential"
and Routines."Is Opioid Review Useful?"
and Routines."Is Opioid Naive?"
| Library Name | Name | sequence |
| OpioidCDSREC01 |
Exclusion Criteria |
11 |
define "Exclusion Criteria":
false
| Library Name | Name | sequence |
| OpioidCDSREC01 |
Is Recommendation Applicable? |
12 |
define "Is Recommendation Applicable?":
"Inclusion Criteria"
and not "Exclusion Criteria"
| Library Name | Name | sequence |
| OpioidCDSCommon |
Is Opioid Analgesic with Ambulatory Misuse Potential? |
13 |
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 |
14 |
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 |
15 |
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 Acute Pain Prescription? |
16 |
// End of For Subacute or Chronic Pain Routine
/*
** Routine #5
** For Acute Pain Routine
**
** Definition | Answer to Proceed | Details | Data (Terminology) Requirement
** -----------------------------------------------------------------------------------------------------------------------------------
** Order for opioid analgesics | Yes | Look for an existing prescription (order) for | Opioid analgesics with
** with ambulatory misuse | | opioid analgesics with ambulatory abuse | ambulatory misuse potential
** potential of duration < 28 | | potential of duration < 28 days |
** days | | |
** -----------------------------------------------------------------------------------------------------------------------------------
**
*/
// should allow DateTime precision, but not working in the Ruler specifically
define function "Is Acute Pain Prescription?"(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 |
17 |
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
|