dQM QICore Content Implementation Guide
2025.0.0 - CI Build

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

Library: NHSNAcuteCareHospitalMonthlyInitialPopulation1

Official URL: https://madie.cms.gov/Library/NHSNAcuteCareHospitalMonthlyInitialPopulation1 Version: 0.0.000
Active as of 2026-01-12 Responsible: Centers for Disease Control and Prevention (CDC) Computable Name: NHSNAcuteCareHospitalMonthlyInitialPopulation1
Other Identifiers: https://madie.cms.gov/login#NHSNAcuteCareHospitalMonthlyInitialPopulation1 (use: official, )

NHSNAcuteCareHospitalMonthlyInitialPopulation1

Metadata
Title NHSNAcuteCareHospitalMonthlyInitialPopulation1
Version 0.0.000
Identifier NHSNAcuteCareHospitalMonthlyInitialPopulation1
Steward (Publisher) Centers for Disease Control and Prevention (CDC)
Description NHSNAcuteCareHospitalMonthlyInitialPopulation1
Type logic-library from http://terminology.hl7.org/CodeSystem/library-type
Dependency Description: QICore model information
Resource: http://hl7.org/fhir/Library/QICore-ModelInfo
Canonical URL: http://hl7.org/fhir/Library/QICore-ModelInfo
Dependency Description: Library FHIRHelpers
Resource: https://madie.cms.gov/Library/FHIRHelpers|4.4.000
Canonical URL: https://madie.cms.gov/Library/FHIRHelpers|4.4.000
Dependency Description: Library QICoreCommon
Resource: https://madie.cms.gov/Library/QICoreCommon|4.0.000
Canonical URL: https://madie.cms.gov/Library/QICoreCommon|4.0.000
Dependency Description: Library CQMCommon
Resource: https://madie.cms.gov/Library/CQMCommon|4.1.000
Canonical URL: https://madie.cms.gov/Library/CQMCommon|4.1.000
Dependency Description: Code system ActCode
Resource: http://terminology.hl7.org/CodeSystem/v3-ActCode
Canonical URL: http://terminology.hl7.org/CodeSystem/v3-ActCode
Dependency Description: Code system LOINC
Resource: http://loinc.org
Canonical URL: http://loinc.org
Dependency Description: Code system Observation Category
Resource: http://terminology.hl7.org/CodeSystem/observation-category
Canonical URL: http://terminology.hl7.org/CodeSystem/observation-category
Dependency Description: Value set Encounter Inpatient
Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307
Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307
Dependency Description: Value set Emergency Department Visit
Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292
Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292
Dependency Description: Value set Observation Services
Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143
Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143
Dependency Description: Value set Inpatient, Emergency, and Observation Locations
Resource: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265
Canonical URL: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265
Data Requirement Type: Coverage
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-coverage
Must Support Elements: period, id, id.value, meta, status, status.value, type, policyHolder, subscriber, subscriberId, subscriberId.value, beneficiary, dependent, dependent.value, relationship, payor, class, order, order.value, network, network.value, subrogation, subrogation.value, contract
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: type, status, status.value, period, id, id.value, meta, identifier, statusHistory, class, classHistory, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Code Filter(s):
Path: type
ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: type, status, status.value, period, id, id.value, meta, identifier, statusHistory, class, classHistory, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Code Filter(s):
Path: type
ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: type, status, status.value, period, id, id.value, meta, identifier, statusHistory, class, classHistory, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Code Filter(s):
Path: type
ValueSet: http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: class, status, status.value, period, id, id.value, meta, identifier, statusHistory, classHistory, type, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Code Filter(s):
Path: class
Code(s): http://terminology.hl7.org/CodeSystem/v3-ActCode#EMER: 'emergency'
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: class, status, status.value, period, id, id.value, meta, identifier, statusHistory, classHistory, type, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Code Filter(s):
Path: class
Code(s): http://terminology.hl7.org/CodeSystem/v3-ActCode#OBSENC: 'observation encounter'
Data Requirement Type: Encounter
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-encounter
Must Support Elements: class, status, status.value, period, id, id.value, meta, identifier, statusHistory, classHistory, type, serviceType, priority, subject, length, reasonCode, reasonReference, diagnosis, account, hospitalization, location, partOf
Data Requirement Type: Procedure
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-procedure
Must Support Elements: performed, id, id.value, meta, extension, basedOn, partOf, status, status.value, category, code, subject, encounter, location, reasonCode, reasonReference, bodySite
Data Requirement Type: Device
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-device
Must Support Elements: id, id.value, meta, extension, status, status.value, expirationDate, expirationDate.value, lotNumber, lotNumber.value, serialNumber, serialNumber.value, modelNumber, modelNumber.value, partNumber, partNumber.value, type, patient, parent
Data Requirement Type: Observation
Profile(s): http://hl7.org/fhir/us/core/StructureDefinition/us-core-vital-signs
Must Support Elements: effective, id, id.value, meta, extension, partOf, status, status.value, category, code, subject, encounter, issued, issued.value, value, dataAbsentReason, interpretation, bodySite, method, specimen, referenceRange, hasMember, derivedFrom, component
Data Requirement Type: DiagnosticReport
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-diagnosticreport-note
Must Support Elements: category, effective, id, id.value, meta, extension, basedOn, status, status.value, code, subject, encounter, issued, issued.value, specimen, result, conclusion, conclusion.value, conclusionCode
Data Requirement Type: Specimen
Profile(s): http://hl7.org/fhir/us/core/StructureDefinition/us-core-specimen
Must Support Elements: collection, collection.collected, id, id.value, type
Data Requirement Type: MedicationAdministration
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationadministrationnotdone
Must Support Elements: effective, id, id.value, meta, instantiates, partOf, status, status.value, statusReason, category, medication, medication.extension, subject, context, supportingInformation, performer, reasonCode, reasonReference, request, device, note, dosage
Data Requirement Type: MedicationRequest
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationnotrequested
Must Support Elements: authoredOn, authoredOn.value, id, id.value, meta, status, status.value, statusReason, intent, intent.value, category, priority, priority.value, doNotPerform, doNotPerform.value, reported, medication, medication.extension, subject, encounter, requester, recorder, reasonCode, reasonReference, instantiatesCanonical, instantiatesUri, courseOfTherapyType, dosageInstruction
Data Requirement Type: Observation
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-observation-screening-assessment
Must Support Elements: effective, id, id.value, meta, extension, partOf, status, status.value, category, code, subject, encounter, issued, issued.value, value, dataAbsentReason, interpretation, bodySite, method, specimen, referenceRange, hasMember, derivedFrom, component
Data Requirement Type: Patient
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-patient
Must Support Elements: id, id.value, meta, extension, identifier, active, active.value, name, telecom, gender, gender.value, birthDate, birthDate.value, deceased, address, maritalStatus, multipleBirth, photo, contact, communication, generalPractitioner, managingOrganization, link
Data Requirement Type: MedicationRequest
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationrequest
Must Support Elements: authoredOn, authoredOn.value, id, id.value, meta, status, status.value, statusReason, intent, intent.value, category, priority, priority.value, reported, medication, subject, encounter, requester, recorder, reasonCode, reasonReference, instantiatesCanonical, instantiatesUri, courseOfTherapyType, dosageInstruction
Data Requirement Type: MedicationAdministration
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-medicationadministration
Must Support Elements: effective, id, id.value, meta, instantiates, partOf, status, status.value, statusReason, category, medication, subject, context, supportingInformation, performer, reasonCode, reasonReference, request, device, note, dosage
Data Requirement Type: Observation
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-simple-observation
Must Support Elements: category, effective, id, id.value, meta, extension, partOf, status, status.value, code, subject, encounter, issued, issued.value, value, dataAbsentReason, interpretation, bodySite, method, specimen, referenceRange, hasMember, derivedFrom, component
Data Requirement Type: Observation
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-observation-lab
Must Support Elements: effective, id, id.value, meta, extension, partOf, status, status.value, category, code, subject, encounter, issued, issued.value, value, dataAbsentReason, interpretation, bodySite, method, specimen, referenceRange, hasMember, derivedFrom, component
Data Requirement Type: ServiceRequest
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-servicenotrequested
Must Support Elements: authoredOn, authoredOn.value, id, id.value, meta, instantiatesCanonical, instantiatesUri, basedOn, replaces, requisition, status, status.value, intent, intent.value, category, priority, priority.value, doNotPerform, doNotPerform.value, code, code.extension, orderDetail, quantity, subject, encounter, occurrence, asNeeded, requester, performerType, performer, locationCode, reasonCode, reasonReference, insurance, bodySite, note, patientInstruction, patientInstruction.value
Data Requirement Type: DiagnosticReport
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-diagnosticreport-lab
Must Support Elements: effective
Data Requirement Type: Condition
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition-problems-health-concerns
Must Support Elements: id, id.value, meta, clinicalStatus, verificationStatus, category, severity, code, bodySite, subject, encounter, encounter.reference, encounter.reference.value, onset, stage, evidence, note
Data Requirement Type: Condition
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-condition-encounter-diagnosis
Must Support Elements: id, id.value, meta, clinicalStatus, verificationStatus, category, severity, code, bodySite, subject, encounter, encounter.reference, encounter.reference.value, onset, stage, evidence, note
Data Requirement Type: ServiceRequest
Profile(s): http://hl7.org/fhir/us/qicore/StructureDefinition/qicore-servicerequest
Must Support Elements: authoredOn, authoredOn.value, id, id.value, meta, instantiatesCanonical, instantiatesUri, basedOn, replaces, requisition, status, status.value, intent, intent.value, category, priority, priority.value, code, orderDetail, quantity, subject, encounter, occurrence, asNeeded, requester, performerType, performer, locationCode, reasonCode, reasonReference, insurance, bodySite, note, patientInstruction, patientInstruction.value
Parameters
Parameter None
Library Content
CQL Content
library NHSNAcuteCareHospitalMonthlyInitialPopulation1 version '0.0.000'

