<StructureDefinition xmlns="http://hl7.org/fhir">
  <id value="gt-audit-event" />
  <extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-category">
    <valueString value="Foundation.Security" />
  </extension>
  <extension url="http://hl7.org/fhir/StructureDefinition/structuredefinition-security-category">
    <valueCode value="not-classified" />
  </extension>
  <url value="https://fhir.simplifier.net/GT-AuditEvent-Profile/StructureDefinition/gt-audit-event" />
  <version value="1.0.0" />
  <name value="GTAuditEventProfile" />
  <status value="draft" />
  <experimental value="false" />
  <date value="2023-04-11" />
  <publisher value="GigaTECH, LLC" />
  <contact>
    <telecom>
      <system value="url" />
      <value value="http://gigatech.net" />
    </telecom>
  </contact>
  <description value="Defines the elements to be supported within the AuditEvent resource" />
  <fhirVersion value="4.0.1" />
  <mapping>
    <identity value="workflow" />
    <uri value="http://hl7.org/fhir/workflow" />
    <name value="Workflow Pattern" />
  </mapping>
  <mapping>
    <identity value="rim" />
    <uri value="http://hl7.org/v3" />
    <name value="RIM Mapping" />
  </mapping>
  <mapping>
    <identity value="dicom" />
    <uri value="http://nema.org/dicom" />
    <name value="DICOM Tag Mapping" />
  </mapping>
  <mapping>
    <identity value="w5" />
    <uri value="http://hl7.org/fhir/fivews" />
    <name value="FiveWs Pattern Mapping" />
  </mapping>
  <mapping>
    <identity value="w3c.prov" />
    <uri value="http://www.w3.org/ns/prov" />
    <name value="W3C PROV" />
  </mapping>
  <mapping>
    <identity value="fhirprovenance" />
    <uri value="http://hl7.org/fhir/provenance" />
    <name value="FHIR Provenance Mapping" />
  </mapping>
  <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" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.subtype">
      <path value="AuditEvent.subtype" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.action">
      <path value="AuditEvent.action" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.recorded">
      <path value="AuditEvent.recorded" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.outcome">
      <path value="AuditEvent.outcome" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.outcomeDesc">
      <path value="AuditEvent.outcomeDesc" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent">
      <path value="AuditEvent.agent" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="type" />
        </discriminator>
        <description value="describes practitioner name and NPI number" />
        <ordered value="false" />
        <rules value="open" />
      </slicing>
    </element>
    <element id="AuditEvent.agent:practitioner">
      <path value="AuditEvent.agent" />
      <sliceName value="practitioner" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="AuditEvent.agent:practitioner.type">
      <path value="AuditEvent.agent.type" />
      <min value="1" />
      <patternCodeableConcept>
        <coding>
          <system value="http://terminology.hl7.org/CodeSystem/extra-security-role-type" />
          <code value="humanuser" />
          <display value="human user" />
        </coding>
      </patternCodeableConcept>
    </element>
    <element id="AuditEvent.agent:practitioner.who">
      <path value="AuditEvent.agent.who" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:practitioner.name">
      <path value="AuditEvent.agent.name" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.agent:practitioner.requestor">
      <path value="AuditEvent.agent.requestor" />
      <patternBoolean value="true" />
    </element>
    <element id="AuditEvent.source">
      <path value="AuditEvent.source" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.source.site">
      <path value="AuditEvent.source.site" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.source.observer">
      <path value="AuditEvent.source.observer" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity">
      <path value="AuditEvent.entity" />
      <slicing>
        <discriminator>
          <type value="pattern" />
          <path value="name" />
        </discriminator>
        <description value="describes patient ECI number, trigger_identifier, wellness-triggers, correlation ID, contact_time_preferences, and patient choice" />
        <ordered value="false" />
        <rules value="open" />
      </slicing>
      <min value="2" />
    </element>
    <element id="AuditEvent.entity.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:ECI">
      <path value="AuditEvent.entity" />
      <sliceName value="ECI" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="AuditEvent.entity:ECI.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="1" />
        <display value="Person" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:ECI.role">
      <path value="AuditEvent.entity.role" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/object-role" />
        <code value="1" />
        <display value="Patient" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:ECI.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="ECI" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:ECI.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:correlationId">
      <path value="AuditEvent.entity" />
      <sliceName value="correlationId" />
      <min value="1" />
      <max value="1" />
    </element>
    <element id="AuditEvent.entity:correlationId.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:correlationId.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:correlationId.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="correlationId" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:correlationId.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:patientChoice">
      <path value="AuditEvent.entity" />
      <sliceName value="patientChoice" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="AuditEvent.entity:patientChoice.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:patientChoice.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:patientChoice.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="patient-choice" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:patientChoice.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:MDMTiming">
      <path value="AuditEvent.entity" />
      <sliceName value="MDMTiming" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="AuditEvent.entity:MDMTiming.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:MDMTiming.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:MDMTiming.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="MDM-MemberMatch-Timing" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:MDMTiming.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:wellnessTrigger">
      <path value="AuditEvent.entity" />
      <sliceName value="wellnessTrigger" />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="AuditEvent.entity:wellnessTrigger.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:wellnessTrigger.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:wellnessTrigger.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="wellness-trigger" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:wellnessTrigger.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:triggerIidentifier">
      <path value="AuditEvent.entity" />
      <sliceName value="triggerIidentifier" />
      <min value="0" />
      <max value="*" />
    </element>
    <element id="AuditEvent.entity:triggerIidentifier.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:triggerIidentifier.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:triggerIidentifier.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="trigger_identifier" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:triggerIidentifier.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:contactTimePreferences">
      <path value="AuditEvent.entity" />
      <sliceName value="contactTimePreferences" />
      <min value="0" />
      <max value="1" />
    </element>
    <element id="AuditEvent.entity:contactTimePreferences.type">
      <path value="AuditEvent.entity.type" />
      <min value="1" />
      <patternCoding>
        <system value="http://terminology.hl7.org/CodeSystem/audit-entity-type" />
        <code value="4" />
        <display value="Other" />
      </patternCoding>
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:contactTimePreferences.role">
      <path value="AuditEvent.entity.role" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:contactTimePreferences.name">
      <path value="AuditEvent.entity.name" />
      <min value="1" />
      <patternString value="contact_time_preferences" />
      <mustSupport value="true" />
    </element>
    <element id="AuditEvent.entity:contactTimePreferences.detail">
      <path value="AuditEvent.entity.detail" />
      <min value="1" />
      <mustSupport value="true" />
    </element>
  </differential>
</StructureDefinition>