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