// Rebased to QI Core 6.0.0


using QICore version '6.0.0'

include FHIRHelpers version '4.4.000' called FHIRHelpers
include SharedResourceCreation version '0.1.000' called SharedResource
include QICoreCommon version '4.0.000' called QICoreCommon
include CQMCommon version '4.1.000' called CQMCommon
// NHSNHelpers logic is inlined below


codesystem "ActCode": 'http://terminology.hl7.org/CodeSystem/v3-ActCode'
codesystem "Observation Category": 'http://terminology.hl7.org/CodeSystem/observation-category'
codesystem "LOINC": 'http://loinc.org'
codesystem "Condition Category": 'http://terminology.hl7.org/CodeSystem/condition-category'
codesystem "US Core Condition Category": 'http://hl7.org/fhir/us/core/CodeSystem/condition-category'
codesystem "Condition Clinical Status": 'http://terminology.hl7.org/CodeSystem/condition-clinical'
codesystem "SNOMEDCT": 'http://snomed.info/sct'
codesystem "MedicationRequest Category": 'http://terminology.hl7.org/CodeSystem/medicationrequest-category'

valueset "Inpatient, Emergency, and Observation Locations": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.265'
valueset "Emergency Department Visit": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.117.1.7.1.292'
valueset "Encounter Inpatient": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113883.3.666.5.307'
valueset "Observation Services": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1111.143'
valueset "NHSN Inpatient Encounter Class Codes": 'http://cts.nlm.nih.gov/fhir/ValueSet/2.16.840.1.113762.1.4.1046.274'

