eCQM QICore Content Implementation Guide
2023.0.0 - CI Build

eCQM QICore Content Implementation Guide, published by cqframework. This guide is not an authorized publication; it is the continuous build for version 2023.0.0 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/cqframework/ecqm-content-qicore-2023/ and changes regularly. See the Directory of published versions

## Measure: Use of High-Risk Medications in Older AdultsFHIR

Official URL: http://ecqi.healthit.gov/ecqms/Measure/UseofHighRiskMedicationsintheElderlyFHIR | Version: 0.0.001
Draft as of 2023-10-27 | Responsible: National Committee for Quality Assurance | Computable Name: UseofHighRiskMedicationsintheElderlyFHIR
Other Identifiers: Short Name (use: usual, ), UUID:fa08c5d7-5345-4e0b-aa2d-d937099db108 (use: official, ), UUID:2c928084808a958901809a8b347f0755 (use: official, ), Publisher (use: official, )
Usage:Program: EP/EC
Copyright/Legal: This Physician Performance Measure (Measure) and related data specifications are owned and stewarded by the Centers for Medicare & Medicaid Services (CMS). CMS contracted (Contract HHSM-500-2011-00079C) with the National Committee for Quality Assurance (NCQA) to develop this electronic measure. NCQA is not responsible for any use of the Measure. NCQA makes no representations, warranties, or endorsement about the quality of any organization or physician that uses or reports performance measures and NCQA has no liability to anyone who relies on such measures or specifications. Limited proprietary coding is contained in the Measure specifications for user convenience. Users of proprietary code sets should obtain all necessary licenses from the owners of the code sets. NCQA disclaims all liability for use or accuracy of any third party codes contained in the specifications. CPT(R) codes, descriptions and other data are copyright 2022. American Medical Association. All rights reserved. CPT is a trademark of the American Medical Association. No fee schedules, basic units, relative values or related listings are included in CPT. The AMA assumes no liability for the data contained herein. Applicable FARS/DFARS restrictions apply to government use. LOINC(R) copyright 2004-2022 Regenstrief Institute, Inc. This material contains SNOMED Clinical Terms(R) (SNOMED CT[R]) copyright 2004-2022 International Health Terminology Standards Development Organisation. ICD-10 copyright 2022 World Health Organization. All Rights Reserved.

Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class. Three rates are reported.

1. Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class.
2. Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class, except for appropriate diagnoses.
3. Total rate (the sum of the two numerators divided by the denominator, deduplicating for patients in both numerators).

UNKNOWN

