eCQM QICore Content Implementation Guide
2023.0.0 - CI Build

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

## Measure: HIV Viral SuppressionFHIR

Official URL: http://ecqi.healthit.gov/ecqms/Measure/HIVViralSuppressionFHIR | Version: 0.0.001
Draft as of 2023-10-27 | ​ Responsible: Health Resources & Services Administration/a> | Computable Name: HIVViralSuppressionFHIR
Other Identifiers: Short Name (use: usual, ), UUID:b8aa1302-d225-4dc7-9a3b-ffec45976a3e (use: official, ), UUID:2c92808287dd6f640188b022a80a1e8d (use: official, ), Publisher (use: official, )
Usage:Program: EP/EC
Copyright/Legal: This measure was developed by the Health Resources & Services Administration (HRSA) of the U.S. Department of Health & Human Services (HHS). It is in the public domain. Citation of HRSA as the source of the original measure is appreciated. Any modified versions may not be represented as approved, endorsed, or authorized by HRSA or HHS. 42 U.S.C. Section 1320b-10. Users of modified versions should clearly explain how they deviate from HRSA’s original measure. 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. CPT(R) contained in the Measure specifications is copyright 2004-2022 American Medical Association. LOINC(R) is 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 is copyright 2022 World Health Organization. All Rights Reserved. Due to technical limitations, registered trademarks are indicated by (R) or [R] and unregistered trademarks are indicated by (TM) or [TM].

Percentage of patients, regardless of age, diagnosed with HIV prior to or during the first 90 days of the measurement period, with an eligible encounter in the first 240 days of the measurement period, whose last HIV viral load test result was less than 200 copies/mL during the measurement period

UNKNOWN

