Release 5 Draft Ballot

This page is part of the FHIR Specification (v4.6.0: R5 Draft Ballot - see ballot notes). The current version which supercedes this version is 5.0.0. For a full list of available versions, see the Directory of published versions . Page versions: R5 R4B R4 R3 R2

6.4 Resource AuditEvent - Content

Security Work GroupMaturity Level: 3 Trial UseSecurity Category: Not Classified Compartments: Device, Patient, Practitioner

This resource has been identified by it's owning workgroup as a normative candidate for R5. Ballot comment is requested on this.

A record of an event relevant for purposes such as operations, privacy, security, maintenance, and performance analysis.

The audit event is based on the IHE-ATNA Audit record definitions, originally from RFC 3881 , and now managed by DICOM (see DICOM Part 15 Annex A5 ).

  • ASTM E2147 – Setup the concept of security audit logs for healthcare including accounting of disclosures
  • IETF RFC 3881 – Defined the Information Model (IETF rule forced this to be informative)
  • DICOM Audit Log Message – Made the information model Normative, defined Vocabulary, Transport Binding, and Schema
  • IHE ATNA – Defines the grouping with secure transport and access controls; and defined specific audit log records for specific IHE transactions.
  • NIST SP800-92 – Shows how to do audit log management and reporting – consistent with our model
  • HL7 PASS – Defined an Audit Service with responsibilities and a query interface for reporting use
  • ISO 27789 – Defined the subset of audit events that an EHR would need
  • ISO/HL7 10781 EHR System Functional Model Release 2
  • ISO 21089 Trusted End-to-End Information Flows

This resource is managed collaboratively between HL7, DICOM, and IHE.

A record of an event relevant for purposes such as operations, privacy, security, maintenance, and performance analysis.

All actors - such as applications, processes, and services - involved in an auditable event should record an AuditEvent. This will likely result in multiple AuditEvent entries that show whether privacy and security safeguards, such as access control, are properly functioning across an enterprise's system-of-systems. Thus, it is typical to get an auditable event recorded by both the application in a workflow process and the servers that support them. For this reason, duplicate entries are expected, which is helpful because it may aid in the detection of security, privacy, or other operational problems. For example, fewer than expected actors being recorded in a multi-actor process or attributes related to those records being in conflict, which is an indication of a security problem. There may be non-participating actors, such as trusted intermediary, that also detect a security, privacy, or operational relevant event and thus would record an AuditEvent.

Security relevant events are not limited to communications or RESTful events. They include:

  • software start-up and shutdown;
  • user login and logout;
  • access control decisions;
  • configuration events;
  • software installation;
  • policy rules changes; and
  • manipulation of data that exposes the data to users.

See the Audit Event Sub-Type vocabulary for guidance on some security relevant events.

The AuditEvent resource holds the details of an event in terms of who, what, where, when, and why. Where the identification of the who participated is the agent. An agent can be a person, an organization, software, device, or other actors that may be ascribed responsibility. What objects were used/created/updated is recorded as the entity. An entity is an identifiable physical, digital, conceptual or other kind of thing; entities may be real or imaginary.

The content of an AuditEvent is intended for use by security system administrators, security and privacy information managers, and records management personnel. This content is not intended to be accessible or used directly by other healthcare users, such as providers or patients, although reports generated from the raw data would be useful. An example is a patient-centric accounting of disclosures or an access report. Servers that provide support for AuditEvent resources would not generally accept update or delete operations on the resources, as this would compromise the integrity of the audit record. Access to the AuditEvent would typically be limited to security, privacy, or other system administration purposes.

Relationship of AuditEvent and Provenance resources are often (though not exclusively) created by the application responding to the create/read/query/update/delete/execute etc. event. A Provenance resource contains overlapping information, but is a record-keeping assertion that gathers information about the context in which the information in a resource "came to be" in its current state, e.g., whether it was created de novo or obtained from another entity in whole, part, or by transformation. Provenance resources are prepared by the application that initiates the create/update of the resource and may be persisted with the AuditEvent target resource.

No resources refer to this resource directly.

This resource implements the Event pattern.

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. AuditEvent TUDomainResourceRecord of an event
Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension
... type Σ1..1CodingType/identifier of event
Audit Event ID (Extensible)
... subtype Σ0..*CodingMore specific type/id for the event
Audit Event Sub-Type (Extensible)
... action Σ0..1codeType of action performed during the event
AuditEventAction (Required)
... period 0..1PeriodWhen the activity occurred
... recorded Σ1..1instantTime when the event was recorded
... outcome Σ0..1CodeableConceptWhether the event succeeded or failed
AuditEventOutcome (Extensible)
... purposeOfEvent Σ0..*CodeableConceptThe purposeOfUse of the event
PurposeOfUse (Extensible)
... basedOn 0..*Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest)Workflow authorization within which this event occurred
... encounter 0..1Reference(Encounter)Encounter within which this event occurred or which the event is tightly associated
... agent 1..*BackboneElementActor involved in the event
.... type 0..1CodeableConceptHow agent participated
ParticipationRoleType (Extensible)
.... role 0..*CodeableConceptAgent role in the event
SecurityRoleType (Example)
.... who Σ0..1Reference(PractitionerRole | Practitioner | Organization | Device | Patient | RelatedPerson)Identifier of who
.... altId 0..1stringAlternative User identity
.... name 0..1stringHuman friendly name for the agent
.... requestor Σ1..1booleanWhether user is initiator
.... location 0..1Reference(Location)Where
.... policy 0..*uriPolicy that authorized event
.... media 0..1CodingType of media
Audit Agent Media Type (Extensible)
.... network 0..1BackboneElementLogical network location for application activity
..... address 0..1stringIdentifier for the network access point of the user device
..... type 0..1codeThe type of network access point
AuditEventAgentNetworkType (Required)
.... purposeOfUse 0..*CodeableConceptReason given for this user
PurposeOfUse (Extensible)
... source 1..1BackboneElementAudit Event Reporter
.... site 0..1stringLogical source location within the enterprise
.... observer Σ1..1Reference(PractitionerRole | Practitioner | Organization | Device | Patient | RelatedPerson)The identity of source detecting the event
.... type 0..*CodingThe type of source where event originated
Audit Event Source Type (Extensible)
... entity I0..*BackboneElementData or objects used
+ Rule: Either a name or a query (NOT both)
.... what Σ0..1Reference(Any)Specific instance of resource
.... type 0..1CodingType of entity involved
AuditEventEntityType (Extensible)
.... role 0..1CodingWhat role the entity played
AuditEventEntityRole (Extensible)
.... lifecycle 0..1CodingLife-cycle stage for the entity
ObjectLifecycleEvents (Extensible)
.... securityLabel 0..*CodingSecurity labels on the entity
SecurityLabels (Extensible)
.... name ΣI0..1stringDescriptor for entity
.... query ΣI0..1base64BinaryQuery parameters
.... detail 0..*BackboneElementAdditional Information about the entity
..... type 1..1stringName of the property
..... value[x] 1..1Property value
...... valueStringstring
...... valueBase64Binarybase64Binary

