Skip to main content

Audit Log

The Audit Log records all significant user actions and system events in Parthenon, providing a tamper-evident trail for security review, compliance reporting, regulatory audits, and incident investigation. Access requires the admin or super-admin role.

What Gets Logged

Every event in the audit log captures a comprehensive set of contextual information:

FieldDescription
TimestampUTC time of the event (millisecond precision)
UserAuthenticated user who performed the action (name + ID)
IP AddressOriginating IP address of the request
User AgentBrowser or client identifier
Event TypeCategory and action (e.g., auth.login, cohort.generate)
ResourceAffected object type and ID (e.g., CohortDefinition:42)
DetailsAdditional context -- old/new values for edits, parameters for actions
HTTP MethodGET, POST, PUT, DELETE
Request PathAPI endpoint that was called
Response StatusHTTP status code of the response

Logged Event Categories

Authentication Events

EventDescriptionDetails Captured
auth.loginSuccessful user loginAuthentication method (local/LDAP/SAML/OAuth)
auth.logoutUser logoutSession duration
auth.login_failedFailed login attemptAttempted email, failure reason
auth.password_changeUser changed their passwordWhether it was a forced change
auth.password_resetAdmin reset a user's passwordTarget user ID
auth.token_createdAPI token generatedToken name, expiry

User Management Events

EventDescriptionDetails Captured
user.createdNew user account createdName, email, assigned roles
user.updatedUser profile modifiedChanged fields (old/new values)
user.deletedUser account deletedReassigned objects count
user.suspendedUser account suspendedReason (if provided)
user.reactivatedSuspended account restored--
user.role_changedRole assignment modifiedAdded/removed roles

Research Object Events

EventDescriptionDetails Captured
cohort.createdCohort definition createdName, expression summary
cohort.updatedCohort definition modifiedChanged fields
cohort.deletedCohort definition deletedName, creator
cohort.generatedCohort generation executedSource, result count, duration
cohort.archivedCohort archivedReason
concept_set.createdConcept set createdName, concept count
concept_set.updatedConcept set modifiedAdded/removed concepts
concept_set.deletedConcept set deletedName, creator
analysis.createdAnalysis createdType, name
analysis.executedAnalysis job executedSource, duration, result summary
analysis.deletedAnalysis deletedName, type

Data Source Events

EventDescriptionDetails Captured
source.createdData source configuredName, connection type
source.updatedData source modifiedChanged fields
source.deletedData source removedName
source.connection_testedConnection test executedSuccess/failure, response time

Patient Access Events

EventDescriptionDetails Captured
patient.timeline_viewedPatient timeline accessedperson_id, data source
patient.data_exportedPatient data exportedperson_id, export format

System Administration Events

EventDescriptionDetails Captured
admin.config_changedSystem configuration modifiedSetting name, old/new values
admin.ai_provider_changedAI provider activatedProvider name, previous provider
admin.vocab_refreshedVocabulary updatedVersion, concept counts
admin.auth_provider_changedAuth provider configuredProvider type, enabled/disabled
admin.fhir_connection_createdFHIR connection addedSite name, EHR vendor
admin.fhir_sync_triggeredFHIR sync startedConnection, triggered by

Data Ingestion Events

EventDescriptionDetails Captured
data.upload_startedFile upload initiatedFilename, size, format
data.upload_completedFile upload finishedRow count, parse status
data.mapping_executedSchema/concept mapping runSource rows, mapped rows, errors
data.genomic_uploadGenomic file uploadedFormat, variant count
data.imaging_importDICOM study importedStudy count, series count

Viewing the Audit Log

Navigate to Admin > Audit Log. The log displays the most recent 1,000 events by default, with infinite scroll loading for older entries.

Filter Panel

Use the comprehensive filter panel to narrow results:

FilterTypeDescription
Date RangeDate pickerEvents within a specific time window
UserDropdown/searchActions by a specific user
Event TypeCategory treeFilter by category (auth, user, cohort, etc.) or specific event
ResourceText searchEvents affecting a specific object (e.g., CohortDefinition:42)
IP AddressText inputEvents from a specific IP address
StatusDropdownSuccess / Failure / All

Filters can be combined -- for example, show all patient.timeline_viewed events by a specific user within the last 30 days.

Event Detail View

Click any audit log entry to expand the detail panel showing:

  • Full event metadata (all fields listed above)
  • Request/response details (sanitized -- no passwords or tokens)
  • Related events (e.g., all events in the same user session)
  • Link to the affected resource (if it still exists)

Exporting Audit Logs

Click Export CSV to download the filtered audit log as a comma-separated file. The export includes all visible columns and respects active filters.

Export Use Cases

  • Compliance reporting -- regular audit log exports for HIPAA, GDPR, SOC 2, or IRB audits
  • SIEM ingestion -- import into Splunk, Elastic/Kibana, or other security monitoring tools
  • Incident investigation -- download logs for a specific time window around a security event
  • Access reviews -- export patient access logs for data use agreement compliance

Log Retention

By default, audit log entries are retained for 365 days (1 year). Configure the retention period in Admin > System Configuration > Audit Log Retention.

Retention SettingDescription
Retention periodDays to keep audit log entries (minimum: 90, maximum: unlimited)
Purge scheduleAutomated daily purge of entries exceeding the retention period
Archive before purgeOptionally export entries to CSV before deletion
Regulatory retention requirements

Many healthcare data governance frameworks have specific retention requirements:

  • HIPAA -- 6 years for access logs
  • GDPR -- retention must be proportionate to purpose
  • SOC 2 -- typically 1 year minimum
  • 21 CFR Part 11 -- electronic records must be retained for the required record retention period

Configure retention to match your most stringent requirement.

Real-Time Log Forwarding

For organizations requiring centralized security monitoring, configure real-time log forwarding via webhook:

  1. Set the AUDIT_LOG_WEBHOOK_URL environment variable to your SIEM endpoint.
  2. Parthenon HTTP POSTs each audit event as a JSON payload to the configured URL in real time.
  3. Events are sent asynchronously (non-blocking) via the Laravel queue.

Webhook Payload Format

{
"timestamp": "2026-03-05T14:23:17.892Z",
"event_type": "patient.timeline_viewed",
"user_id": 12,
"user_email": "researcher@hospital.org",
"ip_address": "10.0.1.42",
"resource_type": "Patient",
"resource_id": "person_id:98765",
"source": "OMOP-Production",
"details": {},
"http_method": "GET",
"request_path": "/api/v1/patients/98765/timeline",
"response_status": 200
}

Supported SIEM Integrations

PlatformIntegration Method
SplunkHTTP Event Collector (HEC) endpoint
Elastic/KibanaElasticsearch ingest endpoint or Logstash HTTP input
DatadogHTTP log intake API
Azure SentinelLog Analytics Data Collector API
CustomAny endpoint accepting JSON POST requests
Compliance use cases

The patient timeline audit events (patient.timeline_viewed with person_id) are specifically designed to satisfy the HIPAA Minimum Necessary Standard requirement. They provide a complete record of who accessed which patient's data and when. Combined with log forwarding to a tamper-proof SIEM, this creates a defensible audit trail for regulatory inquiries.