Title: | Use of High-Risk Medications in Older AdultsFHIR
Id: | UseofHighRiskMedicationsintheElderlyFHIR
Download cql: | UseofHighRiskMedicationsintheElderlyFHIR.cql
Version: | 0.0.001
Url: | Use of High-Risk Medications in Older AdultsFHIR
short-name identifier: | CMS156FHIR
version-independent identifier: | urn:uuid:fa08c5d7-5345-4e0b-aa2d-d937099db108
version-specific identifier: | urn:uuid:2c928084808a958901809a8b347f0755
publisher (CMS) identifier: | 156FHIR
Effective Period: | 2024-01-01 ..2024-12-31
Status: | draft
Date: | 2023-10-27 08:12:32+0000
Approval Date: | 2023-08-28
Last Review Date: | 2023-08-28
Name: | UseofHighRiskMedicationsintheElderlyFHIR
Publisher: | National Committee for Quality Assurance
Author: | National Committee for Quality Assurance: https://www.ncqa.org/
Description: | Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class. Three rates are reported. Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class. Percentage of patients 65 years of age and older who were ordered at least two high-risk medications from the same drug class, except for appropriate diagnoses. Total rate (the sum of the two numerators divided by the denominator, deduplicating for patients in both numerators).
Use Context: |
code | value
--- | ---
program |
Purpose: | UNKNOWN
Copyright: | This Physician Performance Measure (Measure) and related data specifications are owned and stewarded by the Centers for Medicare & Medicaid Services (CMS). CMS contracted (Contract HHSM-500-2011-00079C) with the National Committee for Quality Assurance (NCQA) to develop this electronic measure. NCQA is not responsible for any use of the Measure. NCQA makes no representations, warranties, or endorsement about the quality of any organization or physician that uses or reports performance measures and NCQA has no liability to anyone who relies on such measures or specifications. Limited proprietary coding is contained in the Measure specifications for user convenience. Users of proprietary code sets should obtain all necessary licenses from the owners of the code sets. NCQA disclaims all liability for use or accuracy of any third party codes contained in the specifications. CPT(R) codes, descriptions and other data are copyright 2022. American Medical Association. All rights reserved. CPT is a trademark of the American Medical Association. No fee schedules, basic units, relative values or related listings are included in CPT. The AMA assumes no liability for the data contained herein. Applicable FARS/DFARS restrictions apply to government use. LOINC(R) copyright 2004-2022 Regenstrief Institute, Inc. This material contains SNOMED Clinical Terms(R) (SNOMED CT[R]) copyright 2004-2022 International Health Terminology Standards Development Organisation. ICD-10 copyright 2022 World Health Organization. All Rights Reserved.
Disclaimer: | The performance Measure is not a clinical guideline and does not establish a standard of medical care, and has not been tested for all potential applications. THE MEASURE AND SPECIFICATIONS ARE PROVIDED "AS IS" WITHOUT WARRANTY OF ANY KIND. Due to technical limitations, registered trademarks are indicated by (R) or [R] and unregistered trademarks are indicated by (TM) or [TM].
Rationale: | Certain medications (MacKinnon & Hepler, 2003) are associated with increased risk of harm from drug side-effects and drug toxicity and pose a concern for patient safety. There is clinical consensus that these drugs pose increased risks in older adults (Kaufman, Brodin, & Sarafian, 2005). Potentially inappropriate medication use in older adults has been connected to significantly longer hospital stay lengths and increased hospitalization costs (Hagstrom et al., 2015) as well as increased risk of death (Lau et al., 2004). Use of specific high-risk medications such as hypnotics, including benzodiazepine receptor agonists, and nonsteroidal anti-inflammatory drugs (NSAIDS) can result in increased risk of delirium, falls, fractures, gastrointestinal bleeding and acute kidney injury (Merel et al., 2017). Long-term use of benzodiazepines in older adults has been associated with increased risk of dementia (Zhong et al., 2015; Takada et al., 2016). Additionally, the use of antipsychotics can lead to increased risk of stroke and greater cognitive decline in older adults with dementia (Tampi et al., 2016). Older adults receiving inappropriate medications are more likely to report poorer health status at follow-up, compared to those who receive appropriate medications (Fu, Liu, & Christensen, 2004). A study of the prevalence of potentially inappropriate medication use in older adults found that 40 percent of individuals 65 and older filled at least one prescription for a potentially inappropriate medication and 13 percent filled two or more (Fick et al., 2008). While some adverse drug events (ADEs) are unavoidable, studies estimate that between 30 and 80 percent of ADEs in older adults are preventable (MacKinnon & Hepler, 2003). More recently with the onset of the COVID-19 pandemic, several studies have shown an increase in anxiety, insomnia and depression rates, which could result in an increase in the use of high-risk medications in order to treat these conditions (Agrawal, 2020). Reducing the number of inappropriate prescriptions can lead to improved patient safety and significant cost savings. Conservative estimates of extra costs due to potentially inappropriate medications in older adults average $7.2 billion a year (Fu et al., 2007). Medication use by older adults will likely increase further as the U.S. population ages, new drugs are developed, and new therapeutic and preventive uses for medications are discovered (Rothberg et al., 2008). The annual direct costs of preventable ADEs in the Medicare population have been estimated to exceed $800 million (Institute of Medicine, 2007). By the year 2030, nearly one in five U.S. residents is expected to be aged 65 years or older; this age group is projected to more than double from 38.7 million in 2008 to more than 88.5 million in 2050. Likewise, the population aged 85 years or older is expected to increase almost four-fold, from 5.4 million to 19 million between 2008 and 2050. As the older adult population continues to grow, the number of older adults who present with multiple medical conditions for which several medications are prescribed will likely continue to increase, resulting in polypharmacy concerns (Gray & Gardner, 2009).
Clinical recommendation statement: | The measure is based on recommendations from the American Geriatrics Society Beers Criteria[R] for Potentially Inappropriate Medication Use in Older Adults (2019 Update). The criteria were developed through key clinical expert consensus processes by Beers in 1997, Zhan in 2001, and an updated process by Fick et al. in 2003, 2012, 2015, and 2019. The Beers Criteria identifies lists of drugs that are potentially inappropriate for all older adults, except for those with certain conditions for which some high-risk medications may be warranted, and drugs that are potentially inappropriate in older adults based on various high-risk factors such as dosage, days supply and underlying diseases or conditions. NCQA's Geriatric Measurement Advisory Panel recommended a subset of drugs that should be used with caution in older adults for inclusion in the measure based upon the recommendations in the Beers Criteria.
Guidance (Usage): | The intent of the measure is to assess if the patient has been ordered at least two high-risk medication prescriptions from the same drug class on different days. The intent of the measure is to assess if the reporting provider ordered the high-risk medication(s). If the patient had a high-risk medication previously prescribed by another provider, they would not be counted towards the numerator unless the reporting provider also ordered a high-risk medication from the same drug class for them. Calculate average daily dose for each prescription event. To calculate average daily dose, multiply the quantity of pills prescribed by the dose of each pill and divide by the days supply. For example, a prescription for the 30-days supply of digoxin containing 15 pills, 0.25 mg each pill, has an average daily dose of 0.125 mg. To calculate average daily dose for elixirs and concentrates, multiply the volume prescribed by daily dose and divide by the days supply. Do not round when calculating average daily dose. This eCQM is a patient-based measure. This FHIR-based measure has been derived from the QDM-based measure:  CMS156v12. Please refer to the HL7 QI-Core Implementation Guide (http://hl7.org/fhir/us/qicore/index.html) for more information on QI-Core and mapping recommendations from QDM to QI-Core 4.1.1 (http://hl7.org/fhir/us/qicore/qdm-to-qicore.html).
Population Criteria: |
649c8b4a4c79454c026f7495
Initial Population: | Patients 65 years and older at the end of the measurement period who had a visit during the measurement period
Denominator: | Equals Initial Population
Denominator Exclusion: | Exclude patients who are in hospice care for any part of the measurement period. Exclude patients receiving palliative care for any part of the measurement period.
Numerator: | Rate 1: Patients with at least two orders of high-risk medications from the same drug class on different days. a. At least two orders of high-risk medications from the same drug class. b. At least two orders of high-risk medications from the same drug class with summed days supply greater than 90 days. c. At least two orders of high-risk medications from the same drug class each exceeding average daily dose criteria.
Numerator Exclusion: | None
Denominator Exception: | None
649c8b4a4c79454c026f7496
Initial Population: | Patients 65 years and older at the end of the measurement period who had a visit during the measurement period
Denominator: | Equals Initial Population
Denominator Exclusion: | Exclude patients who are in hospice care for any part of the measurement period. Exclude patients receiving palliative care for any part of the measurement period.
Numerator: | Rate 2: Patients with at least two orders of high-risk medications from the same drug class (i.e., antipsychotics and benzodiazepines) on different days except for appropriate diagnoses. a. Patients with two or more antipsychotic prescriptions ordered on different days, and who did not have a diagnosis of schizophrenia, schizoaffective disorder, or bipolar disorder on or between January 1 of the year prior to the measurement period and the IPSD for antipsychotics. b. Patients with two or more benzodiazepine prescriptions ordered on different days, and who did not have a diagnosis of seizure disorders, rapid eye movement sleep behavior disorder, benzodiazepine withdrawal, ethanol withdrawal, or severe generalized anxiety disorder on or between January 1 of the year prior to the measurement period and the IPSD for benzodiazepines.
Numerator Exclusion: | None
Denominator Exception: | None
649c8b4a4c79454c026f7497
Initial Population: | Patients 65 years and older at the end of the measurement period who had a visit during the measurement period
Denominator: | Equals Initial Population
Denominator Exclusion: | Exclude patients who are in hospice care for any part of the measurement period. Exclude patients receiving palliative care for any part of the measurement period.
Numerator: | Total rate (the sum of the two previous numerators, deduplicated).
Numerator Exclusion: | None
Denominator Exception: | None
Libraries: |
UseofHighRiskMedicationsintheElderlyFHIR
Related Artifact Dependencies: | Status version: 1.6.000 CumulativeMedicationDuration version: 3.3.000 FHIRHelpers version: 4.3.000 QICoreCommon version: 1.5.000 CQMCommon version: 1.4.000 Hospice version: 6.7.000 PalliativeCare version: 1.7.000 RxNorm CPT SNOMED CT (all versions) Observation Category Codes LOINC Potentially Harmful Antipsychotics for Older Adults Schizophrenia Bipolar Disorder Potentially Harmful Benzodiazepines for Older Adults Seizure Disorder REM Sleep Behavior Disorder Benzodiazepine Withdrawal Alcohol Withdrawal Generalized Anxiety Disorder Potentially Harmful Antihistamines for Older Adults Potentially Harmful Antiparkinsonian Agents for Older Adults Potentially Harmful Gastrointestinal Antispasmodics for Older Adults Dipyridamole Medications Cardiovascular, alpha agonists, central Nifedipine Medications Potentially Harmful Antidepressants for Older Adults Potentially Harmful Barbiturates for Older Adults Ergoloid Mesylates Medications Meprobamate Medications Potentially Harmful Estrogens for Older Adults Potentially Harmful Sulfonylureas for Older Adults Desiccated Thyroid Medications Nonbenzodiazepine hypnotics Potentially Harmful Skeletal Muscle Relaxants for Older Adults Potentially Harmful Pain Medications for Older Adults Anti Infectives, other Reserpine Digoxin Medications Doxepin Medications Office Visit Ophthalmologic Services Preventive Care Services - Established Office Visit, 18 and Up Discharge Services - Nursing Facility Nursing Facility Visit Care Services in Long-Term Residential Facility Preventive Care Services-Initial Office Visit, 18 and Up Annual Wellness Visit Home Healthcare Services Telephone Visits Virtual Encounter Encounter Inpatient Hospice Encounter Hospice Care Ambulatory Hospice Diagnosis Palliative Care Diagnosis Palliative Care Encounter Palliative Care Intervention
Parameters: |
name | use | min | max | type
--- | --- | --- | --- | ---
Measurement Period | In | 0 | 1 | Period
ErrorLevel | In | 0 | 1 | string
Numerator 3 | Out | 0 | 1 | boolean
Denominator | Out | 0 | 1 | boolean
Numerator 1 | Out | 0 | 1 | boolean
Numerator 2 | Out | 0 | 1 | boolean
Initial Population | Out | 0 | 1 | boolean
Denominator Exclusions | Out | 0 | 1 | boolean
DataRequirements: |
Type | Elements | Valueset Name | Valueset
--- | --- | --- | ---
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Antipsychotic | Potentially Harmful Antipsychotics for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Benzodiazepine | Potentially Harmful Benzodiazepines for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Anticholinergics, first generation antihistamines | Potentially Harmful Antihistamines for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Anticholinergics, anti Parkinson agents | Potentially Harmful Antiparkinsonian Agents for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Antispasmodics | Potentially Harmful Gastrointestinal Antispasmodics for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Antithrombotic | Dipyridamole Medications
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Cardiovascular, alpha agonists, central | Cardiovascular, alpha agonists, central
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Cardiovascular, other | Nifedipine Medications
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Central nervous system, antidepressants | Potentially Harmful Antidepressants for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Central nervous system, barbiturates | Potentially Harmful Barbiturates for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Central nervous system, vasodilators | Ergoloid Mesylates Medications
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Central nervous system, other | Meprobamate Medications
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Endocrine system, estrogens with or without progestins | Potentially Harmful Estrogens for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Endocrine system, sulfonylureas, long duration | Potentially Harmful Sulfonylureas for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Endocrine system, other | Desiccated Thyroid Medications
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Nonbenzodiazepine hypnotics | Nonbenzodiazepine hypnotics
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Pain medications, skeletal muscle relaxants | Potentially Harmful Skeletal Muscle Relaxants for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Pain medications, other | Potentially Harmful Pain Medications for Older Adults
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Anti Infectives, other | Anti Infectives, other
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Reserpine | Reserpine
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Digoxin | Digoxin Medications
MedicationRequest(QICoreMedicationRequest) | medication.reference status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod |  |
MedicationRequest(QICoreMedicationRequest) | medication status status.value intent intent.value dosageInstruction dispenseRequest dispenseRequest.expectedSupplyDuration dispenseRequest.quantity dispenseRequest.numberOfRepeatsAllowed dispenseRequest.numberOfRepeatsAllowed.value authoredOn authoredOn.value dispenseRequest.validityPeriod | Doxepin | Doxepin Medications
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Medication(QICoreMedication) | id |  |
Condition(QICoreCondition) | code | Schizophrenia | Schizophrenia
Condition(QICoreCondition) | code | Bipolar Disorder | Bipolar Disorder
Condition(QICoreCondition) | code | Seizure Disorder | Seizure Disorder
Condition(QICoreCondition) | code | REM Sleep Behavior Disorder | REM Sleep Behavior Disorder
Condition(QICoreCondition) | code | Benzodiazepine Withdrawal | Benzodiazepine Withdrawal
Condition(QICoreCondition) | code | Alcohol Withdrawal | Alcohol Withdrawal
Condition(QICoreCondition) | code | Generalized Anxiety Disorder | Generalized Anxiety Disorder
Condition(QICoreCondition) | code | Hospice Diagnosis | Hospice Diagnosis
Condition(QICoreCondition) | code | Palliative Care Diagnosis | Palliative Care Diagnosis
Patient(QICorePatient) |  |  |
Encounter(QICoreEncounter) | type period status status.value |  |
Encounter(QICoreEncounter) | type period status status.value | Office Visit | Office Visit
Encounter(QICoreEncounter) | type period status status.value | Ophthalmologic Services | Ophthalmologic Services
Encounter(QICoreEncounter) | type period status status.value | Preventive Care Services Established Office Visit, 18 and Up | Preventive Care Services - Established Office Visit, 18 and Up
Encounter(QICoreEncounter) | type period status status.value | Discharge Services Nursing Facility | Discharge Services - Nursing Facility
Encounter(QICoreEncounter) | type period status status.value | Nursing Facility Visit | Nursing Facility Visit
Encounter(QICoreEncounter) | type period status status.value | Care Services in Long Term Residential Facility | Care Services in Long-Term Residential Facility
Encounter(QICoreEncounter) | type period status status.value | Preventive Care Services Initial Office Visit, 18 and Up | Preventive Care Services-Initial Office Visit, 18 and Up
Encounter(QICoreEncounter) | type period status status.value | Annual Wellness Visit | Annual Wellness Visit
Encounter(QICoreEncounter) | type period status status.value | Home Healthcare Services | Home Healthcare Services
Encounter(QICoreEncounter) | type period status status.value | Telephone Visits | Telephone Visits
Encounter(QICoreEncounter) | type period status status.value | Online Assessments | Virtual Encounter
Encounter(QICoreEncounter) | type hospitalization hospitalization.dischargeDisposition period status status.value | Encounter Inpatient | Encounter Inpatient
Encounter(QICoreEncounter) | type period status status.value | Hospice Encounter | Hospice Encounter
Encounter(QICoreEncounter) | type period status status.value | Palliative Care Encounter | Palliative Care Encounter
Observation(QICoreObservation) | code value effective status status.value category |  |
Observation(QICoreObservation) | code effective status status.value category |  |
ServiceRequest(QICoreServiceRequest) | code authoredOn authoredOn.value status status.value intent intent.value | Hospice Care Ambulatory | Hospice Care Ambulatory
Procedure(QICoreProcedure) | code performed status status.value | Hospice Care Ambulatory | Hospice Care Ambulatory
Procedure(QICoreProcedure) | code performed status status.value | Palliative Care Intervention | Palliative Care Intervention
Direct Reference Codes: |
display | code | system
--- | --- | ---
reserpine 0.1 MG Oral Tablet | 198196 | http://www.nlm.nih.gov/research/umls/rxnorm
reserpine 0.25 MG Oral Tablet | 198197 | http://www.nlm.nih.gov/research/umls/rxnorm
digoxin 0.05 MG/ML Oral Solution | 393245 | http://www.nlm.nih.gov/research/umls/rxnorm
digoxin 0.0625 MG Oral Tablet | 245273 | http://www.nlm.nih.gov/research/umls/rxnorm
1 ML digoxin 0.1 MG/ML Injection | 204504 | http://www.nlm.nih.gov/research/umls/rxnorm
digoxin 0.125 MG Oral Tablet | 197604 | http://www.nlm.nih.gov/research/umls/rxnorm
digoxin 0.1875 MG Oral Tablet | 1441565 | http://www.nlm.nih.gov/research/umls/rxnorm
digoxin 0.25 MG Oral Tablet | 197606 | http://www.nlm.nih.gov/research/umls/rxnorm
2 ML digoxin 0.25 MG/ML Injection | 104208 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin 3 MG Oral Tablet | 966787 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin 6 MG Oral Tablet | 966793 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 10 MG Oral Capsule | 1000048 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 10 MG/ML Oral Solution | 1000054 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 25 MG Oral Capsule | 1000070 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 50 MG Oral Capsule | 1000076 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 75 MG Oral Capsule | 1000097 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 100 MG Oral Capsule | 1000058 | http://www.nlm.nih.gov/research/umls/rxnorm
doxepin hydrochloride 150 MG Oral Capsule | 1000064 | http://www.nlm.nih.gov/research/umls/rxnorm
Office or other outpatient visit for the evaluation and management of an established patient, that may not require the presence of a physician or other qualified health care professional. Usually, the presenting problem(s) are minimal. | 99211 | http://www.ama-assn.org/go/cpt
Discharge to home for hospice care (procedure) | 428361000124107 | http://snomed.info/sct
Discharge to healthcare facility for hospice care (procedure) | 428371000124100 | http://snomed.info/sct
survey | survey | http://terminology.hl7.org/CodeSystem/observation-category
Hospice care [Minimum Data Set] | 45755-6 | http://loinc.org
Yes (qualifier value) | 373066001 | http://snomed.info/sct
Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal) | 71007-9 | http://loinc.org
Logic Definitions: |
Group | Scoring | Population Criteria | Expression
--- | --- | --- | ---
649c8b4a4c79454c026f7495 | Group scoring: proportion
|  | Initial Population |
    define "Initial Population":
      AgeInYearsAt(date from
        end of "Measurement Period"
      ) >= 65
        and exists ( "Qualifying Encounters" )