Title: | HIV Viral SuppressionFHIR
Id: | HIVViralSuppressionFHIR
Download cql: | HIVViralSuppressionFHIR.cql
Version: | 0.0.001
Url: | HIV Viral SuppressionFHIR
short-name identifier: | CMS314FHIR
version-independent identifier: | urn:uuid:b8aa1302-d225-4dc7-9a3b-ffec45976a3e
version-specific identifier: | urn:uuid:2c92808287dd6f640188b022a80a1e8d
publisher (CMS) identifier: | 314FHIR
Effective Period: | 2024-01-01 ..2024-12-31
Status: | draft
Date: | 2023-10-27 08:12:32+0000
Approval Date: | 2023-08-14
Last Review Date: | 2023-08-14
Name: | HIVViralSuppressionFHIR
Publisher: | Health Resources & Services Administration
Author: | ​Health Resources & Services Administration: https://www.hrsa.gov/
Description: | Percentage of patients, regardless of age, diagnosed with HIV prior to or during the first 90 days of the measurement period, with an eligible encounter in the first 240 days of the measurement period, whose last HIV viral load test result was less than 200 copies/mL during the measurement period
Use Context: |
code | value
--- | ---
program |
Purpose: | UNKNOWN
Copyright: | This measure was developed by the Health Resources & Services Administration (HRSA) of the U.S. Department of Health & Human Services (HHS). It is in the public domain. Citation of HRSA as the source of the original measure is appreciated. Any modified versions may not be represented as approved, endorsed, or authorized by HRSA or HHS. 42 U.S.C. Section 1320b-10. Users of modified versions should clearly explain how they deviate from HRSA's original measure. 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. CPT(R) contained in the Measure specifications is copyright 2004-2022 American Medical Association. LOINC(R) is 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 is copyright 2022 World Health Organization. All Rights Reserved. Due to technical limitations, registered trademarks are indicated by (R) or [R] and unregistered trademarks are indicated by (TM) or [TM].
Disclaimer: | These performance measures are not clinical guidelines and do not establish a standard of medical care, and have not been tested for all potential applications. THE MEASURES 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: | HIV is a communicable infection that leads to a progressive disease with a long asymptomatic period. Approximately 40,000 persons in the United States are newly infected with HIV each year (Centers for Disease Control and Prevention, 2021, p. 51). Without treatment, most persons develop acquired immunodeficiency syndrome (AIDS) within 10 years of HIV infection. HIV viral suppression is a long-standing priority outcome among the HIV community in the United States and around the world. The National HIV/AIDS Strategy for the United States from 2022-2025, developed by the White House Office of National AIDS Policy with input from the HIV community across the United States, prioritizes increasing HIV viral suppression rates to 95% (The White House, 2020). The DHHS Panel on Antiretroviral Guidelines for Adults and Adolescents defines viral suppression as a viral load below the lower limits of detection in its guidelines on virologic failure, and it defines viral suppression as a viral load of less than 200 copies/mL as part of its guidelines for the use of antiretroviral therapy to prevent HIV transmission (Panel on Antiretroviral Guidelines for Adults and Adolescents, 2022). Antiretroviral therapy (ART) delays the progression to AIDS and increases the length of survival. ART reduces HIV-associated morbidity and mortality by maximally inhibiting HIV replication to achieve viral suppression (Hogg et al., 2001; Lundgern et al., 2015). ART has also been shown to reduce transmission of HIV (Rodger et al., 2019). Studies show disparities in rates of viral suppression by race and ethnicity among MSM and among women, with Black and Hispanic or Latino/a study participants having lower rates of viral suppression than White participants (Buchacz et al., 2020; Buchacz et al., 2018; Geter et al., 2018). This measure will help providers direct their attention and quality improvement efforts towards improving HIV viral suppression rates.
Clinical recommendation statement: | Adult guidelines: "The primary goal of antiretroviral therapy (ART) is to prevent HIV-associated morbidity and mortality. This goal is accomplished by using effective ART to achieve and maintain a plasma HIV-1 RNA (viral load) below the quantification limits of commercially available assays. Durable viral suppression improves immune function and overall quality of life, lowers the risk of both AIDS-defining and non-AIDS–defining complications, and allows persons with HIV to live a lifespan approaching that of persons without HIV" (Panel on Antiretroviral Guidelines for Adults and Adolescents, 2022, p. E-1). "ART is recommended for all individuals with HIV to reduce the morbidity and mortality associated with HIV infection and to prevent HIV transmission to sexual partners and infants (AI). ART should be initiated as soon as possible after HIV diagnosis (AI)" (Panel on Antiretroviral Guidelines for Adults and Adolescents, 2022, p. E-2). "The guidelines and the AIDS Clinical Trials Group (ACTG) now define virologic failure as a confirmed viral load >200 copies/mL- a threshold that eliminates most cases of apparent viremia caused by viral load blips or assay variability" (Panel on Antiretroviral Guidelines for Adults and Adolescents, 2022, p. C-6). "Individuals who are adherent to their ARV regimen and do not harbor resistance mutations to the component drugs can generally achieve suppression 8 to 24 weeks after ART initiation; rarely, in some patients it may take longer" (Panel on Antiretroviral Guidelines for Adults and Adolescents, 2022, p. C-6). Pediatric guidelines: "Based on accumulated experience with currently available assays, the current definition of virologic suppression is a plasma viral load below the detection limit of the assay used (generally <20 to 75 copies/mL)" (Panel on Antiretroviral Therapy and Medical Management of Children Living with HIV, 2022, p. D-5). "Temporary viral load elevations ("blips") that are between the level of detection and 200 copies/mL to 500 copies/mL are often detected in adults and children who are on ART; these temporary elevations do not represent virologic failure, as long as the values have returned to below the level of detection when testing is repeated" (Panel on Antiretroviral Therapy and Medical Management of Children Living with HIV, 2022, p. D-5).
Guidance (Usage): | HIV viral load data should be captured either as a numeric value or as a character/text value, depending on whether a given viral load result falls above or below the lab’s lower limit of detection. For viral loads at or above the lower limit of detection, the viral load should be captured as a numeric value (expressed as the number of copies/mL). For viral loads below the lower limit of detection, the viral load should be populated with a character/text value equivalent to "Below lower limit of detection." The EHR need not record this character value using this exact wording (for example, the character value could be recorded as "<20 copies/mL" or "not detected"), but values below the lower limit of detection should be documented to allow the submitter to accurately map them to a value of "Below lower limit of detection" for reporting purposes. This eCQM is a patient-based measure. This FHIR-based measure has been derived from the QDM-based measure: CMS314v1. 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: |
64873a03be23a058642d5816
Initial Population: | All patients, regardless of age, diagnosed with HIV prior to or during the first 90 days of the measurement period with at least one eligible encounter in the first 240 days of the measurement period
Denominator: | Equals Initial Population
Denominator Exclusion: | None
Numerator: | Patients with a last HIV viral load test result of less than 200 copies/mL during the measurement period
Numerator Exclusion: | None
Denominator Exception: | None
Libraries: |
HIVViralSuppressionFHIR
Related Artifact Dependencies: | FHIRHelpers version: 4.3.000 QICoreCommon version: 1.5.000 SNOMED CT (all versions) HIV Viral Load HIV Office Visit Outpatient Consultation Annual Wellness Visit Face-to-Face Interaction Home Healthcare Services Preventive Care Services - Established Office Visit, 18 and Up Preventive Care Services-Initial Office Visit, 18 and Up Preventive Care Services, Initial Office Visit, 0 to 17 Preventive Care, Established Office Visit, 0 to 17 Telephone Visits Preventive Care Services - Other
Parameters: |
name | use | min | max | type
--- | --- | --- | --- | ---
Measurement Period | In | 0 | 1 | Period
Numerator | Out | 0 | 1 | boolean
Denominator | Out | 0 | 1 | boolean
Initial Population | Out | 0 | 1 | boolean
DataRequirements: |
Type | Elements | Valueset Name | Valueset
--- | --- | --- | ---
Patient(QICorePatient) |  |  |
Observation(QICoreObservation) | code effective | HIV Viral Load | HIV Viral Load
Condition(QICoreCondition) | code | HIV | HIV
Encounter(QICoreEncounter) | type period | Office Visit | Office Visit
Encounter(QICoreEncounter) | type period | Outpatient Consultation | Outpatient Consultation
Encounter(QICoreEncounter) | type period | Annual Wellness Visit | Annual Wellness Visit
Encounter(QICoreEncounter) | type period | Face-to-Face Interaction | Face-to-Face Interaction
Encounter(QICoreEncounter) | type period | Home Healthcare Services | Home Healthcare Services
Encounter(QICoreEncounter) | type period | Preventive Care Services Established Office Visit, 18 and Up | Preventive Care Services - Established Office Visit, 18 and Up
Encounter(QICoreEncounter) | type period | Preventive Care Services Initial Office Visit, 18 and Up | Preventive Care Services-Initial Office Visit, 18 and Up
Encounter(QICoreEncounter) | type period | Preventive Care Services, Initial Office Visit, 0 to 17 | Preventive Care Services, Initial Office Visit, 0 to 17
Encounter(QICoreEncounter) | type period | Preventive Care, Established Office Visit, 0 to 17 | Preventive Care, Established Office Visit, 0 to 17
Encounter(QICoreEncounter) | type period | Telephone Visits | Telephone Visits
Encounter(QICoreEncounter) | type period | Preventive Care Services Other | Preventive Care Services - Other
Direct Reference Codes: |
display | code | system
--- | --- | ---
Below threshold level (qualifier value) | 260988000 | http://snomed.info/sct
Not detected (qualifier value) | 260415000 | http://snomed.info/sct
Logic Definitions: |
Group | Scoring | Population Criteria | Expression
--- | --- | --- | ---
64873a03be23a058642d5816 | Group scoring: proportion
|  | Initial Population |
    define "Initial Population":
      "Has Active HIV Diagnosis Before or in First 90 Days of Measurement Period"
        and "Has Qualifying Encounter During First 240 Days of Measurement Period"
