STU 3 Ballot

This page is part of the FHIR Specification (v1.6.0: STU 3 Ballot 4). 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.3 Resource AuditEvent - Content

Security Work GroupMaturity Level: 2Compartments: Device, Patient, Practitioner

A record of an event made for purposes of maintaining a security log. Typical uses include detection of intrusion attempts and monitoring for inappropriate usage.

6.3.1 Scope and Usage

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

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

The primary purpose of this resource is the maintenance of security audit log information. However, it can also be used for any audit logging needs and simple event-based notification.

6.3.2 Background and Context

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 the 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 detecting of, 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 that also detect a security relevant event and thus would record an AuditEvent, such as a trusted intermediary.

Security relevant events are not limited to communications or RESTful events. They include software startup 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 Audit Event Sub-Type vocabulary for guidance on some security relevant events.

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 Audit Event resources would not generally accept update or delete operations on the resources, as this would compromise the integrity of the audit record. Access of the AuditEvent would typically be limited to e.g., 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 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.

6.3.3 Resource Content

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. AuditEvent DomainResourceEvent record kept for security purposes
... 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)
... recorded Σ1..1instantTime when the event occurred on source
... outcome Σ0..1codeWhether the event succeeded or failed
AuditEventOutcome (Required)
... outcomeDesc Σ0..1stringDescription of the event outcome
... purposeOfEvent Σ0..*CodingThe purposeOfUse of the event
PurposeOfUse (Extensible)
... agent 1..*BackboneElementActor involved in the event
.... role 0..*CodeableConceptAgent role in the event
Audit agent Role ID Code (Extensible)
.... reference Σ0..1Reference(Practitioner | Organization | Device | Patient | RelatedPerson)Direct reference to resource
.... userId Σ0..1IdentifierUnique identifier for the user
.... altId 0..1stringAlternative User id e.g. authentication
.... name 0..1stringHuman-meaningful 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
Media Type Code (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..*CodingReason given for this user
PurposeOfUse (Extensible)
... source 1..1BackboneElementAudit Event Reporter
.... site 0..1stringLogical source location within the enterprise
.... identifier Σ1..1IdentifierThe 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
Either a name or a query (NOT both)
.... identifier Σ0..1IdentifierSpecific instance of object
.... reference Σ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
AuditEventEntityLifecycle (Extensible)
.... securityLabel 0..*CodingSecurity labels on the entity
All Security Labels (Extensible)
.... name ΣI0..1stringDescriptor for entity
.... description 0..1stringDescriptive text
.... query ΣI0..1base64BinaryQuery parameters
.... detail 0..*BackboneElementAdditional Information about the entity
..... type 1..1stringName of the property
..... value 1..1base64BinaryProperty value

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] « Type of event. (Strength=Extensible)Audit Event ID+ »Identifier for the category of eventsubtype : Coding [0..*] « Sub-type of event. (Strength=Extensible)Audit Event Sub-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 audit. (Strength=Required)AuditEventAction! »The time when the event occurred on the sourcerecorded : instant [1..1]Indicates whether the event succeeded or failedoutcome : code [0..1] « Indicates whether the event succeeded or failed (Strength=Required)AuditEventOutcome! »A free text description of the outcome of the eventoutcomeDesc : string [0..1]The purposeOfUse (reason) that was used during the event being recordedpurposeOfEvent : Coding [0..*] « The reason the activity took place. (Strength=Extensible)PurposeOfUse+ »AgentSpecification of the role(s) the user plays when performing the event. Additional may contain security role codes that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local contextrole : CodeableConcept [0..*] « How the agent participated in the event. (Strength=Extensible)Audit agent Role ID Code+ »Direct reference to a resource that identifies the agentreference : Reference [0..1] « Practitioner|Organization|Device| Patient|RelatedPerson »Unique identifier for the user actively participating in the eventuserId : Identifier [0..1]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)Media Type Code+ »The reason (purpose of use), specific to this agent, that was used during the event being recordedpurposeOfUse : Coding [0..*] « The reason the activity took place. (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 detectedidentifier : Identifier [1..1]Code specifying the type of source where event originatedtype : Coding [0..*] « Code specifying the type of system that detected and recorded the event. (Strength=Extensible)Audit Event Source Type+ »EntityIdentifies a specific instance of the entity. The reference should always be version specificidentifier : Identifier [0..1]Identifies a specific instance of the entity. The reference should be version specificreference : 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 audited. (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 event. (Strength=Extensible)AuditEventEntityRole+ »Identifier for the data life-cycle stage for the entitylifecycle : Coding [0..1] « Identifier for the data life-cycle stage for the entity. (Strength=Extensible)AuditEventEntityLifecycle+ »Denotes security labels for the identified entitysecurityLabel : Coding [0..*] « Security Labels from the Healthcare Privacy and Security Classification System. (Strength=Extensible)All Security Labels+ »A name of the entity in the audit eventname : string [0..1]Text that describes the entity in more detaildescription : string [0..1]The query parameters for a query-type entitiesquery : base64Binary [0..1]DetailName of the propertytype : string [1..1]Property valuevalue : base64Binary [1..1]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]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 -->
 <recorded value="[instant]"/><!-- 1..1 Time when the event occurred on source -->
 <outcome value="[code]"/><!-- 0..1 Whether the event succeeded or failed -->
 <outcomeDesc value="[string]"/><!-- 0..1 Description of the event outcome -->
 <purposeOfEvent><!-- 0..* Coding The purposeOfUse of the event --></purposeOfEvent>
 <agent>  <!-- 1..* Actor involved in the event -->
  <role><!-- 0..* CodeableConcept Agent role in the event --></role>
  <reference><!-- 0..1 Reference(Practitioner|Organization|Device|Patient|
    RelatedPerson) Direct reference to resource --></reference>
  <userId><!-- 0..1 Identifier Unique identifier for the user --></userId>
  <altId value="[string]"/><!-- 0..1 Alternative User id e.g. authentication -->
  <name value="[string]"/><!-- 0..1 Human-meaningful 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..* Coding Reason given for this user --></purposeOfUse>
 </agent>
 <source>  <!-- 1..1 Audit Event Reporter -->
  <site value="[string]"/><!-- 0..1 Logical source location within the enterprise -->
  <identifier><!-- 1..1 Identifier The identity of source detecting the event --></identifier>
  <type><!-- 0..* Coding The type of source where event originated --></type>
 </source>
 <entity>  <!-- 0..* Data or objects used -->
  <identifier><!-- 0..1 Identifier Specific instance of object --></identifier>
  <reference><!-- 0..1 Reference(Any) Specific instance of resource --></reference>
  <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 -->
  <description value="[string]"/><!-- 0..1 Descriptive text -->
  <query value="[base64Binary]"/><!-- ?? 0..1 Query parameters -->
  <detail>  <!-- 0..* Additional Information about the entity -->
   <type value="[string]"/><!-- 1..1 Name of the property -->
   <value value="[base64Binary]"/><!-- 1..1 Property value -->
  </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
  "recorded" : "<instant>", // R!  Time when the event occurred on source
  "outcome" : "<code>", // Whether the event succeeded or failed
  "outcomeDesc" : "<string>", // Description of the event outcome
  "purposeOfEvent" : [{ Coding }], // The purposeOfUse of the event
  "agent" : [{ // R!  Actor involved in the event
    "role" : [{ CodeableConcept }], // Agent role in the event
    "reference" : { Reference(Practitioner|Organization|Device|Patient|
    RelatedPerson) }, // Direct reference to resource
    "userId" : { Identifier }, // Unique identifier for the user
    "altId" : "<string>", // Alternative User id e.g. authentication
    "name" : "<string>", // Human-meaningful 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" : [{ Coding }] // Reason given for this user
  }],
  "source" : { // R!  Audit Event Reporter
    "site" : "<string>", // Logical source location within the enterprise
    "identifier" : { Identifier }, // R!  The identity of source detecting the event
    "type" : [{ Coding }] // The type of source where event originated
  },
  "entity" : [{ // Data or objects used
    "identifier" : { Identifier }, // Specific instance of object
    "reference" : { 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
    "description" : "<string>", // Descriptive text
    "query" : "<base64Binary>", // C? Query parameters
    "detail" : [{ // Additional Information about the entity
      "type" : "<string>", // R!  Name of the property
      "value" : "<base64Binary>" // R!  Property value
    }]
  }]
}

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.recorded [ instant ]; # 1..1 Time when the event occurred on source
  fhir:AuditEvent.outcome [ code ]; # 0..1 Whether the event succeeded or failed
  fhir:AuditEvent.outcomeDesc [ string ]; # 0..1 Description of the event outcome
  fhir:AuditEvent.purposeOfEvent [ Coding ], ... ; # 0..* The purposeOfUse of the event
  fhir:AuditEvent.agent [ # 1..* Actor involved in the event
    fhir:AuditEvent.agent.role [ CodeableConcept ], ... ; # 0..* Agent role in the event
    fhir:AuditEvent.agent.reference [ Reference(Practitioner|Organization|Device|Patient|RelatedPerson) ]; # 0..1 Direct reference to resource
    fhir:AuditEvent.agent.userId [ Identifier ]; # 0..1 Unique identifier for the user
    fhir:AuditEvent.agent.altId [ string ]; # 0..1 Alternative User id e.g. authentication
    fhir:AuditEvent.agent.name [ string ]; # 0..1 Human-meaningful 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 [ Coding ], ... ; # 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.identifier [ Identifier ]; # 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.identifier [ Identifier ]; # 0..1 Specific instance of object
    fhir:AuditEvent.entity.reference [ 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.description [ string ]; # 0..1 Descriptive text
    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
      fhir:AuditEvent.entity.detail.value [ base64Binary ]; # 1..1 Property value
    ], ...;
  ], ...;
]