|  | Denominator |
    define "Denominator":
      "Initial Population"
|  | Denominator Exclusion |
    define "Denominator Exclusions":
      Hospice."Has Hospice Services"
        or PalliativeCare."Has Palliative Care in the Measurement Period"
|  | Numerator |
    define "Numerator 1":
      exists ( "Same High Risk Medications Ordered on Different Days" )
        or ( "Two High Risk Medications with Prolonged Duration" )
        or ( "High Risk Medications with Average Daily Dose Criteria" )
|  | Numerator Exclusion | None
|  | Denominator Exception | None
| 649c8b4a4c79454c026f7496 | Group scoring: proportion
|  | Initial Population |
    define "Initial Population":
      AgeInYearsAt(date from
        end of "Measurement Period"
      ) >= 65
        and exists ( "Qualifying Encounters" )
|  | Denominator |
    define "Denominator":
      "Initial Population"
|  | Denominator Exclusion |
    define "Denominator Exclusions":
      Hospice."Has Hospice Services"
        or PalliativeCare."Has Palliative Care in the Measurement Period"
|  | Numerator |
    define "Numerator 2":
      ( "More than One Antipsychotic Order"
          and ( not exists ( ( [Condition: "Schizophrenia"]
                union [Condition: "Bipolar Disorder"] ) AntipsychoticTreatedDiagnoses
                where QICoreCommon."ToPrevalenceInterval" ( AntipsychoticTreatedDiagnoses ) overlaps Interval[start of "Measurement Period" - 1 year, "Antipsychotic Index Prescription Start Date"]
            )
          )
      )
        or ( "More than One Benzodiazepine Order"
            and ( not exists ( ( [Condition: "Seizure Disorder"]
                  union [Condition: "REM Sleep Behavior Disorder"]
                  union [Condition: "Benzodiazepine Withdrawal"]
                  union [Condition: "Alcohol Withdrawal"]
                  union [Condition: "Generalized Anxiety Disorder"] ) BenzodiazepineTreatedDiagnoses
                  where QICoreCommon."ToPrevalenceInterval" ( BenzodiazepineTreatedDiagnoses ) overlaps Interval[start of "Measurement Period" - 1 year, "Benzodiazepine Index Prescription Start Date"]
              )
            )
        )