doco Documentation for this format

UML Diagram (Legend)

AuditEvent (DomainResource)Identifier for a family of the event. For example, a menu item, program, rule, policy, function code, application name or URL. It identifies the performed functiontype : Coding [1..1] « null (Strength=Extensible)AuditEventID+ »Identifier for the category of eventsubtype : Coding [0..*] « null (Strength=Extensible)AuditEventSub-Type+ »Indicator for type of action performed during the event that generated the auditaction : code [0..1] « Indicator for type of action performed during the event that generated the event. (Strength=Required)AuditEventAction! »Indicates and enables segmentation of various severity including debugging from criticalseverity : code [0..1] « The severity of the audit entry. (Strength=Required)AuditEventSeverity! »The period during which the activity occurredperiod : Period [0..1]The time when the event was recordedrecorded : instant [1..1]Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.textoutcome : CodeableConcept [0..1] « Indicates whether the event succeeded or failed. (Strength=Extensible)AuditEventOutcome+ »The purposeOfUse (reason) that was used during the event being recordedpurposeOfEvent : CodeableConcept [0..*] « null (Strength=Extensible)PurposeOfUse+ »Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted uponbasedOn : Reference [0..*] « CarePlan|DeviceRequest| ImmunizationRecommendation|MedicationRequest|NutritionOrder| ServiceRequest »This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests)encounter : Reference [0..1] « Encounter »AgentSpecification of the participation type the user plays when performing the eventtype : CodeableConcept [0..1] « null (Strength=Extensible)ParticipationRoleType+ »The security role that the user was acting under, that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local contextrole : CodeableConcept [0..*] « null (Strength=Example)SecurityRoleType?? »Reference to who this agent is that was involved in the eventwho : Reference [0..1] « PractitionerRole|Practitioner|Organization| Device|Patient|RelatedPerson »Alternative agent Identifier. For a human, this should be a user identifier text string from authentication system. This identifier would be one known to a common authentication system (e.g. single sign-on), if availablealtId : string [0..1]Human-meaningful name for the agentname : string [0..1]Indicator that the user is or is not the requestor, or initiator, for the event being auditedrequestor : boolean [1..1]Where the event occurredlocation : Reference [0..1] « Location »The policy or plan that authorized the activity being recorded. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token usedpolicy : uri [0..*]Type of media involved. Used when the event is about exporting/importing onto mediamedia : Coding [0..1] « Used when the event is about exporting/importing onto media. (Strength=Extensible)AuditMediaType+ »The reason (purpose of use), specific to this agent, that was used during the event being recordedpurposeOfUse : CodeableConcept [0..*] « null (Strength=Extensible)PurposeOfUse+ »NetworkAn identifier for the network access point of the user device for the audit eventaddress : string [0..1]An identifier for the type of network access point that originated the audit eventtype : code [0..1] « The type of network access point of this agent in the audit event. (Strength=Required)AuditEventAgentNetworkType! »SourceLogical source location within the healthcare enterprise network. For example, a hospital or other provider location within a multi-entity provider groupsite : string [0..1]Identifier of the source where the event was detectedobserver : Reference [1..1] « PractitionerRole|Practitioner| Organization|Device|Patient|RelatedPerson »Code specifying the type of source where event originatedtype : Coding [0..*] « null (Strength=Extensible)AuditEventSourceType+ »EntityIdentifies a specific instance of the entity. The reference should be version specificwhat : Reference [0..1] « Any »The type of the object that was involved in this audit eventtype : Coding [0..1] « Code for the entity type involved in the audit event. (Strength=Extensible)AuditEventEntityType+ »Code representing the role the entity played in the event being auditedrole : Coding [0..1] « Code representing the role the entity played in the audit event. (Strength=Extensible)AuditEventEntityRole+ »Identifier for the data life-cycle stage for the entitylifecycle : Coding [0..1] « null (Strength=Extensible)ObjectLifecycleEvents+ »Security labels for the identified entitysecurityLabel : Coding [0..*] « null (Strength=Extensible)All Security Labels+ »A name of the entity in the audit eventname : string [0..1]The query parameters for a query-type entitiesquery : base64Binary [0..1]DetailThe type of extra detail provided in the valuetype : string [1..1]The value of the extra detailvalue[x] : PrimitiveType [1..1] « string|base64Binary »Logical network location for application activity, if the activity has a network locationnetwork[0..1]An actor taking an active role in the event or activity that is loggedagent[1..*]The system that is reporting the eventsource[1..1]Tagged value pairs for conveying additional information about the entitydetail[0..*]Specific instances of data or objects that have been accessedentity[0..*]

XML Template

