<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="Bundle-MedicationOverview" />
  <meta>
    <lastUpdated value="2017-12-07T15:37:42.957+01:00" />
  </meta>
  <url value="http://nictiz.nl/fhir/StructureDefinition/Bundle-MedicationOverview" />
  <version value="2.0" />
  <name value="Medication Overview response structure" />
  <status value="draft" />
  <date value="2017-12-04T17:07:30.44+01:00" />
  <publisher value="Nictiz" />
  <contact>
    <name value="Nictiz" />
    <telecom>
      <system value="email" />
      <value value="info@nictiz.nl" />
      <use value="work" />
    </telecom>
  </contact>
  <description value="Profile on the Bundle resource which represents the structure of the retrieve medication overview response transaction. The output of the ['$medication-overiew'](https://simplifier.net/NictizSTU3/Medication-Overview) operation SHALL conform to this profile." />
  <purpose value="To define the body of the retrieve medication overview response transaction. This profile should provide guidance for servers in constructing the medication-overview operation outcome and enableling validation against it. For clients this profile should be helpfull in expecting the response format of the medication-overview outcome." />
  <copyright value="CC0" />
  <fhirVersion value="3.0.1" />
  <mapping>
    <identity value="Medication-Overview" />
    <uri value="https://decor.nictiz.nl/medicatieproces/mp-html-20170829T141253/tr-2.16.840.1.113883.2.4.3.11.60.20.77.4.148-2016-11-08T103441.html" />
    <name value="Medication Process V09: Medication Overview" />
    <comment value="Source language is in Dutch." />
  </mapping>
  <kind value="resource" />
  <abstract value="false" />
  <type value="Bundle" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/Bundle" />
  <derivation value="constraint" />
  <snapshot>
    <element id="Bundle">
      <path value="Bundle" />
      <short value="Contains a collection of resources" />
      <definition value="A container for a collection of resources." />
      <min value="0" />
      <max value="*" />
      <base>
        <path value="Resource" />
        <min value="0" />
        <max value="*" />
      </base>
      <constraint>
        <key value="bdl-7" />
        <severity value="error" />
        <human value="FullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId" />
        <expression value="entry.where(fullUrl).select(fullUrl&amp;resource.meta.versionId).isDistinct()" />
        <xpath value="count(for $entry in f:entry[f:resource] return $entry[count(parent::f:Bundle/f:entry[f:fullUrl/@value=$entry/f:fullUrl/@value and ((not(f:resource/*/f:meta/f:versionId/@value) and not($entry/f:resource/*/f:meta/f:versionId/@value)) or f:resource/*/f:meta/f:versionId/@value=$entry/f:resource/*/f:meta/f:versionId/@value)])!=1])=0" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-9" />
        <severity value="error" />
        <human value="A document must have an identifier with a system and a value" />
        <expression value="type = 'document' implies (identifier.system.exists() and identifier.value.exists())" />
        <xpath value="not(f:type/@value = 'document') or exists(f:identifier/f:system) or exists(f:identifier/f:value)" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-3" />
        <severity value="error" />
        <human value="entry.request only for some types of bundles" />
        <expression value="entry.request.empty() or type = 'batch' or type = 'transaction' or type = 'history'" />
        <xpath value="not(f:entry/f:request) or (f:type/@value = 'batch') or (f:type/@value = 'transaction') or (f:type/@value = 'history')" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-4" />
        <severity value="error" />
        <human value="entry.response only for some types of bundles" />
        <expression value="entry.response.empty() or type = 'batch-response' or type = 'transaction-response'" />
        <xpath value="not(f:entry/f:response) or (f:type/@value = 'batch-response') or (f:type/@value = 'transaction-response')" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-1" />
        <severity value="error" />
        <human value="total only when a search or history" />
        <expression value="total.empty() or (type = 'searchset') or (type = 'history')" />
        <xpath value="not(f:total) or (f:type/@value = 'searchset') or (f:type/@value = 'history')" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-2" />
        <severity value="error" />
        <human value="entry.search only when a search" />
        <expression value="entry.search.empty() or (type = 'searchset')" />
        <xpath value="not(f:entry/f:search) or (f:type/@value = 'searchset')" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-3a" />
        <severity value="error" />
        <human value="For collections of type document, message, searchset or collection, all entries must contain resources, and not have request or response elements" />
        <expression value="type in ('document' | 'message' | 'searchset' | 'collection') implies entry.all(resource.exists() and request.empty() and response.empty())" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-3b" />
        <severity value="error" />
        <human value="For collections of type history, all entries must contain request or response elements, and resources if the method is POST, PUT or PATCH" />
        <expression value="type = 'history' implies entry.all(request.exists() and response.exists() and ((request.method in ('POST' | 'PATCH' | 'PUT')) = resource.exists()))" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-3c" />
        <severity value="error" />
        <human value="For collections of type transaction or batch, all entries must contain request elements, and resources if the method is POST, PUT or PATCH" />
        <expression value="type in ('transaction' | 'batch') implies entry.all(request.method.exists() and ((request.method in ('POST' | 'PATCH' | 'PUT')) = resource.exists()))" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-3d" />
        <severity value="error" />
        <human value="For collections of type transaction-response or batch-response, all entries must contain response elements" />
        <expression value="type in ('transaction-response' | 'batch-response') implies entry.all(response.exists())" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-10" />
        <severity value="error" />
        <human value="A document must have a date" />
        <expression value="type = 'document' implies (timestamp.hasValue())" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-11" />
        <severity value="error" />
        <human value="A document must have a Composition as the first resource" />
        <expression value="type = 'document' implies entry.first().resource.is(Composition)" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-12" />
        <severity value="error" />
        <human value="A message must have a MessageHeader as the first resource" />
        <expression value="type = 'message' implies entry.first().resource.is(MessageHeader)" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-15" />
        <severity value="error" />
        <human value="Bundle resources where type is not transaction, transaction-response, batch, or batch-response or when the request is a POST SHALL have Bundle.entry.fullUrl populated" />
        <expression value="type='transaction' or type='transaction-response' or type='batch' or type='batch-response' or entry.all(fullUrl.exists() or request.method='POST')" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <mapping>
        <identity value="rim" />
        <map value="Entity. Role, or Act" />
      </mapping>
      <mapping>
        <identity value="v2" />
        <map value="N/A" />
      </mapping>
      <mapping>
        <identity value="rim" />
        <map value="N/A" />
      </mapping>
      <mapping>
        <identity value="w5" />
        <map value="infrastructure.structure" />
      </mapping>
    </element>
    <element id="Bundle.id">
      <path value="Bundle.id" />
      <short value="Logical id of this artifact" />
      <definition value="The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Resource.id" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="id" />
      </type>
      <isSummary value="true" />
      <comments value="The only time that a resource does not have an id is when it is being submitted to the server using a create operation. Bundles always have an id, though it is usually a generated UUID." />
    </element>
    <element id="Bundle.meta">
      <path value="Bundle.meta" />
      <short value="Metadata about the resource" />
      <definition value="The metadata about the resource. This is content that is maintained by the infrastructure. Changes to the content may not always be associated with version changes to the resource." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Resource.meta" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="Meta" />
      </type>
      <isSummary value="true" />
    </element>
    <element id="Bundle.implicitRules">
      <path value="Bundle.implicitRules" />
      <short value="A set of rules under which this content was created" />
      <definition value="A reference to a set of rules that were followed when the resource was constructed, and which must be understood when processing the content." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Resource.implicitRules" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="uri" />
      </type>
      <isModifier value="true" />
      <isSummary value="true" />
      <comments value="Asserting this rule set restricts the content to be only understood by a limited set of trading partners. This inherently limits the usefulness of the data in the long term. However, the existing health eco-system is highly fractured, and not yet ready to define, collect, and exchange data in a generally computable sense. Wherever possible, implementers and/or specification writers should avoid using this element as much as possible." />
    </element>
    <element id="Bundle.language">
      <path value="Bundle.language" />
      <short value="Language of the resource content" />
      <definition value="The base language in which the resource is written." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Resource.language" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="code" />
      </type>
      <binding>
        <strength value="required" />
        <description value="A human language." />
        <valueSetUri value="http://tools.ietf.org/html/bcp47" />
      </binding>
      <comments value="Language is provided to support indexing and accessibility (typically, services such as text to speech use the language tag). The html language tag in the narrative applies  to the narrative. The language tag on the resource may be used to specify the language of other presentations generated from the data in the resource  Not all the content has to be in the base language. The Resource.language should not be assumed to apply to the narrative automatically. If a language is specified, it should it also be specified on the div element in the html (see rules in HTML5 for information about the relationship between xml:lang and the html lang attribute)." />
    </element>
    <element id="Bundle.identifier">
      <path value="Bundle.identifier" />
      <short value="Persistent identifier for the bundle" />
      <definition value="A persistent identifier for the batch that won't change as a batch is copied from server to server." />
      <comment value="Persistent identity generally only matters for batches of type Document, Message, and Collection. It would not normally be populated for search and history results, and servers ignore Bundle.identifier when processing batches and transactions. For Documents  the .identifier SHALL be populated such that the .identifier is globally unique." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Bundle.identifier" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="Identifier" />
      </type>
      <isSummary value="true" />
      <mapping>
        <identity value="w5" />
        <map value="id" />
      </mapping>
    </element>
    <element id="Bundle.type">
      <path value="Bundle.type" />
      <short value="document | message | transaction | transaction-response | batch | batch-response | history | searchset | collection" />
      <definition value="Indicates the purpose of this bundle - how it was intended to be used." />
      <comment value="It's possible to use a bundle for other purposes (e.g. a document can be accepted as a transaction). This is primarily defined so that there can be specific rules for some of the bundle types." />
      <min value="1" />
      <max value="1" />
      <base>
        <path value="Bundle.type" />
        <min value="1" />
        <max value="1" />
      </base>
      <type>
        <code value="code" />
      </type>
      <fixedCode value="searchset" />
      <isSummary value="true" />
      <binding>
        <extension url="http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName">
          <valueString value="BundleType" />
        </extension>
        <strength value="required" />
        <description value="Indicates the purpose of a bundle - how it was intended to be used." />
        <valueSetReference>
          <reference value="http://hl7.org/fhir/ValueSet/bundle-type" />
        </valueSetReference>
      </binding>
      <mapping>
        <identity value="w5" />
        <map value="class" />
      </mapping>
    </element>
    <element id="Bundle.total">
      <path value="Bundle.total" />
      <short value="If search, the total number of matches" />
      <definition value="If a set of search matches, this is the total number of matches for the search (as opposed to the number of results in this bundle)." />
      <comment value="Only used if the bundle is a search result set. The total does not include resources such as OperationOutcome and included resources, only the total number of matching resources." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Bundle.total" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="unsignedInt" />
      </type>
      <condition value="bdl-1" />
      <isSummary value="true" />
    </element>
    <element id="Bundle.link">
      <path value="Bundle.link" />
      <short value="Links related to this Bundle" />
      <definition value="A series of links that provide context to this bundle." />
      <min value="0" />
      <max value="*" />
      <base>
        <path value="Bundle.link" />
        <min value="0" />
        <max value="*" />
      </base>
      <type>
        <code value="BackboneElement" />
      </type>
      <isSummary value="true" />
    </element>
    <element id="Bundle.entry">
      <path value="Bundle.entry" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="resource" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <short value="Entry in the bundle - will have a resource, or information" />
      <definition value="An entry in a bundle resource - will either contain a resource, or information about a resource (transactions and history only)." />
      <min value="2" />
      <max value="*" />
      <base>
        <path value="Bundle.entry" />
        <min value="0" />
        <max value="*" />
      </base>
      <type>
        <code value="BackboneElement" />
      </type>
      <constraint>
        <key value="bdl-8" />
        <severity value="error" />
        <human value="fullUrl cannot be a version specific reference" />
        <expression value="fullUrl.exists() implies fullUrl.contains('/_history/').not()" />
        <xpath value="not(exists(f:fullUrl[contains(string(@value), '/_history/')]))" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-5" />
        <severity value="error" />
        <human value="must be a resource unless there's a request or response" />
        <expression value="resource.exists() or request.exists() or response.exists()" />
        <xpath value="exists(f:resource) or exists(f:request) or exists(f:response)" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <isSummary value="true" />
    </element>
    <element id="Bundle.entry:List">
      <path value="Bundle.entry" />
      <sliceName value="List" />
      <short value="MedicationOveriew" />
      <definition value="An entry in a bundle resource - will either contain a resource, or information about a resource (transactions and history only)." />
      <alias value="Medicatie Overzicht" />
      <alias value="Documentgegevens" />
      <min value="1" />
      <max value="1" />
      <base>
        <path value="Bundle.entry" />
        <min value="0" />
        <max value="*" />
      </base>
      <type>
        <code value="BackboneElement" />
      </type>
      <constraint>
        <key value="bdl-8" />
        <severity value="error" />
        <human value="fullUrl cannot be a version specific reference" />
        <expression value="fullUrl.exists() implies fullUrl.contains('/_history/').not()" />
        <xpath value="not(exists(f:fullUrl[contains(string(@value), '/_history/')]))" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <constraint>
        <key value="bdl-5" />
        <severity value="error" />
        <human value="must be a resource unless there's a request or response" />
        <expression value="resource.exists() or request.exists() or response.exists()" />
        <xpath value="exists(f:resource) or exists(f:request) or exists(f:response)" />
        <source value="http://hl7.org/fhir/StructureDefinition/Bundle" />
      </constraint>
      <isSummary value="true" />
      <mapping>
        <identity value="Medication-Overview" />
        <map value="mp-dataelement900-22968" />
      </mapping>
    </element>
    <element id="Bundle.signature">
      <path value="Bundle.signature" />
      <short value="Digital Signature" />
      <definition value="Digital Signature - base64 encoded. XML-DSIg or a JWT." />
      <comment value="The signature could be created by the &quot;author&quot; of the bundle or by the originating device.   Requirements around inclusion of a signature, verification of signatures and treatment of signed/non-signed bundles is implementation-environment specific." />
      <requirements value="This element allows capturing signatures on documents. It also allows signatures on messages, transactions or even query responses. It may support content-authentication, non-repudiation or other business cases. This is primarily relevant where the bundle may travel through multiple hops or via other mechanisms where HTTPS non-repudiation is insufficient." />
      <min value="0" />
      <max value="1" />
      <base>
        <path value="Bundle.signature" />
        <min value="0" />
        <max value="1" />
      </base>
      <type>
        <code value="Signature" />
      </type>
      <isSummary value="true" />
    </element>
  </snapshot>
  <differential>
    <element id="Bundle.type">
      <path value="Bundle.type" />
      <fixedCode value="searchset" />
    </element>
    <element id="Bundle.entry">
      <path value="Bundle.entry" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="resource" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <min value="2" />
    </element>
    <element id="Bundle.entry:List">
      <path value="Bundle.entry" />
      <sliceName value="List" />
      <short value="MedicationOveriew" />
      <alias value="Medicatie Overzicht" />
      <alias value="Documentgegevens" />
      <min value="1" />
      <max value="1" />
      <mapping>
        <identity value="Medication-Overview" />
        <map value="mp-dataelement900-22968" />
      </mapping>
    </element>
    <element id="Bundle.entry:List.resource">
      <path value="Bundle.entry.resource" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="List" />
        <profile value="http://nictiz.nl/fhir/StructureDefinition/MedicationOverview" />
      </type>
    </element>
    <element id="Bundle.entry:List.resource.subject">
      <path value="Bundle.entry.resource.subject" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://fhir.nl/fhir/StructureDefinition/nl-core-patient" />
        <aggregation value="bundled" />
      </type>
    </element>
    <element id="Bundle.entry:List.resource.entry:AdministrationAgreement">
      <path value="Bundle.entry.resource.entry" />
      <sliceName value="AdministrationAgreement" />
    </element>
    <element id="Bundle.entry:List.resource.entry:AdministrationAgreement.item">
      <path value="Bundle.entry.resource.entry.item" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://nictiz.nl/fhir/StructureDefinition/zib-AdministrationAgreement" />
        <aggregation value="bundled" />
      </type>
    </element>
    <element id="Bundle.entry:List.resource.entry:MedicationUsage">
      <path value="Bundle.entry.resource.entry" />
      <sliceName value="MedicationUsage" />
    </element>
    <element id="Bundle.entry:List.resource.entry:MedicationUsage.item">
      <path value="Bundle.entry.resource.entry.item" />
      <type>
        <code value="Reference" />
        <targetProfile value="http://nictiz.nl/fhir/StructureDefinition/zib-MedicationUse" />
        <aggregation value="bundled" />
      </type>
    </element>
  </differential>
</StructureDefinition>