|  | Numerator Exclusion | None
|  | Denominator Exception | None
| 649c8b4a4c79454c026f7497 | Group scoring: proportion
|  | Initial Population |
    define "Initial Population":
      AgeInYearsAt(date from
        end of "Measurement Period"
      ) >= 65
        and exists ( "Qualifying Encounters" )
|  | Denominator |
    define "Denominator":
      "Initial Population"
|  | Denominator Exclusion |
    define "Denominator Exclusions":
      Hospice."Has Hospice Services"
        or PalliativeCare."Has Palliative Care in the Measurement Period"
|  | Numerator |
    define "Numerator 3":
      "Numerator 2"
        or ( "Numerator 1"
            and not "Numerator 2"
        )
|  | Numerator Exclusion | None
|  | Denominator Exception | None

Library Name | Name
--- | ---
UseofHighRiskMedicationsintheElderlyFHIR | More than One Antipsychotic Order
    define "More than One Antipsychotic Order":
      exists ( "More Than One Order"([MedicationRequest: "Antipsychotic"]) )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Antipsychotic Index Prescription Start Date
    define "Antipsychotic Index Prescription Start Date":
      First((Status."Active or Completed Medication Request"([MedicationRequest: "Antipsychotic"])) AntipsychoticMedication
          where AntipsychoticMedication.authoredOn during "Measurement Period"
          return AntipsychoticMedication.authoredOn
          sort asc
      )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | More than One Benzodiazepine Order
    define "More than One Benzodiazepine Order":
      exists ( "More Than One Order"([MedicationRequest: "Benzodiazepine"]) )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Benzodiazepine Index Prescription Start Date
    define "Benzodiazepine Index Prescription Start Date":
      First((Status."Active or Completed Medication Request"([MedicationRequest: "Benzodiazepine"])) BenzodiazepineMedication
          where BenzodiazepineMedication.authoredOn during "Measurement Period"
          return BenzodiazepineMedication.authoredOn
          sort asc
      )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Numerator 2
    define "Numerator 2":
      ( "More than One Antipsychotic Order"
          and ( not exists ( ( [Condition: "Schizophrenia"]
                union [Condition: "Bipolar Disorder"] ) AntipsychoticTreatedDiagnoses
                where QICoreCommon."ToPrevalenceInterval" ( AntipsychoticTreatedDiagnoses ) overlaps Interval[start of "Measurement Period" - 1 year, "Antipsychotic Index Prescription Start Date"]
            )
          )
      )
        or ( "More than One Benzodiazepine Order"
            and ( not exists ( ( [Condition: "Seizure Disorder"]
                  union [Condition: "REM Sleep Behavior Disorder"]
                  union [Condition: "Benzodiazepine Withdrawal"]
                  union [Condition: "Alcohol Withdrawal"]
                  union [Condition: "Generalized Anxiety Disorder"] ) BenzodiazepineTreatedDiagnoses
                  where QICoreCommon."ToPrevalenceInterval" ( BenzodiazepineTreatedDiagnoses ) overlaps Interval[start of "Measurement Period" - 1 year, "Benzodiazepine Index Prescription Start Date"]
              )
            )
        )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Same High Risk Medications Ordered on Different Days
    define "Same High Risk Medications Ordered on Different Days":
      "More Than One Order"(["MedicationRequest": "Anticholinergics, first generation antihistamines"])
        union "More Than One Order"(["MedicationRequest": "Anticholinergics, anti Parkinson agents"])
        union "More Than One Order"(["MedicationRequest": "Antispasmodics"])
        union "More Than One Order"(["MedicationRequest": "Antithrombotic"])
        union "More Than One Order"(["MedicationRequest": "Cardiovascular, alpha agonists, central"])
        union "More Than One Order"(["MedicationRequest": "Cardiovascular, other"])
        union "More Than One Order"(["MedicationRequest": "Central nervous system, antidepressants"])
        union "More Than One Order"(["MedicationRequest": "Central nervous system, barbiturates"])
        union "More Than One Order"(["MedicationRequest": "Central nervous system, vasodilators"])
        union "More Than One Order"(["MedicationRequest": "Central nervous system, other"])
        union "More Than One Order"(["MedicationRequest": "Endocrine system, estrogens with or without progestins"])
        union "More Than One Order"(["MedicationRequest": "Endocrine system, sulfonylureas, long duration"])
        union "More Than One Order"(["MedicationRequest": "Endocrine system, other"])
        union "More Than One Order"(["MedicationRequest": "Nonbenzodiazepine hypnotics"])
        union "More Than One Order"(["MedicationRequest": "Pain medications, skeletal muscle relaxants"])
        union "More Than One Order"(["MedicationRequest": "Pain medications, other"])
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Two High Risk Medications with Prolonged Duration
    define "Two High Risk Medications with Prolonged Duration":
      Sum(("More Than One Order"([MedicationRequest: "Anti Infectives, other"])) AntiInfectives
          let DaysSupply: AntiInfectives.MedicationRequestPeriodInDays()
          return all DaysSupply
      ) > 90
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | High Risk Medications with Average Daily Dose Criteria
    define "High Risk Medications with Average Daily Dose Criteria":
      exists ( "More Than One Order"([MedicationRequest: "Reserpine"] ReserpineOrdered
            where "Average Daily Dose"(ReserpineOrdered) > 0.1 'mg/d'
        )
      )
        or exists ( "More Than One Order"([MedicationRequest: "Digoxin"] DigoxinOrdered
              where "Average Daily Dose"(DigoxinOrdered) > 0.125 'mg/d'
          )
        )
        or exists ( "More Than One Order"([MedicationRequest: "Doxepin"] DoxepinOrdered
              where "Average Daily Dose"(DoxepinOrdered) > 6 'mg/d'
          )
        )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Numerator 1
    define "Numerator 1":
      exists ( "Same High Risk Medications Ordered on Different Days" )
        or ( "Two High Risk Medications with Prolonged Duration" )
        or ( "High Risk Medications with Average Daily Dose Criteria" )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Numerator 3
    define "Numerator 3":
      "Numerator 2"
        or ( "Numerator 1"
            and not "Numerator 2"
        )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Qualifying Encounters
    define "Qualifying Encounters":
      ( ["Encounter": "Office Visit"]
        union ["Encounter": "Ophthalmologic Services"]
        union ["Encounter": "Preventive Care Services Established Office Visit, 18 and Up"]
        union ["Encounter": "Discharge Services Nursing Facility"]
        union ["Encounter": "Nursing Facility Visit"]
        union ["Encounter": "Care Services in Long Term Residential Facility"]
        union ["Encounter": "Preventive Care Services Initial Office Visit, 18 and Up"]
        union ["Encounter": "Annual Wellness Visit"]
        union ["Encounter": "Home Healthcare Services"]
        union ["Encounter": "Telephone Visits"]
        union ["Encounter": "Online Assessments"]
        union ( [Encounter] E
            where exists ( ( E.type ) T
                where T ~ "Office or other outpatient visit for the evaluation and management of an established patient, that may not require the presence of a physician or other qualified health care professional. Usually, the presenting problem(s) are minimal."
            )
        ) ) ValidEncounters
        where ValidEncounters.period during "Measurement Period"
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Initial Population
    define "Initial Population":
      AgeInYearsAt(date from
        end of "Measurement Period"
      ) >= 65
        and exists ( "Qualifying Encounters" )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Denominator
    define "Denominator":
      "Initial Population"