<AuditEvent xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <type><!-- 1..1 Coding Type/identifier of event --></type>
 <subtype><!-- 0..* Coding More specific type/id for the event --></subtype>
 <action value="[code]"/><!-- 0..1 Type of action performed during the event -->
 <severity value="[code]"/><!-- 0..1 emergency | alert | critical | error | warning | notice | informational | debug -->
 <period><!-- 0..1 Period When the activity occurred --></period>
 <recorded value="[instant]"/><!-- 1..1 Time when the event was recorded -->
 <outcome><!-- 0..1 CodeableConcept Whether the event succeeded or failed --></outcome>
 <purposeOfEvent><!-- 0..* CodeableConcept The purposeOfUse of the event  --></purposeOfEvent>
 <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
   MedicationRequest|NutritionOrder|ServiceRequest) Workflow authorization within which this event occurred --></basedOn>
 <encounter><!-- 0..1 Reference(Encounter) Encounter within which this event occurred or which the event is tightly associated --></encounter>
 <agent>  <!-- 1..* Actor involved in the event -->
  <type><!-- 0..1 CodeableConcept How agent participated --></type>
  <role><!-- 0..* CodeableConcept Agent role in the event --></role>
  <who><!-- 0..1 Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) Identifier of who --></who>
  <altId value="[string]"/><!-- 0..1 Alternative User identity -->
  <name value="[string]"/><!-- 0..1 Human friendly name for the agent -->
  <requestor value="[boolean]"/><!-- 1..1 Whether user is initiator -->
  <location><!-- 0..1 Reference(Location) Where --></location>
  <policy value="[uri]"/><!-- 0..* Policy that authorized event -->
  <media><!-- 0..1 Coding Type of media --></media>
  <network>  <!-- 0..1 Logical network location for application activity -->
   <address value="[string]"/><!-- 0..1 Identifier for the network access point of the user device -->
   <type value="[code]"/><!-- 0..1 The type of network access point -->
  </network>
  <purposeOfUse><!-- 0..* CodeableConcept Reason given for this user  --></purposeOfUse>
 </agent>
 <source>  <!-- 1..1 Audit Event Reporter -->
  <site value="[string]"/><!-- 0..1 Logical source location within the enterprise -->
  <observer><!-- 1..1 Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) The identity of source detecting the event --></observer>
  <type><!-- 0..* Coding The type of source where event originated --></type>
 </source>
 <entity>  <!-- 0..* Data or objects used -->
  <what><!-- 0..1 Reference(Any) Specific instance of resource --></what>
  <type><!-- 0..1 Coding Type of entity involved --></type>
  <role><!-- 0..1 Coding What role the entity played --></role>
  <lifecycle><!-- 0..1 Coding Life-cycle stage for the entity --></lifecycle>
  <securityLabel><!-- 0..* Coding Security labels on the entity --></securityLabel>
  <name value="[string]"/><!-- ?? 0..1 Descriptor for entity -->
  <query value="[base64Binary]"/><!-- ?? 0..1 Query parameters -->
  <detail>  <!-- 0..* Additional Information about the entity -->
   <type value="[string]"/><!-- 1..1 Name of the property -->
   <value[x]><!-- 1..1 string|base64Binary Property value --></value[x]>
  </detail>
 </entity>
</AuditEvent>

JSON Template

{doco
  "resourceType" : "AuditEvent",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "type" : { Coding }, // R!  Type/identifier of event
  "subtype" : [{ Coding }], // More specific type/id for the event
  "action" : "<code>", // Type of action performed during the event
  "severity" : "<code>", // emergency | alert | critical | error | warning | notice | informational | debug
  "period" : { Period }, // When the activity occurred
  "recorded" : "<instant>", // R!  Time when the event was recorded
  "outcome" : { CodeableConcept }, // Whether the event succeeded or failed
  "purposeOfEvent" : [{ CodeableConcept }], // The purposeOfUse of the event 
  "basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
   MedicationRequest|NutritionOrder|ServiceRequest) }], // Workflow authorization within which this event occurred
  "encounter" : { Reference(Encounter) }, // Encounter within which this event occurred or which the event is tightly associated
  "agent" : [{ // R!  Actor involved in the event
    "type" : { CodeableConcept }, // How agent participated
    "role" : [{ CodeableConcept }], // Agent role in the event
    "who" : { Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) }, // Identifier of who
    "altId" : "<string>", // Alternative User identity
    "name" : "<string>", // Human friendly name for the agent
    "requestor" : <boolean>, // R!  Whether user is initiator
    "location" : { Reference(Location) }, // Where
    "policy" : ["<uri>"], // Policy that authorized event
    "media" : { Coding }, // Type of media
    "network" : { // Logical network location for application activity
      "address" : "<string>", // Identifier for the network access point of the user device
      "type" : "<code>" // The type of network access point
    },
    "purposeOfUse" : [{ CodeableConcept }] // Reason given for this user 
  }],
  "source" : { // R!  Audit Event Reporter
    "site" : "<string>", // Logical source location within the enterprise
    "observer" : { Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) }, // R!  The identity of source detecting the event
    "type" : [{ Coding }] // The type of source where event originated
  },
  "entity" : [{ // Data or objects used
    "what" : { Reference(Any) }, // Specific instance of resource
    "type" : { Coding }, // Type of entity involved
    "role" : { Coding }, // What role the entity played
    "lifecycle" : { Coding }, // Life-cycle stage for the entity
    "securityLabel" : [{ Coding }], // Security labels on the entity
    "name" : "<string>", // C? Descriptor for entity
    "query" : "<base64Binary>", // C? Query parameters
    "detail" : [{ // Additional Information about the entity
      "type" : "<string>", // R!  Name of the property
      // value[x]: Property value. One of these 2:
      "valueString" : "<string>"
      "valueBase64Binary" : "<base64Binary>"
    }]
  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:AuditEvent;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from Resource: .id, .meta, .implicitRules, and .language
  # from DomainResource: .text, .contained, .extension, and .modifierExtension
  fhir:AuditEvent.type [ Coding ]; # 1..1 Type/identifier of event
  fhir:AuditEvent.subtype [ Coding ], ... ; # 0..* More specific type/id for the event
  fhir:AuditEvent.action [ code ]; # 0..1 Type of action performed during the event
  fhir:AuditEvent.severity [ code ]; # 0..1 emergency | alert | critical | error | warning | notice | informational | debug
  fhir:AuditEvent.period [ Period ]; # 0..1 When the activity occurred
  fhir:AuditEvent.recorded [ instant ]; # 1..1 Time when the event was recorded
  fhir:AuditEvent.outcome [ CodeableConcept ]; # 0..1 Whether the event succeeded or failed
  fhir:AuditEvent.purposeOfEvent [ CodeableConcept ], ... ; # 0..* The purposeOfUse of the event
  fhir:AuditEvent.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|
  NutritionOrder|ServiceRequest) ], ... ; # 0..* Workflow authorization within which this event occurred
  fhir:AuditEvent.encounter [ Reference(Encounter) ]; # 0..1 Encounter within which this event occurred or which the event is tightly associated
  fhir:AuditEvent.agent [ # 1..* Actor involved in the event
    fhir:AuditEvent.agent.type [ CodeableConcept ]; # 0..1 How agent participated
    fhir:AuditEvent.agent.role [ CodeableConcept ], ... ; # 0..* Agent role in the event
    fhir:AuditEvent.agent.who [ Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ]; # 0..1 Identifier of who
    fhir:AuditEvent.agent.altId [ string ]; # 0..1 Alternative User identity
    fhir:AuditEvent.agent.name [ string ]; # 0..1 Human friendly name for the agent
    fhir:AuditEvent.agent.requestor [ boolean ]; # 1..1 Whether user is initiator
    fhir:AuditEvent.agent.location [ Reference(Location) ]; # 0..1 Where
    fhir:AuditEvent.agent.policy [ uri ], ... ; # 0..* Policy that authorized event
    fhir:AuditEvent.agent.media [ Coding ]; # 0..1 Type of media
    fhir:AuditEvent.agent.network [ # 0..1 Logical network location for application activity
      fhir:AuditEvent.agent.network.address [ string ]; # 0..1 Identifier for the network access point of the user device
      fhir:AuditEvent.agent.network.type [ code ]; # 0..1 The type of network access point
    ];
    fhir:AuditEvent.agent.purposeOfUse [ CodeableConcept ], ... ; # 0..* Reason given for this user
  ], ...;
  fhir:AuditEvent.source [ # 1..1 Audit Event Reporter
    fhir:AuditEvent.source.site [ string ]; # 0..1 Logical source location within the enterprise
    fhir:AuditEvent.source.observer [ Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ]; # 1..1 The identity of source detecting the event
    fhir:AuditEvent.source.type [ Coding ], ... ; # 0..* The type of source where event originated
  ];
  fhir:AuditEvent.entity [ # 0..* Data or objects used
    fhir:AuditEvent.entity.what [ Reference(Any) ]; # 0..1 Specific instance of resource
    fhir:AuditEvent.entity.type [ Coding ]; # 0..1 Type of entity involved
    fhir:AuditEvent.entity.role [ Coding ]; # 0..1 What role the entity played
    fhir:AuditEvent.entity.lifecycle [ Coding ]; # 0..1 Life-cycle stage for the entity
    fhir:AuditEvent.entity.securityLabel [ Coding ], ... ; # 0..* Security labels on the entity
    fhir:AuditEvent.entity.name [ string ]; # 0..1 Descriptor for entity
    fhir:AuditEvent.entity.query [ base64Binary ]; # 0..1 Query parameters
    fhir:AuditEvent.entity.detail [ # 0..* Additional Information about the entity
      fhir:AuditEvent.entity.detail.type [ string ]; # 1..1 Name of the property
      # AuditEvent.entity.detail.value[x] : 1..1 Property value. One of these 2
        fhir:AuditEvent.entity.detail.valueString [ string ]
        fhir:AuditEvent.entity.detail.valueBase64Binary [ base64Binary ]
    ], ...;
  ], ...;
]