|  | Denominator |
    define "Denominator":
      "Initial Population"
|  | Denominator Exclusion | None
|  | Numerator |
    define "Numerator":
      "Most Recent Viral Load Test During Measurement Period".value < 200 '{copies}/mL'
        or "Most Recent Viral Load Test During Measurement Period".value ~ "Below threshold level (qualifier value)"
        or "Most Recent Viral Load Test During Measurement Period".value ~ "Not detected (qualifier value)"
|  | Numerator Exclusion | None
|  | Denominator Exception | None

Library Name | Name
--- | ---
HIVViralSuppressionFHIR | Most Recent Viral Load Test During Measurement Period
    define "Most Recent Viral Load Test During Measurement Period":
      Last(["Observation": "HIV Viral Load"] ViralLoad
          where QICoreCommon."Latest"(ViralLoad.effective) during day of "Measurement Period"
          sort by start of QICoreCommon."ToInterval"(effective)
      )
Library Name | Name
HIVViralSuppressionFHIR | Numerator
    define "Numerator":
      "Most Recent Viral Load Test During Measurement Period".value < 200 '{copies}/mL'
        or "Most Recent Viral Load Test During Measurement Period".value ~ "Below threshold level (qualifier value)"
        or "Most Recent Viral Load Test During Measurement Period".value ~ "Not detected (qualifier value)"