Library Name | Name
Hospice | Has Hospice Services
    define "Has Hospice Services":
      exists ((([Encounter: "Encounter Inpatient"]).isEncounterPerformed()) InpatientEncounter
          where (InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to home for hospice care (procedure)"
              or InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to healthcare facility for hospice care (procedure)"
          )
            and InpatientEncounter.period.toInterval() ends during day of "Measurement Period"
      )
        or exists ((([Encounter: "Hospice Encounter"]).isEncounterPerformed()) HospiceEncounter
            where HospiceEncounter.period.toInterval() overlaps day of "Measurement Period"
        )
        or exists ((([Observation: "Hospice care [Minimum Data Set]"]).isAssessmentPerformed()) HospiceAssessment
            where HospiceAssessment.value ~ "Yes (qualifier value)"
              and HospiceAssessment.effective.toInterval() overlaps day of "Measurement Period"
        )
        or exists ((([ServiceRequest: "Hospice Care Ambulatory"]).isInterventionOrder()) HospiceOrder
            where HospiceOrder.authoredOn.toInterval() during day of "Measurement Period"
        )
        or exists ((([Procedure: "Hospice Care Ambulatory"]).isInterventionPerformed()) HospicePerformed
            where HospicePerformed.performed.toInterval() overlaps day of "Measurement Period"
        )
        or exists (([Condition: "Hospice Diagnosis"]) HospiceCareDiagnosis
            where HospiceCareDiagnosis.prevalenceInterval() overlaps day of "Measurement Period"
        )
