<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="PatientABeOrderLab" />
  <url value="https://www.alberta.ca/fhir/ab-eorder-lab/StructureDefinition/PatientABeOrderLab" />
  <version value="1.1.0" />
  <name value="PatientABeOrderLab" />
  <title value="Patient (AB:eOrder-Lab)" />
  <status value="draft" />
  <description value="This profile defines a set of constraints to the FHIR Patient resource for use in Alberta eOrder Laboratory (AB:eOrder-Lab). It re-profiles the CA-eReC Patient profile and it includes constraints that represent the minimum expectations for the Patient resource when used in the AB:eOrder-Lab." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="Patient" />
  <baseDefinition value="http://fhir.infoway-inforoute.ca/io/CA-eReC/StructureDefinition/CA-eReC-Patient" />
  <derivation value="constraint" />
  <differential>
    <element id="Patient">
      <path value="Patient" />
      <comment value="Patient resources included in Alberta eOrder Laboratory Bundles have rules that certain attributes are not to be contained in Patient resources. These are mechanically enforced through invariants at the AB:eOrder-Lab Bundle level." />
    </element>
    <element id="Patient.extension">
      <path value="Patient.extension" />
      <min value="1" />
    </element>
    <element id="Patient.extension:individual-recordedSexOrGender">
      <path value="Patient.extension" />
      <sliceName value="individual-recordedSexOrGender" />
      <short value="Extension for representing an individuals recorded sex or gender." />
      <definition value="Recorded sex or gender (RSG) information includes the various sex and gender concepts that are often used in existing systems but are known NOT to represent a gender identity, sex parameter for clinical use, or attributes related to sexuality, such as sexual orientation, sexual activity, or sexual attraction. Examples of recorded sex or gender concepts include administrative gender, administrative sex, and sex assigned at birth. When exchanging this concept, refer to the guidance in the Gender Harmony Implementation Guide" />
      <min value="1" />
      <max value="*" />
      <type>
        <code value="Extension" />
        <profile value="http://hl7.org/fhir/StructureDefinition/individual-recordedSexOrGender" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="Patient.extension:individual-recordedSexOrGender.extension:value">
      <path value="Patient.extension.extension" />
      <sliceName value="value" />
    </element>
    <element id="Patient.extension:individual-recordedSexOrGender.extension:value.value[x]">
      <path value="Patient.extension.extension.value[x]" />
      <binding>
        <strength value="required" />
        <valueSet value="https://www.alberta.ca/fhir/ValueSet/administrative-gender-ab" />
      </binding>
    </element>
    <element id="Patient.extension:individual-recordedSexOrGender.extension:type">
      <path value="Patient.extension.extension" />
      <sliceName value="type" />
    </element>
    <element id="Patient.extension:individual-recordedSexOrGender.extension:type.value[x]">
      <path value="Patient.extension.extension.value[x]" />
      <binding>
        <strength value="required" />
        <valueSet value="https://www.alberta.ca/fhir/ValueSet/recorded-sex-or-gender-type-AB" />
      </binding>
    </element>
    <element id="Patient.identifier">
      <path value="Patient.identifier" />
      <min value="1" />
    </element>
    <element id="Patient.identifier:JHN">
      <path value="Patient.identifier" />
      <sliceName value="JHN" />
      <comment value="Patients must have at least an AB ULI identifier or another provincial JHN identifier. Implementers supplying ULIs shall use identifier.system of https://fhir.infoway-inforoute.ca/NamingSystem/ca-ab-patient-healthcare-id" />
      <min value="1" />
    </element>
    <element id="Patient.identifier:JHN.type">
      <path value="Patient.identifier.type" />
      <min value="1" />
    </element>
    <element id="Patient.identifier:JHN.system">
      <path value="Patient.identifier.system" />
      <min value="1" />
    </element>
    <element id="Patient.identifier:JHN.value">
      <path value="Patient.identifier.value" />
      <min value="1" />
    </element>
    <element id="Patient.name.text">
      <path value="Patient.name.text" />
      <comment value="Mandatory String: Max Character length: 200" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Patient.telecom">
      <path value="Patient.telecom" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="system" />
        </discriminator>
        <rules value="open" />
      </slicing>
    </element>
    <element id="Patient.telecom:Phone">
      <path value="Patient.telecom" />
      <sliceName value="Phone" />
      <min value="0" />
      <max value="*" />
      <mustSupport value="true" />
    </element>
    <element id="Patient.telecom:Phone.system">
      <path value="Patient.telecom.system" />
      <min value="1" />
      <fixedCode value="phone" />
    </element>
    <element id="Patient.birthDate">
      <path value="Patient.birthDate" />
      <min value="1" />
    </element>
    <element id="Patient.address.use">
      <path value="Patient.address.use" />
      <comment value="Assumed to be current home address if Address is present but no Use value is provided" />
    </element>
    <element id="Patient.address.type">
      <path value="Patient.address.type" />
      <comment value="Valid values: postal / physical / both. Assumed to be 'both' if no value is provided" />
    </element>
    <element id="Patient.address.line">
      <path value="Patient.address.line" />
      <min value="1" />
    </element>
    <element id="Patient.address.city">
      <path value="Patient.address.city" />
      <min value="1" />
    </element>
    <element id="Patient.address.state">
      <path value="Patient.address.state" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Patient.address.postalCode">
      <path value="Patient.address.postalCode" />
      <min value="1" />
    </element>
    <element id="Patient.contact.name">
      <path value="Patient.contact.name" />
      <min value="1" />
    </element>
  </differential>
</StructureDefinition>