<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="epa-auditevent" />
  <url value="https://gematik.de/fhir/epa/StructureDefinition/epa-auditevent" />
  <version value="1.1.0" />
  <name value="EPAAuditEvent" />
  <title value="AuditEvent for the ePA" />
  <status value="active" />
  <experimental value="false" />
  <date value="2024-08-14" />
  <publisher value="gematik GmbH" />
  <description value="Defines the data structure for audit events in the ePA system." />
  <fhirVersion value="4.0.1" />
  <kind value="resource" />
  <abstract value="false" />
  <type value="AuditEvent" />
  <baseDefinition value="http://hl7.org/fhir/StructureDefinition/AuditEvent" />
  <derivation value="constraint" />
  <differential>
    <element id="AuditEvent.type">
      <path value="AuditEvent.type" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-auditevent-type-vs" />
      </binding>
    </element>
    <element id="AuditEvent.subtype">
      <path value="AuditEvent.subtype" />
      <max value="0" />
    </element>
    <element id="AuditEvent.action">
      <path value="AuditEvent.action" />
      <short value="Type of action performed during the event. CREATE: C | READ: R | UPDATE: U | DELETE: D | EXECUTE: E" />
      <definition value="Type of action performed during the event. CREATE: C | READ: R | UPDATE: U | DELETE: D | EXECUTE: E" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.period">
      <path value="AuditEvent.period" />
      <max value="0" />
    </element>
    <element id="AuditEvent.recorded">
      <path value="AuditEvent.recorded" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.outcome">
      <path value="AuditEvent.outcome" />
      <short value="success: 0; failure: 4; major failure: 12" />
      <definition value="success: 0; failure: 4; major failure: 12" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.outcomeDesc">
      <path value="AuditEvent.outcomeDesc" />
      <max value="0" />
    </element>
    <element id="AuditEvent.purposeOfEvent">
      <path value="AuditEvent.purposeOfEvent" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-auditevent-purpose-of-event-vs" />
      </binding>
    </element>
    <element id="AuditEvent.agent">
      <path value="AuditEvent.agent" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="type" />
        </discriminator>
        <rules value="open" />
      </slicing>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user">
      <path value="AuditEvent.agent" />
      <sliceName value="user" />
      <short value="The agent user refers to the service provider (LE) or the service provider institution (LEI)" />
      <definition value="The agent user refers to the service provider (LE) or the service provider institution (LEI)" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.extension:healthcareFacilityType">
      <path value="AuditEvent.agent.extension" />
      <sliceName value="healthcareFacilityType" />
      <min value="0" />
      <max value="1" />
      <type>
        <code value="Extension" />
        <profile value="https://gematik.de/fhir/epa/StructureDefinition/epa-healthcare-facility-type-extension" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.type">
      <path value="AuditEvent.agent.type" />
      <min value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-audit-event-agent-type-user-vs" />
      </binding>
    </element>
    <element id="AuditEvent.agent:user.role">
      <path value="AuditEvent.agent.role" />
      <short value="Professional role of the service provider" />
      <definition value="Professional role of the service provider" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/terminology/ValueSet/epa-ehealth-dsi-healthcare-facility-type-vs" />
      </binding>
    </element>
    <element id="AuditEvent.agent:user.role.coding">
      <path value="AuditEvent.agent.role.coding" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.role.coding.system">
      <path value="AuditEvent.agent.role.coding.system" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.role.coding.code">
      <path value="AuditEvent.agent.role.coding.code" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.role.coding.display">
      <path value="AuditEvent.agent.role.coding.display" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.who">
      <path value="AuditEvent.agent.who" />
      <short value="The subject Id of the IDToken" />
      <definition value="The subject Id of the IDToken" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.who.identifier">
      <path value="AuditEvent.agent.who.identifier" />
      <min value="1" />
      <type>
        <code value="Identifier" />
        <profile value="http://fhir.de/StructureDefinition/identifier-telematik-id" />
        <profile value="http://fhir.de/StructureDefinition/identifier-kvid-10" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.altId">
      <path value="AuditEvent.agent.altId" />
      <short value="Alternative User identity (e.g. Telematik-ID or the KVNR)" />
      <definition value="Alternative User identity (e.g. Telematik-ID or the KVNR)" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.name">
      <path value="AuditEvent.agent.name" />
      <short value="Name of HCP or Insurant" />
      <definition value="Name of HCP or Insurant, in case of EU-access provide the name of the practitioner and the organization separated by a '/'" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:user.requestor">
      <path value="AuditEvent.agent.requestor" />
      <fixedBoolean value="true" />
    </element>
    <element id="AuditEvent.agent:user.location">
      <path value="AuditEvent.agent.location" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:user.policy">
      <path value="AuditEvent.agent.policy" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:user.media">
      <path value="AuditEvent.agent.media" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:user.network">
      <path value="AuditEvent.agent.network" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:client">
      <path value="AuditEvent.agent" />
      <sliceName value="client" />
      <short value="The agent client refers to a software system that has executed the action, for example, E-Rezept Fachdienst" />
      <definition value="The agent client refers to a software system that has executed the action, for example, E-Rezept Fachdienst" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.type">
      <path value="AuditEvent.agent.type" />
      <min value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-audit-event-agent-type-client-vs" />
      </binding>
    </element>
    <element id="AuditEvent.agent:client.role">
      <path value="AuditEvent.agent.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.who">
      <path value="AuditEvent.agent.who" />
      <short value="The subject Id of the IDToken" />
      <definition value="The subject Id of the IDToken" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.who.identifier">
      <path value="AuditEvent.agent.who.identifier" />
      <min value="1" />
      <type>
        <code value="Identifier" />
        <profile value="http://fhir.de/StructureDefinition/identifier-telematik-id" />
      </type>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.altId">
      <path value="AuditEvent.agent.altId" />
      <short value="Alternative client identity (e.g. Telematik-ID))" />
      <definition value="Alternative client identity (e.g. Telematik-ID)" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.name">
      <path value="AuditEvent.agent.name" />
      <short value="Name e.g. eRezept, EU access/country name or DiGA" />
      <definition value="Name of a service e.g. eRezept, EU access/country name or DiGA" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:client.requestor">
      <path value="AuditEvent.agent.requestor" />
      <fixedBoolean value="true" />
    </element>
    <element id="AuditEvent.agent:client.location">
      <path value="AuditEvent.agent.location" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:client.policy">
      <path value="AuditEvent.agent.policy" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:client.media">
      <path value="AuditEvent.agent.media" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:client.network">
      <path value="AuditEvent.agent.network" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:internal">
      <path value="AuditEvent.agent" />
      <sliceName value="internal" />
      <short value="The agent internal refers to internal actions of the Elektronische Patientenakte Fachdienst (ePA) service, such as data export submissions" />
      <definition value="The agent internal refers to internal actions of the Elektronische Patientenakte Fachdienst (ePA) service, such as data export submissions" />
      <min value="0" />
      <max value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:internal.type">
      <path value="AuditEvent.agent.type" />
      <min value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-auditevent-sourcetype-vs" />
      </binding>
    </element>
    <element id="AuditEvent.agent:internal.role">
      <path value="AuditEvent.agent.role" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:internal.altId">
      <path value="AuditEvent.agent.altId" />
      <short value="altId MUST be epa" />
      <definition value="altId MUST be epa" />
      <fixedString value="epa" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:internal.name">
      <path value="AuditEvent.agent.name" />
      <short value="Name MUST be ePA" />
      <definition value="Name MUST be ePA" />
      <min value="1" />
      <fixedString value="ePA" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:internal.requestor">
      <path value="AuditEvent.agent.requestor" />
      <fixedBoolean value="true" />
    </element>
    <element id="AuditEvent.agent:internal.location">
      <path value="AuditEvent.agent.location" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:internal.policy">
      <path value="AuditEvent.agent.policy" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:internal.media">
      <path value="AuditEvent.agent.media" />
      <max value="0" />
    </element>
    <element id="AuditEvent.agent:internal.network">
      <path value="AuditEvent.agent.network" />
      <max value="0" />
    </element>
    <element id="AuditEvent.source">
      <path value="AuditEvent.source" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.source.observer.display">
      <path value="AuditEvent.source.observer.display" />
      <fixedString value="Elektronische Patientenakte Fachdienst" />
    </element>
    <element id="AuditEvent.source.type">
      <path value="AuditEvent.source.type" />
      <min value="1" />
      <max value="1" />
      <mustSupport value="true" />
      <binding>
        <strength value="required" />
        <valueSet value="https://gematik.de/fhir/epa/ValueSet/epa-auditevent-sourcetype-vs" />
      </binding>
    </element>
    <element id="AuditEvent.entity">
      <path value="AuditEvent.entity" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.what">
      <path value="AuditEvent.entity.what" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.type">
      <path value="AuditEvent.entity.type" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.role">
      <path value="AuditEvent.entity.role" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.lifecycle">
      <path value="AuditEvent.entity.lifecycle" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.securityLabel">
      <path value="AuditEvent.entity.securityLabel" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.name">
      <path value="AuditEvent.entity.name" />
      <short value="The title of the XDS document, FHIR resource or object name of a service (e.g. Entitlement Service, Device Management, ...)." />
      <definition value="The title of the XDS document, FHIR resource or object name of a service (e.g. Entitlement Service, Device Management, ...)." />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.description">
      <path value="AuditEvent.entity.description" />
      <short value="The OperationId" />
      <definition value="The OperationId" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.query">
      <path value="AuditEvent.entity.query" />
      <max value="0" />
    </element>
    <element id="AuditEvent.entity.detail">
      <path value="AuditEvent.entity.detail" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.detail.type">
      <path value="AuditEvent.entity.detail.type" />
      <short value="The Name of the property (e.g. Document Format, DocumentID, ...)." />
      <definition value="The Name of the property (e.g. Document Format, DocumentID, ...)." />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.detail.value[x]">
      <path value="AuditEvent.entity.detail.value[x]" />
      <slicing>
        <discriminator>
          <type value="type" />
          <path value="$this" />
        </discriminator>
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="AuditEvent.entity.detail.value[x]:valueString">
      <path value="AuditEvent.entity.detail.value[x]" />
      <sliceName value="valueString" />
      <short value="Property value (e.g. urn:gematik:ig:Zahnbonusheft:v1.1.0)" />
      <definition value="Property value (e.g. urn:gematik:ig:Zahnbonusheft:v1.1.0)" />
      <min value="1" />
      <max value="1" />
      <type>
        <code value="string" />
      </type>
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>