AuditEvent Profile¶
| Canonical | ../StructureDefinition/nexus-emr-core-auditevent |
|---|---|
| Status | draft (experimental) · 1.26.0 |
| Base | AuditEvent (constraint) |
| Source | FSH · 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"
}
}
]
}