<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="QuestionnaireResponse" />
  <url value="https://fhir.centraxx.de/StructureDefinition/SurveyForm" />
  <version value="2025.4.0" />
  <name value="SurveyForm" />
  <status value="active" />
  <publisher value="Kairos an IQVIA business" />
  <description value="Represents a CentraXX SurveyForm. This resource is read-only" />
  <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.extension">
      <path value="QuestionnaireResponse.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <min value="2" />
      <max value="5" />
      <type>
        <code value="Extension" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.extension:updateWithOverwrite">
      <path value="QuestionnaireResponse.extension" />
      <sliceName value="updateWithOverwrite" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/updateWithOverwrite" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.extension:surveyCycle">
      <path value="QuestionnaireResponse.extension" />
      <sliceName value="surveyCycle" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/survey/cycles/cycle" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.extension:surveyForm">
      <path value="QuestionnaireResponse.extension" />
      <sliceName value="surveyForm" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/survey/forms/form" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.extension:crfCreationDate">
      <path value="QuestionnaireResponse.extension" />
      <sliceName value="crfCreationDate" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/crf/creationDate" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.extension:approvalState">
      <path value="QuestionnaireResponse.extension" />
      <sliceName value="approvalState" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/studyVisitItem/approvalState" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.identifier">
      <path value="QuestionnaireResponse.identifier" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.identifier.value">
      <path value="QuestionnaireResponse.identifier.value" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.questionnaire">
      <path value="QuestionnaireResponse.questionnaire" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.status">
      <path value="QuestionnaireResponse.status" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.subject">
      <path value="QuestionnaireResponse.subject" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.centraxx.de/StructureDefinition/SurveyMember" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.authored">
      <path value="QuestionnaireResponse.authored" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.author">
      <path value="QuestionnaireResponse.author" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://fhir.centraxx.de/StructureDefinition/Person" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item">
      <path value="QuestionnaireResponse.item" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.extension">
      <path value="QuestionnaireResponse.item.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Extension" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.extension:valueIndex">
      <path value="QuestionnaireResponse.item.extension" />
      <sliceName value="valueIndex" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://fhir.centraxx.de/extension/crf/item/valueIndex" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.linkId">
      <path value="QuestionnaireResponse.item.linkId" />
      <comment value="The id of the corresponding CrfTemplateField" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.text">
      <path value="QuestionnaireResponse.item.text" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer">
      <path value="QuestionnaireResponse.item.answer" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="$this" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueBoolean">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueBoolean" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="boolean" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueAttachment" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Attachment" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment.contentType">
      <path value="QuestionnaireResponse.item.answer.value[x].contentType" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment.data">
      <path value="QuestionnaireResponse.item.answer.value[x].data" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment.size">
      <path value="QuestionnaireResponse.item.answer.value[x].size" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment.title">
      <path value="QuestionnaireResponse.item.answer.value[x].title" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueAttachment.creation">
      <path value="QuestionnaireResponse.item.answer.value[x].creation" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueDecimal">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueDecimal" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="decimal" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueInteger">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueInteger" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="integer" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueCoding">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueCoding" />
      <min value="0" />
      <max value="*" />
      <type>
        <code value="Coding" />
      </type>
      <example>
        <label value="Icd Entry" />
        <valueCoding>
          <system value="urn:centraxx:CodeSystem/IcdCatalog-18" />
          <version value="code" />
          <code value="A32.1" />
        </valueCoding>
      </example>
      <example>
        <label value="Ops entry" />
        <valueCoding>
          <system value="urn:centraxx:CodeSystem/OpsCatalog-3" />
          <code value="1-100" />
        </valueCoding>
      </example>
      <example>
        <label value="custom catalog entry" />
        <valueCoding>
          <system value="urn:centraxx:CodeSystem/Catalog-4" />
          <code value="the custom code" />
        </valueCoding>
      </example>
      <example>
        <label value="usage entry (controlled vocabulary)" />
        <valueCoding>
          <system value="urn:centraxx:CodeSystem/UsageEntry-3" />
          <code value="THE_CODE" />
        </valueCoding>
      </example>
      <constraint>
        <key value="qre-cxx-1" />
        <severity value="error" />
        <human value="If the catalog is an IcdCatalog, a version must be given." />
        <expression value="system.startsWith('urn:centraxx:CodeSystem/IcdCatalog-') implies version.exists()" />
        <source value="https://fhir.centraxx.de/StructureDefinition/QuestionnaireResponse" />
      </constraint>
      <constraint>
        <key value="qre-cxx-2" />
        <severity value="error" />
        <human value="The catalog system must be supported by CentraXX. The system url must start with 'urn:centraxx:CodeSystem/&lt;catalog&gt;' where &lt;catalog&gt; must be one of: IcdCatalog, OpsCatalog, Catalog, MasterDataCatalog, UsageEntry" />
        <expression value="system.startsWith('urn:centraxx:CodeSystem/IcdCatalog') or system.startsWith('urn:centraxx:CodeSystem/OpsCatalog') or system.startsWith('urn:centraxx:CodeSystem/Catalog') or system.startsWith('urn:centraxx:CodeSystem/MasterDataCatalog') or system.startsWith('urn:centraxx:CodeSystem/UsageEntry') or system.startsWith('urn:centraxx:CodeSystem/ValueList')" />
        <source value="https://fhir.centraxx.de/StructureDefinition/QuestionnaireResponse" />
      </constraint>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueCoding.system">
      <path value="QuestionnaireResponse.item.answer.value[x].system" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueCoding.version">
      <path value="QuestionnaireResponse.item.answer.value[x].version" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueCoding.code">
      <path value="QuestionnaireResponse.item.answer.value[x].code" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueDate">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueDate" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="date" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueDateTime">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueDateTime" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="dateTime" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueQuantity">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueQuantity" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Quantity" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueQuantity.value">
      <path value="QuestionnaireResponse.item.answer.value[x].value" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueQuantity.unit">
      <path value="QuestionnaireResponse.item.answer.value[x].unit" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueString">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueString" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="string" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueTime">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueTime" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="time" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="QuestionnaireResponse.item.answer.value[x]:valueUri">
      <path value="QuestionnaireResponse.item.answer.value[x]" />
      <sliceName value="valueUri" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="uri" />
      </type>
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>