// Observation Category codes


code "laboratory": 'laboratory' from "Observation Category" display 'Laboratory'
code "social-history": 'social-history' from "Observation Category" display 'Social History'
code "vital-signs": 'vital-signs' from "Observation Category" display 'Vital Signs'
code "imaging": 'imaging' from "Observation Category" display 'Imaging'
code "procedure": 'procedure' from "Observation Category" display 'Procedure'
code "survey": 'survey' from "Observation Category" display 'Survey'

// Condition category

code "encounter-diagnosis": 'encounter-diagnosis' from "Condition Category" display 'Encounter Diagnosis'

// Diagnostic Report Category (LOINC-based)

code "Radiology": 'LP29684-5' from "LOINC" display 'Radiology'
code "Pathology": 'LP7839-6' from "LOINC" display 'Pathology'
code "Cardiology": 'LP29708-2' from "LOINC" display 'Cardiology'

// Emergency Encounter Class

code "emergency": 'EMER' from "ActCode" display 'emergency'
code "observation encounter": 'OBSENC' from "ActCode" display 'observation encounter'

// Condition clinicalStatus

code "active": 'active' from "Condition Clinical Status" display 'active'

// Procedure category

code "Surgical procedure": '387713003' from "SNOMEDCT" display 'Surgical procedure'
code "Diagnostic procedure": '103693007' from "SNOMEDCT" display 'Diagnostic procedure'

// MedicationRequest category

code "inpatient": 'inpatient' from "MedicationRequest Category" display 'Inpatient'
code "outpatient": 'outpatient' from "MedicationRequest Category" display 'Outpatient'

// ServiceRequest category

code "Laboratory procedure": '108252007' from "SNOMEDCT" display 'Laboratory procedure'
code "Imaging": '363679005' from "SNOMEDCT" display 'Imaging'

parameter "Measurement Period" Interval<DateTime>default Interval[@2025-01-01T00:00:00.0, @2025-01-31T23:59:59.0 )

context Patient 

// ----------------------------------------------------------------------
// Core encounter logic
// ----------------------------------------------------------------------

// Encounters with NHSN class codes (IMP, ACUTE, NONAC, SS)





