| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Numerator |
|
define "Numerator":
exists ( ( ( [Observation: "Chlamydia Screening"] ).isLaboratoryTestPerformed ( ) ) ChlamydiaTest
where ChlamydiaTest.effective.latest ( ) during day of "Measurement Period"
and ChlamydiaTest.value is not null
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Stratification 2 |
|
define "Stratification 2":
AgeInYearsAt(date from
end of "Measurement Period"
) in Interval[21, 24]
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Stratification 1 |
|
define "Stratification 1":
AgeInYearsAt(date from
end of "Measurement Period"
) in Interval[16, 20]
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Qualifying Encounters |
|
define "Qualifying Encounters":
( ( [Encounter: "Office 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: "Preventive Care Services, Initial Office Visit, 0 to 17"]
union [Encounter: "Preventive Care, Established Office Visit, 0 to 17"]
union [Encounter: "Home Healthcare Services"]
union [Encounter: "Telephone Visits"]
union [Encounter: "Virtual Encounter"]
).isEncounterPerformed ( ) ) ValidEncounters
where ValidEncounters.period.toInterval ( ) during day of "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Assessments Identifying Sexual Activity |
|
define "Has Assessments Identifying Sexual Activity":
exists ( ( ( [Observation: "Have you ever had vaginal intercourse [PhenX]"] ).isAssessmentPerformed ( ) ) SexualActivityAssessment
where SexualActivityAssessment.value ~ "Yes (qualifier value)"
and SexualActivityAssessment.effective.toInterval ( ) on or before end of "Measurement Period"
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Diagnoses Identifying Sexual Activity |
|
define "Has Diagnoses Identifying Sexual Activity":
exists ( ( [Condition: "Diagnoses Used to Indicate Sexual Activity"]
union [Condition: "HIV"]
union [Condition: "Complications of Pregnancy, Childbirth and the Puerperium"] ) SexualActivityDiagnosis
where SexualActivityDiagnosis.prevalenceInterval ( ) overlaps "Measurement Period"
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Active Contraceptive Medications |
|
define "Has Active Contraceptive Medications":
exists ( ( [MedicationRequest: "Contraceptive Medications"] ).isMedicationActive ( ) ) ActiveContraceptives
where ActiveContraceptives.medicationRequestPeriod ( ) overlaps "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Ordered Contraceptive Medications |
|
define "Has Ordered Contraceptive Medications":
exists ( ( [MedicationRequest: "Contraceptive Medications"] ).isMedicationOrder ( ) ) OrderedContraceptives
where OrderedContraceptives.authoredOn.toInterval ( ) during day of "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Laboratory Tests Identifying Sexual Activity But Not Pregnancy |
|
define "Has Laboratory Tests Identifying Sexual Activity But Not Pregnancy":
exists ( ( [ServiceRequest: "Pap Test"]
union [ServiceRequest: "Lab Tests During Pregnancy"]
union [ServiceRequest: "Lab Tests for Sexually Transmitted Infections"]
).isLaboratoryTestOrder ( ) ) LabOrders
where LabOrders.authoredOn.toInterval ( ) during day of "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Laboratory Tests Identifying Sexual Activity |
|
// and LabOrders.doNotPerform is not true
// https://oncprojectracking.healthit.gov/support/browse/CQLIT-447
define "Has Laboratory Tests Identifying Sexual Activity":
exists ( ( ( [ServiceRequest: "Pregnancy Test"] ).isLaboratoryTestOrder ( ) ) PregnancyTest
where PregnancyTest.authoredOn.toInterval ( ) during day of "Measurement Period"
// and PregnancyTest.doNotPerform is not true
// https://oncprojectracking.healthit.gov/support/browse/CQLIT-447
)
or "Has Laboratory Tests Identifying Sexual Activity But Not Pregnancy"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Diagnostic Studies Identifying Sexual Activity |
|
define "Has Diagnostic Studies Identifying Sexual Activity":
exists ( ( [ServiceRequest: "Diagnostic Studies During Pregnancy"] ).isDiagnosticStudyOrder ( ) ) SexualActivityDiagnostics
where SexualActivityDiagnostics.authoredOn.toInterval ( ) during day of "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Procedures Identifying Sexual Activity |
|
// and SexualActivityDiagnostics.doNotPerform is not true
// https://oncprojectracking.healthit.gov/support/browse/CQLIT-447
define "Has Procedures Identifying Sexual Activity":
exists ( ( [Procedure: "Procedures Used to Indicate Sexual Activity"] ).isProcedurePerformed ( ) ) ProceduresForSexualActivity
where ProceduresForSexualActivity.performed.toInterval ( ) during day of "Measurement Period"
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Initial Population |
|
define "Initial Population":
AgeInYearsAt(date from
end of "Measurement Period"
) in Interval[16, 24]
and Patient.gender = 'female'
and exists ( "Qualifying Encounters" )
and ( ( "Has Assessments Identifying Sexual Activity" )
or ( "Has Diagnoses Identifying Sexual Activity" )
or ( "Has Active Contraceptive Medications" )
or ( "Has Ordered Contraceptive Medications" )
or ( "Has Laboratory Tests Identifying Sexual Activity" )
or ( "Has Diagnostic Studies Identifying Sexual Activity" )
or ( "Has Procedures Identifying Sexual Activity" )
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Denominator |
|
define "Denominator":
"Initial Population"
|
| Library Name |
Name |
| Hospice |
Has Hospice Services |
|
define "Has Hospice Services":
exists ((([Encounter: "Encounter Inpatient"]).isEncounterPerformed()) InpatientEncounter
where (InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to home for hospice care (procedure)"
or InpatientEncounter.hospitalization.dischargeDisposition ~ "Discharge to healthcare facility for hospice care (procedure)"
)
and InpatientEncounter.period.toInterval() ends during day of "Measurement Period"
)
or exists ((([Encounter: "Hospice Encounter"]).isEncounterPerformed()) HospiceEncounter
where HospiceEncounter.period.toInterval() overlaps day of "Measurement Period"
)
or exists ((([Observation: "Hospice care [Minimum Data Set]"]).isAssessmentPerformed()) HospiceAssessment
where HospiceAssessment.value ~ "Yes (qualifier value)"
and HospiceAssessment.effective.toInterval() overlaps day of "Measurement Period"
)
or exists ((([ServiceRequest: "Hospice Care Ambulatory"]).isInterventionOrder()) HospiceOrder
where HospiceOrder.authoredOn.toInterval() during day of "Measurement Period"
// 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"
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Has Pregnancy Test Exclusion |
|
define "Has Pregnancy Test Exclusion":
exists ( ( ( ( [ServiceRequest: "Pregnancy Test"] ).isLaboratoryTestOrder ( ) ) PregnancyTest
with ( ( [ServiceRequest: "XRay Study"] ).isDiagnosticStudyOrder ( ) ) XrayOrder
such that XrayOrder.authoredOn.toInterval ( ) occurs 6 days or less on or after day of PregnancyTest.authoredOn.toInterval ( )
where PregnancyTest.authoredOn.toInterval ( ) during "Measurement Period"
// and PregnancyTest.doNotPerform is not true
// https://oncprojectracking.healthit.gov/support/browse/CQLIT-447
)
union ( ( ( [ServiceRequest: "Pregnancy Test"] ).isLaboratoryTestOrder ( ) ) PregnancyTestOrder
with ( ( [MedicationRequest: "Isotretinoin"] ).isMedicationOrder ( ) ) AccutaneOrder
such that AccutaneOrder.authoredOn.toInterval ( ) occurs 6 days or less on or after day of PregnancyTestOrder.authoredOn.toInterval ( )
where PregnancyTestOrder.authoredOn.toInterval ( ) during "Measurement Period"
// and PregnancyTestOrder.doNotPerform is not true
// https://oncprojectracking.healthit.gov/support/browse/CQLIT-447
)
)
|
| Library Name |
Name |
| ChlamydiaScreeninginWomenFHIR |
Denominator Exclusions |
|
define "Denominator Exclusions":
Hospice."Has Hospice Services"
or ( ( "Has Pregnancy Test Exclusion" )
and not ( "Has Assessments Identifying Sexual Activity" )
and not ( "Has Diagnoses Identifying Sexual Activity" )
and not ( "Has Active Contraceptive Medications" )
and not ( "Has Ordered Contraceptive Medications" )
and not ( "Has Laboratory Tests Identifying Sexual Activity But Not Pregnancy" )
and not ( "Has Diagnostic Studies Identifying Sexual Activity" )
and not ( "Has Procedures Identifying Sexual Activity" )
)
|
| Library Name |
Name |
| Status |
isLaboratoryTestPerformed |
|
//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"
)
|
| Library Name |
Name |
| FHIRHelpers |
ToConcept |
|
/*
@description: Converts the given FHIR [CodeableConcept](https://hl7.org/fhir/datatypes.html#CodeableConcept) value to a CQL Concept.
*/
define function ToConcept(concept FHIR.CodeableConcept):
if concept is null then
null
else
System.Concept {
codes: concept.coding C return ToCode(C),
display: concept.text.value
}
|
| Library Name |
Name |
| FHIRHelpers |
ToCode |
|
/*
@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
}
|
| 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
*/
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
|
| Library Name |
Name |
| QICoreCommon |
hasEnd |
|
/*
@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
)
|
| Library Name |
Name |
| Status |
isEncounterPerformed |
|
//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'}
|
| 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.
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
|
| Library Name |
Name |
| FHIRHelpers |
ToInterval |
|
/*
@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]
|
| Library Name |
Name |
| Status |
isAssessmentPerformed |
|
//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"
)
|
| Library Name |
Name |
| QICoreCommon |
prevalenceInterval |
|
/*
@description: Returns an interval representing the normalized prevalence period of a given Condition.
@comment: Uses the ToInterval and ToAbatementInterval functions to determine the widest potential interval from
onset to abatement as specified in the given Condition. If the condition is active, 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]
|
| Library Name |
Name |
| QICoreCommon |
abatementInterval |
|
/*
@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>
|
| Library Name |
Name |
| Status |
isMedicationActive |
|
//Medication, Active
define fluent function isMedicationActive(MedicationRequest List<MedicationRequest>):
MedicationRequest M
where M.status = 'active'
and M.intent = 'order'
|
| Library Name |
Name |
| CumulativeMedicationDuration |
medicationRequestPeriod |
|
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
|
| Library Name |
Name |
| CumulativeMedicationDuration |
Quantity |
|
/**********************************************************************/
/* Functions in this region are copied from opioid-mme-r4 */
/**********************************************************************/
define function Quantity(value Decimal, unit String):
if value is not null then
System.Quantity { value: value, unit: unit }
else
null
|
| Library Name |
Name |
| CumulativeMedicationDuration |
ToDaily |
|
/*
Goal is to get to number of days
Two broad approaches to the calculation:
1) Based on supply and frequency, calculate the number of expected days the medication will cover/has covered
2) Based on relevant period, determine a covered interval and calculate the length of that interval in days
This topic covers several use cases and illustrates how to calculate Cumulative
Medication Duration for each type of medication resource using the supply and
frequency approach.
*/
/*
For the first approach, we need to get from frequency to a frequency/day
So we define ToDaily
*/
/*
Calculates daily frequency given frequency within a period
*/
define function ToDaily(frequency System.Integer, period System.Quantity):
case period.unit
when 'h' then frequency * (24.0 / period.value)
when 'min' then frequency * (24.0 / period.value) * 60
when 's' then frequency * (24.0 / period.value) * 60 * 60
when 'd' then frequency * (24.0 / period.value) / 24
when 'wk' then frequency * (24.0 / period.value) / (24 * 7)
when 'mo' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
when 'a' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
when 'hour' then frequency * (24.0 / period.value)
when 'minute' then frequency * (24.0 / period.value) * 60
when 'second' then frequency * (24.0 / period.value) * 60 * 60
when 'day' then frequency * (24.0 / period.value) / 24
when 'week' then frequency * (24.0 / period.value) / (24 * 7)
when 'month' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
when 'year' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
when 'hours' then frequency * (24.0 / period.value)
when 'minutes' then frequency * (24.0 / period.value) * 60
when 'seconds' then frequency * (24.0 / period.value) * 60 * 60
when 'days' then frequency * (24.0 / period.value) / 24
when 'weeks' then frequency * (24.0 / period.value) / (24 * 7)
when 'months' then frequency * (24.0 / period.value) / (24 * 30) /* assuming 30 days in month */
when 'years' then frequency * (24.0 / period.value) / (24 * 365) /* assuming 365 days in year */
else Message(null, true, 'CMDLogic.ToDaily.UnknownUnit', ErrorLevel, 'Unknown unit ' & period.unit)
end
|
| Library Name |
Name |
| Status |
isMedicationOrder |
|
//Medication, Order: active and completed only
define fluent function isMedicationOrder(MedicationRequest List<MedicationRequest>):
MedicationRequest M
where M.status in { 'active', 'completed' }
and M.intent = 'order'
|
| Library Name |
Name |
| Status |
isLaboratoryTestOrder |
|
//Laboratory Test, Order: active and completed only
define fluent function isLaboratoryTestOrder(ServiceRequest List<ServiceRequest>):
ServiceRequest S
where S.status in { 'active', 'completed' }
and S.intent = 'order'
|
| Library Name |
Name |
| Status |
isDiagnosticStudyOrder |
|
//Diagnostic Study, Order: active and completed only
define fluent function isDiagnosticStudyOrder(ServiceRequest List<ServiceRequest>):
ServiceRequest S
where S.status in { 'active', 'completed' }
and S.intent = 'order'
|
| Library Name |
Name |
| Status |
isProcedurePerformed |
|
//Procedure, Performed
define fluent function isProcedurePerformed(Proc List<Procedure>):
Proc P
where P.status ~ 'completed'
|
| Library Name |
Name |
| Status |
isInterventionOrder |
|
//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'
|
| Library Name |
Name |
| Status |
isInterventionPerformed |
|
//Intervention, Performed
define fluent function isInterventionPerformed(Proc List<Procedure>):
Proc P
where P.status ~ 'completed'
|