Library Name | Name
PalliativeCare | Has Palliative Care in the Measurement Period
    define "Has Palliative Care in the Measurement Period":
      exists ((([Observation: "Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)"]).isAssessmentPerformed()) PalliativeAssessment
          where PalliativeAssessment.effective.toInterval() overlaps day of "Measurement Period"
      )
        or exists ([Condition: "Palliative Care Diagnosis"] PalliativeDiagnosis
            where PalliativeDiagnosis.prevalenceInterval() overlaps day of "Measurement Period"
        )
        or exists ((([Encounter: "Palliative Care Encounter"]).isEncounterPerformed()) PalliativeEncounter
            where PalliativeEncounter.period.toInterval() overlaps day of "Measurement Period"
        )
        or exists ((([Procedure: "Palliative Care Intervention"]).isInterventionPerformed()) PalliativeIntervention
            where PalliativeIntervention.performed.toInterval() overlaps day of "Measurement Period"
        )
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Denominator Exclusions
    define "Denominator Exclusions":
      Hospice."Has Hospice Services"
        or PalliativeCare."Has Palliative Care in the Measurement Period"
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | More Than One Order
    //Functions

    define function "More Than One Order"(Medication List<"MedicationRequest">):
      ( Status."Active or Completed Medication Request" ( "Medication" ) ) OrderMedication1
        with ( Status."Active or Completed Medication Request" ( "Medication" ) ) OrderMedication2
          such that ( OrderMedication1.authoredOn during "Measurement Period"
              and OrderMedication1.dispenseRequest.numberOfRepeatsAllowed >= 1
          )
            or ( date from OrderMedication1.authoredOn !~ date from OrderMedication2.authoredOn
                and OrderMedication1.authoredOn during "Measurement Period"
                and OrderMedication2.authoredOn during "Measurement Period"
            )
            or ( date from OrderMedication1.authoredOn ~ date from OrderMedication2.authoredOn
                and OrderMedication1.authoredOn during "Measurement Period"
                and date from start of CMD."MedicationRequestPeriod" ( OrderMedication1 ) !~ date from start of CMD."MedicationRequestPeriod" ( OrderMedication2 )
                and start of CMD."MedicationRequestPeriod" ( OrderMedication1 ) during "Measurement Period"
                and start of CMD."MedicationRequestPeriod" ( OrderMedication2 ) during "Measurement Period"
            )
        return OrderMedication1
Library Name | Name
Status | Active or Completed Medication Request
    //Medication, Order: active and completed only
    define function "Active or Completed Medication Request"(MedicationRequest List<MedicationRequest>):
      MedicationRequest M
        where M.status in { 'active', 'completed' }
          and M.intent = 'order'
Library Name | Name
CumulativeMedicationDuration | MedicationRequestPeriod
    /*
    Now that we have a ToDaily function, we can approach calculation of the
    duration of medication for an order. First, consider the definitions
    for each element:
    * 1 and only 1 dosageInstruction
    * 1 and only 1 doseAndRate
    * 1 timing with 1 repeat
    * frequency, frequencyMax, defaulting to 1
    * period, periodUnit, defaulting to 1 'd'
    * doseQuantity or doseRange
    * timeOfDay
    * authoredOn: The date the prescription was written
    * dispenseRequest.validityPeriod: Time period supply is authorized for
    * dispenseRequest.quantity: amount of medication supplied per dispense
    * dispenseRequest.numberOfRepeatsAllowed: number of refills authorized
    * dispenseRequest.expectedSupplyDuration: number of days supply per dispense
    * dosageInstruction.timing.repeat.boundsDuration: total duration of the repeat
    * dosageInstruction.timing.repeat.boundsRange: range of durations of the repeat
    * dosageInstruction.timing.repeat.boundsPeriod: period bounds of the repeat
    * dosageInstruction.timing.repeat.count: number of times to repeat
    * dosageInstruction.timing.repeat.countMax: maximum number of times to repeat
    * dosageInstruction.timing.repeat.frequency: event occurs frequency times per period
    * dosageInstruction.timing.repeat.frequencyMax: event occurs up to frequencyMax times per period
    * dosageInstruction.timing.repeat.period: event occurs frequency times per period
    * dosageInstruction.timing.repeat.periodMax: upper limit of period
    * dosageInstruction.timing.repeat.periodUnit: period duration (s | min | h | d | wk | mo | a)
    * dosageInstruction.timing.repeat.timeOfDay: time of day for the event (0..*)
    * dosageInstruction.timing.repeat.when: event timing (HS | WAKE | C | CM | CD | CV | AC | ACM...)
    * dosageInstruction.timing.code: BID | TID | QID | AM | PM | QD | QOD...
    * dosageInstruction.asNeeded
    * dosageInstruction.doseAndRate.doseQuantity
    * dosageInstruction.doseAndRate.doseRange
    If expectedSupplyDuration is present, then the duration is
        expectedSupplyDuration * (1 + numberOfRepeatsAllowed)
    If expectedSupplyDuration is not present, then it must be calculated based on the quantity, dosage, and frequency:
        (quantity / (dosage * frequency)) * (1 + numberOfRepeatsAllowed)
        dosage: Coalesce(end of doseAndRate.doseRange, doseAndRate.doseQuantity)
        frequency: Coalesce(frequencyMax, frequency)
        period: Quantity(period, periodUnit)
    If expectedSupplyDuration is not present and cannot be calculated, and the boundsPeriod is present (and completely specified), we can use that directly
        dosage.timing.repeat.boundsPeriod
    This calculation results in a number of days, which can then be turned into a period by anchoring that to the
    start of the validityPeriod or the authoredOn:
        Interval[earliestDispensable, earliestDispensable + expectedSupplyDuration - 1]
        earliestDispensable: Coalesce(start of validityPeriod, authoredOn)
    The following function illustrates this completely:
    */

    /*
    Calculates the Medication Period for a single MedicationRequest.
    MedicationRequest instances provided to this function are expected
    to conform to the [MMEMedicationRequest](http://build.fhir.org/ig/cqframework/opioid-mme-r4/StructureDefinition-mmemedicationrequest.html)
    profile, which expects:
    * 1 and only 1 dosageInstruction, multiple dosageInstruction elements will result in an error
    * 1 and only 1 doseAndRate, multiple doseAndRate elements will result in an error
    * 1 timing with 1 repeat, missing timing or repeat elements will result in a null
    * frequency, frequencyMax, defaulting to 1
    * period, periodUnit, defaulting to 1 'd'
    * timeOfDay
    * doseQuantity or doseRange, missing doseQuantity and doseRange will result in a null
    Note that MedicationRequest status is not considered by this calculation, as the
    list of MedicationRequest instances provided to this function should already have
    considered appropriate statuses, depending on the use case, typically `completed`.
    */
    define function MedicationRequestPeriod(Request "MedicationRequest"):
      Request R
        let
          dosage: singleton from R.dosageInstruction,
          doseAndRate: singleton from dosage.doseAndRate,
          timing: dosage.timing,
          frequency: Coalesce(timing.repeat.frequencyMax, timing.repeat.frequency),
          period: Quantity(timing.repeat.period, timing.repeat.periodUnit),
          doseRange: doseAndRate.dose,
          doseQuantity: doseAndRate.dose,
          dose: Coalesce(end of doseRange, doseQuantity),
          dosesPerDay: Coalesce(ToDaily(frequency, period), Count(timing.repeat.timeOfDay), 1.0),
          boundsPeriod: timing.repeat.bounds as Interval<DateTime>,
          daysSupply: (convert R.dispenseRequest.expectedSupplyDuration to days).value,
          quantity: R.dispenseRequest.quantity,
          refills: Coalesce(R.dispenseRequest.numberOfRepeatsAllowed, 0),
          startDate:
            Coalesce(
              date from start of boundsPeriod,
              date from R.authoredOn,
              date from start of R.dispenseRequest.validityPeriod
            ),
          totalDaysSupplied: Coalesce(daysSupply, quantity.value / (dose.value * dosesPerDay)) * (1 + refills)
        return
          if startDate is not null and totalDaysSupplied is not null then
            Interval[startDate, startDate + Quantity(totalDaysSupplied - 1, 'day') ]
          else if startDate is not null and boundsPeriod."high" is not null then
            Interval[startDate, date from end of boundsPeriod]
          else
            null
