<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="FhirDataEvaluatorContinuousVariableMeasure" />
  <url value="http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" />
  <name value="FhirDataEvaluatorContinuousVariableMeasure" />
  <status value="draft" />
  <description value="The Profile for the Measures used in the Fhir Data Evaluator" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Measure" />
  <baseDefinition value="http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cv-measure-cqfm" />
  <derivation value="constraint" />
  <differential>
    <element id="Measure.group">
      <path value="Measure.group" />
      <constraint>
        <key value="measurePopulationIdEqualsCriteriaReference" />
        <severity value="error" />
        <human value="The referenced population in the criteriaReference extension of the measure observation must be equal to the id of the measure population." />
        <expression value="population.where(code.coding.code = 'measure-population').id = population.where(code.coding.code = 'measure-observation').extension.where(url = 'http://hl7.org/fhir/us/cqfmeasures/StructureDefinition/cqfm-criteriaReference').valueString" />
        <source value="http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" />
      </constraint>
    </element>
    <element id="Measure.group.population:initialPopulation">
      <path value="Measure.group.population" />
      <sliceName value="initialPopulation" />
    </element>
    <element id="Measure.group.population:initialPopulation.criteria.language">
      <path value="Measure.group.population.criteria.language" />
      <patternCode value="text/x-fhir-query" />
    </element>
    <element id="Measure.group.population:measurePopulation">
      <path value="Measure.group.population" />
      <sliceName value="measurePopulation" />
    </element>
    <element id="Measure.group.population:measurePopulation.criteria.language">
      <path value="Measure.group.population.criteria.language" />
      <patternCode value="text/fhirpath" />
    </element>
    <element id="Measure.group.population:measureObservation">
      <path value="Measure.group.population" />
      <sliceName value="measureObservation" />
    </element>
    <element id="Measure.group.population:measureObservation.extension:aggregateMethod">
      <path value="Measure.group.population.extension" />
      <sliceName value="aggregateMethod" />
    </element>
    <element id="Measure.group.population:measureObservation.extension:aggregateMethod.extension">
      <path value="Measure.group.population.extension.extension" />
      <max value="0" />
    </element>
    <element id="Measure.group.population:measureObservation.extension:aggregateMethod.value[x]">
      <path value="Measure.group.population.extension.value[x]" />
      <patternCode value="unique-count" />
    </element>
    <element id="Measure.group.population:measureObservation.criteria.language">
      <path value="Measure.group.population.criteria.language" />
      <patternCode value="text/fhirpath" />
    </element>
    <element id="Measure.group.stratifier">
      <path value="Measure.group.stratifier" />
      <constraint>
        <key value="criteriaRequiresCode" />
        <severity value="error" />
        <human value="If stratifier or component has criteria, it must have a coding with system and code." />
        <expression value="criteria.exists() and component.exists().not() implies code.coding.code.exists() and code.coding.system.exists()" />
        <source value="http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" />
      </constraint>
      <constraint>
        <key value="codeRequiresCriteria" />
        <severity value="error" />
        <human value="If stratifier or component has code, it must have criteria." />
        <expression value="code.exists() and component.exists().not() implies criteria.exists()" />
        <source value="http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" />
      </constraint>
    </element>
    <element id="Measure.group.stratifier.criteria.language">
      <path value="Measure.group.stratifier.criteria.language" />
      <patternCode value="text/fhirpath" />
    </element>
    <element id="Measure.group.stratifier.component">
      <path value="Measure.group.stratifier.component" />
      <constraint>
        <key value="criteriaRequiresCode" />
        <severity value="error" />
        <human value="If stratifier or component has criteria, it must have a coding with system and code." />
        <expression value="criteria.exists() and component.exists().not() implies code.coding.code.exists() and code.coding.system.exists()" />
        <source value="http://fhir-data-evaluator/StructureDefinition/FhirDataEvaluatorContinuousVariableMeasure" />
      </constraint>
    </element>
    <element id="Measure.group.stratifier.component.criteria.language">
      <path value="Measure.group.stratifier.component.criteria.language" />
      <patternCode value="text/fhirpath" />
    </element>
  </differential>
</StructureDefinition>