<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="profile-DwMedicationStatement" />
  <url value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwMedicationStatement" />
  <version value="2.0.0" />
  <name value="DwMedicationStatement" />
  <status value="draft" />
  <date value="2026-05-29" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="MedicationStatement" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/MedicationStatement" />
  <derivation value="constraint" />
  <differential>
    <element id="MedicationStatement.id">
      <path value="MedicationStatement.id" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.meta.lastUpdated">
      <path value="MedicationStatement.meta.lastUpdated" />
      <min value="1" />
    </element>
    <element id="MedicationStatement.meta.source">
      <path value="MedicationStatement.meta.source" />
      <min value="1" />
    </element>
    <element id="MedicationStatement.text">
      <path value="MedicationStatement.text" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.extension">
      <path value="MedicationStatement.extension" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="url" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="MedicationStatement.extension:RenderedDosageInstruction">
      <path value="MedicationStatement.extension" />
      <sliceName value="RenderedDosageInstruction" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="http://prescribeit.ca/fhir/StructureDefinition/ext-rendered-dosage-instruction" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.identifier">
      <path value="MedicationStatement.identifier" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.identifier.system">
      <path value="MedicationStatement.identifier.system" />
      <comment value="urn:telus:emr:{emrType}:{emrInstanceId}:MedicationStatement&#xD;&#xA;Identifier.system is always case sensitive." />
      <min value="1" />
    </element>
    <element id="MedicationStatement.identifier.value">
      <path value="MedicationStatement.identifier.value" />
      <min value="1" />
    </element>
    <element id="MedicationStatement.basedOn">
      <path value="MedicationStatement.basedOn" />
      <short value="Fulfills plan, proposal or order" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwMedicationRequest" />
      </type>
    </element>
    <element id="MedicationStatement.partOf">
      <path value="MedicationStatement.partOf" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwMedicationAdministration" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwMedicationStatement" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwProcedure" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwObservationResults" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.status">
      <path value="MedicationStatement.status" />
      <comment value="Usage note: Status of the current and past medication on a patient's chart in the EMR &#xD;&#xA;&#xD;&#xA;MedicationStatement is a statement at a point in time.  The status is only representative at the point when it was asserted.  The value set for MedicationStatement.status contains codes that assert the status of the use of the medication by the patient (for example, stopped or on hold) as well as codes that assert the status of the medication statement itself (for example, entered in error).&#xD;&#xD;This element is labeled as a modifier because the status contains codes that mark the resource as not currently valid." />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.statusReason">
      <path value="MedicationStatement.statusReason" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]">
      <path value="MedicationStatement.medication[x]" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="$this" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]:medicationReference">
      <path value="MedicationStatement.medication[x]" />
      <sliceName value="medicationReference" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwMedication" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]:medicationCodeableConcept">
      <path value="MedicationStatement.medication[x]" />
      <sliceName value="medicationCodeableConcept" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="CodeableConcept" />
      </type>
      <mustSupport value="true" />
      <binding>
        <strength value="preferred" />
        <valueSet value="http://hl7.org/fhir/uv/ips/ValueSet/absent-or-unknown-medications-uv-ips" />
      </binding>
    </element>
    <element id="MedicationStatement.medication[x]:medicationCodeableConcept.coding.system">
      <path value="MedicationStatement.medication[x].coding.system" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]:medicationCodeableConcept.coding.code">
      <path value="MedicationStatement.medication[x].coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]:medicationCodeableConcept.coding.display">
      <path value="MedicationStatement.medication[x].coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.medication[x]:medicationCodeableConcept.text">
      <path value="MedicationStatement.medication[x].text" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.subject">
      <path value="MedicationStatement.subject" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPatient" />
      </type>
    </element>
    <element id="MedicationStatement.context">
      <path value="MedicationStatement.context" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwEncounter" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.effective[x]">
      <path value="MedicationStatement.effective[x]" />
      <comment value="Usage note:&#xD;&#xA;Provide effective.period with start and end date&#xD;&#xA;If the medication is current and does not have an end date in the EMR then provide the effective.period with just the start date. &#xD;&#xA;&#xD;&#xA;&#xD;&#xA;This attribute reflects the period over which the patient consumed the medication and is expected to be populated on the majority of Medication Statements. If the medication is still being taken at the time the statement is recorded, the &quot;end&quot; date will be omitted.  The date/time attribute supports a variety of dates - year, year/month and exact date.  If something more than this is required, this should be conveyed as text." />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dateAsserted">
      <path value="MedicationStatement.dateAsserted" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.reasonCode">
      <path value="MedicationStatement.reasonCode" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.reasonReference">
      <path value="MedicationStatement.reasonReference" />
      <comment value="Usage note: This is a reference to a condition that is the reason why the medication is being/was taken. If only a code exists, use reasonCode." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwCondition" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwObservationResults" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwDiagnosticReport" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.note">
      <path value="MedicationStatement.note" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage">
      <path value="MedicationStatement.dosage" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.sequence">
      <path value="MedicationStatement.dosage.sequence" />
      <comment value="Usage note: If the sequence number of multiple Dosages is the same, then it is implied that the instructions are to be treated as concurrent.  If the sequence number is different, then the Dosages are intended to be sequential.&#xD;&#xA;&#xD;&#xA;32 bit number; for values larger than this, use decimal" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.text">
      <path value="MedicationStatement.dosage.text" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.additionalInstruction">
      <path value="MedicationStatement.dosage.additionalInstruction" />
      <comment value="Usage Note:: To convey explicit instructions to the Pharmacist/dispenser related to this medication order.&#xD;&#xA;&#xD;&#xA;Information about administration or preparation of the medication (e.g. &quot;infuse as rapidly as possibly via intraperitoneal port&quot; or &quot;immediately following drug x&quot;) should be populated in dosage.text." />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.patientInstruction">
      <path value="MedicationStatement.dosage.patientInstruction" />
      <comment value="Note that FHIR strings SHALL NOT exceed 1MB in size" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.timing">
      <path value="MedicationStatement.dosage.timing" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.timing.repeat">
      <path value="MedicationStatement.dosage.timing.repeat" />
      <mustSupport value="false" />
    </element>
    <element id="MedicationStatement.dosage.timing.code">
      <path value="MedicationStatement.dosage.timing.code" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.timing.code.text">
      <path value="MedicationStatement.dosage.timing.code.text" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.asNeeded[x]">
      <path value="MedicationStatement.dosage.asNeeded[x]" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route">
      <path value="MedicationStatement.dosage.route" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding">
      <path value="MedicationStatement.dosage.route.coding" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeSCTCA">
      <path value="MedicationStatement.dosage.route.coding" />
      <sliceName value="routeSCTCA" />
      <min value="0" />
      <max value="*" />
      <binding>
        <strength value="required" />
        <valueSet value="https://fhir.infoway-inforoute.ca/ValueSet/routeofadministration" />
      </binding>
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeSCTCA.system">
      <path value="MedicationStatement.dosage.route.coding.system" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeSCTCA.code">
      <path value="MedicationStatement.dosage.route.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeSCTCA.display">
      <path value="MedicationStatement.dosage.route.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeEMR">
      <path value="MedicationStatement.dosage.route.coding" />
      <sliceName value="routeEMR" />
      <comment value="Usage Note:  this will provide the EMR specific route codes &#xD;&#xD;&#xA;Codes may be defined very casually in enumerations, or code lists, up to very formal definitions such as SNOMED CT - see the HL7 v3 Core Principles for more information.  Ordering of codings is undefined and SHALL NOT be used to infer meaning. Generally, at most only one of the coding values will be labeled as UserSelected = true." />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeEMR.system">
      <path value="MedicationStatement.dosage.route.coding.system" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeEMR.code">
      <path value="MedicationStatement.dosage.route.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.coding:routeEMR.display">
      <path value="MedicationStatement.dosage.route.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.route.text">
      <path value="MedicationStatement.dosage.route.text" />
      <mustSupport value="true" />
    </element>
    <element id="MedicationStatement.dosage.doseAndRate.dose[x]">
      <path value="MedicationStatement.dosage.doseAndRate.dose[x]" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>