<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="basecommunicationtemplate-profile" />
  <url value="http://fhir.xt.dev/StructureDefinition/BaseCommunicationTemplate" />
  <version value="2.3.1" />
  <name value="BaseCommunicationTemplate" />
  <status value="active" />
  <experimental value="false" />
  <date value="2026-07-02T16:03:22+02:00" />
  <publisher value="x-tention Informationstechnologie GmbH" />
  <contact>
    <telecom>
      <system value="email" />
      <value value="fhir.profiling@x-tention.com" />
      <use value="work" />
    </telecom>
  </contact>
  <description value="The abstract base profile for all templates for a planned communication, automatically triggered by changes in data. The communication is usually a structured interaction modeled as a Task, but might also be a more conventional message." />
  <copyright value="x-tention Informationstechnologie GmbH" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="true" />
  <type value="CommunicationRequest" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/CommunicationRequest" />
  <derivation value="constraint" />
  <differential>
    <element id="CommunicationRequest.identifier">
      <path value="CommunicationRequest.identifier" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="type.coding.system" />
        </discriminator>
        <discriminator>
          <type value="value" />
          <path value="type.coding.code" />
        </discriminator>
        <rules value="open" />
      </slicing>
    </element>
    <element id="CommunicationRequest.identifier:workflowUri">
      <path value="CommunicationRequest.identifier" />
      <sliceName value="workflowUri" />
      <short value="Workflow URI" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type">
      <path value="CommunicationRequest.identifier.type" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type.coding">
      <path value="CommunicationRequest.identifier.type.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type.coding.system">
      <path value="CommunicationRequest.identifier.type.coding.system" />
      <min value="1" />
      <fixedUri value="http://fhir.xt.dev/CodeSystem/IdentifierType" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type.coding.version">
      <path value="CommunicationRequest.identifier.type.coding.version" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type.coding.code">
      <path value="CommunicationRequest.identifier.type.coding.code" />
      <min value="1" />
      <fixedCode value="WRKU" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.type.coding.userSelected">
      <path value="CommunicationRequest.identifier.type.coding.userSelected" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.system">
      <path value="CommunicationRequest.identifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.value">
      <path value="CommunicationRequest.identifier.value" />
      <short value="Workflow URI" />
      <definition value="Identifier of the workflow. This will be associated with the generated tasks through the Task.instantiatesUri, allowing e.g. automatic follow-up tasks. All valid URIs are accepted, URLs and URNs are preferred." />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.identifier:workflowUri.period">
      <path value="CommunicationRequest.identifier.period" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.basedOn">
      <path value="CommunicationRequest.basedOn" />
      <short value="Filter for triggers" />
    </element>
    <element id="CommunicationRequest.groupIdentifier">
      <path value="CommunicationRequest.groupIdentifier" />
      <short value="Engagement Plan Identifier" />
      <definition value="A shared identifier common to all CommunicationTemplates that belong to the same Engagement Plan." />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.groupIdentifier.system">
      <path value="CommunicationRequest.groupIdentifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.groupIdentifier.value">
      <path value="CommunicationRequest.groupIdentifier.value" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.status">
      <path value="CommunicationRequest.status" />
      <short value="active | on-hold | revoked" />
      <definition value="The status of this automatization. May be active, on-hold or revoked. Only active resources trigger communications." />
      <constraint>
        <key value="inv-status-1" />
        <severity value="error" />
        <human value="The status must be one of revoked, active or on-hold" />
        <expression value="$this.exists() and ($this = 'active' or $this = 'revoked' or $this = 'on-hold')" />
      </constraint>
    </element>
    <element id="CommunicationRequest.category">
      <path value="CommunicationRequest.category" />
      <short value="Category based on triggering event" />
      <min value="1" />
      <binding>
        <strength value="required" />
        <valueSet value="http://fhir.xt.dev/ValueSet/CommunicationTemplateCategory" />
      </binding>
    </element>
    <element id="CommunicationRequest.category.coding">
      <path value="CommunicationRequest.category.coding" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.category.coding.system">
      <path value="CommunicationRequest.category.coding.system" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.category.coding.code">
      <path value="CommunicationRequest.category.coding.code" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.medium">
      <path value="CommunicationRequest.medium" />
      <short value="Task type or communication protocol" />
      <definition value="Different task types, like Consent Tasks, are considered communication mediums just like matrix chats, email or in-app notifications." />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.medium.coding">
      <path value="CommunicationRequest.medium.coding" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
    </element>
    <element id="CommunicationRequest.medium.coding:taskType">
      <path value="CommunicationRequest.medium.coding" />
      <sliceName value="taskType" />
      <min value="1" />
      <max value="1" />
      <binding>
        <strength value="required" />
        <description value="Task Type" />
        <valueSet value="http://fhir.xt.dev/ValueSet/PlannedCommunicationMedium" />
      </binding>
    </element>
    <element id="CommunicationRequest.medium.coding:taskType.system">
      <path value="CommunicationRequest.medium.coding.system" />
      <min value="1" />
      <fixedUri value="http://fhir.xt.dev/CodeSystem/TaskTypes" />
    </element>
    <element id="CommunicationRequest.medium.coding:taskType.code">
      <path value="CommunicationRequest.medium.coding.code" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.subject">
      <path value="CommunicationRequest.subject" />
      <short value="Group this template applies to" />
      <definition value="The group that is the focus of this communication request. The group is identified by a URN identifier. Groups in this context define a potential set of patients that may change at any moment and could e.g. encompass all patients with a user account. If no Group is named, the template applies to all Patients. If a Group is named, the template only applies to patient records that fit the Group definition." />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Group" />
      </type>
    </element>
    <element id="CommunicationRequest.subject.type">
      <path value="CommunicationRequest.subject.type" />
      <min value="1" />
      <fixedUri value="Group" />
    </element>
    <element id="CommunicationRequest.subject.identifier">
      <path value="CommunicationRequest.subject.identifier" />
      <short value="Reference to a predefined Group URN" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.subject.identifier.use">
      <path value="CommunicationRequest.subject.identifier.use" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.subject.identifier.system">
      <path value="CommunicationRequest.subject.identifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.subject.identifier.value">
      <path value="CommunicationRequest.subject.identifier.value" />
      <short value="Predefined Group URN" />
      <definition value="Must be one of 'urn:xt:2025:fhir:group:all-patients' or 'urn:xt:2025:fhir:group:patients-with-user-account' or 'urn:xt:2026:fhir:group:patients-with-verified-user-account' or 'urn:xt:2026:fhir:group:patients-with-unverified-user-account'" />
      <min value="1" />
      <constraint>
        <key value="commtemplate-1" />
        <severity value="error" />
        <human value="The group identifier must be on the list of pre-defined group URNs" />
        <expression value="$this.exists() and ($this = 'urn:xt:2025:fhir:group:all-patients' or $this = 'urn:xt:2025:fhir:group:patients-with-user-account' or $this = 'urn:xt:2026:fhir:group:patients-with-verified-user-account' or $this = 'urn:xt:2026:fhir:group:patients-with-unverified-user-account')" />
      </constraint>
    </element>
    <element id="CommunicationRequest.subject.identifier.period">
      <path value="CommunicationRequest.subject.identifier.period" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.subject.identifier.assigner">
      <path value="CommunicationRequest.subject.identifier.assigner" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.encounter">
      <path value="CommunicationRequest.encounter" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload">
      <path value="CommunicationRequest.payload" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="content" />
        </discriminator>
        <rules value="open" />
      </slicing>
    </element>
    <element id="CommunicationRequest.payload:questionnairePayload">
      <path value="CommunicationRequest.payload" />
      <sliceName value="questionnairePayload" />
      <short value="Questionnaire for Questionnaire Task" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.payload:questionnairePayload.content[x]">
      <path value="CommunicationRequest.payload.content[x]" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Questionnaire" />
        <aggregation value="referenced" />
      </type>
    </element>
    <element id="CommunicationRequest.payload:questionnairePayload.content[x].identifier">
      <path value="CommunicationRequest.payload.content[x].identifier" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload:messageBodyPayload">
      <path value="CommunicationRequest.payload" />
      <sliceName value="messageBodyPayload" />
      <short value="Task description" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.payload:messageBodyPayload.content[x]">
      <path value="CommunicationRequest.payload.content[x]" />
      <short value="Message Text" />
      <definition value="Text to be used as Task description or Notification body. Plain text using the system's primary language." />
      <type>
        <code value="string" />
      </type>
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload">
      <path value="CommunicationRequest.payload" />
      <sliceName value="informationLinkPayload" />
      <short value="Links for Information Tasks" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x]">
      <path value="CommunicationRequest.payload.content[x]" />
      <type>
        <code value="Attachment" />
      </type>
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].contentType">
      <path value="CommunicationRequest.payload.content[x].contentType" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].data">
      <path value="CommunicationRequest.payload.content[x].data" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].url">
      <path value="CommunicationRequest.payload.content[x].url" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].size">
      <path value="CommunicationRequest.payload.content[x].size" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].hash">
      <path value="CommunicationRequest.payload.content[x].hash" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].title">
      <path value="CommunicationRequest.payload.content[x].title" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.payload:informationLinkPayload.content[x].creation">
      <path value="CommunicationRequest.payload.content[x].creation" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.occurrence[x]">
      <path value="CommunicationRequest.occurrence[x]" />
      <min value="1" />
      <type>
        <code value="Period" />
      </type>
    </element>
    <element id="CommunicationRequest.occurrence[x].extension:startTiming">
      <path value="CommunicationRequest.occurrence[x].extension" />
      <sliceName value="startTiming" />
      <short value="Communication start" />
      <definition value="This describes when when the communication should start, e.g. as Task.restriction.period.start." />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="http://fhir.xt.dev/StructureDefinition/StartTiming" />
      </type>
      <isModifier value="false" />
    </element>
    <element id="CommunicationRequest.occurrence[x].extension:dueDateTiming">
      <path value="CommunicationRequest.occurrence[x].extension" />
      <sliceName value="dueDateTiming" />
      <definition value="This describes when when the communication should be completed by, e.g. as Task.restriction.period.start." />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="http://fhir.xt.dev/StructureDefinition/DueDateTiming" />
      </type>
      <isModifier value="false" />
    </element>
    <element id="CommunicationRequest.occurrence[x].start">
      <path value="CommunicationRequest.occurrence[x].start" />
      <short value="Applicability Start Date" />
      <definition value="Date before which the system shall not create new Communications based on this CommunicationRequest" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.occurrence[x].end">
      <path value="CommunicationRequest.occurrence[x].end" />
      <short value="Applicability End Date" />
      <definition value="Date after which the system shall not create new Communications based on this CommunicationRequest" />
    </element>
    <element id="CommunicationRequest.requester">
      <path value="CommunicationRequest.requester" />
      <short value="Requesting Organization" />
      <definition value="This will be used as Task.requester for Tasks." />
      <min value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Organization" />
        <aggregation value="referenced" />
      </type>
    </element>
    <element id="CommunicationRequest.requester.reference">
      <path value="CommunicationRequest.requester.reference" />
      <short value="Organization Reference" />
      <definition value="Literal reference to the organization" />
    </element>
    <element id="CommunicationRequest.requester.type">
      <path value="CommunicationRequest.requester.type" />
      <fixedUri value="Organization" />
    </element>
    <element id="CommunicationRequest.requester.identifier.system">
      <path value="CommunicationRequest.requester.identifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.requester.identifier.value">
      <path value="CommunicationRequest.requester.identifier.value" />
      <short value="Primary Org ID" />
      <definition value="URN-encoded primary organization identifier" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.requester.identifier.period">
      <path value="CommunicationRequest.requester.identifier.period" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.requester.identifier.assigner">
      <path value="CommunicationRequest.requester.identifier.assigner" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.recipient">
      <path value="CommunicationRequest.recipient" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="type" />
        </discriminator>
        <rules value="closed" />
      </slicing>
      <short value="Communication target" />
      <definition value="The entity (e.g. person, organization, clinical information system, device, group, or care team) which is the intended target of the communication. For Emails and NotificationMessages, this is the recipient, for Tasks the owner and (potentially the performer). Groups act as placeholder for the specific patient. The different patient groups only exist as identifiers (URNs)." />
      <max value="1" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization">
      <path value="CommunicationRequest.recipient" />
      <sliceName value="targetOrganization" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Organization" />
        <aggregation value="referenced" />
      </type>
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.reference">
      <path value="CommunicationRequest.recipient.reference" />
      <short value="Organization Reference" />
      <definition value="Literal reference to the organization" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.type">
      <path value="CommunicationRequest.recipient.type" />
      <min value="1" />
      <fixedUri value="Organization" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.identifier">
      <path value="CommunicationRequest.recipient.identifier" />
      <short value="Organization Identifier" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.identifier.system">
      <path value="CommunicationRequest.recipient.identifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.identifier.value">
      <path value="CommunicationRequest.recipient.identifier.value" />
      <short value="Primary Org ID" />
      <definition value="URN-encoded primary organization identifier" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.identifier.period">
      <path value="CommunicationRequest.recipient.identifier.period" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.recipient:targetOrganization.identifier.assigner">
      <path value="CommunicationRequest.recipient.identifier.assigner" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount">
      <path value="CommunicationRequest.recipient" />
      <sliceName value="patientsWithUserAccount" />
      <definition value="Patients with a user account include all patients with a verified user account and all patients with a unverified user account." />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Group" />
      </type>
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.type">
      <path value="CommunicationRequest.recipient.type" />
      <min value="1" />
      <fixedUri value="Group" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.identifier">
      <path value="CommunicationRequest.recipient.identifier" />
      <min value="1" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.identifier.system">
      <path value="CommunicationRequest.recipient.identifier.system" />
      <min value="1" />
      <fixedUri value="urn:ietf:rfc:3986" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.identifier.value">
      <path value="CommunicationRequest.recipient.identifier.value" />
      <short value="Patients with User Account" />
      <min value="1" />
      <fixedString value="urn:xt:2025:fhir:group:patients-with-user-account" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.identifier.period">
      <path value="CommunicationRequest.recipient.identifier.period" />
      <max value="0" />
    </element>
    <element id="CommunicationRequest.recipient:patientsWithUserAccount.identifier.assigner">
      <path value="CommunicationRequest.recipient.identifier.assigner" />
      <max value="0" />
    </element>
  </differential>
</StructureDefinition>