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())
doxepin hydrochloride 10 MG Oral Capsule
doxepin hydrochloride 10 MG/ML Oral Solution
doxepin hydrochloride 25 MG Oral Capsule
doxepin hydrochloride 50 MG Oral Capsule
doxepin hydrochloride 75 MG Oral Capsule
doxepin hydrochloride 100 MG Oral Capsule
doxepin hydrochloride 150 MG Oral Capsule
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.
Discharge to home for hospice care (procedure)
Discharge to healthcare facility for hospice care (procedure)
Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)
define "More than One Antipsychotic Order": exists ( "More Than One Order"([MedicationRequest: "Antipsychotic"]) )
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 )
define "More than One Benzodiazepine Order": exists ( "More Than One Order"([MedicationRequest: "Benzodiazepine"]) )
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 )
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"] ) ) )
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"])
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
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' ) )
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" )
define "Numerator 3": "Numerator 2" or ( "Numerator 1" and not "Numerator 2" )
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"
define "Initial Population": AgeInYearsAt(date from end of "Measurement Period" ) >= 65 and exists ( "Qualifying Encounters" )
define "Denominator": "Initial Population"
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" )
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" )
define "Denominator Exclusions": Hospice."Has Hospice Services" or PalliativeCare."Has Palliative Care in the Measurement Period"
//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
//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'
/* 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
/* 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
/* @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))
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
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
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
/* @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
/* @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 }
define fluent function isEncounterPerformed(Enc List<Encounter>): Enc E where E.status in {'finished', 'arrived', 'triaged', 'in-progress', 'onleave'}
/* @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
//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" )
define fluent function isInterventionOrder(ServiceRequest List<ServiceRequest>): ServiceRequest S where S.status in { 'active', 'completed' } and S.intent = 'order'
define fluent function isInterventionPerformed(Proc List<Procedure>): Proc P where P.status ~ 'completed'
/* @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())
Value set Anticholinergics, first generation antihistamines
Value set Anticholinergics, anti Parkinson agents
Value set Cardiovascular, alpha agonists, central
Value set Central nervous system, antidepressants
Value set Central nervous system, barbiturates
Value set Central nervous system, vasodilators
Value set Endocrine system, estrogens with or without progestins
Value set Endocrine system, sulfonylureas, long duration
Value set Pain medications, skeletal muscle relaxants
Value set Preventive Care Services Established Office Visit, 18 and Up
Value set Discharge Services Nursing Facility
Value set Care Services in Long Term Residential Facility
Value set Preventive Care Services Initial Office Visit, 18 and Up
Use of High-Risk Medications in Older AdultsFHIR
National Committee for Quality Assurance
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).
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).
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.
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].
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).
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.
Patients 65 years and older at the end of the measurement period who had a visit during the measurement period
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.
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.
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.
Total rate (the sum of the two previous numerators, deduplicated).