Changes since DSTU2

AuditEvent
AuditEvent.type added
AuditEvent.subtype added
AuditEvent.action added
AuditEvent.recorded added
AuditEvent.outcome added
AuditEvent.outcomeDesc added
AuditEvent.purposeOfEvent added
AuditEvent.agent Renamed from participant to agent
AuditEvent.entity Renamed from object to entity
AuditEvent.event deleted

See the Full Difference for further information

Structure

NameFlagsCard.TypeDescription & Constraintsdoco
.. AuditEvent DomainResourceEvent record kept for security purposes
... 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)
... recorded Σ1..1instantTime when the event occurred on source
... outcome Σ0..1codeWhether the event succeeded or failed
AuditEventOutcome (Required)
... outcomeDesc Σ0..1stringDescription of the event outcome
... purposeOfEvent Σ0..*CodingThe purposeOfUse of the event
PurposeOfUse (Extensible)
... agent 1..*BackboneElementActor involved in the event
.... role 0..*CodeableConceptAgent role in the event
Audit agent Role ID Code (Extensible)
.... reference Σ0..1Reference(Practitioner | Organization | Device | Patient | RelatedPerson)Direct reference to resource
.... userId Σ0..1IdentifierUnique identifier for the user
.... altId 0..1stringAlternative User id e.g. authentication
.... name 0..1stringHuman-meaningful 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
Media Type Code (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..*CodingReason given for this user
PurposeOfUse (Extensible)
... source 1..1BackboneElementAudit Event Reporter
.... site 0..1stringLogical source location within the enterprise
.... identifier Σ1..1IdentifierThe 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
Either a name or a query (NOT both)
.... identifier Σ0..1IdentifierSpecific instance of object
.... reference Σ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
AuditEventEntityLifecycle (Extensible)
.... securityLabel 0..*CodingSecurity labels on the entity
All Security Labels (Extensible)
.... name ΣI0..1stringDescriptor for entity
.... description 0..1stringDescriptive text
.... query ΣI0..1base64BinaryQuery parameters
.... detail 0..*BackboneElementAdditional Information about the entity
..... type 1..1stringName of the property
..... value 1..1base64BinaryProperty value

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] « Type of event. (Strength=Extensible)Audit Event ID+ »Identifier for the category of eventsubtype : Coding [0..*] « Sub-type of event. (Strength=Extensible)Audit Event Sub-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 audit. (Strength=Required)AuditEventAction! »The time when the event occurred on the sourcerecorded : instant [1..1]Indicates whether the event succeeded or failedoutcome : code [0..1] « Indicates whether the event succeeded or failed (Strength=Required)AuditEventOutcome! »A free text description of the outcome of the eventoutcomeDesc : string [0..1]The purposeOfUse (reason) that was used during the event being recordedpurposeOfEvent : Coding [0..*] « The reason the activity took place. (Strength=Extensible)PurposeOfUse+ »AgentSpecification of the role(s) the user plays when performing the event. Additional may contain security role codes that come from local codes defined by the access control security system (e.g. RBAC, ABAC) used in the local contextrole : CodeableConcept [0..*] « How the agent participated in the event. (Strength=Extensible)Audit agent Role ID Code+ »Direct reference to a resource that identifies the agentreference : Reference [0..1] « Practitioner|Organization|Device| Patient|RelatedPerson »Unique identifier for the user actively participating in the eventuserId : Identifier [0..1]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)Media Type Code+ »The reason (purpose of use), specific to this agent, that was used during the event being recordedpurposeOfUse : Coding [0..*] « The reason the activity took place. (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 detectedidentifier : Identifier [1..1]Code specifying the type of source where event originatedtype : Coding [0..*] « Code specifying the type of system that detected and recorded the event. (Strength=Extensible)Audit Event Source Type+ »EntityIdentifies a specific instance of the entity. The reference should always be version specificidentifier : Identifier [0..1]Identifies a specific instance of the entity. The reference should be version specificreference : 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 audited. (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 event. (Strength=Extensible)AuditEventEntityRole+ »Identifier for the data life-cycle stage for the entitylifecycle : Coding [0..1] « Identifier for the data life-cycle stage for the entity. (Strength=Extensible)AuditEventEntityLifecycle+ »Denotes security labels for the identified entitysecurityLabel : Coding [0..*] « Security Labels from the Healthcare Privacy and Security Classification System. (Strength=Extensible)All Security Labels+ »A name of the entity in the audit eventname : string [0..1]Text that describes the entity in more detaildescription : string [0..1]The query parameters for a query-type entitiesquery : base64Binary [0..1]DetailName of the propertytype : string [1..1]Property valuevalue : base64Binary [1..1]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]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 -->
 <recorded value="[instant]"/><!-- 1..1 Time when the event occurred on source -->
 <outcome value="[code]"/><!-- 0..1 Whether the event succeeded or failed -->
 <outcomeDesc value="[string]"/><!-- 0..1 Description of the event outcome -->
 <purposeOfEvent><!-- 0..* Coding The purposeOfUse of the event --></purposeOfEvent>
 <agent>  <!-- 1..* Actor involved in the event -->
  <role><!-- 0..* CodeableConcept Agent role in the event --></role>
  <reference><!-- 0..1 Reference(Practitioner|Organization|Device|Patient|
    RelatedPerson) Direct reference to resource --></reference>
  <userId><!-- 0..1 Identifier Unique identifier for the user --></userId>
  <altId value="[string]"/><!-- 0..1 Alternative User id e.g. authentication -->
  <name value="[string]"/><!-- 0..1 Human-meaningful 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..* Coding Reason given for this user --></purposeOfUse>
 </agent>
 <source>  <!-- 1..1 Audit Event Reporter -->
  <site value="[string]"/><!-- 0..1 Logical source location within the enterprise -->
  <identifier><!-- 1..1 Identifier The identity of source detecting the event --></identifier>
  <type><!-- 0..* Coding The type of source where event originated --></type>
 </source>
 <entity>  <!-- 0..* Data or objects used -->
  <identifier><!-- 0..1 Identifier Specific instance of object --></identifier>
  <reference><!-- 0..1 Reference(Any) Specific instance of resource --></reference>
  <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 -->
  <description value="[string]"/><!-- 0..1 Descriptive text -->
  <query value="[base64Binary]"/><!-- ?? 0..1 Query parameters -->
  <detail>  <!-- 0..* Additional Information about the entity -->
   <type value="[string]"/><!-- 1..1 Name of the property -->
   <value value="[base64Binary]"/><!-- 1..1 Property value -->
  </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
  "recorded" : "<instant>", // R!  Time when the event occurred on source
  "outcome" : "<code>", // Whether the event succeeded or failed
  "outcomeDesc" : "<string>", // Description of the event outcome
  "purposeOfEvent" : [{ Coding }], // The purposeOfUse of the event
  "agent" : [{ // R!  Actor involved in the event
    "role" : [{ CodeableConcept }], // Agent role in the event
    "reference" : { Reference(Practitioner|Organization|Device|Patient|
    RelatedPerson) }, // Direct reference to resource
    "userId" : { Identifier }, // Unique identifier for the user
    "altId" : "<string>", // Alternative User id e.g. authentication
    "name" : "<string>", // Human-meaningful 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" : [{ Coding }] // Reason given for this user
  }],
  "source" : { // R!  Audit Event Reporter
    "site" : "<string>", // Logical source location within the enterprise
    "identifier" : { Identifier }, // R!  The identity of source detecting the event
    "type" : [{ Coding }] // The type of source where event originated
  },
  "entity" : [{ // Data or objects used
    "identifier" : { Identifier }, // Specific instance of object
    "reference" : { 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
    "description" : "<string>", // Descriptive text
    "query" : "<base64Binary>", // C? Query parameters
    "detail" : [{ // Additional Information about the entity
      "type" : "<string>", // R!  Name of the property
      "value" : "<base64Binary>" // R!  Property value
    }]
  }]
}

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.recorded [ instant ]; # 1..1 Time when the event occurred on source
  fhir:AuditEvent.outcome [ code ]; # 0..1 Whether the event succeeded or failed
  fhir:AuditEvent.outcomeDesc [ string ]; # 0..1 Description of the event outcome
  fhir:AuditEvent.purposeOfEvent [ Coding ], ... ; # 0..* The purposeOfUse of the event
  fhir:AuditEvent.agent [ # 1..* Actor involved in the event
    fhir:AuditEvent.agent.role [ CodeableConcept ], ... ; # 0..* Agent role in the event
    fhir:AuditEvent.agent.reference [ Reference(Practitioner|Organization|Device|Patient|RelatedPerson) ]; # 0..1 Direct reference to resource
    fhir:AuditEvent.agent.userId [ Identifier ]; # 0..1 Unique identifier for the user
    fhir:AuditEvent.agent.altId [ string ]; # 0..1 Alternative User id e.g. authentication
    fhir:AuditEvent.agent.name [ string ]; # 0..1 Human-meaningful 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 [ Coding ], ... ; # 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.identifier [ Identifier ]; # 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.identifier [ Identifier ]; # 0..1 Specific instance of object
    fhir:AuditEvent.entity.reference [ 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.description [ string ]; # 0..1 Descriptive text
    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
      fhir:AuditEvent.entity.detail.value [ base64Binary ]; # 1..1 Property value
    ], ...;
  ], ...;
]