Library Name | Name
CumulativeMedicationDuration | Quantity
    /**********************************************************************/
    /* Functions in this region are copied from opioid-mme-r4             */
    /**********************************************************************/

    define function Quantity(value Decimal, unit String):
      if value is not null then
        System.Quantity { value: value, unit: unit }
      else
        null
Library Name | Name
CumulativeMedicationDuration | ToDaily
    /*
     Goal is to get to number of days
     Two broad approaches to the calculation:
      1) Based on supply and frequency, calculate the number of expected days the medication will cover/has covered
      2) Based on relevant period, determine a covered interval and calculate the length of that interval in days
    This topic covers several use cases and illustrates how to calculate Cumulative
    Medication Duration for each type of medication resource using the supply and
    frequency approach.
    */

    /*
      For the first approach, we need to get from frequency to a frequency/day
      So we define ToDaily
    */

    /*
      Calculates daily frequency given frequency within a period
    */
    define function ToDaily(frequency System.Integer, period System.Quantity):
      case period.unit
        when 'h' then frequency * (24.0 / period.value)
        when 'min' then frequency * (24.0 / period.value) * 60
        when 's' then frequency * (24.0 / period.value) * 60 * 60
        when 'd' then frequency * (24.0 / period.value) / 24
        when 'wk' then frequency * (24.0 / period.value) / (24 * 7)
        when 'mo' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
        when 'a' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
        when 'hour' then frequency * (24.0 / period.value)
        when 'minute' then frequency * (24.0 / period.value) * 60
        when 'second' then frequency * (24.0 / period.value) * 60 * 60
        when 'day' then frequency * (24.0 / period.value) / 24
        when 'week' then frequency * (24.0 / period.value) / (24 * 7)
        when 'month' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
        when 'year' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
        when 'hours' then frequency * (24.0 / period.value)
        when 'minutes' then frequency * (24.0 / period.value) * 60
        when 'seconds' then frequency * (24.0 / period.value) * 60 * 60
        when 'days' then frequency * (24.0 / period.value) / 24
        when 'weeks' then frequency * (24.0 / period.value) / (24 * 7)
        when 'months' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
        when 'years' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
        else Message(null, true, 'CMDLogic.ToDaily.UnknownUnit', ErrorLevel, 'Unknown unit ' & period.unit)
      end
Library Name | Name
QICoreCommon | ToPrevalenceInterval
    /*
    @description: Returns an interval representing the normalized prevalence period of a given Condition.
    @comment: Uses the ToInterval and ToAbatementInterval functions to determine the widest potential interval from
    onset to abatement as specified in the given Condition. If the condition is active, the resulting interval will have
    a closed ending boundary. If the condition is not active, the resulting interval will have an open ending boundary.
    @deprecated: This function is deprecated. Use the `prevalenceInterval()` fluent function instead
    */
    define function ToPrevalenceInterval(condition Condition):
    if condition.clinicalStatus ~ "active"
      or condition.clinicalStatus ~ "recurrence"
      or condition.clinicalStatus ~ "relapse" then
      Interval[start of ToInterval(condition.onset), end of ToAbatementInterval(condition)]
    else
      Interval[start of ToInterval(condition.onset), end of ToAbatementInterval(condition))
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | MedicationRequestPeriodInDays
    define fluent function MedicationRequestPeriodInDays(Request "MedicationRequest"):
      Request R
        let dosage: singleton from R.dosageInstruction,
        doseAndRate: singleton from dosage.doseAndRate,
        timing: dosage.timing,
        frequency: Coalesce(timing.repeat.frequencyMax, timing.repeat.frequency),
        period: CMD."Quantity" ( timing.repeat.period, timing.repeat.periodUnit ),
        doseRange: doseAndRate.dose,
        doseQuantity: doseAndRate.dose,
        dose: Coalesce(
          end of doseRange, doseQuantity
        ),
        dosesPerDay: Coalesce((CMD."ToDaily"(frequency, period)), Count(timing.repeat.timeOfDay), 1.0),
        boundsPeriod: timing.repeat.bounds as Interval<DateTime>,
        daysSupply: ( convert R.dispenseRequest.expectedSupplyDuration to days ).value,
        quantity: R.dispenseRequest.quantity,
        refills: Coalesce(R.dispenseRequest.numberOfRepeatsAllowed, 0),
        startDate: Coalesce(date from start of boundsPeriod, date from R.authoredOn, date from start of R.dispenseRequest.validityPeriod),
        totalDaysSupplied: Coalesce(daysSupply, quantity.value /(dose.value * dosesPerDay)) * ( 1 + refills )
        return totalDaysSupplied
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | Average Daily Dose
    define function "Average Daily Dose"(MedicationRequest "MedicationRequest"):
      MedicationRequest Order
        let MedicationStrength: Order.getMedicationCode ( ).MedicationStrengthPerUnit ( ),
        DaysSupplied: Order.MedicationRequestPeriodInDays ( )
        return if DaysSupplied is not null
          and ( MedicationStrength.unit = 'mg'
              or ( MedicationStrength.unit = 'mg/mL'
                  and Order.dispenseRequest.quantity.unit = 'mL'
              )
          ) then ( ( Order.dispenseRequest.quantity * MedicationStrength ) / Quantity { value: DaysSupplied, unit: 'd' } )
          else null