Library Name | Name
HIVViralSuppressionFHIR | Has Active HIV Diagnosis Before or in First 90 Days of Measurement Period
    define "Has Active HIV Diagnosis Before or in First 90 Days of Measurement Period":
      exists ["Condition": "HIV"] HIVDx
        where QICoreCommon."ToPrevalenceInterval" ( HIVDx ) starts before day of ( start of "Measurement Period" + 90 days )
Library Name | Name
HIVViralSuppressionFHIR | Has Qualifying Encounter During First 240 Days of Measurement Period
    define "Has Qualifying Encounter During First 240 Days of Measurement Period":
      exists ( ["Encounter": "Office Visit"]
        union ["Encounter": "Outpatient Consultation"]
        union ["Encounter": "Annual Wellness Visit"]
        union ["Encounter": "Face-to-Face Interaction"]
        union ["Encounter": "Home Healthcare Services"]
        union ["Encounter": "Preventive Care Services Established Office Visit, 18 and Up"]
        union ["Encounter": "Preventive Care Services Initial Office Visit, 18 and Up"]
        union ["Encounter": "Preventive Care Services, Initial Office Visit, 0 to 17"]
        union ["Encounter": "Preventive Care, Established Office Visit, 0 to 17"]
        union ["Encounter": "Telephone Visits"]
        union ["Encounter": "Preventive Care Services Other"] ) QualifyingEncounter
        where QualifyingEncounter.period during day of Interval[start of "Measurement Period", start of "Measurement Period" + 240 days]
Library Name | Name
HIVViralSuppressionFHIR | Initial Population
    define "Initial Population":
      "Has Active HIV Diagnosis Before or in First 90 Days of Measurement Period"
        and "Has Qualifying Encounter During First 240 Days of Measurement Period"
Library Name | Name
HIVViralSuppressionFHIR | Denominator
    define "Denominator":
      "Initial Population"
Library Name | Name
QICoreCommon | Latest
    /*
    @description: Given an interval, returns the ending point if the interval has an ending boundary specified,
    otherwise, returns the starting point
    @deprecated: This function is deprecated. Use the fluent function `latest()` instead
    */
    define function "Latest"(choice Choice<DateTime, Quantity, Interval<DateTime>, Interval<Quantity>> ):
      (choice.toInterval()) period
        return
          if (HasEnd(period)) then end of period
          else start of period
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
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
    @deprecated: This function is deprecated. Use the fluent function `toInterval()` instead
    */
    define 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)
    		when choice is QICore.Timing then
                null as Interval<DateTime>
    		else
    			null as Interval<DateTime>
    	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))