Changes since DSTU2

AuditEvent
AuditEvent.type added
AuditEvent.subtype added
AuditEvent.action added
AuditEvent.recorded added
AuditEvent.outcome added
AuditEvent.outcomeDesc added
AuditEvent.purposeOfEvent added
AuditEvent.agent Renamed from participant to agent
AuditEvent.entity Renamed from object to entity
AuditEvent.event deleted

See the Full Difference for further information

 

Alternate definitions: Master Definition (XML, JSON), XML Schema/Schematron (for ) + JSON Schema, ShEx (for Turtle)

6.3.3.1 Terminology Bindings

PathDefinitionTypeReference
AuditEvent.type Type of event.ExtensibleAudit Event ID
AuditEvent.subtype Sub-type of event.ExtensibleAudit Event Sub-Type
AuditEvent.action Indicator for type of action performed during the event that generated the audit.RequiredAuditEventAction
AuditEvent.outcome Indicates whether the event succeeded or failedRequiredAuditEventOutcome
AuditEvent.purposeOfEvent
AuditEvent.agent.purposeOfUse
The reason the activity took place.ExtensiblePurposeOfUse
AuditEvent.agent.role How the agent participated in the event.ExtensibleAudit agent Role ID Code
AuditEvent.agent.media Used when the event is about exporting/importing onto media.ExtensibleMedia Type Code
AuditEvent.agent.network.type The type of network access point of this agent in the audit eventRequiredAuditEventAgentNetworkType
AuditEvent.source.type Code specifying the type of system that detected and recorded the event.ExtensibleAudit Event Source Type
AuditEvent.entity.type Code for the entity type involved audited.ExtensibleAuditEventEntityType
AuditEvent.entity.role Code representing the role the entity played in the event.ExtensibleAuditEventEntityRole
AuditEvent.entity.lifecycle Identifier for the data life-cycle stage for the entity.ExtensibleAuditEventEntityLifecycle
AuditEvent.entity.securityLabel Security Labels from the Healthcare Privacy and Security Classification System.ExtensibleAll Security Labels