define "Encounters with NHSN Inpatient Class":
  [Encounter] Enc
    where Enc.class ~ QICoreCommon."inpatient encounter"
      or Enc.class ~ QICoreCommon."inpatient acute"
      or Enc.class ~ QICoreCommon."inpatient non-acute"
      or Enc.class ~ QICoreCommon."short stay"

define "Qualifying Encounters During Measurement Period":
  ( [Encounter: "Encounter Inpatient"]
    union [Encounter: "Emergency Department Visit"]
    union [Encounter: "Observation Services"]
    union "Encounters with NHSN Inpatient Class"
    union [Encounter: class ~ "emergency"]
    union [Encounter: class ~ "observation encounter"] ) QualifyingEncounters
    where QualifyingEncounters.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
      and QualifyingEncounters.period overlaps "Measurement Period"

define "Encounters":
  [Encounter]

define "Encounters with Patient Hospital Locations":
  "Encounters" Ens
    where exists ( Ens.location EncounterLocation
        where EncounterLocation.period overlaps Ens.period
          and EncounterLocation.location.getLocation ( ).type in "Inpatient, Emergency, and Observation Locations"
    )
      and Ens.status in { 'in-progress', 'finished', 'triaged', 'onleave', 'entered-in-error' }
      and Ens.period overlaps "Measurement Period"

define "Initial Population":
  "Qualifying Encounters During Measurement Period"
    union "Encounters with Patient Hospital Locations"

// ----------------------------------------------------------------------
// Core retrieves
// ----------------------------------------------------------------------

// Locations from IP encounters





define "Get Locations from IP Encounters in Measurement Period":
  flatten ( "Initial Population" IP
      let locationElements: IP.location
      return locationElements LE
        let locationReference: LE.location
        return locationReference.getLocation ( )
  )

// ----------------------------------------------------------------------
// SDEs
// ----------------------------------------------------------------------




define "SDE Condition Problems HealthConcerns":
  [ConditionProblemsHealthConcerns] Diagnosis
    where exists ( "Initial Population" IP
        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
    )
    return {
      id: Diagnosis.id,
      meta: Diagnosis.meta,
      status: Diagnosis.clinicalStatus,
      verificationStatus: Diagnosis.verificationStatus,
      category: Diagnosis.category,
      severity: Diagnosis.severity,
      code: Diagnosis.code,
      bodySite: Diagnosis.bodySite,
      subject: Diagnosis.subject,
      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
      onset: Diagnosis.onset,
      stage: Diagnosis.stage,
      evidence: Diagnosis.evidence,
      note: Diagnosis.note
    }

define "SDE Condition Diagnosis":
  [ConditionEncounterDiagnosis] Diagnosis
    where exists ( "Initial Population" IP
        where Diagnosis.prevalenceInterval ( ) overlaps day of IP.period
    )
    return {
      id: Diagnosis.id,
      meta: Diagnosis.meta,
      status: Diagnosis.clinicalStatus,
      verificationStatus: Diagnosis.verificationStatus,
      category: Diagnosis.category,
      severity: Diagnosis.severity,
      code: Diagnosis.code,
      bodySite: Diagnosis.bodySite,
      subject: Diagnosis.subject,
      encounterReferenceId: Diagnosis.encounter.reference.getId ( ),
      onset: Diagnosis.onset,
      stage: Diagnosis.stage,
      evidence: Diagnosis.evidence,
      note: Diagnosis.note
    }

// Coverage SDE – tuples of Coverage data


define "SDE Coverage":
  [Coverage] Coverages
    where exists ( "Initial Population" IP
        where Coverages.period overlaps IP.period
    )
    return {
      id: Coverages.id,
      meta: Coverages.meta,
      status: Coverages.status,
      type: Coverages.type,
      policyHolder: Coverages.policyHolder,
      subscriber: Coverages.subscriber,
      subscriberId: Coverages.subscriberId,
      beneficiary: Coverages.beneficiary,
      dependent: Coverages.dependent,
      relationship: Coverages.relationship,
      period: Coverages.period,
      payor: Coverages.payor,
      class: Coverages.class,
      order: Coverages.order,
      network: Coverages.network,
      subrogation: Coverages.subrogation,
      contract: Coverages.contract
    }

// Device SDE – tuples of Device data


define "SDE Device":
  [Device] Devices
    where exists ( "Initial Population" )
    return {
      id: Devices.id,
      meta: Devices.meta,
      extension: Devices.extension,
      status: Devices.status,
      expirationDate: Devices.expirationDate,
      lotNumber: Devices.lotNumber,
      serialNumber: Devices.serialNumber,
      modelNumber: Devices.modelNumber,
      partNumber: Devices.partNumber,
      type: Devices.type,
      patient: Devices.patient,
      parent: Devices.parent
    }

