Clinical Quality Language Specification
1.5.3 - Release 1 Errata 2

Clinical Quality Language Specification, published by Clinical Decision Support WG. This guide is not an authorized publication; it is the continuous build for version 1.5.3 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/cql/ and changes regularly. See the Directory of published versions

Binary: Example CMS179v2 Quality Measure CQL Library (using QUICK)

    
library CMS179 version '2'

// Warfarin time in therapeutic range

using QUICK

valueset "Flutter Diagnosis": '2.16.840.1.113883.3.117.1.7.1.202'
valueset "Warfarin Medication": '2.16.840.1.113883.3.117.1.7.1.232'
valueset "Face-to-face Encounter": '2.16.840.1.113883.3.464.1003.101.12.1048'
valueset "Office Visit": '2.16.840.1.113883.3.464.1003.101.12.1001'
valueset "Valvular Heart Disease": '2.16.840.1.113883.3.464.1003.104.12.1017'
valueset "INR Lab Result": '2.16.840.1.113883.3.117.1.7.1.213'

parameter MeasurementPeriod default Interval[DateTime(2013, 1, 1, 0, 0, 0, 0), DateTime(2014, 1, 1, 0, 0, 0, 0))

context Patient

define "FlutterDiagnoses": ["Condition": "Flutter Diagnosis"]
define "WarfarinMedications": ["MedicationAdministration": "Warfarin Medication"]
define "FaceToFaceEncounters": ["Encounter": "Face-to-face Encounter"]
define "OfficeVisitEncounters": ["Encounter": "Office Visit"]
define "ValvularHeartDiseaseDiagnoses": ["Condition": "Valvular Heart Disease"]
define "INRLabResults": ["Observation": "INR Lab Result"]

define "InDemographic":
	AgeInYearsAt(start of MeasurementPeriod) >= 18

define "InpatientEncounters": "FaceToFaceEncounters" union "OfficeVisitEncounters"
define "ActiveFlutterDiagnoses": "FlutterDiagnoses" F where Interval[F."onsetDateTime", F."abatementDate"] overlaps before MeasurementPeriod
define "ActiveValvularHeartDiseaseDiagnoses": "ValvularHeartDiseaseDiagnoses" D where Interval[D."onsetDateTime", D."abatementDate"] overlaps before MeasurementPeriod

define "LookbackInterval": Interval[start of MeasurementPeriod - 200 days, start of MeasurementPeriod]

define "ActiveWarfarinDuringLookback":
	"WarfarinMedications" M where M."effectiveTimePeriod" overlaps "LookbackInterval"

define "WarfarinUsageIntervals":
	collapse
		"ActiveWarfarinDuringLookback" M
			return M."effectiveTimePeriod" intersect "LookbackInterval"

define "WarfarinUsage": Sum("WarfarinUsageIntervals" I return duration in days of I)

define "INROutpatientLabResult":
	"INRLabResults" R
		where not exists ("InpatientEncounters" E where duration in hours of E."period" > 23 and R."appliesDateTime" occurs during E."period")

define "INRResultsByDay":
	"INROutpatientLabResult" L
		where L."valueQuantity"."value" > 0.8 // TODO: Units?
		return
			Tuple
			{
				resultDate: date from L."appliesDateTime",
				result: if L."valueQuantity"."value" > 10.0 then 10.0 else L."valueQuantity"."value", // TODO: Units?
				distanceFromMidpoint: Abs(2.5 - L."valueQuantity"."value") // TODO: Units?
			}

define "INRResultsPerDay":
	(
	    (distinct "INRResultsByDay" X return X.resultDate) D
		    return First("INRResultsByDay" R where R.resultDate = D sort by R.distanceFromMidpoint)
    ) X
	sort by X.resultDate

define "TherapeuticRange": Interval[2.0, 3.0] // TODO: Units?

define "INRIntervals":
	("INRResultsPerDay" S return Tuple { startResult: S, endResult: First("INRResultsPerDay" E where S.resultDate > E.resultDate) }) X
		return
			Tuple
			{
				startDate: X.startResult.resultDate,
				endDate: X.endResult.resultDate,
				resultDays: days between X.startResult.resultDate and X.endResult.resultDate,
				resultDifference: X.endResult.result - X.startResult.result,
				resultsWithinBounds: X.startResult.result in "TherapeuticRange" and X.endResult.result in "TherapeuticRange",
				boundedDifference:
					if X.endResult.result >= X.startResult.result
						then
						(
							if X.startResult.result > end of "TherapeuticRange" or X.endResult.result < start of "TherapeuticRange"
								then null
								else Min({X.endResult.result, end of "TherapeuticRange"}) - Max({X.startResult.result, start of "TherapeuticRange"})
						)
						else
						(
							if X.endResult.result > end of "TherapeuticRange" or X.startResult.result < start of "TherapeuticRange"
								then null
								else Min({X.startResult.result, end of "TherapeuticRange"}) - Max({X.endResult.result, start of "TherapeuticRange"})
						),
				isValid: days between X.startResult.resultDate and X.endResult.resultDate <= 56
			}

define "TherapeuticDays":
	"INRIntervals" I
		return
			Tuple
			{
				startDate: I.startDate,
				endDate : I.endDate,
				isValid : I.isValid,
				resultDays : I.resultDays,
				daysInRange :
					if I.resultsWithinBounds
						then I.resultDays
						else Coalesce(I.resultDays * Abs(I.boundedDifference / (if I.resultDays = 0 then null else I.resultDays)), 0)
			}

define "TherapeuticTimeInRange":
	Round(100 * (Sum("TherapeuticDays" X return X.daysInRange) / Sum("TherapeuticDays" X return X.resultDays)))

define "NumberOfValidIntervals": Count("TherapeuticDays" D where D.isValid)

define "HasValidIntervals": "NumberOfValidIntervals" >= 2

define "InitialPopulation":
	"InDemographic"
		and exists ("InpatientEncounters")
		and exists ("ActiveFlutterDiagnoses")
		and "WarfarinUsage" >= 180
		and not exists ("ActiveValvularHeartDiseaseDiagnoses")

define "MeasurePopulation":
	"HasValidIntervals"

define "MeasureObservation":
	"TherapeuticTimeInRange"

context Population

define "MeasureScore": Avg("MeasureObservation")