{
  "resourceType": "StructureDefinition",
  "id": "Bundle-MedicationOverview",
  "meta": {
    "lastUpdated": "2017-12-07T14:37:42.957+00:00"
  },
  "url": "http://nictiz.nl/fhir/StructureDefinition/Bundle-MedicationOverview",
  "version": "2.0",
  "name": "Medication Overview response structure",
  "status": "draft",
  "date": "2017-12-04T16:07:30.44+00:00",
  "publisher": "Nictiz",
  "contact": [
    {
      "name": "Nictiz",
      "telecom": [
        {
          "system": "email",
          "value": "info@nictiz.nl",
          "use": "work"
        }
      ]
    }
  ],
  "description": "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": "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": "CC0",
  "fhirVersion": "3.0.1",
  "mapping": [
    {
      "identity": "Medication-Overview",
      "uri": "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": "Medication Process V09: Medication Overview",
      "comment": "Source language is in Dutch."
    }
  ],
  "kind": "resource",
  "abstract": false,
  "type": "Bundle",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Bundle",
  "derivation": "constraint",
  "snapshot": {
    "element": [
      {
        "id": "Bundle",
        "path": "Bundle",
        "short": "Contains a collection of resources",
        "definition": "A container for a collection of resources.",
        "min": 0,
        "max": "*",
        "base": {
          "path": "Resource",
          "min": 0,
          "max": "*"
        },
        "constraint": [
          {
            "key": "bdl-7",
            "severity": "error",
            "human": "FullUrl must be unique in a bundle, or else entries with the same fullUrl must have different meta.versionId",
            "expression": "entry.where(fullUrl).select(fullUrl&resource.meta.versionId).isDistinct()",
            "xpath": "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": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-9",
            "severity": "error",
            "human": "A document must have an identifier with a system and a value",
            "expression": "type = 'document' implies (identifier.system.exists() and identifier.value.exists())",
            "xpath": "not(f:type/@value = 'document') or exists(f:identifier/f:system) or exists(f:identifier/f:value)",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-3",
            "severity": "error",
            "human": "entry.request only for some types of bundles",
            "expression": "entry.request.empty() or type = 'batch' or type = 'transaction' or type = 'history'",
            "xpath": "not(f:entry/f:request) or (f:type/@value = 'batch') or (f:type/@value = 'transaction') or (f:type/@value = 'history')",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-4",
            "severity": "error",
            "human": "entry.response only for some types of bundles",
            "expression": "entry.response.empty() or type = 'batch-response' or type = 'transaction-response'",
            "xpath": "not(f:entry/f:response) or (f:type/@value = 'batch-response') or (f:type/@value = 'transaction-response')",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-1",
            "severity": "error",
            "human": "total only when a search or history",
            "expression": "total.empty() or (type = 'searchset') or (type = 'history')",
            "xpath": "not(f:total) or (f:type/@value = 'searchset') or (f:type/@value = 'history')",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-2",
            "severity": "error",
            "human": "entry.search only when a search",
            "expression": "entry.search.empty() or (type = 'searchset')",
            "xpath": "not(f:entry/f:search) or (f:type/@value = 'searchset')",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-3a",
            "severity": "error",
            "human": "For collections of type document, message, searchset or collection, all entries must contain resources, and not have request or response elements",
            "expression": "type in ('document' | 'message' | 'searchset' | 'collection') implies entry.all(resource.exists() and request.empty() and response.empty())",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-3b",
            "severity": "error",
            "human": "For collections of type history, all entries must contain request or response elements, and resources if the method is POST, PUT or PATCH",
            "expression": "type = 'history' implies entry.all(request.exists() and response.exists() and ((request.method in ('POST' | 'PATCH' | 'PUT')) = resource.exists()))",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-3c",
            "severity": "error",
            "human": "For collections of type transaction or batch, all entries must contain request elements, and resources if the method is POST, PUT or PATCH",
            "expression": "type in ('transaction' | 'batch') implies entry.all(request.method.exists() and ((request.method in ('POST' | 'PATCH' | 'PUT')) = resource.exists()))",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-3d",
            "severity": "error",
            "human": "For collections of type transaction-response or batch-response, all entries must contain response elements",
            "expression": "type in ('transaction-response' | 'batch-response') implies entry.all(response.exists())",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-10",
            "severity": "error",
            "human": "A document must have a date",
            "expression": "type = 'document' implies (timestamp.hasValue())",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-11",
            "severity": "error",
            "human": "A document must have a Composition as the first resource",
            "expression": "type = 'document' implies entry.first().resource.is(Composition)",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-12",
            "severity": "error",
            "human": "A message must have a MessageHeader as the first resource",
            "expression": "type = 'message' implies entry.first().resource.is(MessageHeader)",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-15",
            "severity": "error",
            "human": "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": "type='transaction' or type='transaction-response' or type='batch' or type='batch-response' or entry.all(fullUrl.exists() or request.method='POST')",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          }
        ],
        "mapping": [
          {
            "identity": "rim",
            "map": "Entity. Role, or Act"
          },
          {
            "identity": "v2",
            "map": "N/A"
          },
          {
            "identity": "rim",
            "map": "N/A"
          },
          {
            "identity": "w5",
            "map": "infrastructure.structure"
          }
        ]
      },
      {
        "comments": "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.",
        "id": "Bundle.id",
        "path": "Bundle.id",
        "short": "Logical id of this artifact",
        "definition": "The logical id of the resource, as used in the URL for the resource. Once assigned, this value never changes.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "Resource.id",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "id"
          }
        ],
        "isSummary": true
      },
      {
        "id": "Bundle.meta",
        "path": "Bundle.meta",
        "short": "Metadata about the resource",
        "definition": "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": 0,
        "max": "1",
        "base": {
          "path": "Resource.meta",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "Meta"
          }
        ],
        "isSummary": true
      },
      {
        "comments": "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.",
        "id": "Bundle.implicitRules",
        "path": "Bundle.implicitRules",
        "short": "A set of rules under which this content was created",
        "definition": "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": 0,
        "max": "1",
        "base": {
          "path": "Resource.implicitRules",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "uri"
          }
        ],
        "isModifier": true,
        "isSummary": true
      },
      {
        "comments": "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).",
        "id": "Bundle.language",
        "path": "Bundle.language",
        "short": "Language of the resource content",
        "definition": "The base language in which the resource is written.",
        "min": 0,
        "max": "1",
        "base": {
          "path": "Resource.language",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "code"
          }
        ],
        "binding": {
          "strength": "required",
          "description": "A human language.",
          "valueSetUri": "http://tools.ietf.org/html/bcp47"
        }
      },
      {
        "id": "Bundle.identifier",
        "path": "Bundle.identifier",
        "short": "Persistent identifier for the bundle",
        "definition": "A persistent identifier for the batch that won't change as a batch is copied from server to server.",
        "comment": "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": 0,
        "max": "1",
        "base": {
          "path": "Bundle.identifier",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "Identifier"
          }
        ],
        "isSummary": true,
        "mapping": [
          {
            "identity": "w5",
            "map": "id"
          }
        ]
      },
      {
        "id": "Bundle.type",
        "path": "Bundle.type",
        "short": "document | message | transaction | transaction-response | batch | batch-response | history | searchset | collection",
        "definition": "Indicates the purpose of this bundle - how it was intended to be used.",
        "comment": "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": 1,
        "max": "1",
        "base": {
          "path": "Bundle.type",
          "min": 1,
          "max": "1"
        },
        "type": [
          {
            "code": "code"
          }
        ],
        "fixedCode": "searchset",
        "isSummary": true,
        "binding": {
          "extension": [
            {
              "url": "http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName",
              "valueString": "BundleType"
            }
          ],
          "strength": "required",
          "description": "Indicates the purpose of a bundle - how it was intended to be used.",
          "valueSetReference": {
            "reference": "http://hl7.org/fhir/ValueSet/bundle-type"
          }
        },
        "mapping": [
          {
            "identity": "w5",
            "map": "class"
          }
        ]
      },
      {
        "id": "Bundle.total",
        "path": "Bundle.total",
        "short": "If search, the total number of matches",
        "definition": "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": "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": 0,
        "max": "1",
        "base": {
          "path": "Bundle.total",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "unsignedInt"
          }
        ],
        "condition": [
          "bdl-1"
        ],
        "isSummary": true
      },
      {
        "id": "Bundle.link",
        "path": "Bundle.link",
        "short": "Links related to this Bundle",
        "definition": "A series of links that provide context to this bundle.",
        "min": 0,
        "max": "*",
        "base": {
          "path": "Bundle.link",
          "min": 0,
          "max": "*"
        },
        "type": [
          {
            "code": "BackboneElement"
          }
        ],
        "isSummary": true
      },
      {
        "id": "Bundle.entry",
        "path": "Bundle.entry",
        "slicing": {
          "discriminator": [
            {
              "type": "type",
              "path": "resource"
            }
          ],
          "rules": "open"
        },
        "short": "Entry in the bundle - will have a resource, or information",
        "definition": "An entry in a bundle resource - will either contain a resource, or information about a resource (transactions and history only).",
        "min": 2,
        "max": "*",
        "base": {
          "path": "Bundle.entry",
          "min": 0,
          "max": "*"
        },
        "type": [
          {
            "code": "BackboneElement"
          }
        ],
        "constraint": [
          {
            "key": "bdl-8",
            "severity": "error",
            "human": "fullUrl cannot be a version specific reference",
            "expression": "fullUrl.exists() implies fullUrl.contains('/_history/').not()",
            "xpath": "not(exists(f:fullUrl[contains(string(@value), '/_history/')]))",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-5",
            "severity": "error",
            "human": "must be a resource unless there's a request or response",
            "expression": "resource.exists() or request.exists() or response.exists()",
            "xpath": "exists(f:resource) or exists(f:request) or exists(f:response)",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          }
        ],
        "isSummary": true
      },
      {
        "id": "Bundle.entry:List",
        "path": "Bundle.entry",
        "sliceName": "List",
        "short": "MedicationOveriew",
        "definition": "An entry in a bundle resource - will either contain a resource, or information about a resource (transactions and history only).",
        "alias": [
          "Medicatie Overzicht",
          "Documentgegevens"
        ],
        "min": 1,
        "max": "1",
        "base": {
          "path": "Bundle.entry",
          "min": 0,
          "max": "*"
        },
        "type": [
          {
            "code": "BackboneElement"
          }
        ],
        "constraint": [
          {
            "key": "bdl-8",
            "severity": "error",
            "human": "fullUrl cannot be a version specific reference",
            "expression": "fullUrl.exists() implies fullUrl.contains('/_history/').not()",
            "xpath": "not(exists(f:fullUrl[contains(string(@value), '/_history/')]))",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          },
          {
            "key": "bdl-5",
            "severity": "error",
            "human": "must be a resource unless there's a request or response",
            "expression": "resource.exists() or request.exists() or response.exists()",
            "xpath": "exists(f:resource) or exists(f:request) or exists(f:response)",
            "source": "http://hl7.org/fhir/StructureDefinition/Bundle"
          }
        ],
        "isSummary": true,
        "mapping": [
          {
            "identity": "Medication-Overview",
            "map": "mp-dataelement900-22968"
          }
        ]
      },
      {
        "id": "Bundle.signature",
        "path": "Bundle.signature",
        "short": "Digital Signature",
        "definition": "Digital Signature - base64 encoded. XML-DSIg or a JWT.",
        "comment": "The signature could be created by the \"author\" 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": "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": 0,
        "max": "1",
        "base": {
          "path": "Bundle.signature",
          "min": 0,
          "max": "1"
        },
        "type": [
          {
            "code": "Signature"
          }
        ],
        "isSummary": true
      }
    ]
  },
  "differential": {
    "element": [
      {
        "id": "Bundle.type",
        "path": "Bundle.type",
        "fixedCode": "searchset"
      },
      {
        "id": "Bundle.entry",
        "path": "Bundle.entry",
        "slicing": {
          "discriminator": [
            {
              "type": "type",
              "path": "resource"
            }
          ],
          "rules": "open"
        },
        "min": 2
      },
      {
        "id": "Bundle.entry:List",
        "path": "Bundle.entry",
        "sliceName": "List",
        "short": "MedicationOveriew",
        "alias": [
          "Medicatie Overzicht",
          "Documentgegevens"
        ],
        "min": 1,
        "max": "1",
        "mapping": [
          {
            "identity": "Medication-Overview",
            "map": "mp-dataelement900-22968"
          }
        ]
      },
      {
        "id": "Bundle.entry:List.resource",
        "path": "Bundle.entry.resource",
        "min": 1,
        "max": "1",
        "type": [
          {
            "code": "List",
            "profile": "http://nictiz.nl/fhir/StructureDefinition/MedicationOverview"
          }
        ]
      },
      {
        "id": "Bundle.entry:List.resource.subject",
        "path": "Bundle.entry.resource.subject",
        "type": [
          {
            "code": "Reference",
            "targetProfile": "http://fhir.nl/fhir/StructureDefinition/nl-core-patient",
            "aggregation": [
              "bundled"
            ]
          }
        ]
      },
      {
        "id": "Bundle.entry:List.resource.entry:AdministrationAgreement",
        "path": "Bundle.entry.resource.entry",
        "sliceName": "AdministrationAgreement"
      },
      {
        "id": "Bundle.entry:List.resource.entry:AdministrationAgreement.item",
        "path": "Bundle.entry.resource.entry.item",
        "type": [
          {
            "code": "Reference",
            "targetProfile": "http://nictiz.nl/fhir/StructureDefinition/zib-AdministrationAgreement",
            "aggregation": [
              "bundled"
            ]
          }
        ]
      },
      {
        "id": "Bundle.entry:List.resource.entry:MedicationUsage",
        "path": "Bundle.entry.resource.entry",
        "sliceName": "MedicationUsage"
      },
      {
        "id": "Bundle.entry:List.resource.entry:MedicationUsage.item",
        "path": "Bundle.entry.resource.entry.item",
        "type": [
          {
            "code": "Reference",
            "targetProfile": "http://nictiz.nl/fhir/StructureDefinition/zib-MedicationUse",
            "aggregation": [
              "bundled"
            ]
          }
        ]
      }
    ]
  }
}