{
  "resourceType": "StructureDefinition",
  "id": "KBV-PR-EAU-Bundle",
  "url": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle",
  "version": "1.1.0_cc",
  "name": "KBV_PR_EAU_Bundle",
  "status": "draft",
  "experimental": false,
  "date": "2022-05-13",
  "publisher": "Kassenärztliche Bundesvereinigung",
  "fhirVersion": "4.0.1",
  "mapping": [
    {
      "identity": "v2",
      "uri": "http://hl7.org/v2",
      "name": "HL7 v2 Mapping"
    },
    {
      "identity": "rim",
      "uri": "http://hl7.org/v3",
      "name": "RIM Mapping"
    },
    {
      "identity": "cda",
      "uri": "http://hl7.org/v3/cda",
      "name": "CDA (R2)"
    },
    {
      "identity": "w5",
      "uri": "http://hl7.org/fhir/fivews",
      "name": "FiveWs Pattern Mapping"
    }
  ],
  "kind": "resource",
  "abstract": false,
  "type": "Bundle",
  "baseDefinition": "http://hl7.org/fhir/StructureDefinition/Bundle",
  "derivation": "constraint",
  "differential": {
    "element": [
      {
        "id": "Bundle",
        "path": "Bundle",
        "constraint": [
          {
            "key": "Composition-pflicht",
            "severity": "error",
            "human": "Die Ressource vom Typ Composition muss genau einmal vorhanden sein",
            "expression": "entry.where(resource is Composition).count()=1",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "Composition-Pruefnummer",
            "severity": "error",
            "human": "Die Prüfnummer ist nicht vorhanden, ist aber bei den Kostentraegern vom Typ \"GKV\", \"BG\", \"SKT\" oder \"UK\" ein Pflichtelement.",
            "expression": "( entry.where(resource is Coverage).resource.type.coding.code='GKV' or          entry.where(resource is Coverage).resource.type.coding.code='BG' or          entry.where(resource is Coverage).resource.type.coding.code='SKT' or          entry.where(resource is Coverage).resource.type.coding.code='UK') implies          entry.where(resource is Composition).resource.author.identifier.where(system='https://fhir.kbv.de/NamingSystem/KBV_NS_FOR_Pruefnummer').exists()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "PostalCode",
            "severity": "error",
            "human": "Die Postleitzahl ist nicht vorhanden, sie ist aber bei den Kostentraegern vom Typ \"GKV\", \"BG\", \"SKT\", \"PKV\" oder \"UK\" ein Pflichtelement.",
            "expression": "(        entry.where(resource is Coverage).resource.type.coding.code='GKV' or         entry.where(resource is Coverage).resource.type.coding.code='BG' or         entry.where(resource is Coverage).resource.type.coding.code='SKT' or         entry.where(resource is Coverage).resource.type.coding.code='UK' or         entry.where(resource is Coverage).resource.type.coding.code='PKV') implies                 entry.where(resource is Patient).resource.address.postalCode.exists()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "Rechtsgrundlage-Pflicht",
            "severity": "error",
            "human": "Die Rechtsgrundlage ist nicht vorhanden, sie ist aber bei den Kostentraegern vom Typ \"GKV\", \"BG\", \"SKT\", \"PKV\" oder \"UK\" ein Pflichtelement.",
            "expression": "(       entry.where(resource is Coverage).resource.type.coding.code='GKV' or        entry.where(resource is Coverage).resource.type.coding.code='BG' or        entry.where(resource is Coverage).resource.type.coding.code='SKT' or        entry.where(resource is Coverage).resource.type.coding.code='UK' or        entry.where(resource is Coverage).resource.type.coding.code='PKV') implies        entry.where(resource is Composition).resource.extension('https://fhir.kbv.de/StructureDefinition/KBV_EX_FOR_Legal_basis').exists()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "unique-ServiceRequest",
            "severity": "error",
            "human": "Die Einträge für die Instanz ServiceRequest müssen im Dokument eindeutig sein.",
            "expression": "entry.select(resource as ServiceRequest).code.coding.code.isDistinct()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "TypeComposition",
            "severity": "error",
            "human": "Die Instanz der Composition muss vom Profil KBV_PR_EAU_Composition|1.0.3 sein",
            "expression": "entry.where(resource is Composition).resource.meta.profile = 'https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Composition|1.1.0_cc'",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "angabeNrAusstellendePerson",
            "severity": "error",
            "human": "Nummer der ausstellenden Person ist nicht vorhanden, aber Pflicht, wenn es sich um einen Arzt oder Zahnarzt handelt",
            "expression": "(          (         entry.where(resource is Coverage).resource.type.coding.code='GKV' or          entry.where(resource is Coverage).resource.type.coding.code='BG' or          entry.where(resource is Coverage).resource.type.coding.code='SKT' or          entry.where(resource is Coverage).resource.type.coding.code='UK' or          entry.where(resource is Coverage).resource.type.coding.code='PKV') and (          entry.where(resource is Practitioner).resource.qualification.code.coding.code='00' or           entry.where(resource is Practitioner).resource.qualification.code.coding.code='01' or           entry.where(resource is Practitioner).resource.qualification.code.coding.code='04')        ) implies entry.where(resource is Practitioner).resource.identifier.exists()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "angabeBestriebsstaettennr",
            "severity": "error",
            "human": "Betriebsstaettennummer nicht vorhanden, aber Pflicht, wenn es sich um einen Arzt, Zahnarzt oder Arzt in Weiterbildung handelt",
            "expression": "(        (         entry.where(resource is Coverage).resource.type.coding.code='GKV' or          entry.where(resource is Coverage).resource.type.coding.code='BG' or          entry.where(resource is Coverage).resource.type.coding.code='SKT' or          entry.where(resource is Coverage).resource.type.coding.code='UK') and (          entry.where(resource is Practitioner).resource.qualification.code.coding.code='00' or           entry.where(resource is Practitioner).resource.qualification.code.coding.code='01' or           entry.where(resource is Practitioner).resource.qualification.code.coding.code='03' or           entry.where(resource is Practitioner).resource.qualification.code.coding.code='04')                  ) implies         entry.where(resource is Organization).resource.identifier.exists()",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "angabeAUseitErstbescheinigung",
            "severity": "error",
            "human": "Die Angabe arbeitsunfaehig seit ist nicht gesetzt, muss aber bei einer Erstbescheinigung gesetzt werden.",
            "expression": "(         entry.where(resource is Composition).resource.type.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_EAU_AU_Type').code = 'ERST'          or         entry.where(resource is Composition).resource.type.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_EAU_AU_Type').code = 'ERST_END'         )implies(         entry.select(resource as Condition).where(meta.profile = 'https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Condition_AU|1.1.0_cc').onsetPeriod.start.exists()        )",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "angabeAUseitFolgebescheinigung",
            "severity": "error",
            "human": "Die Angabe arbeitsunfaehig seit darf  bei einer Folgebescheinigung nicht gesetzt werden.",
            "expression": "(entry.where(resource is Composition).resource.type.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_EAU_AU_Type').code = 'FOLGE' or entry.where(resource is Composition).resource.type.coding.where(system = 'https://fhir.kbv.de/CodeSystem/KBV_CS_EAU_AU_Type').code = 'FOLGE_END')implies(entry.select(resource as Condition).where(meta.profile = 'https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Condition_AU|1.1.0_cc').onsetPeriod.start.empty())",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "PflichtVersichertenIDbeiGKV",
            "severity": "error",
            "human": "Wenn der Kostentraeger GKV ist und eine Versichertennummer uebertragen wird, dann muss die Versichertennummer von der GKV sein.",
            "expression": "entry.where(resource is Coverage).resource.type.coding.code='GKV' and entry.where(resource is Patient).resource.identifier.exists() implies entry.where(resource is Patient).resource.identifier.type.coding.code='GKV'",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "PflichtVersichertenIDbeiPKV",
            "severity": "error",
            "human": "Wenn der Kostentraeger PKV ist und eine Versichertennummer uebertragen wird, dann muss die Versichertennummer von der PKV sein.",
            "expression": "entry.where(resource is Coverage).resource.type.coding.code='PKV' and entry.where(resource is Patient).resource.identifier.exists() implies entry.where(resource is Patient).resource.identifier.type.coding.code='PKV'",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          },
          {
            "key": "PflichtVersichertenIDbeiKVK",
            "severity": "error",
            "human": "Wenn der Kostentraeger SKT ist und eine Versichertennummer uebertragen wird, dann muss die Versichertennummer von der SKT sein.",
            "expression": "entry.where(resource is Coverage).resource.type.coding.code='SKT' and entry.where(resource is Patient).resource.identifier.exists() implies entry.where(resource is Patient).resource.identifier.type.coding.code='kvk'",
            "source": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle"
          }
        ]
      },
      {
        "id": "Bundle.id",
        "path": "Bundle.id",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.meta",
        "path": "Bundle.meta",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.meta.versionId",
        "path": "Bundle.meta.versionId",
        "max": "0"
      },
      {
        "id": "Bundle.meta.lastUpdated",
        "path": "Bundle.meta.lastUpdated",
        "mustSupport": true
      },
      {
        "id": "Bundle.meta.source",
        "path": "Bundle.meta.source",
        "max": "0"
      },
      {
        "id": "Bundle.meta.profile",
        "path": "Bundle.meta.profile",
        "min": 1,
        "max": "1",
        "fixedCanonical": "https://fhir.kbv.de/StructureDefinition/KBV_PR_EAU_Bundle|1.1.0_cc",
        "mustSupport": true
      },
      {
        "id": "Bundle.meta.security",
        "path": "Bundle.meta.security",
        "max": "0"
      },
      {
        "id": "Bundle.meta.tag",
        "path": "Bundle.meta.tag",
        "max": "0"
      },
      {
        "id": "Bundle.implicitRules",
        "path": "Bundle.implicitRules",
        "max": "0"
      },
      {
        "id": "Bundle.language",
        "path": "Bundle.language",
        "max": "0"
      },
      {
        "id": "Bundle.identifier",
        "path": "Bundle.identifier",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.identifier.use",
        "path": "Bundle.identifier.use",
        "max": "0"
      },
      {
        "id": "Bundle.identifier.type",
        "path": "Bundle.identifier.type",
        "max": "0"
      },
      {
        "id": "Bundle.identifier.system",
        "path": "Bundle.identifier.system",
        "definition": "Festlegung damit eine UUID kommt",
        "min": 1,
        "fixedUri": "urn:ietf:rfc:3986",
        "mustSupport": true
      },
      {
        "id": "Bundle.identifier.value",
        "path": "Bundle.identifier.value",
        "definition": "Eindeutige UUID",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.identifier.period",
        "path": "Bundle.identifier.period",
        "max": "0"
      },
      {
        "id": "Bundle.identifier.assigner",
        "path": "Bundle.identifier.assigner",
        "max": "0"
      },
      {
        "id": "Bundle.type",
        "path": "Bundle.type",
        "fixedCode": "document",
        "mustSupport": true
      },
      {
        "id": "Bundle.timestamp",
        "path": "Bundle.timestamp",
        "definition": "DateTime wann das Dokument technisch erstellt wurde. \r\nFachlich bildet das Ausstellungsdatum das entscheidende Datum ab",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.total",
        "path": "Bundle.total",
        "max": "0"
      },
      {
        "id": "Bundle.link",
        "path": "Bundle.link",
        "max": "0"
      },
      {
        "id": "Bundle.entry",
        "path": "Bundle.entry",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.entry.link",
        "path": "Bundle.entry.link",
        "max": "0"
      },
      {
        "id": "Bundle.entry.fullUrl",
        "path": "Bundle.entry.fullUrl",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.entry.resource",
        "path": "Bundle.entry.resource",
        "min": 1,
        "mustSupport": true
      },
      {
        "id": "Bundle.entry.search",
        "path": "Bundle.entry.search",
        "max": "0"
      },
      {
        "id": "Bundle.entry.request",
        "path": "Bundle.entry.request",
        "max": "0"
      },
      {
        "id": "Bundle.entry.response",
        "path": "Bundle.entry.response",
        "max": "0"
      },
      {
        "id": "Bundle.signature",
        "path": "Bundle.signature",
        "max": "0"
      },
      {
        "id": "Bundle.signature.who.reference",
        "path": "Bundle.signature.who.reference",
        "min": 1
      },
      {
        "id": "Bundle.signature.who.type",
        "path": "Bundle.signature.who.type",
        "max": "0"
      },
      {
        "id": "Bundle.signature.who.identifier",
        "path": "Bundle.signature.who.identifier",
        "max": "0"
      },
      {
        "id": "Bundle.signature.who.display",
        "path": "Bundle.signature.who.display",
        "max": "0"
      }
    ]
  }
}