<StructureDefinition xmlns="http://hl7.org/fhir">
  <url value="http://ontariohealth.ca/fhir/StructureDefinition/ca-on-mha-profile-questionnaireresponse" />
  <name value="QuestionnaireResponse" />
  <status value="active" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="QuestionnaireResponse" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse" />
  <derivation value="constraint" />
  <differential>
    <element id="QuestionnaireResponse">
      <path value="QuestionnaireResponse" />
      <constraint>
        <key value="gambling-questionnaire-q2-inv" />
        <severity value="error" />
        <human value="Question 2 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q2').answer.value.hasValue()" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q3-inv" />
        <severity value="error" />
        <human value="Question 3 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q3').answer.value.hasValue()" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q4-inv" />
        <severity value="error" />
        <human value="Question 4 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q4').answer.value.hasValue()" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q5-inv" />
        <severity value="error" />
        <human value="Question 5 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q5').answer.value.hasValue()" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q6-inv" />
        <severity value="error" />
        <human value="Question 6 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q6').answer.exists()" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q6b-q6c-inv" />
        <severity value="error" />
        <human value="In gambling questionnaireResponse, if question 6 is provided, 6-b and 6-c must be either both provided, or none provided" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q6').exists() implies item.where(linkId='Q6').answer.all(item.where(linkId='Q6-b').exists() = item.where(linkId='Q6-c').exists())" />
      </constraint>
      <constraint>
        <key value="gambling-questionnaire-q7-inv" />
        <severity value="error" />
        <human value="Question 7 must be answered when answer to question 1 is &quot;own gambling&quot; or &quot;both&quot;" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q1').answer.value.code in ('1'|'2') implies item.where(linkId='Q7').item.exists()" />
      </constraint>
      <constraint>
        <key value="gambling-q7-percentage-rule" />
        <severity value="error" />
        <human value="If question 7 is provided in the gambling questionnaire, the percentages provided must add up to 100" />
        <expression value="questionnaire.contains('gambling-questionnaire') and item.where(linkId='Q7').item.exists() implies item.where(linkId='Q7').item.where(linkId='Q7-a').answer.value + item.where(linkId='Q7').item.where(linkId='Q7-b').answer.value + item.where(linkId='Q7').item.where(linkId='Q7-c').answer.value = 100" />
      </constraint>
    </element>
    <element id="QuestionnaireResponse.meta">
      <path value="QuestionnaireResponse.meta" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.meta.profile">
      <path value="QuestionnaireResponse.meta.profile" />
      <min value="1" />
      <max value="1" />
      <fixedCanonical value="http://ontariohealth.ca/fhir/StructureDefinition/ca-on-mha-profile-questionnaireresponse" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.questionnaire">
      <path value="QuestionnaireResponse.questionnaire" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.status">
      <path value="QuestionnaireResponse.status" />
      <fixedCode value="completed" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.subject">
      <path value="QuestionnaireResponse.subject" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.subject.reference">
      <path value="QuestionnaireResponse.subject.reference" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item">
      <path value="QuestionnaireResponse.item" />
      <min value="1" />
      <constraint>
        <key value="gambling-q7-percentage-rule" />
        <severity value="error" />
        <human value="If Q7 is provided, the sum of percentages must add up to 100" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.linkId">
      <path value="QuestionnaireResponse.item.linkId" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.text">
      <path value="QuestionnaireResponse.item.text" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer">
      <path value="QuestionnaireResponse.item.answer" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <min value="1" />
    </element>
  </differential>
</StructureDefinition>