<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="profile-Bundle-history" />
  <url value="https://bpcs.exchange/fhir/StructureDefinition/profile-Bundle-history" />
  <name value="BundleQuery" />
  <title value="Bundle Query" />
  <status value="active" />
  <experimental value="false" />
  <description value="Bundle used for history responses" />
  <fhirVersion value="5.0.0" />
  <mapping>
    <identity value="BPCS" />
    <name value="Internal BPCS API" />
  </mapping>
  <kind value="resource" />
  <abstract value="true" />
  <type value="Bundle" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Bundle" />
  <derivation value="constraint" />
  <differential>
    <element id="Bundle.id">
      <path value="Bundle.id" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.type">
      <path value="Bundle.type" />
      <patternCode value="history" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.timestamp">
      <path value="Bundle.timestamp" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.total">
      <path value="Bundle.total" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.link">
      <path value="Bundle.link" />
      <slicing>
        <discriminator>
          <type value="value" />
          <path value="relation" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.link:self">
      <path value="Bundle.link" />
      <sliceName value="self" />
      <comment value="Echoes the submitted rquest, including only those parameters which were processed by the server.  This allows for the possibility that the server might not support all of the parameters submitted by the client." />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.link:self.relation">
      <path value="Bundle.link.relation" />
      <patternCode value="self" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.link:self.url">
      <path value="Bundle.link.url" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry">
      <path value="Bundle.entry" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.fullUrl">
      <path value="Bundle.entry.fullUrl" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.resource">
      <path value="Bundle.entry.resource" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.search">
      <path value="Bundle.entry.search" />
      <max value="0" />
    </element>
    <element id="Bundle.entry.request">
      <path value="Bundle.entry.request" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.request.method">
      <path value="Bundle.entry.request.method" />
      <comment value="This will be 'CREATE' for the first entry and 'UPDATE' for subsequent entries" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.request.url">
      <path value="Bundle.entry.request.url" />
      <comment value="This will be [base]/Patient for create and [base]/Patient/[odbNum]/$updateRecipient or [base]/Patient/[odbNum]/$inactivateRecipient for others (based on whether the inactivateUserId is present)." />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.response">
      <path value="Bundle.entry.response" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.response.status">
      <path value="Bundle.entry.response.status" />
      <comment value="This will be 201 for the create and 200 for others" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.response.etag">
      <path value="Bundle.entry.response.etag" />
      <comment value="This will be the same as the Patient.meta.version" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="Bundle.entry.response.lastModified">
      <path value="Bundle.entry.response.lastModified" />
      <comment value="This will be the same as the Patient.meta.lastUpdated" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>