Changes since R3

AuditEvent
AuditEvent.action
  • Change value set from http://hl7.org/fhir/ValueSet/audit-event-action|4.0.0 to http://hl7.org/fhir/ValueSet/audit-event-action|4.6.0
AuditEvent.severity
  • Added Element
AuditEvent.outcome
  • Type changed from code to CodeableConcept
  • Change binding strength from required to extensible
  • Change value set from http://hl7.org/fhir/ValueSet/audit-event-outcome|4.0.0 to http://hl7.org/fhir/ValueSet/audit-event-outcome
AuditEvent.basedOn
  • Added Element
AuditEvent.encounter
  • Added Element
AuditEvent.agent.media
  • Change value set from http://hl7.org/fhir/ValueSet/dicm-405-mediatype to http://hl7.org/fhir/ValueSet/audit-media-type
AuditEvent.agent.network.type
  • Change value set from http://hl7.org/fhir/ValueSet/network-type|4.0.0 to http://hl7.org/fhir/ValueSet/network-type|4.6.0
AuditEvent.source.type
  • Change value set from http://hl7.org/fhir/ValueSet/audit-source-type to http://hl7.org/fhir/ValueSet/security-source-type
AuditEvent.outcomeDesc
  • deleted
AuditEvent.entity.description
  • deleted

See the Full Difference for further information

This analysis is available as XML or JSON.

See R3 <--> R4 Conversion Maps (status = 8 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.)

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. AuditEvent TUDomainResourceRecord of an event
Elements defined in Ancestors: id, meta, implicitRules, language, text, contained, extension, modifierExtension
... type Σ1..1CodingType/identifier of event
Audit Event ID (Extensible)
... subtype Σ0..*CodingMore specific type/id for the event
Audit Event Sub-Type (Extensible)
... action Σ0..1codeType of action performed during the event
AuditEventAction (Required)
... period 0..1PeriodWhen the activity occurred
... recorded Σ1..1instantTime when the event was recorded
... outcome Σ0..1CodeableConceptWhether the event succeeded or failed
AuditEventOutcome (Extensible)
... purposeOfEvent Σ0..*CodeableConceptThe purposeOfUse of the event
PurposeOfUse (Extensible)
... basedOn 0..*Reference(CarePlan | DeviceRequest | ImmunizationRecommendation | MedicationRequest | NutritionOrder | ServiceRequest)Workflow authorization within which this event occurred
... encounter 0..1Reference(Encounter)Encounter within which this event occurred or which the event is tightly associated
... agent 1..*BackboneElementActor involved in the event
.... type 0..1CodeableConceptHow agent participated
ParticipationRoleType (Extensible)
.... role 0..*CodeableConceptAgent role in the event
SecurityRoleType (Example)
.... who Σ0..1Reference(PractitionerRole | Practitioner | Organization | Device | Patient | RelatedPerson)Identifier of who
.... altId 0..1stringAlternative User identity
.... name 0..1stringHuman friendly name for the agent
.... requestor Σ1..1booleanWhether user is initiator
.... location 0..1Reference(Location)Where
.... policy 0..*uriPolicy that authorized event
.... media 0..1CodingType of media
Audit Agent Media Type (Extensible)
.... network 0..1BackboneElementLogical network location for application activity
..... address 0..1stringIdentifier for the network access point of the user device
..... type 0..1codeThe type of network access point
AuditEventAgentNetworkType (Required)
.... purposeOfUse 0..*CodeableConceptReason given for this user
PurposeOfUse (Extensible)
... source 1..1BackboneElementAudit Event Reporter
.... site 0..1stringLogical source location within the enterprise
.... observer Σ1..1Reference(PractitionerRole | Practitioner | Organization | Device | Patient | RelatedPerson)The identity of source detecting the event
.... type 0..*CodingThe type of source where event originated
Audit Event Source Type (Extensible)
... entity I0..*BackboneElementData or objects used
+ Rule: Either a name or a query (NOT both)
.... what Σ0..1Reference(Any)Specific instance of resource
.... type 0..1CodingType of entity involved
AuditEventEntityType (Extensible)
.... role 0..1CodingWhat role the entity played
AuditEventEntityRole (Extensible)
.... lifecycle 0..1CodingLife-cycle stage for the entity
ObjectLifecycleEvents (Extensible)
.... securityLabel 0..*CodingSecurity labels on the entity
SecurityLabels (Extensible)
.... name ΣI0..1stringDescriptor for entity
.... query ΣI0..1base64BinaryQuery parameters
.... detail 0..*BackboneElementAdditional Information about the entity
..... type 1..1stringName of the property
..... value[x] 1..1Property value
...... valueStringstring
...... valueBase64Binarybase64Binary