// DiagnosticReport SDEs


define "SDE DiagnosticReport Lab":
  [DiagnosticReportLab] dr
    where exists ( "Initial Population" IP
        where "Normalize Interval"(dr.effective) overlaps IP.period
    )

define "SDE DiagnosticReport Note":
  [DiagnosticReportNote] dr
    where ( exists ( dr.category Category
          where Category ~ "Radiology"
      )
        or exists ( dr.category Category
            where Category ~ "Pathology"
        )
        or exists ( dr.category Category
            where Category ~ "Cardiology"
        )
    )
      and exists ( "Initial Population" IP
          where "Normalize Interval"(dr.effective) overlaps IP.period
      )
    return {
      id: dr.id,
      meta: dr.meta,
      extension: dr.extension,
      basedOn: dr.basedOn,
      status: dr.status,
      category: dr.category,
      code: dr.code,
      subject: dr.subject,
      encounter: dr.encounter,
      effective: dr.effective,
      issued: dr.issued,
      specimen: dr.specimen,
      result: dr.result,
      conclusion: dr.conclusion,
      conclusionCode: dr.conclusionCode
    }

define "SDE DiagnosticReport Others":
  [DiagnosticReportNote] dr
    where not ( exists ( dr.category Category
          where Category ~ "Radiology"
      )
        or exists ( dr.category Category
            where Category ~ "Pathology"
        )
        or exists ( dr.category Category
            where Category ~ "Cardiology"
        )
    )
      and exists ( "Initial Population" IP
          where "Normalize Interval"(dr.effective) overlaps IP.period
      )
    return {
      id: dr.id,
      meta: dr.meta,
      extension: dr.extension,
      basedOn: dr.basedOn,
      status: dr.status,
      category: dr.category,
      code: dr.code,
      subject: dr.subject,
      encounter: dr.encounter,
      effective: dr.effective,
      issued: dr.issued,
      specimen: dr.specimen,
      result: dr.result,
      conclusion: dr.conclusion,
      conclusionCode: dr.conclusionCode
    }

// Encounter SDEs


define "SDE Encounter":
  "Encounters" Ens
    where not "CheckIP"(Ens)
      and exists ( "Initial Population" IP
          where Ens.period overlaps IP.period
      )
    return {
      id: Ens.id,
      meta: Ens.meta,
      identifier: Ens.identifier,
      status: Ens.status,
      statusHistory: Ens.statusHistory,
      class: Ens.class,
      classHistory: Ens.classHistory,
      type: Ens.type,
      serviceType: Ens.serviceType,
      priority: Ens.priority,
      subject: Ens.subject,
      period: Ens.period,
      length: Ens.length,
      reasonCode: Ens.reasonCode,
      reasonReference: Ens.reasonReference,
      diagnosis: Ens.diagnosis,
      account: Ens.account,
      hospitalization: Ens.hospitalization,
      location: Ens.location,
      partOf: Ens.partOf
    }

define "SDE IP Encounters":
  "Initial Population" IP
    return {
      id: IP.id,
      meta: IP.meta,
      identifier: IP.identifier,
      status: IP.status,
      statusHistory: IP.statusHistory,
      class: IP.class,
      classHistory: IP.classHistory,
      type: IP.type,
      serviceType: IP.serviceType,
      priority: IP.priority,
      subject: IP.subject,
      period: IP.period,
      length: IP.length,
      reasonCode: IP.reasonCode,
      reasonReference: IP.reasonReference,
      diagnosis: IP.diagnosis,
      account: IP.account,
      hospitalization: IP.hospitalization,
      location: IP.location,
      partOf: IP.partOf
    }

// Location SDE


define "SDE Location":
  "Get Locations from IP Encounters in Measurement Period" Locations
    where exists ( "Initial Population" )
      and Locations is not null
    return {
      id: Locations.id,
      meta: Locations.meta,
      extension: Locations.extension,
      status: Locations.status,
      operationalStatus: Locations.operationalStatus,
      name: Locations.name,
      alias: Locations.alias,
      description: Locations.description,
      mode: Locations.mode,
      type: Locations.type,
      telecom: Locations.telecom,
      address: Locations.address,
      physicalType: Locations.physicalType,
      position: Locations.position,
      managingOrganization: Locations.managingOrganization,
      partOf: Locations.partOf,
      hoursOfOperation: Locations.hoursOfOperation,
      availabilityExceptions: Locations.availabilityExceptions,
      endpoint: Locations.endpoint
    }

// Medication SDEs


define "SDE Medication Administration":
  "SDE Medication Administration Base"
    union "SDE Medication Administration Not Done"