6.3.3.2 Constraints

  • sev-1: On AuditEvent.entity: Either a name or a query (NOT both) (expression on AuditEvent.entity: name.empty() or query.empty())

6.3.3.3 Using Coded Values

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 all defined these codes to meet very specific use cases. These codes should be used when they are suitable, or other codes can be defined.

Note when using codes from a vocabulary, the displayName can be left off so as 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 community input link above.

6.3.3.4 Event codes for Common Scenarios

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

ScenariotypesubtypeactionOther
User Login (example)110114 User Authentication110122 User Authentication E ExecuteOne participant which contains the details of the logged in user.
User Logout (example)110114 User Authentication110123 User Logout E ExecuteOne participant which contains the details of the logged out user.
REST operation logged on server (example)rest RESTful Operation[code] defined for operation * (see below)Participant for logged in user, if available, and one object with a reference, if at least the type is known as part of the operation. Reference.url should be provided to the granularity known.
Search operation logged on server (example)rest RESTful Operation[code] defined for operation E ExecuteParticipant for logged in user, if available, and one object with a query element.

Audit Event Actions for RESTful operations:

OperationAction
createC
read, vread, history-instance, history-type, history-systemR
updateU
deleteD
transaction, operation, conformance, validate, search, search-type, search-systemE

6.3.3.5 PurposeOfEvent and PurposeOfUse