doco Documentation for this format

UML Diagram (Legend)

AuditEvent (DomainResource)Identifier for a family of the event. For example, a menu item, program, rule, policy, function code, application name or URL. It identifies the performed functiontype : Coding [1..1] « null (Strength=Extensible)AuditEventID+ »Identifier for the category of eventsubtype : Coding [0..*] « null (Strength=Extensible)AuditEventSub-Type+ »Indicator for type of action performed during the event that generated the auditaction : code [0..1] « Indicator for type of action performed during the event that generated the event. (Strength=Required)AuditEventAction! »Indicates and enables segmentation of various severity including debugging from criticalseverity : code [0..1] « The severity of the audit entry. (Strength=Required)AuditEventSeverity! »The period during which the activity occurredperiod : Period [0..1]The time when the event was recordedrecorded : instant [1..1]Indicates whether the event succeeded or failed. A free text descripiton can be given in outcome.textoutcome : CodeableConcept [0..1] « Indicates whether the event succeeded or failed. (Strength=Extensible)AuditEventOutcome+ »The purposeOfUse (reason) that was used during the event being recordedpurposeOfEvent : CodeableConcept [0..*] « null (Strength=Extensible)PurposeOfUse+ »Allows tracing of authorizatino for the events and tracking whether proposals/recommendations were acted uponbasedOn : Reference [0..*] « CarePlan|DeviceRequest| ImmunizationRecommendation|MedicationRequest|NutritionOrder| ServiceRequest »This will typically be the encounter the event occurred, but some events may be initiated prior to or after the official completion of an encounter but still be tied to the context of the encounter (e.g. pre-admission lab tests)encounter : Reference [0..1] « Encounter »AgentSpecification of the participation type the user plays when performing the eventtype : CodeableConcept [0..1] « null (Strength=Extensible)ParticipationRoleType+ »The security role that the user was acting under, that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local contextrole : CodeableConcept [0..*] « null (Strength=Example)SecurityRoleType?? »Reference to who this agent is that was involved in the eventwho : Reference [0..1] « PractitionerRole|Practitioner|Organization| Device|Patient|RelatedPerson »Alternative agent Identifier. For a human, this should be a user identifier text string from authentication system. This identifier would be one known to a common authentication system (e.g. single sign-on), if availablealtId : string [0..1]Human-meaningful name for the agentname : string [0..1]Indicator that the user is or is not the requestor, or initiator, for the event being auditedrequestor : boolean [1..1]Where the event occurredlocation : Reference [0..1] « Location »The policy or plan that authorized the activity being recorded. Typically, a single activity may have multiple applicable policies, such as patient consent, guarantor funding, etc. The policy would also indicate the security token usedpolicy : uri [0..*]Type of media involved. Used when the event is about exporting/importing onto mediamedia : Coding [0..1] « Used when the event is about exporting/importing onto media. (Strength=Extensible)AuditMediaType+ »The reason (purpose of use), specific to this agent, that was used during the event being recordedpurposeOfUse : CodeableConcept [0..*] « null (Strength=Extensible)PurposeOfUse+ »NetworkAn identifier for the network access point of the user device for the audit eventaddress : string [0..1]An identifier for the type of network access point that originated the audit eventtype : code [0..1] « The type of network access point of this agent in the audit event. (Strength=Required)AuditEventAgentNetworkType! »SourceLogical source location within the healthcare enterprise network. For example, a hospital or other provider location within a multi-entity provider groupsite : string [0..1]Identifier of the source where the event was detectedobserver : Reference [1..1] « PractitionerRole|Practitioner| Organization|Device|Patient|RelatedPerson »Code specifying the type of source where event originatedtype : Coding [0..*] « null (Strength=Extensible)AuditEventSourceType+ »EntityIdentifies a specific instance of the entity. The reference should be version specificwhat : Reference [0..1] « Any »The type of the object that was involved in this audit eventtype : Coding [0..1] « Code for the entity type involved in the audit event. (Strength=Extensible)AuditEventEntityType+ »Code representing the role the entity played in the event being auditedrole : Coding [0..1] « Code representing the role the entity played in the audit event. (Strength=Extensible)AuditEventEntityRole+ »Identifier for the data life-cycle stage for the entitylifecycle : Coding [0..1] « null (Strength=Extensible)ObjectLifecycleEvents+ »Security labels for the identified entitysecurityLabel : Coding [0..*] « null (Strength=Extensible)All Security Labels+ »A name of the entity in the audit eventname : string [0..1]The query parameters for a query-type entitiesquery : base64Binary [0..1]DetailThe type of extra detail provided in the valuetype : string [1..1]The value of the extra detailvalue[x] : PrimitiveType [1..1] « string|base64Binary »Logical network location for application activity, if the activity has a network locationnetwork[0..1]An actor taking an active role in the event or activity that is loggedagent[1..*]The system that is reporting the eventsource[1..1]Tagged value pairs for conveying additional information about the entitydetail[0..*]Specific instances of data or objects that have been accessedentity[0..*]

XML Template