define "SDE Medication Administration Base":
  [MedicationAdministration] MedAdministrations
    where exists ( "Initial Population" IP
        where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period
    )
    return {
      id: MedAdministrations.id,
      meta: MedAdministrations.meta,
      instantiates: MedAdministrations.instantiates,
      partOf: MedAdministrations.partOf,
      status: MedAdministrations.status,
      statusReason: MedAdministrations.statusReason,
      category: MedAdministrations.category,
      medication: MedAdministrations.medication,
      subject: MedAdministrations.subject,
      context: MedAdministrations.context,
      supportingInformation: MedAdministrations.supportingInformation,
      effective: MedAdministrations.effective,
      performer: MedAdministrations.performer,
      reasonCode: MedAdministrations.reasonCode,
      reasonReference: MedAdministrations.reasonReference,
      request: MedAdministrations.request,
      device: MedAdministrations.device,
      note: MedAdministrations.note,
      dosage: MedAdministrations.dosage
    }

define "SDE Medication Administration Not Done":
  [MedicationAdministrationNotDone] MedAdministrations
    where exists ( "Initial Population" IP
        where "Normalize Interval"(MedAdministrations.effective) overlaps IP.period
    )
    return {
      id: MedAdministrations.id,
      meta: MedAdministrations.meta,
      instantiates: MedAdministrations.instantiates,
      partOf: MedAdministrations.partOf,
      status: MedAdministrations.status,
      statusReason: MedAdministrations.statusReason,
      category: MedAdministrations.category,
      medication: MedAdministrations.medication,
      subject: MedAdministrations.subject,
      context: MedAdministrations.context,
      supportingInformation: MedAdministrations.supportingInformation,
      effective: MedAdministrations.effective,
      performer: MedAdministrations.performer,
      reasonCode: MedAdministrations.reasonCode,
      reasonReference: MedAdministrations.reasonReference,
      request: MedAdministrations.request,
      device: MedAdministrations.device,
      note: MedAdministrations.note,
      dosage: MedAdministrations.dosage
    }

// SDE Medication Request - regular requests (doNotPerform is false or absent)


define "SDE Medication Request Base":
  [MedicationRequest] MedRequests
    where exists ( "Initial Population" IP
        where MedRequests.authoredOn during IP.period
    )
    return {
      id: MedRequests.id,
      meta: MedRequests.meta,
      status: MedRequests.status,
      statusReason: MedRequests.statusReason,
      intent: MedRequests.intent,
      category: MedRequests.category,
      priority: MedRequests.priority,
      //doNotPerform: MedRequests.doNotPerform,
      
      reported: MedRequests.reported,
      medication: MedRequests.medication,
      subject: MedRequests.subject,
      encounter: MedRequests.encounter,
      authoredOn: MedRequests.authoredOn,
      requester: MedRequests.requester,
      recorder: MedRequests.recorder,
      reasonCode: MedRequests.reasonCode,
      reasonReference: MedRequests.reasonReference,
      instantiatesCanonical: MedRequests.instantiatesCanonical,
      instantiatesUri: MedRequests.instantiatesUri,
      courseOfTherapyType: MedRequests.courseOfTherapyType,
      dosageInstruction: MedRequests.dosageInstruction
    }

// SDE Medication Not Requested - negation requests (doNotPerform is true)


define "SDE Medication Not Requested":
  [MedicationNotRequested] MedNotRequests
    where exists ( "Initial Population" IP
        where MedNotRequests.authoredOn during IP.period
    )
    return {
      id: MedNotRequests.id,
      meta: MedNotRequests.meta,
      status: MedNotRequests.status,
      statusReason: MedNotRequests.statusReason,
      intent: MedNotRequests.intent,
      category: MedNotRequests.category,
      priority: MedNotRequests.priority,
      doNotPerform: MedNotRequests.doNotPerform,
      reported: MedNotRequests.reported,
      medication: MedNotRequests.medication,
      subject: MedNotRequests.subject,
      encounter: MedNotRequests.encounter,
      authoredOn: MedNotRequests.authoredOn,
      requester: MedNotRequests.requester,
      recorder: MedNotRequests.recorder,
      reasonCode: MedNotRequests.reasonCode,
      reasonReference: MedNotRequests.reasonReference,
      instantiatesCanonical: MedNotRequests.instantiatesCanonical,
      instantiatesUri: MedNotRequests.instantiatesUri,
      courseOfTherapyType: MedNotRequests.courseOfTherapyType,
      dosageInstruction: MedNotRequests.dosageInstruction
    }

// Combined SDE for all Medication Requests (both regular and negation)


