Skip to content

AuditEvent Profile

Canonical../StructureDefinition/nexus-emr-core-auditevent
Statusdraft (experimental) · 1.26.0
BaseAuditEvent (constraint)
SourceFSH · JSON

Nexus EMR profile for AuditEvent -- the access and activity log: who acted, on which record, when, through what interaction, and with what outcome.

Examples

Audit avery break glass 20260903 · Chart Read Audit Entry · Packet Disclosure Audit Entry

Packet Disclosure Audit Entry

A document packet released outside the estate, with the withheld-page count on entity.detail. Demonstrates two things a consumer must not get wrong -- the disclosure is marked on type (DICOM Export), NOT on action, which is still R; and the actor carries no agent.who, because not every actor resolves to a Practitioner

AuditEvent/audit-avery-packet-disclosure-20250522 — claims conformance to AuditEvent Profile

{
  "resourceType": "AuditEvent",
  "id": "audit-avery-packet-disclosure-20250522",
  "meta": {
    "profile": [
      "../StructureDefinition/nexus-emr-core-auditevent"
    ]
  },
  "text": {
    "status": "generated",
    "div": "<div xmlns='http://www.w3.org/1999/xhtml'><p>A disclosure: a document packet was assembled for release from Avery Linwood's chart, with three pages withheld. This is the entry a record-of-disclosure report and a redaction report are both built from.</p><p><strong>type carries the disclosure, not action.</strong> R4's five action codes are create, read, update, delete and execute, and none of them says "this left the estate". So the export event type is what marks a disclosure, and <code>action</code> stays <code>R</code>. A report answering "what was disclosed outside the clinic" must filter on <code>type</code>; filtering on <code>action</code> alone returns every ordinary chart read as well.</p><p><strong>entity.detail carries what the packet withheld.</strong> The count is recorded; which pages, from which document, is not. That is a deliberate limit and not an omission in this example -- a reader wanting "which pages were withheld from whom" cannot answer it from this entry, and should not infer that an absent detail means nothing was withheld.</p><p><strong>The outcome records that the release was invoked.</strong> An entry written for an invoked operation is recorded when the invocation is accepted, so its success outcome is not a claim that the operation completed. Entries for record interactions are written on the response and their outcome does reflect it.</p><p><strong>No purposeOfEvent.</strong> Nothing records why a disclosure was made, so the element is absent rather than carrying a guessed purpose. Read its absence as "not recorded".</p></div>"
  },
  "type": {
    "system": "http://dicom.nema.org/resources/ontology/DCM",
    "code": "110106",
    "display": "Export"
  },
  "subtype": [
    {
      "display": "Document packet assembled for release"
    }
  ],
  "action": "R",
  "recorded": "2025-05-22T14:08:31-06:00",
  "outcome": "0",
  "agent": [
    {
      "altId": "auth0|59d2ba714c8e0a63f1b7ce20",
      "name": "mreyes@cedarbrook.example.ca",
      "requestor": true
    }
  ],
  "source": {
    "observer": {
      "reference": "Device/cedarbrook-juno-emr",
      "display": "Cedarbrook EMR FHIR API"
    }
  },
  "entity": [
    {
      "what": {
        "reference": "List/packet-avery-20250522",
        "display": "Referral enclosures packet, 2025-05-22"
      },
      "type": {
        "system": "http://terminology.hl7.org/CodeSystem/audit-entity-type",
        "code": "2",
        "display": "System Object"
      },
      "detail": [
        {
          "type": "excludedPageCount",
          "valueString": "3"
        }
      ]
    },
    {
      "what": {
        "reference": "Patient/avery-linwood",
        "display": "Avery Linwood"
      },
      "type": {
        "system": "http://terminology.hl7.org/CodeSystem/audit-entity-type",
        "code": "1",
        "display": "Person"
      }
    }
  ]
}