<AuditEvent xmlns="http://hl7.org/fhir"> doco
 <!-- from Resource: id, meta, implicitRules, and language -->
 <!-- from DomainResource: text, contained, extension, and modifierExtension -->
 <type><!-- 1..1 Coding Type/identifier of event --></type>
 <subtype><!-- 0..* Coding More specific type/id for the event --></subtype>
 <action value="[code]"/><!-- 0..1 Type of action performed during the event -->
 <severity value="[code]"/><!-- 0..1 emergency | alert | critical | error | warning | notice | informational | debug -->
 <period><!-- 0..1 Period When the activity occurred --></period>
 <recorded value="[instant]"/><!-- 1..1 Time when the event was recorded -->
 <outcome><!-- 0..1 CodeableConcept Whether the event succeeded or failed --></outcome>
 <purposeOfEvent><!-- 0..* CodeableConcept The purposeOfUse of the event  --></purposeOfEvent>
 <basedOn><!-- 0..* Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
   MedicationRequest|NutritionOrder|ServiceRequest) Workflow authorization within which this event occurred --></basedOn>
 <encounter><!-- 0..1 Reference(Encounter) Encounter within which this event occurred or which the event is tightly associated --></encounter>
 <agent>  <!-- 1..* Actor involved in the event -->
  <type><!-- 0..1 CodeableConcept How agent participated --></type>
  <role><!-- 0..* CodeableConcept Agent role in the event --></role>
  <who><!-- 0..1 Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) Identifier of who --></who>
  <altId value="[string]"/><!-- 0..1 Alternative User identity -->
  <name value="[string]"/><!-- 0..1 Human friendly name for the agent -->
  <requestor value="[boolean]"/><!-- 1..1 Whether user is initiator -->
  <location><!-- 0..1 Reference(Location) Where --></location>
  <policy value="[uri]"/><!-- 0..* Policy that authorized event -->
  <media><!-- 0..1 Coding Type of media --></media>
  <network>  <!-- 0..1 Logical network location for application activity -->
   <address value="[string]"/><!-- 0..1 Identifier for the network access point of the user device -->
   <type value="[code]"/><!-- 0..1 The type of network access point -->
  </network>
  <purposeOfUse><!-- 0..* CodeableConcept Reason given for this user  --></purposeOfUse>
 </agent>
 <source>  <!-- 1..1 Audit Event Reporter -->
  <site value="[string]"/><!-- 0..1 Logical source location within the enterprise -->
  <observer><!-- 1..1 Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) The identity of source detecting the event --></observer>
  <type><!-- 0..* Coding The type of source where event originated --></type>
 </source>
 <entity>  <!-- 0..* Data or objects used -->
  <what><!-- 0..1 Reference(Any) Specific instance of resource --></what>
  <type><!-- 0..1 Coding Type of entity involved --></type>
  <role><!-- 0..1 Coding What role the entity played --></role>
  <lifecycle><!-- 0..1 Coding Life-cycle stage for the entity --></lifecycle>
  <securityLabel><!-- 0..* Coding Security labels on the entity --></securityLabel>
  <name value="[string]"/><!-- ?? 0..1 Descriptor for entity -->
  <query value="[base64Binary]"/><!-- ?? 0..1 Query parameters -->
  <detail>  <!-- 0..* Additional Information about the entity -->
   <type value="[string]"/><!-- 1..1 Name of the property -->
   <value[x]><!-- 1..1 string|base64Binary Property value --></value[x]>
  </detail>
 </entity>
</AuditEvent>

JSON Template

{doco
  "resourceType" : "AuditEvent",
  // from Resource: id, meta, implicitRules, and language
  // from DomainResource: text, contained, extension, and modifierExtension
  "type" : { Coding }, // R!  Type/identifier of event
  "subtype" : [{ Coding }], // More specific type/id for the event
  "action" : "<code>", // Type of action performed during the event
  "severity" : "<code>", // emergency | alert | critical | error | warning | notice | informational | debug
  "period" : { Period }, // When the activity occurred
  "recorded" : "<instant>", // R!  Time when the event was recorded
  "outcome" : { CodeableConcept }, // Whether the event succeeded or failed
  "purposeOfEvent" : [{ CodeableConcept }], // The purposeOfUse of the event 
  "basedOn" : [{ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|
   MedicationRequest|NutritionOrder|ServiceRequest) }], // Workflow authorization within which this event occurred
  "encounter" : { Reference(Encounter) }, // Encounter within which this event occurred or which the event is tightly associated
  "agent" : [{ // R!  Actor involved in the event
    "type" : { CodeableConcept }, // How agent participated
    "role" : [{ CodeableConcept }], // Agent role in the event
    "who" : { Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) }, // Identifier of who
    "altId" : "<string>", // Alternative User identity
    "name" : "<string>", // Human friendly name for the agent
    "requestor" : <boolean>, // R!  Whether user is initiator
    "location" : { Reference(Location) }, // Where
    "policy" : ["<uri>"], // Policy that authorized event
    "media" : { Coding }, // Type of media
    "network" : { // Logical network location for application activity
      "address" : "<string>", // Identifier for the network access point of the user device
      "type" : "<code>" // The type of network access point
    },
    "purposeOfUse" : [{ CodeableConcept }] // Reason given for this user 
  }],
  "source" : { // R!  Audit Event Reporter
    "site" : "<string>", // Logical source location within the enterprise
    "observer" : { Reference(Device|Organization|Patient|Practitioner|
    PractitionerRole|RelatedPerson) }, // R!  The identity of source detecting the event
    "type" : [{ Coding }] // The type of source where event originated
  },
  "entity" : [{ // Data or objects used
    "what" : { Reference(Any) }, // Specific instance of resource
    "type" : { Coding }, // Type of entity involved
    "role" : { Coding }, // What role the entity played
    "lifecycle" : { Coding }, // Life-cycle stage for the entity
    "securityLabel" : [{ Coding }], // Security labels on the entity
    "name" : "<string>", // C? Descriptor for entity
    "query" : "<base64Binary>", // C? Query parameters
    "detail" : [{ // Additional Information about the entity
      "type" : "<string>", // R!  Name of the property
      // value[x]: Property value. One of these 2:
      "valueString" : "<string>"
      "valueBase64Binary" : "<base64Binary>"
    }]
  }]
}

Turtle Template

@prefix fhir: <http://hl7.org/fhir/> .doco