define "SDE Medication Request":
  "SDE Medication Request Base"
    union "SDE Medication Not Requested"

define function "GetMedication"(reference Reference):
  singleton from ( [Medication] Medication
      where reference.references ( Medication )
  )

define "SDE Medication":
  ( [MedicationRequest]
    union [MedicationAdministration] ) MedReqOrAdmin
    let medication: GetMedication(MedReqOrAdmin.medication as Reference)
    where medication is not null
      and exists ( "Initial Population" IP
          where Coalesce("Normalize Interval"(MedReqOrAdmin.effective), MedReqOrAdmin.authoredOn.toInterval()) overlaps IP.period
      )
    return {
      id: medication.id,
      meta: medication.meta,
      code: medication.code,
      status: medication.status,
      manufacturer: medication.manufacturer,
      form: medication.form,
      amount: medication.amount,
      ingredient: medication.ingredient,
      batch: medication.batch
    }


// Observation SDEs


define "SDE Observation Lab Category":
  [LaboratoryResultObservation] Obs
    where exists ( "Initial Population" IP
        where "Normalize Interval"(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }

define "SDE Observation Simple":
  [SimpleObservation] Obs
    where ( exists ( Obs.category Category
          where Category ~ "social-history"
      )
        or exists ( Obs.category Category
            where Category ~ "imaging"
        )
        or exists ( Obs.category Category
            where Category ~ "procedure"
        )
    )
      and exists ( "Initial Population" IP
          where "Normalize Interval"(Obs.effective) overlaps IP.period
      )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }
    
// Survey is fixed category code in ObservationScreeningAssessment profile in QI-Core    


