Situational Awareness for Novel Epidemic Response
1.0.1 - CI Build International flag

Situational Awareness for Novel Epidemic Response, published by HL7 International / Public Health. This guide is not an authorized publication; it is the continuous build for version 1.0.1 built by the FHIR (HL7® FHIR® Standard) CI Build. This version is based on the current content of https://github.com/HL7/fhir-saner/ and changes regularly. See the Directory of published versions

Example Measure: Computable CDC Patient Impact and Hospital Capacity

Draft as of 2024-01-25

Patient Impact and Hospital Capacity

The url for this measure is http://hl7.org/fhir/uv/saner/Measure/ComputableCDCPatientImpactAndHospitalCapacity.

This measure demonstrates automated reporting on bed availability and use at a facility location based on CDC/NHSN reporting requirements. It is used to illustrate automation of measure reporting using the SANER Implementation guide.

Frequency
This measure is expected to be reported every 1 day.
Publisher
HL7 International
Contacts
HL7 Public Health Workgroup (http://hl7.org/Special/committees/pher/index.cfm)
Keith W. Boone (mailto:kboone@ainq.com)
Status
draft

Definitions

Ventilator
Any device used to support, assist or control respiration (inclusive of the weaning period) through the application of positive pressure to the airway when delivered via an artificial airway, specifically an oral/nasal endotracheal or tracheostomy tube. Note: Ventilation and lung expansion devices that deliver positive pressure to the airway (for example: CPAP, BiPAP, bi-level, IPPB and PEEP) via non-invasive means (for example: nasal prongs, nasal mask, full face mask, total mask, etc.) are not considered ventilators unless positive pressure is delivered via an artificial airway (oral/nasal endotracheal or tracheostomy tube).
Beds
Baby beds in mom's room count as 1 bed, even if there are multiple baby beds Follow-up in progress if staffed is less than licensed. Total includes all beds, even if with surge beds it exceeds licensed beds.
ICU beds
Include NICU

Group: Hospital COVID-19 Patient Encounters Reporting

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasureGroupSystem#Encounters Encounters
subject
Patient in room
scoring
queue-length
type
structure
improvementNotation
decrease
Population: Patients with suspected or confirmed COVID-19 in any location.

Active encounters where the encounter diagnosis is suspected or confirmed COVID-19, or a Condition of suspected or confirmed COVID-19 was created during that encounter. This includes the patients with laboratory-confirmed or clinically diagnosed COVID-19.

Confirmed
A patient with a laboratory confirmed COVID-19 diagnosis
Suspected
A patient without a laboratory confirmed COVID-19 diagnosis who, in accordance with CDC’s Interim Public Health Guidance for Evaluating Persons Under Investigation (PUIs), has signs and symptoms compatible with COVID-19 (most patients with confirmed COVID-19 have developed fever and/or symptoms of acute respiratory illness, such as cough, shortness of breath or myalgia/fatigue).

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numC19Pats All COVID-19 Confirmed or Suspected Patients
  • http://terminology.hl7.org/CodeSystem/measure-population#initial-population
Expression: NumC19Pats

This expression finds encounters that were active or finished in the reporting period, and their referenced Patient, Condition and Observation resources. It filters these based on cases where Encounter reports a reason or condition in the SuspectedOrDiagnosedCOVID19 value set, or where a positive lab test from the Covid19Labs valueset, or where the patient has any such associated Condition or Observation resources in the prior two weeks.

Language
text/fhirpath
 ( %Base + 'Encounter?' + '_include=Encounter:subject&_include=Encounter:Condition&' + '_include=Encounter:reasonReference' + '&status=in-progress,finished' + '&date=ge' + %ReportingPeriod.start.toString() + '&date=lt' + %ReportingPeriod.end.toString() ).resolve().select(entry.resource). where( iif(myMemberOf((Encounter.reasonCode | Condition.code), %SuspectedOrConfirmedCOVID19Diagnoses.url) | Observation.where((myMemberOf(code, %Covid19Labs.url) and myMemberOf(value, %PositiveResults.url)) ), true, iif( Patient.distinct().where( %Base + 'Observation?_count=1' + '&status=registered,preliminary,final,amended,corrected' + '&patient=' + $this.id + '&date=gt' + (dateSubtract(%ReportingPeriod.start, 14 'days')).toString() + '&code:in=' + %Covid19Labs.url + '&value-concept:in=' + %PositiveResults.url ).resolve().select(entry.resource as Observation).exists(), true, Patient.distinct().where( %Base + 'Condition?_count=1'+ '&status:not=refuted&status:not=entered-in-error' + '&patient=' + $this.id + '&verificationStatus:not=refuted,entered-in-error' + '&date=gt' + (dateSubtract(%ReportingPeriod.start, 14 'days')).toString() + '&code:in=' + SuspectedOrConfirmedCOVID19Diagnoses.url ).resolve().select(entry.resource as Condition).exists() ) ) ) .distinct() .aggregate( iif($total.subject contains $this.subject, $total, $total | $this ) )
Stratifier: By Location and Ventilator Status

Stratifies the population by Location (inpatient vs ED/Overflow/Other) and Ventilator Status (Ventilated vs Not Ventilated)

Expression
Language
text/fhirpath
iif(%NumVentUse.id contains Encounter.subject, iif(myMemberOf(Encounter.location.location.resolve().type, %InpatientLocations.url), 'InpVentilated', 'OFVentilated'), iif(myMemberOf(Encounter.location.location.resolve().type, %InpatientLocations.url), 'InpNotVentilated', 'OFNotVentilated') )

Group: Hospital Onset COVID-19 Patient Encounters Reporting

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasureGroupSystem#AcquiredCovid Acquired COVID-19 in Hospital
subject
Hospital Acquired COVID-19
scoring
event-growth
type
outcome
improvementNotation
decrease
Population: Patients with suspected or confirmed COVID-19 in an inpatient location

Patients with suspected or confirmed COVID-19 in an inpatient location

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numC19HospPats Hospitalized COVID-19 Patients
  • http://terminology.hl7.org/CodeSystem/measure-population#initial-population
Expression: NumC19HospPats

Uses the value of NumC19Pat as the initial population

Language
text/fhirpath
%NumC19Pats.entry.resource.location.location.resolve().where(myMemberOf(type, %InpatientLocations.url))
Population: Hospital Onset COVID-19 Patients

Hospital Onset COVID-19 Patients

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numC19HOPats Hospital Onset COVID-19 Patients
  • http://terminology.hl7.org/CodeSystem/measure-population#numerator
Expression: NumC19HOPats

Filters the initial population by ruling out those patients whose first suspected or confirmed diagnosis or lab result appears less than 14 days from admission.

Language
text/fhirpath
Encounter.where( iif(dateAdd(period.start,14 'days') > today(), false, iif( (%Base + 'Condition?_count=1'+ '&status:not=refuted&status:not=entered-in-error' + '&patient=' + $this.subject + '&verificationStatus:not=refuted,entered-in-error' + '&date=gt' + (dateAdd($this.period.start,14 'days')).toString() + '&date=le' + (dateSubtract($this.period.start,14 'days')).toString() + '&code:in=' + %SuspectedOrConfirmedCOVID19Diagnoses.url ).resolve().select(entry.resource as Condition).exists(), false, (%Base + 'Observation?_count=1' + '&status=registered,preliminary,final,amended,corrected' + '&patient=' + $this.subject + '&date=gt' + (dateSubtract($this.period.start, 14 'days')).toString() + '&date=le' + (dateAdd($this.period.start,14 'days')).toString() + '&code:in=' + %Covid19Labs.url + '&value-concept:in=' + %PositiveResults.url ).resolve().select(entry.resource as Observation) .empty() ) ) ).select(patient).resolve().trace('patients', id)
Population: Cumulative Hospital Onset COVID-19 Patients

Cumulative Hospital Onset COVID-19 Patients

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#cumC19HOPats Cumulative Hospital Onset COVID-19 Patients
  • http://terminology.hl7.org/CodeSystem/measure-population#denominator
Expression: CumC19HOPats

omputes the cumulative total from the prior measure report and the number of new infections detected in the current reporting period.

Language
text/fhirpath
iif(%PriorReport.empty(), 0, %PriorReport.group[1].population[2].count + %NumC19HOPats.total)
Stratifier: By Age Group

Stratifies the population by Age Group

Expression
Language
text/fhirpath
Patient.select( iif(dateAdd(birthDate, 20 'years') < today(), 'P0Y--P20Y', iif(dateAdd(birthDate, 30 'years') < today(), 'P20Y--P30Y', iif(dateAdd(birthDate, 40 'years') < today(), 'P30Y--P40Y', iif(dateAdd(birthDate, 50 'years') < today(), 'P40Y--P50Y', iif(dateAdd(birthDate, 60 'years') < today(), 'P50Y--P60Y', iif(dateAdd(birthDate, 70 'years') < today(), 'P60Y--P70Y', iif(dateAdd(birthDate, 80 'years') < today(), 'P70Y--P80Y', 'P80Y-P9999Y') ) ) ) ) ) ) )
Stratifier: By Gender

Stratifies the population by Gender

Expression
Language
text/fhirpath
Patient.gender
Stratifier: By Ethnicity

Stratifies the population by Ethnicity

Expression
Language
text/fhirpath
Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-ethnicity-category').extension('ombCategory').valueCoding.code
Stratifier: By Race

Stratifies the population by Race

Expression
Language
text/fhirpath
Patient .extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-race') .extension('ombCategory') .select( iif(valueCoding.count() > 1, 'Mixed', iif(valueCoding.system = 'http://terminology.hl7.org/CodeSystem/v3-NullFlavor', 'Unknown', valueCoding.code ) ) )

Group: COVID-19 Patient Death Reporting

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasureGroupSystem#CovidDeaths COVID-19 Deaths
subject
Patients with conformed or suspected COVID-19 who have died
scoring
event-growth
type
outcome
improvementNotation
decrease
Population: Patients with suspected or confirmed COVID-19 in any location.

Patients with suspected or confirmed COVID-19 in any location.

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numC19Pats All COVID-19 Confirmed or Suspected Patients
  • http://terminology.hl7.org/CodeSystem/measure-population#initial-population
Expression

COVID-19 Patients in an inpatient setting

Language
text/fhirpath
%NumC19Pats.entry.resource
Population: Patients with suspected or confirmed COVID-19 who died in the hospital, ED, or any overflow location

Patients with suspected or confirmed COVID-19 who died in the hospital, ED, or any overflow location

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numC19Died COVID-19 Patient Deaths
  • http://terminology.hl7.org/CodeSystem/measure-population#numerator
Expression: NumC19Died

Filters the initial population by selecting those who have died.

Language
text/fhirpath
Encounter.where( iif( hospitalization.where( myMemberOf(dispositionCode, %PatientExpired) ), true, subject.resolve().where(deceasedBoolean = true | deceasedDateTime.exists()) ) ).select(subject).resolve()
Population: Cumulative total of Patients with suspected or confirmed COVID-19 who died in the hospital, ED, or any overflow location

Cumulative total of Patients with suspected or confirmed COVID-19 who died in the hospital, ED, or any overflow location

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#cumC19Died Cumulative COVID-19 Patient Deaths
  • http://terminology.hl7.org/CodeSystem/measure-population#denominator
Expression: CumC19Died

Computes the cumulative total from the prior measure report and the number of new deaths in the current reporting period.

Language
text/fhirpath
iif(%PriorReport.empty(), 0, %PriorReport.group[2].population[2].count + %NumC29Died.count())
Stratifier: By Age Group

Stratifies the population by Age Group

Expression
Language
text/fhirpath
Patient.select( iif(dateAdd(birthDate, 20 'years') < today(), 'P0Y--P20Y', iif(dateAdd(birthDate, 30 'years') < today(), 'P20Y--P30Y', iif(dateAdd(birthDate, 40 'years') < today(), 'P30Y--P40Y', iif(dateAdd(birthDate, 50 'years') < today(), 'P40Y--P50Y', iif(dateAdd(birthDate, 60 'years') < today(), 'P50Y--P60Y', iif(dateAdd(birthDate, 70 'years') < today(), 'P60Y--P70Y', iif(dateAdd(birthDate, 80 'years') < today(), 'P70Y--P80Y', 'P80Y-P9999Y') ) ) ) ) ) ) )
Stratifier: By Gender

Stratifies the population by Gender

Expression
Language
text/fhirpath
Patient.gender
Stratifier: By Ethnicity

Stratifies the population by Ethnicity

Expression
Language
text/fhirpath
Patient.extension('http://hl7.org/fhir/us/core/StructureDefinition/us-ethnicity-category').extension('ombCategory').valueCoding.code
Stratifier: By Race

Stratifies the population by Race

Expression
Language
text/fhirpath
Patient .extension('http://hl7.org/fhir/us/core/StructureDefinition/us-core-race') .extension('ombCategory') .select( iif(valueCoding.code contains '1992-5', 'A', ' ') + iif(valueCoding.code contains '2054-5', 'B', ' ') + iif(valueCoding.code contains '2076-8', 'H', ' ') + iif(valueCoding.code contains '2028-9', 'S', ' ') + iif(valueCoding.code contains '2106-3', 'W', ' ') )

Group: Ventilator Reporting

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasureGroupSystem#Ventilators Ventilators
subject
Ventilator capacity
scoring
capacity
type
structure
improvementNotation
decrease
Population: Total number of ventilators

Count of all ventilators that can support patient care, whether or not they are presently in use.

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numVent Mechanical Ventilators
  • http://terminology.hl7.org/CodeSystem/measure-population#denominator
Expression: NumVent

Computes the total number of ventilators from the previously reported MeasureReport

Language
text/fhirpath
iif(trace('PriorReport exists:', %PriorReport.exists()), %PriorReport.group[3].population[0].count, 0)
Population: Total number of ventilators in use

Count of all ventilators in use.

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numVentUse Mechanical Ventilators in Use
  • http://terminology.hl7.org/CodeSystem/measure-population#numerator
Expression: NumVentUse

dentifies the number of ventilators in use by counting Patient with an Observation or Procedure resource from an appropriate value set indicating ventilator use.

Language
text/fhirpath
( %Base + 'Encounter?' + 'status=in-progress,finished' + '&_include=Encounter:subject' + '&date=ge' + %ReportingPeriod.start.toString() + '&date=lt' + %ReportingPeriod.end.toString() ).resolve() .select(entry.resource as Patient) .where( iif( ( %Base + 'Observation?_count=1'+ '&status=registered,preliminary,final,amended,corrected' + '&patient=' + $this.id + '&verificationStatus:not=refuted,entered-in-error' + '&date=gt' + %ReportingPeriod.start.toString() + '&date=le' + %ReportingPeriod.end.toString() + '&code:in=' + %VentilatorObservations.url ).resolve().select(entry.resource as Observation).exists(), true, ( %Base + 'Procedure?_count=1'+ '&status=in-progress,competed' + '&patient=' + $this.id + '&date=gt' + %ReportingPeriod.start.toString() + '&date=le' + %ReportingPeriod.end.toString() + '&code:in=' + %VentilatorProcedures.url ).resolve().select(entry.resource as Procedure).exists() ) )
Population: Total number of ventilators not presently in use.

Count of all ventilators not presently in use.

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numVentAvail Mechanical Ventilators Available
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasurePopulationSystem#numerator-complement
Expression: NumVentAvail

omputes the number of ventilators available by substracting the number of ventilators in use determined by population 1 from thee total number of ventilators given in population 0

Language
text/fhirpath
%NumVent - %NumVentUse.total.toInteger()

Group: Bed Reporting

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasureGroupSystem#Beds Beds
subject
Bed capacity
scoring
capacity
type
structure
improvementNotation
decrease
Population: Total number of beds

Total number of all Inpatient and outpatient beds, including all staffed, ICU, licensed, and overflow (surge) beds used for inpatients or outpatients

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numTotBeds All Hospital Beds
  • http://terminology.hl7.org/CodeSystem/measure-population#denominator
Expression: NumTotBeds

Computes the total number of beds from the previously reported MeasureReport

Language
text/fhirpath
iif(%PriorReport.exists(),%PriorReport.group[3].population[0].count,0)
Population: Total number of beds in use

Total number of all Inpatient and outpatient beds that are occupied

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numTotBedsOcc Hospital Beds Occupied
  • http://terminology.hl7.org/CodeSystem/measure-population#numerator
Expression: NumTotBedsOcc

Identifies the number of beds in use by counting the most recent Encounter for each patient where the encounter was in-progress or finished within the period.

Language
text/fhirpath
( %Base + 'Encounter?' + 'status=in-progress' + '&date=ge' + %ReportingPeriod.start.toString() + '&date=lt' + %ReportingPeriod.end.toString() ).resolve().select(entry.resource as Encounter) .aggregate( iif($total.select(location[0]).location contains $this.location.location.first(), $total, $total | $this ) )
Population: Total number of hospital beds available

Total number of all hospital inpatient and outpatient beds that are available

Codes
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasuredValues#numTotBedsAvail Hospital Beds Available
  • http://hl7.org/fhir/uv/saner/CodeSystem/MeasurePopulationSystem#numerator-complement
Expression: NumTotBedsAvail

omputes the number of beds available by substracting the number of beds in use determined by population 1 from the total number of beds given in population 0

Language
text/fhirpath
%NumTotBeds - %NumTotBedsOcc.count()
Stratifier: By Type of Location

Inpatient Non-ICU, Inpatient ICU, Other

Expression

Determines the location of the encounter based on the membership of location.type in the InpatientLocations and ICULocations ValueSet resources. When location.type is assigned to any other value, it is reported to be Other

Language
text/fhirpath
Encounter.location.location.resolve() .iif(myMemberOf(type, %InpatientLocations.url), iif (myMemberOf(type, %ICULocations.url), 'Inpatient ICU', 'Inpatient Non-ICU' ), 'Other' )
References