[ a fhir:AuditEvent;
  fhir:nodeRole fhir:treeRoot; # if this is the parser root

  # from Resource: .id, .meta, .implicitRules, and .language
  # from DomainResource: .text, .contained, .extension, and .modifierExtension
  fhir:AuditEvent.type [ Coding ]; # 1..1 Type/identifier of event
  fhir:AuditEvent.subtype [ Coding ], ... ; # 0..* More specific type/id for the event
  fhir:AuditEvent.action [ code ]; # 0..1 Type of action performed during the event
  fhir:AuditEvent.severity [ code ]; # 0..1 emergency | alert | critical | error | warning | notice | informational | debug
  fhir:AuditEvent.period [ Period ]; # 0..1 When the activity occurred
  fhir:AuditEvent.recorded [ instant ]; # 1..1 Time when the event was recorded
  fhir:AuditEvent.outcome [ CodeableConcept ]; # 0..1 Whether the event succeeded or failed
  fhir:AuditEvent.purposeOfEvent [ CodeableConcept ], ... ; # 0..* The purposeOfUse of the event
  fhir:AuditEvent.basedOn [ Reference(CarePlan|DeviceRequest|ImmunizationRecommendation|MedicationRequest|
  NutritionOrder|ServiceRequest) ], ... ; # 0..* Workflow authorization within which this event occurred
  fhir:AuditEvent.encounter [ Reference(Encounter) ]; # 0..1 Encounter within which this event occurred or which the event is tightly associated
  fhir:AuditEvent.agent [ # 1..* Actor involved in the event
    fhir:AuditEvent.agent.type [ CodeableConcept ]; # 0..1 How agent participated
    fhir:AuditEvent.agent.role [ CodeableConcept ], ... ; # 0..* Agent role in the event
    fhir:AuditEvent.agent.who [ Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ]; # 0..1 Identifier of who
    fhir:AuditEvent.agent.altId [ string ]; # 0..1 Alternative User identity
    fhir:AuditEvent.agent.name [ string ]; # 0..1 Human friendly name for the agent
    fhir:AuditEvent.agent.requestor [ boolean ]; # 1..1 Whether user is initiator
    fhir:AuditEvent.agent.location [ Reference(Location) ]; # 0..1 Where
    fhir:AuditEvent.agent.policy [ uri ], ... ; # 0..* Policy that authorized event
    fhir:AuditEvent.agent.media [ Coding ]; # 0..1 Type of media
    fhir:AuditEvent.agent.network [ # 0..1 Logical network location for application activity
      fhir:AuditEvent.agent.network.address [ string ]; # 0..1 Identifier for the network access point of the user device
      fhir:AuditEvent.agent.network.type [ code ]; # 0..1 The type of network access point
    ];
    fhir:AuditEvent.agent.purposeOfUse [ CodeableConcept ], ... ; # 0..* Reason given for this user
  ], ...;
  fhir:AuditEvent.source [ # 1..1 Audit Event Reporter
    fhir:AuditEvent.source.site [ string ]; # 0..1 Logical source location within the enterprise
    fhir:AuditEvent.source.observer [ Reference(Device|Organization|Patient|Practitioner|PractitionerRole|RelatedPerson) ]; # 1..1 The identity of source detecting the event
    fhir:AuditEvent.source.type [ Coding ], ... ; # 0..* The type of source where event originated
  ];
  fhir:AuditEvent.entity [ # 0..* Data or objects used
    fhir:AuditEvent.entity.what [ Reference(Any) ]; # 0..1 Specific instance of resource
    fhir:AuditEvent.entity.type [ Coding ]; # 0..1 Type of entity involved
    fhir:AuditEvent.entity.role [ Coding ]; # 0..1 What role the entity played
    fhir:AuditEvent.entity.lifecycle [ Coding ]; # 0..1 Life-cycle stage for the entity
    fhir:AuditEvent.entity.securityLabel [ Coding ], ... ; # 0..* Security labels on the entity
    fhir:AuditEvent.entity.name [ string ]; # 0..1 Descriptor for entity
    fhir:AuditEvent.entity.query [ base64Binary ]; # 0..1 Query parameters
    fhir:AuditEvent.entity.detail [ # 0..* Additional Information about the entity
      fhir:AuditEvent.entity.detail.type [ string ]; # 1..1 Name of the property
      # AuditEvent.entity.detail.value[x] : 1..1 Property value. One of these 2
        fhir:AuditEvent.entity.detail.valueString [ string ]
        fhir:AuditEvent.entity.detail.valueBase64Binary [ base64Binary ]
    ], ...;
  ], ...;
]

Changes since Release 3

AuditEvent
AuditEvent.action
  • Change value set from http://hl7.org/fhir/ValueSet/audit-event-action|4.0.0 to http://hl7.org/fhir/ValueSet/audit-event-action|4.6.0
AuditEvent.severity
  • Added Element
AuditEvent.outcome
  • Type changed from code to CodeableConcept
  • Change binding strength from required to extensible
  • Change value set from http://hl7.org/fhir/ValueSet/audit-event-outcome|4.0.0 to http://hl7.org/fhir/ValueSet/audit-event-outcome
AuditEvent.basedOn
  • Added Element
AuditEvent.encounter
  • Added Element
AuditEvent.agent.media
  • Change value set from http://hl7.org/fhir/ValueSet/dicm-405-mediatype to http://hl7.org/fhir/ValueSet/audit-media-type
AuditEvent.agent.network.type
  • Change value set from http://hl7.org/fhir/ValueSet/network-type|4.0.0 to http://hl7.org/fhir/ValueSet/network-type|4.6.0
AuditEvent.source.type
  • Change value set from http://hl7.org/fhir/ValueSet/audit-source-type to http://hl7.org/fhir/ValueSet/security-source-type
AuditEvent.outcomeDesc
  • deleted
AuditEvent.entity.description
  • deleted

See the Full Difference for further information

This analysis is available as XML or JSON.

See R3 <--> R4 Conversion Maps (status = 8 tests that all execute ok. All tests pass round-trip testing and all r3 resources are valid.)

 

See the Profiles & Extensions and the alternate definitions: Master Definition XML + JSON, XML Schema/Schematron + JSON Schema, ShEx (for Turtle) + see the extensions, the spreadsheet version & the dependency analysis a

PathDefinitionTypeReference
AuditEvent.type ExtensibleAuditEventID
AuditEvent.subtype ExtensibleAuditEventSub-Type
AuditEvent.action Indicator for type of action performed during the event that generated the event.RequiredAuditEventAction
AuditEvent.severity The severity of the audit entry.RequiredAuditEventSeverity
AuditEvent.outcome Indicates whether the event succeeded or failed.ExtensibleAuditEventOutcome
AuditEvent.purposeOfEvent ExtensiblePurposeOfUse
AuditEvent.agent.type ExtensibleParticipationRoleType
AuditEvent.agent.role ExampleSecurityRoleType
AuditEvent.agent.media Used when the event is about exporting/importing onto media.ExtensibleAuditMediaType
AuditEvent.agent.network.type The type of network access point of this agent in the audit event.RequiredAuditEventAgentNetworkType
AuditEvent.agent.purposeOfUse ExtensiblePurposeOfUse
AuditEvent.source.type ExtensibleAuditEventSourceType
AuditEvent.entity.type Code for the entity type involved in the audit event.ExtensibleAuditEventEntityType
AuditEvent.entity.role Code representing the role the entity played in the audit event.ExtensibleAuditEventEntityRole
AuditEvent.entity.lifecycle ExtensibleObjectLifecycleEvents
AuditEvent.entity.securityLabel ExtensibleAll Security Labels

idLevelLocationDescriptionExpression
sev-1Rule AuditEvent.entityEither a name or a query (NOT both)name.empty() or query.empty()

The AuditEvent resource and the ATNA Audit record are used in many contexts throughout healthcare. The coded values defined in the "extensible" bindings above are those widely used and/or defined by DICOM, IHE or ISO, who defined these codes to meet very specific use cases. These codes should be used when they are suitable. When needed, other codes can be defined.

Note: When using codes from a vocabulary, the display element for the code can be left off to keep the AuditEvent size small and minimize impact of a large audit log of similar entries.

The set of codes defined for this resource is expected to grow over time, and additional codes may be proposed / requested using the "Propose a change" link above below.

This table summarizes common event scenarios, and the codes that should be used for each case.