The audit event 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 be 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 particular 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.

6.3.4 Search Parameters

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

NameTypeDescriptionPaths
actiontokenType of action performed during the eventAuditEvent.action
addressstringIdentifier for the network access point of the user deviceAuditEvent.agent.network.address
agentreferenceDirect reference to resourceAuditEvent.agent.reference
(Practitioner, Organization, Device, Patient, RelatedPerson)
agent-namestringHuman-meaningful name for the agentAuditEvent.agent.name
altidtokenAlternative User id e.g. authenticationAuditEvent.agent.altId
datedateTime when the event occurred on sourceAuditEvent.recorded
entityreferenceSpecific instance of resourceAuditEvent.entity.reference
(Any)
entity-idtokenSpecific instance of objectAuditEvent.entity.identifier
entity-namestringDescriptor for entityAuditEvent.entity.name
entity-typetokenType of entity involvedAuditEvent.entity.type
outcometokenWhether the event succeeded or failedAuditEvent.outcome
patientreferenceDirect reference to resourceAuditEvent.agent.reference, AuditEvent.entity.reference
(Patient)
policyuriPolicy that authorized eventAuditEvent.agent.policy
roletokenWhat role the entity playedAuditEvent.entity.role
sitetokenLogical source location within the enterpriseAuditEvent.source.site
sourcetokenThe identity of source detecting the eventAuditEvent.source.identifier
subtypetokenMore specific type/id for the eventAuditEvent.subtype
typetokenType/identifier of eventAuditEvent.type
usertokenUnique identifier for the userAuditEvent.agent.userId