define "SDE Observation Survey":
  [ObservationScreeningAssessment] Obs
    where exists ( "Initial Population" IP
        where "Normalize Interval"(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }

define "SDE Observation Vital Signs Category":
  [USCoreVitalSignsProfile] Obs
    where exists ( "Initial Population" IP
        where "Normalize Interval"(Obs.effective) overlaps IP.period
    )
    return {
      id: Obs.id,
      meta: Obs.meta,
      extension: Obs.extension,
      partOf: Obs.partOf,
      status: Obs.status,
      category: Obs.category,
      code: Obs.code,
      subject: Obs.subject,
      encounter: Obs.encounter,
      effective: Obs.effective,
      issued: Obs.issued,
      value: Obs.value,
      dataAbsentReason: Obs.dataAbsentReason,
      interpretation: Obs.interpretation,
      bodySite: Obs.bodySite,
      method: Obs.method,
      specimen: Obs.specimen,
      referenceRange: Obs.referenceRange,
      hasMember: Obs.hasMember,
      derivedFrom: Obs.derivedFrom,
      component: Obs.component
    }


// Procedure SDE


define "SDE Procedure":
  [Procedure] Procedures
    where exists ( "Initial Population" IP
        where "Normalize Interval"(Procedures.performed) overlaps IP.period
    )
    return {
      id: Procedures.id,
      meta: Procedures.meta,
      extension: Procedures.extension,
      basedOn: Procedures.basedOn,
      partOf: Procedures.partOf,
      status: Procedures.status,
      category: Procedures.category,
      code: Procedures.code,
      subject: Procedures.subject,
      encounter: Procedures.encounter,
      performed: Procedures.performed,
      location: Procedures.location,
      reasonCode: Procedures.reasonCode,
      reasonReference: Procedures.reasonReference,
      bodySite: Procedures.bodySite
    }

// ServiceRequest SDE - regular requests (doNotPerform is false or absent)


define "SDE Service Request Base":
  [ServiceRequest] ServiceRequests
    where exists ( "Initial Population" IP
        where ServiceRequests.authoredOn during IP.period
    )
    return {
      id: ServiceRequests.id,
      meta: ServiceRequests.meta,
      instantiatesCanonical: ServiceRequests.instantiatesCanonical,
      instantiatesUri: ServiceRequests.instantiatesUri,
      basedOn: ServiceRequests.basedOn,
      replaces: ServiceRequests.replaces,
      requisition: ServiceRequests.requisition,
      status: ServiceRequests.status,
      intent: ServiceRequests.intent,
      category: ServiceRequests.category,
      priority: ServiceRequests.priority,
      //doNotPerform: ServiceRequests.doNotPerform,
      
      code: ServiceRequests.code,
      orderDetail: ServiceRequests.orderDetail,
      quantity: ServiceRequests.quantity,
      subject: ServiceRequests.subject,
      encounter: ServiceRequests.encounter,
      occurrence: ServiceRequests.occurrence,
      asNeeded: ServiceRequests.asNeeded,
      authoredOn: ServiceRequests.authoredOn,
      requester: ServiceRequests.requester,
      performerType: ServiceRequests.performerType,
      performer: ServiceRequests.performer,
      locationCode: ServiceRequests.locationCode,
      reasonCode: ServiceRequests.reasonCode,
      reasonReference: ServiceRequests.reasonReference,
      insurance: ServiceRequests.insurance,
      bodySite: ServiceRequests.bodySite,
      note: ServiceRequests.note,
      patientInstruction: ServiceRequests.patientInstruction
    }

// ServiceNotRequested SDE - negation requests (doNotPerform is true)


define "SDE Service Not Requested":
  [ServiceNotRequested] ServiceNotReqs
    where exists ( "Initial Population" IP
        where ServiceNotReqs.authoredOn during IP.period
    )
    return {
      id: ServiceNotReqs.id,
      meta: ServiceNotReqs.meta,
      instantiatesCanonical: ServiceNotReqs.instantiatesCanonical,
      instantiatesUri: ServiceNotReqs.instantiatesUri,
      basedOn: ServiceNotReqs.basedOn,
      replaces: ServiceNotReqs.replaces,
      requisition: ServiceNotReqs.requisition,
      status: ServiceNotReqs.status,
      intent: ServiceNotReqs.intent,
      category: ServiceNotReqs.category,
      priority: ServiceNotReqs.priority,
      doNotPerform: ServiceNotReqs.doNotPerform,
      code: ServiceNotReqs.code,
      orderDetail: ServiceNotReqs.orderDetail,
      quantity: ServiceNotReqs.quantity,
      subject: ServiceNotReqs.subject,
      encounter: ServiceNotReqs.encounter,
      occurrence: ServiceNotReqs.occurrence,
      asNeeded: ServiceNotReqs.asNeeded,
      authoredOn: ServiceNotReqs.authoredOn,
      requester: ServiceNotReqs.requester,
      performerType: ServiceNotReqs.performerType,
      performer: ServiceNotReqs.performer,
      locationCode: ServiceNotReqs.locationCode,
      reasonCode: ServiceNotReqs.reasonCode,
      reasonReference: ServiceNotReqs.reasonReference,
      insurance: ServiceNotReqs.insurance,
      bodySite: ServiceNotReqs.bodySite,
      note: ServiceNotReqs.note,
      patientInstruction: ServiceNotReqs.patientInstruction
    }

// Combined SDE for all Service Requests (both regular and negation)


define "SDE Service Request":
  "SDE Service Request Base"
    union "SDE Service Not Requested"

// Minimal patient SDE


define "SDE Minimal Patient":
  [Patient] MinPt
    where exists ( "Initial Population" )
    return {
      id: MinPt.id,
      meta: MinPt.meta,
      extension: MinPt.extension,
      identifier: MinPt.identifier,
      active: MinPt.active,
      name: MinPt.name,
      telecom: MinPt.telecom,
      gender: MinPt.gender,
      birthDate: MinPt.birthDate,
      deceased: MinPt.deceased,
      address: MinPt.address,
      maritalStatus: MinPt.maritalStatus,
      multipleBirth: MinPt.multipleBirth,
      photo: MinPt.photo,
      contact: MinPt.contact,
      communication: MinPt.communication,
      generalPractitioner: MinPt.generalPractitioner,
      managingOrganization: MinPt.managingOrganization,
      link: MinPt.link
    }

define "SDE Specimens":
  [USCoreSpecimenProfile] sp
    where exists ( "Initial Population" IP
        where "Normalize Interval"(sp.collection.collected) overlaps IP.period
    )
    return {
      id: sp.id,
      type: sp.type
    }

// ----------------------------------------------------------------------
// Helper functions
// ----------------------------------------------------------------------




define function "CheckIP"(encounter Encounter):
  exists ( "Initial Population" IP
      where encounter.id = IP.id
  )

// Former NHSNHelpers functions, adapted for QI Core


define function "Normalize Interval"(choice Choice<DateTime, Interval<DateTime>>):
  case
    when choice is DateTime then Interval[choice as DateTime, choice as DateTime]
    when choice is Interval<DateTime>then choice as Interval<DateTime>
    else null as Interval<DateTime>end

define function "GetLocation"(reference QICore.Reference):
  singleton from ( [Location] Locations
      where Locations.id = GetId(reference.reference)
  )

define function "GetId"(uri String):
  Last(Split(uri, '/'))

define function "GetId"(uri FHIR.string):
  Last(Split(FHIRHelpers.ToString(uri), '/'))
Generated using version 0.5.3 of the sample-content-ig Liquid templates