Library Name | Name
UseofHighRiskMedicationsintheElderlyFHIR | MedicationStrengthPerUnit
    define fluent function MedicationStrengthPerUnit(Strength Concept):
      case
        when Strength ~ "reserpine 0.1 MG Oral Tablet" then 0.1 'mg'
        when Strength ~ "reserpine 0.25 MG Oral Tablet" then 0.25 'mg'
        when Strength ~ "digoxin 0.05 MG/ML Oral Solution" then 0.05 'mg/mL'
        when Strength ~ "digoxin 0.0625 MG Oral Tablet" then 0.0625 'mg'
        when Strength ~ "1 ML digoxin 0.1 MG/ML Injection" then 0.1 'mg/mL'
        when Strength ~ "digoxin 0.125 MG Oral Tablet" then 0.125 'mg'
        when Strength ~ "digoxin 0.1875 MG Oral Tablet" then 0.1875 'mg'
        when Strength ~ "digoxin 0.25 MG Oral Tablet" then 0.25 'mg'
        when Strength ~ "2 ML digoxin 0.25 MG/ML Injection" then 0.25 'mg/mL'
        when Strength ~ "doxepin 3 MG Oral Tablet" then 3 'mg'
        when Strength ~ "doxepin 6 MG Oral Tablet" then 6 'mg'
        when Strength ~ "doxepin hydrochloride 10 MG Oral Capsule" then 10 'mg'
        when Strength ~ "doxepin hydrochloride 10 MG/ML Oral Solution" then 10 'mg/mL'
        when Strength ~ "doxepin hydrochloride 25 MG Oral Capsule" then 25 'mg'
        when Strength ~ "doxepin hydrochloride 50 MG Oral Capsule" then 50 'mg'
        when Strength ~ "doxepin hydrochloride 75 MG Oral Capsule" then 75 'mg'
        when Strength ~ "doxepin hydrochloride 100 MG Oral Capsule" then 100 'mg'
        when Strength ~ "doxepin hydrochloride 150 MG Oral Capsule" then 150 'mg'
        else null end
Library Name | Name
CQMCommon | getMedicationCode
    /*
    @description: Returns the medication code for the given MedicationRequest
    */
    define fluent function getMedicationCode(request MedicationRequest ):
      if request.medication is Concept then
      	  request.medication as Concept
      	else
      	  (singleton from ([Medication] M where M.id = (request.medication as Reference).reference.getId())).code
Library Name | Name
FHIRHelpers | ToConcept
    /*
    @description: Converts the given FHIR [CodeableConcept](https://hl7.org/fhir/datatypes.html#CodeableConcept) value to a CQL Concept.
    */
    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
Status | isEncounterPerformed
    define fluent function isEncounterPerformed(Enc List<Encounter>):
      Enc E
        where E.status in {'finished', 'arrived', 'triaged', 'in-progress', 'onleave'}
Library Name | Name
QICoreCommon | toInterval
    /*
    @description: Normalizes a value that is a choice of timing-valued types to an equivalent interval
    @comment: Normalizes a choice type of DateTime, Quanitty, Interval<DateTime>, or Interval<Quantity> types
    to an equivalent interval. This selection of choice types is a superset of the majority of choice types that are used as possible
    representations for timing-valued elements in QICore, allowing this function to be used across any resource.
    The input can be provided as a DateTime, Quantity, Interval<DateTime> or Interval<Quantity>.
    The intent of this function is to provide a clear and concise mechanism to treat single
    elements that have multiple possible representations as intervals so that logic doesn't have to account
    for the variability. More complex calculations (such as medication request period or dispense period
    calculation) need specific guidance and consideration. That guidance may make use of this function, but
    the focus of this function is on single element calculations where the semantics are unambiguous.
    If the input is a DateTime, the result a DateTime Interval beginning and ending on that DateTime.
    If the input is a Quantity, the quantity is expected to be a calendar-duration interpreted as an Age,
    and the result is a DateTime Interval beginning on the Date the patient turned that age and ending immediately before one year later.
    If the input is a DateTime Interval, the result is the input.
    If the input is a Quantity Interval, the quantities are expected to be calendar-durations interpreted as an Age, and the result
    is a DateTime Interval beginning on the date the patient turned the age given as the start of the quantity interval, and ending
    immediately before one year later than the date the patient turned the age given as the end of the quantity interval.
    Any other input will reslt in a null DateTime Interval
    */
    define fluent function toInterval(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>>):
      case
    	  when choice is DateTime then
        	Interval[choice as DateTime, choice as DateTime]
    		when choice is Interval<DateTime> then
      		choice as Interval<DateTime>
    		when choice is Quantity then
    		  Interval[Patient.birthDate + (choice as Quantity),
    			  Patient.birthDate + (choice as Quantity) + 1 year)
    		when choice is Interval<Quantity> then
    		  Interval[Patient.birthDate + (choice.low as Quantity),
    			  Patient.birthDate + (choice.high as Quantity) + 1 year)
    		else
    			null as Interval<DateTime>
    	end
Library Name | Name
Status | isAssessmentPerformed
    //Similar but different from QICoreCommon.isSurvey, which does not have status constraints
    define fluent function isAssessmentPerformed(Obs List<Observation>):
      Obs O
        where O.status in { 'final', 'amended', 'corrected' }
              and exists ( O.category ObservationCategory
              where ( ObservationCategory ) ~ "survey"
          )
Library Name | Name
Status | isInterventionOrder
    define fluent function isInterventionOrder(ServiceRequest List<ServiceRequest>):
      ServiceRequest S
        where S.status in { 'active', 'completed' }
          and S.intent = 'order'
Library Name | Name
Status | isInterventionPerformed
    define fluent function isInterventionPerformed(Proc List<Procedure>):
      Proc P
        where P.status ~ 'completed'
Library Name | Name
QICoreCommon | prevalenceInterval
    /*
    @description: Returns an interval representing the normalized prevalence period of a given Condition.
    @comment: Uses the ToInterval and ToAbatementInterval functions to determine the widest potential interval from
    onset to abatement as specified in the given Condition. If the condition is active, the resulting interval will have
    a closed ending boundary. If the condition is not active, the resulting interval will have an open ending boundary.
    */
    define fluent function prevalenceInterval(condition Condition):
    if condition.clinicalStatus ~ "active"
      or condition.clinicalStatus ~ "recurrence"
      or condition.clinicalStatus ~ "relapse" then
      Interval[start of condition.onset.toInterval(), end of condition.abatementInterval()]
    else
      Interval[start of condition.onset.toInterval(), end of condition.abatementInterval())