Metadata Title Colorectal Cancer ScreeningFHIR Version 0.1.000 Short Name CMS130FHIR GUID (Version Independent) urn:uuid:627c6e27-5c46-4412-941a-ca387492bbaa GUID (Version Specific) urn:uuid:3ff5ff28-e118-4433-8467-15d0a585b45d CMS Identifier 130FHIR Effective Period 2025-01-01 through 2025-12-31 Status Draft Steward (Publisher) National Committee for Quality Assurance Developer National Committee for Quality Assurance Description Percentage of adults 45-75 years of age who had appropriate screening for colorectal cancer Copyright This Physician Performance Measure (Measure) and related data specifications are owned and were developed by the National Committee for Quality Assurance (NCQA). 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. NCQA holds a copyright in the Measure. The Measure can be reproduced and distributed, without modification, for noncommercial purposes (e.g., use by healthcare providers in connection with their practices) without obtaining approval from NCQA. Commercial use is defined as the sale, licensing, or distribution of the Measure for commercial gain, or incorporation of the Measure into a product or service that is sold, licensed or distributed for commercial gain. All commercial uses or requests for modification must be approved by NCQA and are subject to a license at the discretion of NCQA. (C) 2012-2024 National Committee for Quality Assurance. All Rights Reserved. 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 2024. American Medical Association. All rights reserved. CPT is a trademark of the American Medical Association. Fee schedules, relative value units, conversion factors and/or related components are not assigned by the AMA, are not part of CPT, and the AMA is not recommending their use. The AMA does not directly or indirectly practice medicine or dispense medical services. The AMA assumes no liability for data contained or not contained herein. Applicable FARS/DFARS restrictions apply to government use. Some measure specifications contain coding from LOINC(R) (http://loinc.org). The LOINC table, LOINC codes, LOINC panels and form file, LOINC linguistic variants file, LOINC/RSNA Radiology Playbook, and LOINC/IEEE Medical Device Code Mapping Table are copyright 2004-2024 Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee, and are available at no cost under the license at http://loinc.org/terms-of-use. This material contains SNOMED Clinical Terms(R) (SNOMED CT[R]) copyright 2004-2023 International Health Terminology Standards Development Organisation. ICD-10 copyright 2024 World Health Organization. All Rights Reserved. Some measures use RxNorm, a standardized nomenclature and coding for clinical drugs and drug delivery devices, which is made publicly available courtesy of the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services. NLM is not responsible for the measures and does not endorse or recommend this or any other product. “HL7” is the registered trademark of Health Level Seven International. 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]. Measure Scoring Proportion Rationale Colorectal cancer represents eight percent of all new cancer cases in the United States. In 2020, there were an estimated 147,950 new cases of colorectal cancer and an estimated 53,200 deaths attributed to it. According to the National Cancer Institute, about 4.2 percent of men and women will be diagnosed with colorectal cancer at some point during their lifetimes. For most adults, older age is the most important risk factor for colorectal cancer, although being male and black are also associated with higher incidence and mortality. Colorectal cancer is most frequently diagnosed among people 65 to 74 years old (Howlader et al., 2020). Screening can be effective for finding precancerous lesions (polyps) that could later become malignant, and for detecting early cancers that can be more easily and effectively treated. Precancerous polyps usually take about 10 to 15 years to develop into colorectal cancer, and most can be found and removed before turning into cancer. The five-year relative survival rate for people whose colorectal cancer is found in the early stage before it has spread is about 90 percent (SEER, 2022). Clinical Recommendation Statement The U.S. Preventive Services Task Force (2021) recommends screening for colorectal cancer in adults aged 45 to 49 years. This is a Grade B recommendation (U.S. Preventive Services Task Force, 2021). The U.S. Preventive Services Task Force (2021) recommends screening for colorectal cancer in adults aged 50 to 75 years. This is a Grade A recommendation (U.S. Preventive Services Task Force, 2021). Appropriate screenings are defined by any one of the following: - Fecal occult blood test (annually) - Stool DNA (sDNA) with FIT test (every 3 years) - Flexible sigmoidoscopy (every 5 years) - Computed tomographic (CT) colonography (every 5 years) - Colonoscopy (every 10 years) Guidance (Usage) Do not count digital rectal exams (DRE), fecal occult blood tests (FOBTs) performed in an office setting or performed on a sample collected via DRE. Please note the measure may include screenings performed outside the age range of patients referenced in the initial population. Screenings that occur prior to the measurement period are valid to meet measure criteria. This eCQM is a patient-based measure. This FHIR-based measure has been derived from the QDM-based measure: CMS130v13. Please refer to the HL7 QI-Core Implementation Guide (http://hl7.org/fhir/us/qicore/STU4.1.1/) for more information on QI-Core and mapping recommendations from QDM to QI-Core 4.1.1 (http://hl7.org/fhir/us/qicore/STU4.1.1/qdm-to-qicore.html). Measure Group (Rate) (ID: 654a405f78418140875e351c) Basis boolean Scoring Proportion Improvement Notation increase Type Process Rate Aggregation None Initial Population ID: 7423DF07-8C1A-4B0C-89EA-64932F943566 Description: Patients 46-75 years of age by the end of the measurement period with a visit during the measurement period Criteria: Initial Population Denominator ID: EB843F58-5BA6-4B74-BA7D-2D313E9C1F94 Description: Equals Initial Population Criteria: Denominator Denominator Exclusion ID: 4a91dd44-46af-44ee-bcee-2bdc0e811188 Description: Exclude patients who are in hospice care for any part of the measurement period. Exclude patients with a diagnosis or past history of total colectomy or colorectal cancer. Exclude patients 66 and older by the end of the measurement period with an indication of frailty for any part of the measurement period who also meet any of the following advanced illness criteria: - Advanced illness diagnosis during the measurement period or the year prior - OR taking dementia medications during the measurement period or the year prior Exclude patients 66 and older by the end of the measurement period who are living long term in a nursing home any time on or before the end of the measurement period. Exclude patients receiving palliative care for any part of the measurement period. Criteria: Denominator Exclusion Numerator ID: AA394954-274E-4BAD-99FA-5B188C962903 Description: Patients with one or more screenings for colorectal cancer. Appropriate screenings are defined by any one of the following criteria: - Fecal occult blood test (FOBT) during the measurement period - Stool DNA (sDNA) with FIT test during the measurement period or the two years prior to the measurement period - Flexible sigmoidoscopy during the measurement period or the four years prior to the measurement period - CT Colonography during the measurement period or the four years prior to the measurement period - Colonoscopy during the measurement period or the nine years prior to the measurement period Criteria: Numerator Stratifier ID: 736a0ff4-9544-4c88-88dd-76274cc3d540 Description: Patients age 46-49 by the end of the measurement period Stratifier ID: 426f0691-b064-459c-9661-88dadc8d3f7b Description: Patients age 50-75 by the end of the measurement period Measure Logic Primary Library Colon Cancer Screening FHIR Contents Population Criteria Logic Definitions Terminology Dependencies Data Requirements Parameters Population Criteria Measure Group (Rate) (ID: 654a405f78418140875e351c) Initial Population define "Initial Population": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 75] and exists AdultOutpatientEncounters."Qualifying Encounters" Definition Denominator define "Denominator": "Initial Population" Definition Denominator Exclusion define "Denominator Exclusion": Hospice."Has Hospice Services" or exists "Malignant Neoplasm" or exists "Total Colectomy Performed" or AIFrailLTCF."Is Age 66 or Older with Advanced Illness and Frailty" or AIFrailLTCF."Is Age 66 or Older Living Long Term in a Nursing Home" or PalliativeCare."Has Palliative Care in the Measurement Period" Definition Numerator define "Numerator": exists "Fecal Occult Blood Test Performed" or exists "Stool DNA with FIT Test Performed" or exists "Flexible Sigmoidoscopy Performed" or exists "CT Colonography Performed" or exists "Colonoscopy Performed" Definition Stratifier define "Stratification 1": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 49] Definition Stratifier define "Stratification 2": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[50, 75] Definition Logic Definitions Logic Definition Library Name: AdultOutpatientEncounters define "Qualifying Encounters": ( ( [Encounter: "Office Visit"] union [Encounter: "Annual Wellness Visit"] union [Encounter: "Preventive Care Services Established Office Visit, 18 and Up"] union [Encounter: "Preventive Care Services Initial Office Visit, 18 and Up"] union [Encounter: "Home Healthcare Services"] union [Encounter: "Virtual Encounter"] union [Encounter: "Telephone Visits"] ).isEncounterPerformed() ) ValidEncounter where ValidEncounter.period.toInterval() during day of "Measurement Period" Logic Definition Library Name: Hospice 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" // and HospiceOrder.doNotPerform is not true // https://oncprojectracking.healthit.gov/support/browse/CQLIT-447 ) 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" ) Logic Definition Library Name: AdvancedIllnessandFrailty define "Has Criteria Indicating Frailty": exists ( (([DeviceRequest: "Frailty Device"]).isDeviceOrder()) FrailtyDeviceOrder where FrailtyDeviceOrder.doNotPerform() is not true and FrailtyDeviceOrder.authoredOn.toInterval() during day of "Measurement Period" ) or exists ( (([Observation: "Medical equipment used"]).isAssessmentPerformed()) EquipmentUsed where EquipmentUsed.value as Concept in "Frailty Device" and EquipmentUsed.effective.toInterval() ends during day of "Measurement Period" ) or exists ( ([Condition: "Frailty Diagnosis"]) FrailtyDiagnosis where FrailtyDiagnosis.prevalenceInterval() overlaps day of "Measurement Period" ) or exists ( (([Encounter: "Frailty Encounter"]).isEncounterPerformed()) FrailtyEncounter where FrailtyEncounter.period.toInterval() overlaps day of "Measurement Period" ) or exists ( (([Observation: "Frailty Symptom"]).isSymptom()) FrailtySymptom where FrailtySymptom.effective.toInterval() overlaps day of "Measurement Period" ) Logic Definition Library Name: AdvancedIllnessandFrailty define "Has Advanced Illness in Year Before or During Measurement Period": exists ([Condition: "Advanced Illness"] AdvancedIllnessDiagnosis where AdvancedIllnessDiagnosis.prevalenceInterval() starts during day of Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"]) Logic Definition Library Name: AdvancedIllnessandFrailty define "Has Dementia Medications in Year Before or During Measurement Period": exists (( ([MedicationRequest: medication in "Dementia Medications"]).isMedicationActive()) DementiaMedication // https://oncprojectracking.healthit.gov/support/browse/CQLIT-449 where DementiaMedication.medicationRequestPeriod() overlaps day of Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"] // and DementiaMedication.doNotPerform is not true // https://oncprojectracking.healthit.gov/support/browse/CQLIT-447 ) Logic Definition Library Name: AdvancedIllnessandFrailty define "Is Age 66 or Older with Advanced Illness and Frailty": AgeInYearsAt(date from end of "Measurement Period")>= 66 and "Has Criteria Indicating Frailty" and ( "Has Advanced Illness in Year Before or During Measurement Period" or "Has Dementia Medications in Year Before or During Measurement Period" ) Logic Definition Library Name: AdvancedIllnessandFrailty define "Is Age 66 or Older Living Long Term in a Nursing Home": AgeInYearsAt(date from end of "Measurement Period" )>= 66 and ( ( Last( (([Observation: "Housing status"]).isAssessmentPerformed()) HousingStatus where HousingStatus.effective.toInterval() ends on or before day of end of "Measurement Period" sort by end of effective.toInterval() asc )) LastHousingStatus where LastHousingStatus.value ~ "Lives in a nursing home (finding)" ) is not null Logic Definition Library Name: PalliativeCare 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" ) Logic Definition Library Name: ColonCancerScreeningFHIR define "Fecal Occult Blood Test Performed": ( ( [Observation: "Fecal Occult Blood Test (FOBT)"] ).isLaboratoryTestPerformed ( ) ) FecalOccultResult where FecalOccultResult.value is not null and FecalOccultResult.effective.latest ( ) during day of "Measurement Period" Logic Definition Library Name: ColonCancerScreeningFHIR define "Stool DNA with FIT Test Performed": ( ( [Observation: "sDNA FIT Test"] ).isLaboratoryTestPerformed ( ) ) sDNATest where sDNATest.value is not null and sDNATest.effective.latest ( ) during day of Interval[start of "Measurement Period" - 2 years, end of "Measurement Period"] Logic Definition Library Name: ColonCancerScreeningFHIR define "Flexible Sigmoidoscopy Performed": ( ( [Procedure: "Flexible Sigmoidoscopy"] ).isProcedurePerformed ( ) ) FlexibleSigmoidoscopy where FlexibleSigmoidoscopy.performed.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 4 years, end of "Measurement Period"] Logic Definition Library Name: ColonCancerScreeningFHIR define "CT Colonography Performed": ( ( [Observation: "CT Colonography"] ).isDiagnosticStudyPerformed ( ) ) Colonography where Colonography.effective.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 4 years, end of "Measurement Period"] Logic Definition Library Name: ColonCancerScreeningFHIR define "Colonoscopy Performed": ( ( [Procedure: "Colonoscopy"] ).isProcedurePerformed ( ) ) Colonoscopy where Colonoscopy.performed.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 9 years, end of "Measurement Period"] Logic Definition Library Name: ColonCancerScreeningFHIR define "Numerator": exists "Fecal Occult Blood Test Performed" or exists "Stool DNA with FIT Test Performed" or exists "Flexible Sigmoidoscopy Performed" or exists "CT Colonography Performed" or exists "Colonoscopy Performed" Logic Definition Library Name: ColonCancerScreeningFHIR define "Stratification 2": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[50, 75] Logic Definition Library Name: ColonCancerScreeningFHIR define "Stratification 1": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 49] Logic Definition Library Name: ColonCancerScreeningFHIR define "Initial Population": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 75] and exists AdultOutpatientEncounters."Qualifying Encounters" Logic Definition Library Name: ColonCancerScreeningFHIR define "Denominator": "Initial Population" Logic Definition Library Name: ColonCancerScreeningFHIR define "Malignant Neoplasm": ( [Condition: "Malignant Neoplasm of Colon"] ) ColorectalCancer where ColorectalCancer.prevalenceInterval ( ) starts on or before day of end of "Measurement Period" Logic Definition Library Name: ColonCancerScreeningFHIR define "Total Colectomy Performed": ( ( [Procedure: "Total Colectomy"] ).isProcedurePerformed ( ) ) Colectomy where Colectomy.performed.toInterval ( ) ends on or before day of end of "Measurement Period" Logic Definition Library Name: ColonCancerScreeningFHIR define "Denominator Exclusion": Hospice."Has Hospice Services" or exists "Malignant Neoplasm" or exists "Total Colectomy Performed" or AIFrailLTCF."Is Age 66 or Older with Advanced Illness and Frailty" or AIFrailLTCF."Is Age 66 or Older Living Long Term in a Nursing Home" or PalliativeCare."Has Palliative Care in the Measurement Period" Logic Definition Library Name: FHIRHelpers /* @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 } Logic Definition Library Name: FHIRHelpers /* @description: Converts the given FHIR [Coding](https://hl7.org/fhir/datatypes.html#Coding) value to a CQL Code. */ define function ToCode(coding FHIR.Coding): if coding is null then null else System.Code { code: coding.code.value, system: coding.system.value, version: coding.version.value, display: coding.display.value } Logic Definition Library Name: FHIRHelpers /* @description: Converts the given [Period](https://hl7.org/fhir/datatypes.html#Period) value to a CQL DateTime Interval @comment: If the start value of the given period is unspecified, the starting boundary of the resulting interval will be open (meaning the start of the interval is unknown, as opposed to interpreted as the beginning of time). */ define function ToInterval(period FHIR.Period): if period is null then null else if period."start" is null then Interval(period."start".value, period."end".value] else Interval[period."start".value, period."end".value] Logic Definition Library Name: QICoreCommon /* @description: Given an interval, returns the ending point if the interval has an ending boundary specified, otherwise, returns the starting point */ define fluent function latest(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>> ): (choice.toInterval()) period return if (period."hasEnd"()) then end of period else start of period Logic Definition Library Name: QICoreCommon /* @description: Given an interval, returns true if the interval has an ending boundary specified (i.e. the end of the interval is not null and not the maximum DateTime value) */ define fluent function hasEnd(period Interval<DateTime> ): not ( end of period is null or end of period = maximum DateTime ) Logic Definition Library Name: QICoreCommon /* @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. If the input is a Timing, an error will be thrown indicating that Timing calculations are not implemented. Any other input will reslt in a null DateTime Interval */ define fluent function toInterval(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>, Timing>): 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) when choice is Timing then Message(null, true, 'NOT_IMPLEMENTED', 'Error', 'Calculation of an interval from a Timing value is not supported') as Interval<DateTime> else null as Interval<DateTime> end Logic Definition Library Name: QICoreCommon /* @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, or has an abatement date the resulting interval will have a closed ending boundary. Otherwise, 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 (end of condition.abatementInterval()) abatementDate return if abatementDate is null then Interval[start of condition.onset.toInterval(), abatementDate) else Interval[start of condition.onset.toInterval(), abatementDate] Logic Definition Library Name: QICoreCommon /* @description: Returns an interval representing the normalized abatement of a given Condition. @comment: If the abatement element of the Condition is represented as a DateTime, the result is an interval beginning and ending on that DateTime. If the abatement is represented as a Quantity, the quantity is expected to be a calendar-duration and is interpreted as the age of the patient. The result is an interval from the date the patient turned that age to immediately before one year later. If the abatement is represented as a Quantity Interval, the quantities are expected to be calendar-durations and are interpreted as an age range during which the abatement occurred. The result is an interval from the date the patient turned the starting age of the quantity interval, and ending immediately before one year later than the date the patient turned the ending age of the quantity interval. */ define fluent function abatementInterval(condition Condition): if condition.abatement is DateTime then Interval[condition.abatement as DateTime, condition.abatement as DateTime] else if condition.abatement is Quantity then Interval[Patient.birthDate + (condition.abatement as Quantity), Patient.birthDate + (condition.abatement as Quantity) + 1 year) else if condition.abatement is Interval<Quantity> then Interval[Patient.birthDate + (condition.abatement.low as Quantity), Patient.birthDate + (condition.abatement.high as Quantity) + 1 year) else if condition.abatement is Interval<DateTime> then Interval[condition.abatement.low, condition.abatement.high) else null as Interval<DateTime> Logic Definition Library Name: QICoreCommon /* @description: Returns true if the given DeviceRequest is a negation (i.e. do not perform this order) */ define fluent function doNotPerform(deviceRequest DeviceRequest): singleton from ( deviceRequest.modifierExtension E where E.url = 'http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-doNotPerform' return E.value as Boolean ) Logic Definition Library Name: Status //Laboratory Test, Performed define fluent function isLaboratoryTestPerformed(Obs List<Observation>): Obs O where O.status in { 'final', 'amended', 'corrected' } and exists ( O.category ObservationCategory where ( ObservationCategory ) ~ "laboratory" ) Logic Definition Library Name: Status //Procedure, Performed define fluent function isProcedurePerformed(Proc List<Procedure>): Proc P where P.status ~ 'completed' Logic Definition Library Name: Status //Diagnostic Study, Performed define fluent function isDiagnosticStudyPerformed(Obs List<Observation>): Obs O where O.status in {'final', 'amended', 'corrected' } Logic Definition Library Name: Status //Encounter, Performed //General usage unless required otherwise by measure intent (e.g., follow-up encounters) define fluent function isEncounterPerformed(Enc List<Encounter>): Enc E where E.status in {'finished', 'arrived', 'triaged', 'in-progress', 'onleave'} Logic Definition Library Name: Status //This library contains functions that are based on QDM 5.6 to QICore 4.1.1 March 2023 (https://github.com/cqframework/CQL-Formatting-and-Usage-Wiki/wiki/Authoring-Patterns---QICore-v4.1.1). The functions may appear similar to some QICoreCommon functions but different in that they have constraints that are relevant for measures authored by NCQA. //Assessment, Performed define fluent function isAssessmentPerformed(Obs List<Observation>): Obs O where O.status in { 'final', 'amended', 'corrected' } and exists ( O.category ObservationCategory where ( ObservationCategory ) ~ "survey" ) Logic Definition Library Name: Status //Intervention, Order: active and completed only define fluent function isInterventionOrder(ServiceRequest List<ServiceRequest>): ServiceRequest S where S.status in { 'active', 'completed' } and S.intent = 'order' Logic Definition Library Name: Status //Intervention, Performed define fluent function isInterventionPerformed(Proc List<Procedure>): Proc P where P.status ~ 'completed' Logic Definition Library Name: Status //Device, Order - Personal Use Devices: active and completed only define fluent function isDeviceOrder(DeviceRequest List<DeviceRequest>): DeviceRequest D where D.status in { 'active', 'completed' } and D.intent = 'order' Logic Definition Library Name: Status //Symptom define fluent function isSymptom(Obs List<Observation>): Obs O where O.status in { 'preliminary', 'final', 'amended', 'corrected' } Logic Definition Library Name: Status //Medication, Active define fluent function isMedicationActive(MedicationRequest List<MedicationRequest>): MedicationRequest M where M.status = 'active' and M.intent = 'order' Logic Definition Library Name: CumulativeMedicationDuration define fluent 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 Logic Definition Library Name: CumulativeMedicationDuration /**********************************************************************/ /* 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 Logic Definition Library Name: CumulativeMedicationDuration /* 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 Terminology Code System Description: Code system ObservationCategoryCodes Resource: Observation Category Codes Canonical URL: http://terminology.hl7.org/CodeSystem/observation-category Code System Description: Code system SNOMEDCT Resource: SNOMED CT (all versions) Canonical URL: http://snomed.info/sct Code System Description: Code system LOINC Resource: Logical Observation Identifiers, Names and Codes (LOINC) Canonical URL: http://loinc.org Code System Description: Code system ConditionClinicalStatusCodes Resource: Condition Clinical Status Codes Canonical URL: http://terminology.hl7.org/CodeSystem/condition-clinical Value Set Description: Value set Fecal Occult Blood Test (FOBT) Resource: Fecal Occult Blood Test (FOBT) Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1011 Value Set Description: Value set sDNA FIT Test Resource: FIT DNA Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.108.12.1039 Value Set Description: Value set Flexible Sigmoidoscopy Resource: Flexible Sigmoidoscopy Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1010 Value Set Description: Value set CT Colonography Resource: CT Colonography Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.108.12.1038 Value Set Description: Value set Colonoscopy Resource: Colonoscopy Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.108.12.1020 Value Set Description: Value set Office Visit Resource: Office Visit Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1001 Value Set Description: Value set Annual Wellness Visit Resource: Annual Wellness Visit Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1240 Value Set Description: Value set Preventive Care Services Established Office Visit, 18 and Up Resource: Preventive Care Services - Established Office Visit, 18 and Up Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1025 Value Set Description: Value set Preventive Care Services Initial Office Visit, 18 and Up Resource: Preventive Care Services-Initial Office Visit, 18 and Up Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1023 Value Set Description: Value set Home Healthcare Services Resource: Home Healthcare Services Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1016 Value Set Description: Value set Virtual Encounter Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089 Value Set Description: Value set Telephone Visits Resource: Telephone Visits Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1080 Value Set Description: Value set Encounter Inpatient Resource: Encounter Inpatient Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307 Value Set Description: Value set Hospice Encounter Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1003 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1003 Value Set Description: Value set Hospice Care Ambulatory Resource: Hospice Care Ambulatory Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.526.3.1584 Value Set Description: Value set Hospice Diagnosis Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1165 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1165 Value Set Description: Value set Malignant Neoplasm of Colon Resource: Malignant Neoplasm of Colon Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.108.12.1001 Value Set Description: Value set Total Colectomy Resource: Total Colectomy Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1019 Value Set Description: Value set Frailty Device Resource: Frailty Device Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.118.12.1300 Value Set Description: Value set Frailty Diagnosis Resource: Frailty Diagnosis Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.113.12.1074 Value Set Description: Value set Frailty Encounter Resource: Frailty Encounter Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1088 Value Set Description: Value set Frailty Symptom Resource: Frailty Symptom Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.113.12.1075 Value Set Description: Value set Advanced Illness Resource: Advanced Illness Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.110.12.1082 Value Set Description: Value set Dementia Medications Resource: Dementia Medications Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.196.12.1510 Value Set Description: Value set Palliative Care Diagnosis Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1167 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1167 Value Set Description: Value set Palliative Care Encounter Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1090 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1090 Value Set Description: Value set Palliative Care Intervention Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1135 Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1135 Direct Reference Code Display: laboratory Code: laboratory System: http://terminology.hl7.org/CodeSystem/observation-category Direct Reference Code Display: Discharge to home for hospice care (procedure) Code: 428361000124107 System: http://snomed.info/sct Direct Reference Code Display: Discharge to healthcare facility for hospice care (procedure) Code: 428371000124100 System: http://snomed.info/sct Direct Reference Code Display: survey Code: survey System: http://terminology.hl7.org/CodeSystem/observation-category Direct Reference Code Display: Yes (qualifier value) Code: 373066001 System: http://snomed.info/sct Direct Reference Code Display: Hospice care [Minimum Data Set] Code: 45755-6 System: http://loinc.org Direct Reference Code Display: Active Code: active System: http://terminology.hl7.org/CodeSystem/condition-clinical Direct Reference Code Display: Recurrence Code: recurrence System: http://terminology.hl7.org/CodeSystem/condition-clinical Direct Reference Code Display: Relapse Code: relapse System: http://terminology.hl7.org/CodeSystem/condition-clinical Direct Reference Code Display: Medical equipment used Code: 98181-1 System: http://loinc.org Direct Reference Code Display: Housing status Code: 71802-3 System: http://loinc.org Direct Reference Code Display: Lives in a nursing home (finding) Code: 160734000 System: http://snomed.info/sct Direct Reference Code Display: Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal) Code: 71007-9 System: http://loinc.org Dependencies Dependency Description: QICore model information Resource: http://hl7.org/fhir/us/qicore/Library/QICore-ModelInfo|4.1.1 Canonical URL: http://hl7.org/fhir/us/qicore/Library/QICore-ModelInfo|4.1.1 Dependency Description: Library Status Resource: Statusversion: null1.8.000) Canonical URL: https://madie.cms.gov/Library/Status|1.8.000 Dependency Description: Library FHIRHelpers Resource: FHIRHelpersversion: null4.4.000) Canonical URL: https://madie.cms.gov/Library/FHIRHelpers|4.4.000 Dependency Description: Library QICoreCommon Resource: QICoreCommonversion: null2.1.000) Canonical URL: https://madie.cms.gov/Library/QICoreCommon|2.1.000 Dependency Description: Library AdultOutpatientEncounters Resource: AdultOutpatientEncountersversion: null4.11.000) Canonical URL: https://madie.cms.gov/Library/AdultOutpatientEncounters|4.11.000 Dependency Description: Library Hospice Resource: Hospiceversion: null6.12.000) Canonical URL: https://madie.cms.gov/Library/Hospice|6.12.000 Dependency Description: Library AIFrailLTCF Resource: AdvancedIllnessandFrailtyversion: null1.16.000) Canonical URL: https://madie.cms.gov/Library/AdvancedIllnessandFrailty|1.16.000 Dependency Description: Library CMD Resource: CumulativeMedicationDurationversion: null4.1.000) Canonical URL: https://madie.cms.gov/Library/CumulativeMedicationDuration|4.1.000 Dependency Description: Library PalliativeCare Resource: PalliativeCareversion: null1.11.000) Canonical URL: https://madie.cms.gov/Library/PalliativeCare|1.11.000 Data Requirements Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, value, effective, status, status.value, category Code Filter(s): Path: code ValueSet: Fecal Occult Blood Test (FOBT) Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, value, effective, status, status.value, category Code Filter(s): Path: code ValueSet: FIT DNA Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, effective, status, status.value, category Code Filter(s): Path: code ValueSet: CT Colonography Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, value, effective, status, status.value, category Code Filter(s): Path: code Code(s): LOINC: 45755-6 (Hospice care [Minimum Data Set]) Path: value Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, value, effective, status, status.value, category Code Filter(s): Path: code Code(s): LOINC: 98181-1 (Medical equipment used) Path: value ValueSet: Frailty Device Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, effective, status, status.value, category Code Filter(s): Path: code ValueSet: Frailty Symptom Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, effective, status, status.value, category Code Filter(s): Path: code Code(s): LOINC: 71802-3 (Housing status) Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, effective, value, status, status.value, category Code Filter(s): Path: code Code(s): LOINC: 71802-3 (Housing status) Path: value Data Requirement Type: Observation Profile(s): QICoreObservation Must Support Elements: code, effective, status, status.value, category Code Filter(s): Path: code Code(s): LOINC: 71007-9 (Functional Assessment of Chronic Illness Therapy - Palliative Care Questionnaire (FACIT-Pal)) Data Requirement Type: Procedure Profile(s): QICoreProcedure Must Support Elements: code, performed, status, status.value Code Filter(s): Path: code ValueSet: Flexible Sigmoidoscopy Data Requirement Type: Procedure Profile(s): QICoreProcedure Must Support Elements: code, performed, status, status.value Code Filter(s): Path: code ValueSet: Colonoscopy Data Requirement Type: Procedure Profile(s): QICoreProcedure Must Support Elements: code, performed, status, status.value Code Filter(s): Path: code ValueSet: Hospice Care Ambulatory Data Requirement Type: Procedure Profile(s): QICoreProcedure Must Support Elements: code, performed, status, status.value Code Filter(s): Path: code ValueSet: Total Colectomy Data Requirement Type: Procedure Profile(s): QICoreProcedure Must Support Elements: code, performed, status, status.value Code Filter(s): Path: code ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.198.12.1135 Data Requirement Type: Patient Profile(s): QICorePatient Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Office Visit Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Annual Wellness Visit Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Preventive Care Services - Established Office Visit, 18 and Up Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Preventive Care Services-Initial Office Visit, 18 and Up Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Home Healthcare Services Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1089 Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, status, status.value, period Code Filter(s): Path: type ValueSet: Telephone Visits Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, hospitalization, hospitalization.dischargeDisposition, period, status, status.value Code Filter(s): Path: type ValueSet: Encounter Inpatient Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, period, status, status.value Code Filter(s): Path: type ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1003 Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, period, status, status.value Code Filter(s): Path: type ValueSet: Frailty Encounter Data Requirement Type: Encounter Profile(s): QICoreEncounter Must Support Elements: type, period, status, status.value Code Filter(s): Path: type ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.101.12.1090 Data Requirement Type: ServiceRequest Profile(s): QICoreServiceRequest Must Support Elements: code, authoredOn, authoredOn.value, status, status.value, intent, intent.value Code Filter(s): Path: code ValueSet: Hospice Care Ambulatory Data Requirement Type: Condition Profile(s): QICoreCondition Must Support Elements: code Code Filter(s): Path: code ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1165 Data Requirement Type: Condition Profile(s): QICoreCondition Must Support Elements: code Code Filter(s): Path: code ValueSet: Malignant Neoplasm of Colon Data Requirement Type: Condition Profile(s): QICoreCondition Must Support Elements: code Code Filter(s): Path: code ValueSet: Frailty Diagnosis Data Requirement Type: Condition Profile(s): QICoreCondition Must Support Elements: code Code Filter(s): Path: code ValueSet: Advanced Illness Data Requirement Type: Condition Profile(s): QICoreCondition Must Support Elements: code Code Filter(s): Path: code ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.464.1003.1167 Data Requirement Type: DeviceRequest Profile(s): QICoreDeviceRequest Must Support Elements: code, status, status.value, intent, intent.value, url, url.value, value, authoredOn, authoredOn.value Code Filter(s): Path: code ValueSet: Frailty Device Data Requirement Type: MedicationRequest Profile(s): QICoreMedicationRequest Must Support Elements: medication, status, status.value, intent, intent.value, dosageInstruction, dispenseRequest, dispenseRequest.expectedSupplyDuration, dispenseRequest.quantity, dispenseRequest.numberOfRepeatsAllowed, dispenseRequest.numberOfRepeatsAllowed.value, authoredOn, authoredOn.value, dispenseRequest.validityPeriod Code Filter(s): Path: medication ValueSet: Dementia Medications Parameters Name Use Card. Type Documentation Measurement Period In 0..1 Period ErrorLevel In 0..1 string Numerator Out 0..1 boolean Stratification 2 Out 0..1 boolean Stratification 1 Out 0..1 boolean Denominator Out 0..1 boolean Initial Population Out 0..1 boolean Denominator Exclusion Out 0..1 boolean Generated using version 0.5.4-cibuild of the sample-content-ig Liquid templates
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 "Fecal Occult Blood Test Performed": ( ( [Observation: "Fecal Occult Blood Test (FOBT)"] ).isLaboratoryTestPerformed ( ) ) FecalOccultResult where FecalOccultResult.value is not null and FecalOccultResult.effective.latest ( ) during day of "Measurement Period"
define "Stool DNA with FIT Test Performed": ( ( [Observation: "sDNA FIT Test"] ).isLaboratoryTestPerformed ( ) ) sDNATest where sDNATest.value is not null and sDNATest.effective.latest ( ) during day of Interval[start of "Measurement Period" - 2 years, end of "Measurement Period"]
define "Flexible Sigmoidoscopy Performed": ( ( [Procedure: "Flexible Sigmoidoscopy"] ).isProcedurePerformed ( ) ) FlexibleSigmoidoscopy where FlexibleSigmoidoscopy.performed.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 4 years, end of "Measurement Period"]
define "CT Colonography Performed": ( ( [Observation: "CT Colonography"] ).isDiagnosticStudyPerformed ( ) ) Colonography where Colonography.effective.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 4 years, end of "Measurement Period"]
define "Colonoscopy Performed": ( ( [Procedure: "Colonoscopy"] ).isProcedurePerformed ( ) ) Colonoscopy where Colonoscopy.performed.toInterval ( ) ends during day of Interval[start of "Measurement Period" - 9 years, end of "Measurement Period"]
define "Numerator": exists "Fecal Occult Blood Test Performed" or exists "Stool DNA with FIT Test Performed" or exists "Flexible Sigmoidoscopy Performed" or exists "CT Colonography Performed" or exists "Colonoscopy Performed"
define "Stratification 2": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[50, 75]
define "Stratification 1": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 49]
define "Qualifying Encounters": ( ( [Encounter: "Office Visit"] union [Encounter: "Annual Wellness Visit"] union [Encounter: "Preventive Care Services Established Office Visit, 18 and Up"] union [Encounter: "Preventive Care Services Initial Office Visit, 18 and Up"] union [Encounter: "Home Healthcare Services"] union [Encounter: "Virtual Encounter"] union [Encounter: "Telephone Visits"] ).isEncounterPerformed() ) ValidEncounter where ValidEncounter.period.toInterval() during day of "Measurement Period"
define "Initial Population": AgeInYearsAt(date from end of "Measurement Period" ) in Interval[46, 75] and exists AdultOutpatientEncounters."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" // and HospiceOrder.doNotPerform is not true // https://oncprojectracking.healthit.gov/support/browse/CQLIT-447 ) 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" )
define "Malignant Neoplasm": ( [Condition: "Malignant Neoplasm of Colon"] ) ColorectalCancer where ColorectalCancer.prevalenceInterval ( ) starts on or before day of end of "Measurement Period"
define "Total Colectomy Performed": ( ( [Procedure: "Total Colectomy"] ).isProcedurePerformed ( ) ) Colectomy where Colectomy.performed.toInterval ( ) ends on or before day of end of "Measurement Period"
define "Has Criteria Indicating Frailty": exists ( (([DeviceRequest: "Frailty Device"]).isDeviceOrder()) FrailtyDeviceOrder where FrailtyDeviceOrder.doNotPerform() is not true and FrailtyDeviceOrder.authoredOn.toInterval() during day of "Measurement Period" ) or exists ( (([Observation: "Medical equipment used"]).isAssessmentPerformed()) EquipmentUsed where EquipmentUsed.value as Concept in "Frailty Device" and EquipmentUsed.effective.toInterval() ends during day of "Measurement Period" ) or exists ( ([Condition: "Frailty Diagnosis"]) FrailtyDiagnosis where FrailtyDiagnosis.prevalenceInterval() overlaps day of "Measurement Period" ) or exists ( (([Encounter: "Frailty Encounter"]).isEncounterPerformed()) FrailtyEncounter where FrailtyEncounter.period.toInterval() overlaps day of "Measurement Period" ) or exists ( (([Observation: "Frailty Symptom"]).isSymptom()) FrailtySymptom where FrailtySymptom.effective.toInterval() overlaps day of "Measurement Period" )
Has Advanced Illness in Year Before or During Measurement Period
define "Has Advanced Illness in Year Before or During Measurement Period": exists ([Condition: "Advanced Illness"] AdvancedIllnessDiagnosis where AdvancedIllnessDiagnosis.prevalenceInterval() starts during day of Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"])
Has Dementia Medications in Year Before or During Measurement Period
define "Has Dementia Medications in Year Before or During Measurement Period": exists (( ([MedicationRequest: medication in "Dementia Medications"]).isMedicationActive()) DementiaMedication // https://oncprojectracking.healthit.gov/support/browse/CQLIT-449 where DementiaMedication.medicationRequestPeriod() overlaps day of Interval[start of "Measurement Period" - 1 year, end of "Measurement Period"] // and DementiaMedication.doNotPerform is not true // https://oncprojectracking.healthit.gov/support/browse/CQLIT-447 )
Is Age 66 or Older with Advanced Illness and Frailty
define "Is Age 66 or Older with Advanced Illness and Frailty": AgeInYearsAt(date from end of "Measurement Period")>= 66 and "Has Criteria Indicating Frailty" and ( "Has Advanced Illness in Year Before or During Measurement Period" or "Has Dementia Medications in Year Before or During Measurement Period" )
Is Age 66 or Older Living Long Term in a Nursing Home
define "Is Age 66 or Older Living Long Term in a Nursing Home": AgeInYearsAt(date from end of "Measurement Period" )>= 66 and ( ( Last( (([Observation: "Housing status"]).isAssessmentPerformed()) HousingStatus where HousingStatus.effective.toInterval() ends on or before day of end of "Measurement Period" sort by end of effective.toInterval() asc )) LastHousingStatus where LastHousingStatus.value ~ "Lives in a nursing home (finding)" ) is not null
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 Exclusion": Hospice."Has Hospice Services" or exists "Malignant Neoplasm" or exists "Total Colectomy Performed" or AIFrailLTCF."Is Age 66 or Older with Advanced Illness and Frailty" or AIFrailLTCF."Is Age 66 or Older Living Long Term in a Nursing Home" or PalliativeCare."Has Palliative Care in the Measurement Period"
//Laboratory Test, Performed define fluent function isLaboratoryTestPerformed(Obs List<Observation>): Obs O where O.status in { 'final', 'amended', 'corrected' } and exists ( O.category ObservationCategory where ( ObservationCategory ) ~ "laboratory" )
/* @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 }
/* @description: Converts the given FHIR [Coding](https://hl7.org/fhir/datatypes.html#Coding) value to a CQL Code. */ define function ToCode(coding FHIR.Coding): if coding is null then null else System.Code { code: coding.code.value, system: coding.system.value, version: coding.version.value, display: coding.display.value }
/* @description: Given an interval, returns the ending point if the interval has an ending boundary specified, otherwise, returns the starting point */ define fluent function latest(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>> ): (choice.toInterval()) period return if (period."hasEnd"()) then end of period else start of period
/* @description: Given an interval, returns true if the interval has an ending boundary specified (i.e. the end of the interval is not null and not the maximum DateTime value) */ define fluent function hasEnd(period Interval<DateTime> ): not ( end of period is null or end of period = maximum DateTime )
//Procedure, Performed define fluent function isProcedurePerformed(Proc List<Procedure>): Proc P where P.status ~ 'completed'
//Diagnostic Study, Performed define fluent function isDiagnosticStudyPerformed(Obs List<Observation>): Obs O where O.status in {'final', 'amended', 'corrected' }
//Encounter, Performed //General usage unless required otherwise by measure intent (e.g., follow-up encounters) 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. If the input is a Timing, an error will be thrown indicating that Timing calculations are not implemented. Any other input will reslt in a null DateTime Interval */ define fluent function toInterval(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>, Timing>): 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) when choice is Timing then Message(null, true, 'NOT_IMPLEMENTED', 'Error', 'Calculation of an interval from a Timing value is not supported') as Interval<DateTime> else null as Interval<DateTime> end
/* @description: Converts the given [Period](https://hl7.org/fhir/datatypes.html#Period) value to a CQL DateTime Interval @comment: If the start value of the given period is unspecified, the starting boundary of the resulting interval will be open (meaning the start of the interval is unknown, as opposed to interpreted as the beginning of time). */ define function ToInterval(period FHIR.Period): if period is null then null else if period."start" is null then Interval(period."start".value, period."end".value] else Interval[period."start".value, period."end".value]
//This library contains functions that are based on QDM 5.6 to QICore 4.1.1 March 2023 (https://github.com/cqframework/CQL-Formatting-and-Usage-Wiki/wiki/Authoring-Patterns---QICore-v4.1.1). The functions may appear similar to some QICoreCommon functions but different in that they have constraints that are relevant for measures authored by NCQA. //Assessment, Performed define fluent function isAssessmentPerformed(Obs List<Observation>): Obs O where O.status in { 'final', 'amended', 'corrected' } and exists ( O.category ObservationCategory where ( ObservationCategory ) ~ "survey" )
//Intervention, Order: active and completed only define fluent function isInterventionOrder(ServiceRequest List<ServiceRequest>): ServiceRequest S where S.status in { 'active', 'completed' } and S.intent = 'order'
//Intervention, Performed 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, or has an abatement date the resulting interval will have a closed ending boundary. Otherwise, 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 (end of condition.abatementInterval()) abatementDate return if abatementDate is null then Interval[start of condition.onset.toInterval(), abatementDate) else Interval[start of condition.onset.toInterval(), abatementDate]
/* @description: Returns an interval representing the normalized abatement of a given Condition. @comment: If the abatement element of the Condition is represented as a DateTime, the result is an interval beginning and ending on that DateTime. If the abatement is represented as a Quantity, the quantity is expected to be a calendar-duration and is interpreted as the age of the patient. The result is an interval from the date the patient turned that age to immediately before one year later. If the abatement is represented as a Quantity Interval, the quantities are expected to be calendar-durations and are interpreted as an age range during which the abatement occurred. The result is an interval from the date the patient turned the starting age of the quantity interval, and ending immediately before one year later than the date the patient turned the ending age of the quantity interval. */ define fluent function abatementInterval(condition Condition): if condition.abatement is DateTime then Interval[condition.abatement as DateTime, condition.abatement as DateTime] else if condition.abatement is Quantity then Interval[Patient.birthDate + (condition.abatement as Quantity), Patient.birthDate + (condition.abatement as Quantity) + 1 year) else if condition.abatement is Interval<Quantity> then Interval[Patient.birthDate + (condition.abatement.low as Quantity), Patient.birthDate + (condition.abatement.high as Quantity) + 1 year) else if condition.abatement is Interval<DateTime> then Interval[condition.abatement.low, condition.abatement.high) else null as Interval<DateTime>
//Device, Order - Personal Use Devices: active and completed only define fluent function isDeviceOrder(DeviceRequest List<DeviceRequest>): DeviceRequest D where D.status in { 'active', 'completed' } and D.intent = 'order'
/* @description: Returns true if the given DeviceRequest is a negation (i.e. do not perform this order) */ define fluent function doNotPerform(deviceRequest DeviceRequest): singleton from ( deviceRequest.modifierExtension E where E.url = 'http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-doNotPerform' return E.value as Boolean )
//Symptom define fluent function isSymptom(Obs List<Observation>): Obs O where O.status in { 'preliminary', 'final', 'amended', 'corrected' }
//Medication, Active define fluent function isMedicationActive(MedicationRequest List<MedicationRequest>): MedicationRequest M where M.status = 'active' and M.intent = 'order'
define fluent 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
Code system ConditionClinicalStatusCodes
Value set Fecal Occult Blood Test (FOBT)
Value set Preventive Care Services Established Office Visit, 18 and Up
Value set Preventive Care Services Initial Office Visit, 18 and Up
National Committee for Quality Assurance
Percentage of adults 45-75 years of age who had appropriate screening for colorectal cancer
Do not count digital rectal exams (DRE), fecal occult blood tests (FOBTs) performed in an office setting or performed on a sample collected via DRE. Please note the measure may include screenings performed outside the age range of patients referenced in the initial population. Screenings that occur prior to the measurement period are valid to meet measure criteria. This eCQM is a patient-based measure. This FHIR-based measure has been derived from the QDM-based measure: CMS130v13. Please refer to the HL7 QI-Core Implementation Guide (http://hl7.org/fhir/us/qicore/STU4.1.1/) for more information on QI-Core and mapping recommendations from QDM to QI-Core 4.1.1 (http://hl7.org/fhir/us/qicore/STU4.1.1/qdm-to-qicore.html).
This Physician Performance Measure (Measure) and related data specifications are owned and were developed by the National Committee for Quality Assurance (NCQA). 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. NCQA holds a copyright in the Measure. The Measure can be reproduced and distributed, without modification, for noncommercial purposes (e.g., use by healthcare providers in connection with their practices) without obtaining approval from NCQA. Commercial use is defined as the sale, licensing, or distribution of the Measure for commercial gain, or incorporation of the Measure into a product or service that is sold, licensed or distributed for commercial gain. All commercial uses or requests for modification must be approved by NCQA and are subject to a license at the discretion of NCQA. (C) 2012-2024 National Committee for Quality Assurance. All Rights Reserved. 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 2024. American Medical Association. All rights reserved. CPT is a trademark of the American Medical Association. Fee schedules, relative value units, conversion factors and/or related components are not assigned by the AMA, are not part of CPT, and the AMA is not recommending their use. The AMA does not directly or indirectly practice medicine or dispense medical services. The AMA assumes no liability for data contained or not contained herein. Applicable FARS/DFARS restrictions apply to government use. Some measure specifications contain coding from LOINC(R) (http://loinc.org). The LOINC table, LOINC codes, LOINC panels and form file, LOINC linguistic variants file, LOINC/RSNA Radiology Playbook, and LOINC/IEEE Medical Device Code Mapping Table are copyright 2004-2024 Regenstrief Institute, Inc. and the Logical Observation Identifiers Names and Codes (LOINC) Committee, and are available at no cost under the license at http://loinc.org/terms-of-use. This material contains SNOMED Clinical Terms(R) (SNOMED CT[R]) copyright 2004-2023 International Health Terminology Standards Development Organisation. ICD-10 copyright 2024 World Health Organization. All Rights Reserved. Some measures use RxNorm, a standardized nomenclature and coding for clinical drugs and drug delivery devices, which is made publicly available courtesy of the U.S. National Library of Medicine (NLM), National Institutes of Health, Department of Health and Human Services. NLM is not responsible for the measures and does not endorse or recommend this or any other product. “HL7” is the registered trademark of Health Level Seven International.
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].
Colorectal cancer represents eight percent of all new cancer cases in the United States. In 2020, there were an estimated 147,950 new cases of colorectal cancer and an estimated 53,200 deaths attributed to it. According to the National Cancer Institute, about 4.2 percent of men and women will be diagnosed with colorectal cancer at some point during their lifetimes. For most adults, older age is the most important risk factor for colorectal cancer, although being male and black are also associated with higher incidence and mortality. Colorectal cancer is most frequently diagnosed among people 65 to 74 years old (Howlader et al., 2020). Screening can be effective for finding precancerous lesions (polyps) that could later become malignant, and for detecting early cancers that can be more easily and effectively treated. Precancerous polyps usually take about 10 to 15 years to develop into colorectal cancer, and most can be found and removed before turning into cancer. The five-year relative survival rate for people whose colorectal cancer is found in the early stage before it has spread is about 90 percent (SEER, 2022).
The U.S. Preventive Services Task Force (2021) recommends screening for colorectal cancer in adults aged 45 to 49 years. This is a Grade B recommendation (U.S. Preventive Services Task Force, 2021). The U.S. Preventive Services Task Force (2021) recommends screening for colorectal cancer in adults aged 50 to 75 years. This is a Grade A recommendation (U.S. Preventive Services Task Force, 2021). Appropriate screenings are defined by any one of the following: - Fecal occult blood test (annually) - Stool DNA (sDNA) with FIT test (every 3 years) - Flexible sigmoidoscopy (every 5 years) - Computed tomographic (CT) colonography (every 5 years) - Colonoscopy (every 10 years)
Patients 46-75 years of age by the end of the measurement period with a visit during the measurement period
Exclude patients who are in hospice care for any part of the measurement period. Exclude patients with a diagnosis or past history of total colectomy or colorectal cancer. Exclude patients 66 and older by the end of the measurement period with an indication of frailty for any part of the measurement period who also meet any of the following advanced illness criteria: - Advanced illness diagnosis during the measurement period or the year prior - OR taking dementia medications during the measurement period or the year prior Exclude patients 66 and older by the end of the measurement period who are living long term in a nursing home any time on or before the end of the measurement period. Exclude patients receiving palliative care for any part of the measurement period.
Patients with one or more screenings for colorectal cancer. Appropriate screenings are defined by any one of the following criteria: - Fecal occult blood test (FOBT) during the measurement period - Stool DNA (sDNA) with FIT test during the measurement period or the two years prior to the measurement period - Flexible sigmoidoscopy during the measurement period or the four years prior to the measurement period - CT Colonography during the measurement period or the four years prior to the measurement period - Colonoscopy during the measurement period or the nine years prior to the measurement period
Patients age 46-49 by the end of the measurement period
Patients age 50-75 by the end of the measurement period