<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="profile-DwProcedure" />
  <url value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwProcedure" />
  <version value="2.0.0" />
  <name value="DwProcedure" />
  <status value="draft" />
  <date value="2026-05-29" />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Procedure" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Procedure" />
  <derivation value="constraint" />
  <differential>
    <element id="Procedure.id">
      <path value="Procedure.id" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.meta.lastUpdated">
      <path value="Procedure.meta.lastUpdated" />
      <min value="1" />
    </element>
    <element id="Procedure.meta.source">
      <path value="Procedure.meta.source" />
      <min value="1" />
    </element>
    <element id="Procedure.text">
      <path value="Procedure.text" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.identifier">
      <path value="Procedure.identifier" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.status">
      <path value="Procedure.status" />
      <comment value="Usage note: In clinical setting the procedures are typically documented after they are completed. Most of the time the status will be completed. However, EMRs do have the ability to set the status to current in which case the FHIR status will be preparation. &#xD;&#xA;MA --&gt; FHIR&#xD;&#xA;current --&gt; preparation&#xD;&#xA;past--&gt; completed&#xD;&#xA;&#xD;&#xA;The &quot;unknown&quot; code is not to be used to convey other statuses.  The &quot;unknown&quot; code should be used when one of the statuses applies, but the authoring system doesn't know the current state of the procedure.&#xA;&#xA;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="Procedure.category">
      <path value="Procedure.category" />
      <comment value="Usage note : MA  use 387713003  Surgical procedure (procedure) for Surgical Hx category&#xD;&#xA;&#xD;&#xA;Not all terminology uses fit this general pattern. In some cases, models should not use CodeableConcept and use Coding directly and provide their own structure for managing text, codings, translations and the relationship between elements and pre- and post-coordination." />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code">
      <path value="Procedure.code" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding">
      <path value="Procedure.code.coding" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD9">
      <path value="Procedure.code.coding" />
      <sliceName value="codeICD9" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="http://fhir.infoway-inforoute.ca/io/psca/ValueSet/ICD9CM" />
      </binding>
    </element>
    <element id="Procedure.code.coding:codeICD9.system">
      <path value="Procedure.code.coding.system" />
      <min value="1" />
      <fixedUri value="http://hl7.org/fhir/sid/icd-9-cm" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD9.code">
      <path value="Procedure.code.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD9.display">
      <path value="Procedure.code.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD9.userSelected">
      <path value="Procedure.code.coding.userSelected" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD10">
      <path value="Procedure.code.coding" />
      <sliceName value="codeICD10" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="http://hl7.org/fhir/ValueSet/icd-10" />
      </binding>
    </element>
    <element id="Procedure.code.coding:codeICD10.system">
      <path value="Procedure.code.coding.system" />
      <min value="1" />
      <fixedUri value="http://hl7.org/fhir/sid/icd-10" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD10.code">
      <path value="Procedure.code.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD10.display">
      <path value="Procedure.code.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeICD10.userSelected">
      <path value="Procedure.code.coding.userSelected" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeSnomedCT">
      <path value="Procedure.code.coding" />
      <sliceName value="codeSnomedCT" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="http://hl7.org/fhir/ValueSet/procedure-code" />
      </binding>
    </element>
    <element id="Procedure.code.coding:codeSnomedCT.system">
      <path value="Procedure.code.coding.system" />
      <min value="1" />
      <fixedUri value="http://snomed.info/sct" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeSnomedCT.version">
      <path value="Procedure.code.coding.version" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeSnomedCT.code">
      <path value="Procedure.code.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeSnomedCT.display">
      <path value="Procedure.code.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeSnomedCT.userSelected">
      <path value="Procedure.code.coding.userSelected" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeEncode">
      <path value="Procedure.code.coding" />
      <sliceName value="codeEncode" />
      <comment value="Usage Note:  Code system that is mandatory for Community Health Centres in Ontario.&#xD;&#xA;&#xD;&#xA;&#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" />
      <binding>
        <strength value="required" />
        <valueSet value="https://www.insite-fm.com/encode-fm" />
      </binding>
    </element>
    <element id="Procedure.code.coding:codeEncode.system">
      <path value="Procedure.code.coding.system" />
      <min value="1" />
      <fixedUri value="https://www.insite-fm.com/encode-fm" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeEncode.code">
      <path value="Procedure.code.coding.code" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeEncode.display">
      <path value="Procedure.code.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:codeEncode.userSelected">
      <path value="Procedure.code.coding.userSelected" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:absentOrUnknownProcedure">
      <path value="Procedure.code.coding" />
      <sliceName value="absentOrUnknownProcedure" />
      <comment value="Usage Note:  When the EMR specifies no known procedures then map to #no-known-procedures otherwise map to #no-procedure-info&#xD;&#xA;&#xD;&#xA;&#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" />
      <binding>
        <strength value="required" />
        <valueSet value="http://hl7.org/fhir/uv/ips/ValueSet/absent-or-unknown-procedures-uv-ips" />
      </binding>
    </element>
    <element id="Procedure.code.coding:absentOrUnknownProcedure.system">
      <path value="Procedure.code.coding.system" />
      <min value="1" />
      <fixedUri value="http://hl7.org/fhir/uv/ips/CodeSystem/absent-unknown-uv-ips" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:absentOrUnknownProcedure.code">
      <path value="Procedure.code.coding.code" />
      <comment value="Codes are identified as &#xD;&#xA;  no-procedure-info | no-known-procedures &#xD;&#xA;&#xD;&#xA;Note that FHIR strings SHALL NOT exceed 1MB in size" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:absentOrUnknownProcedure.display">
      <path value="Procedure.code.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.coding:absentOrUnknownProcedure.userSelected">
      <path value="Procedure.code.coding.userSelected" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.code.text">
      <path value="Procedure.code.text" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.subject">
      <path value="Procedure.subject" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPatient" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Procedure.encounter">
      <path value="Procedure.encounter" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwEncounter" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Procedure.performed[x]">
      <path value="Procedure.performed[x]" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.recorder">
      <path value="Procedure.recorder" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPatient" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitioner" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitionerRole" />
      </type>
    </element>
    <element id="Procedure.asserter">
      <path value="Procedure.asserter" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPatient" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitioner" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitionerRole" />
      </type>
    </element>
    <element id="Procedure.performer">
      <path value="Procedure.performer" />
      <comment value="Usage note: Name of the provider who performed the procedure when available." />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.performer.actor">
      <path value="Procedure.performer.actor" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitioner" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPractitionerRole" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwOrganization" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwPatient" />
        <targetProfile value="http://hl7.org/fhir/StructureDefinition/Device" />
      </type>
    </element>
    <element id="Procedure.performer.actor.display">
      <path value="Procedure.performer.actor.display" />
      <comment value="Usage note: Name of the provider who performed the procedure when available. &#xD;&#xA;&#xD;&#xA;This is generally not the same as the Resource.text of the referenced resource.  The purpose is to identify what's being referenced, not to fully describe it." />
      <min value="1" />
    </element>
    <element id="Procedure.location">
      <path value="Procedure.location" />
      <comment value="Usage note: Name of the location at which the procedure was performed when available. &#xD;&#xA;&#xD;&#xA;References SHALL be a reference to an actual FHIR resource, and SHALL be resolveable (allowing for access control, temporary unavailability, etc.). Resolution can be either by retrieval from the URL, or, where applicable by resource type, by treating an absolute reference as a canonical URL and looking it up in a local registry/repository." />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwLocation" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Procedure.location.display">
      <path value="Procedure.location.display" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.bodySite">
      <path value="Procedure.bodySite" />
      <comment value="Usage note: Site as documented in the EMR&#xD;&#xA;If the use case requires attributes from the BodySite resource (e.g. to identify and track separately) then use the standard extension [procedure-targetbodystructure](extension-procedure-targetbodystructure.html)." />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.bodySite.text">
      <path value="Procedure.bodySite.text" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.outcome">
      <path value="Procedure.outcome" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.outcome.text">
      <path value="Procedure.outcome.text" />
      <mustSupport value="true" />
    </element>
    <element id="Procedure.report">
      <path value="Procedure.report" />
      <type>
        <code value="Reference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwDiagnosticReport" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwDocumentReference" />
        <targetProfile value="https://www.telus.com/health/fhir/dwemrextract/StructureDefinition/DwComposition" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Procedure.note">
      <path value="Procedure.note" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>