Scenario type subtype action Other
User Login (example) 110114 User Authentication 110122 User Authentication E Execute One agent which contains the details of the logged-in user.
User Logout (example) 110114 User Authentication 110123 User Logout E Execute One agent which contains the details of the logged-out user.
REST operation logged on server (example) rest RESTful Operation [code] defined for operation * (see below) Agent for logged in user, if available.
Search operation logged on server (example) rest RESTful Operation [code] defined for operation E Execute Agent for logged in user, if available, and one object with a query element. The Execute action is used as the server must execute the search parameters to get the results, whereas a Read action identifies a specific object.
Break-Glass started (example) 110113 Security Alert 110127 Emergency Override Started E Execute Agent is the user who is authorized to break-glass and has declared an emergency override. Note there is an Emergency Override Stopped subtype that can be used to indicate the closing of the break-glass event, when it is known.

Audit Event Actions for RESTful operations:

Operation Action
create C
read, vread, history-instance, history-type, history-system R
update U
delete D
transaction, operation, conformance, validate, search, search-type, search-system E

FHIR interactions can result in a rich description of the outcome using the OperationOutcome. The OperationOutcome Resource is a collection of error, warning or information messages that result from a system action. This describes in detail the outcome of some operation, such as when a RESTful operation fails.

When recording into an AuditEvent that some FHIR interaction has happened, the AuditEvent should include the OperationOutcome from that FHIR interaction. This is done by placing the OperationOutcome into an AuditEvent.entity. Likely as a contained resource, given that OperationOutcome resources often are not persisted.

entity.who is the OperationOutcome -- Likely contained

entity.type is code OperationOutcome

entity.description explains why this OperationOutcome was included.

See transaction failure example: When a client attempts to post (create) an Observation Resource, using a server Patient endpoint; this would result in an error with an OperationOutcome.

The AuditEvent provides the element purposeOfEvent to convey the purpose of the event and purposeOfUse to convey the reason that a particular actor (machine, person, software) was involved in the event.

purposeOfEvent is an element at the level of AuditEvent and can convey the purpose of the activity that resulted in the event. This will occur when the system that is reporting the event is aware of the purpose of the event. A specific example would be a radiology reporting system where a radiologist has created and is sending a finished report. This system likely knows the purpose, e.g., "treatment". It is multi-valued because the one event may be related to multiple purposes.

It is also commonplace that the reporting system does not have information about the purpose of the event. In these cases, the event report would not have a purposeOfEvent.

It is also likely that the same event will be reported from different perspectives, e.g., by both the sender and recipient of a communication. These two different perspectives can have different knowledge regarding the purposeOfEvent.

purposeOfUse is an element at the level of agent within AuditEvent. This describes the reason that this person, machine, or software is participating in the activity that resulted in the event. For example, an individual person participating in the event may assert a purpose of use from their perspective. It is also possible that they are participating for multiple reasons and report multiple purposeOfUse.

The reporting system might not have knowledge regarding why a particular machine or person was involved and would omit this element in those cases.

When the same event is reported from multiple perspectives, the reports can have different knowledge regarding the purpose.

It is a best practice to include a reference to the Patient/Subject affected by any auditable event, in order to enable Privacy Accounting of Disclosures and Access Logs, and to enable privacy office and security office audit log analysis. Reasonable efforts should be taken to assure the Patient/Subject is recorded, but it is recognized that there are times when this is not reasonable.

The Patient/Subject of an activity is indicated in an .entity element; with the .entity.who indicating the Patient reference, and the .entity.type indicating “1” Person, and the .entity.role indicating “1” patient. No other elements in this .entity need to be filled out. The indicator of the .entity.who, .entity.type, and .entity.role are enough to indicate that this AuditEvent activity has a subject as indicated.

Where an activity impacts more than one Patient/Subject; multiple AuditEvent resources should be recorded, one for each Patient/Subject. This best enables segmentation of the AuditEvent details so as to limit the Privacy impact. The use of multiple AuditEvent is a best-practice and should be driven by a Policy. There will be cases where the use of multiple AuditEvent resources are not necessary, such as public health reporting.

To record a REST interaction or $operation, it is often necessary to complete the transaction in order to determine the Patient/Subject. Inspection of the potential returned results may be necessary. Some REST and $operations include parameters limiting the results to a specific Patient, in these cases this parameter informs the inclusion of the Patient reference.

Implementation Guides may make the AuditEvent requirements more clear given the workflow or security context mandated by the Implementation Guide.

Search parameters for this resource. The common parameters also apply. See Searching for more information about searching in REST, messaging, and services.

NameTypeDescriptionExpressionIn Common
action NtokenType of action performed during the eventAuditEvent.action
address NstringIdentifier for the network access point of the user deviceAuditEvent.agent.network.address
agentreferenceIdentifier of whoAuditEvent.agent.who
(Practitioner, Organization, Device, Patient, PractitionerRole, RelatedPerson)
agent-name NstringHuman friendly name for the agentAuditEvent.agent.name
agent-roletokenAgent role in the eventAuditEvent.agent.role
altid NtokenAlternative User identityAuditEvent.agent.altId
based-onreferenceReference to the service request.AuditEvent.basedOn
(CarePlan, MedicationRequest, NutritionOrder, DeviceRequest, ServiceRequest, ImmunizationRecommendation)
date NdateTime when the event was recordedAuditEvent.recorded
encounterreferenceEncounter related to the activity recorded in the AuditEventAuditEvent.encounter
(Encounter)
entityreferenceSpecific instance of resourceAuditEvent.entity.what
(Any)
entity-name NstringDescriptor for entityAuditEvent.entity.name
entity-roletokenWhat role the entity playedAuditEvent.entity.role
entity-typetokenType of entity involvedAuditEvent.entity.type
outcometokenWhether the event succeeded or failedAuditEvent.outcome
patientreferenceIdentifier of whoAuditEvent.agent.who.where(resolve() is Patient) | AuditEvent.entity.what.where(resolve() is Patient)
(Practitioner, Organization, Device, Patient, PractitionerRole, Any, RelatedPerson)
policy NuriPolicy that authorized eventAuditEvent.agent.policy
purposetokenThe purposeOfUse of the eventAuditEvent.purposeOfEvent | AuditEvent.agent.purposeOfUse
site NtokenLogical source location within the enterpriseAuditEvent.source.site
sourcereferenceThe identity of source detecting the eventAuditEvent.source.observer
(Practitioner, Organization, Device, Patient, PractitionerRole, RelatedPerson)
subtypetokenMore specific type/id for the eventAuditEvent.subtype
typetokenType/identifier of eventAuditEvent.type