%ZHSLIB.Audit.Log
persistent class %ZHSLIB.Audit.Log extends %Library.Persistent, %XML.Adaptor
SQL Table Name: %ZHSLIB_Audit.Log
To use the audit log, first define a log entry by calling: ##ClassMethod(%ZHSLIB.Audit.Log).CreateLog( arguments ) to define the overall entry. This will return a reference to a log object. Next, on the log object, for each "participant" (patient, doctor, etc.) call AddParticipant( arguments) to add these to the log. If SDA is being logged, that needs its own call: LogSDA(sda) Finally, on the log object, call SaveLog(). See the documentation for CreateLog for chaining log items together.Property Inventory
- AccessGateway
- EventID
- InitiatingLogID
- LogEnd
- LogID
- LogStart
- OtherEvent
- Participants
- ProxyUserID
- Roles
- SDA
- SourceID
- UserID
Method Inventory
- AddParticipant()
- AddSDA()
- AssignLogID()
- CreateLog()
- CreateSDALog()
- LogSDA()
- NewInitiatingLog()
- NextID()
- NextSysAudit()
- SaveIHE()
- SaveLog()
Properties
property AccessGateway as %String);
Property methods: AccessGatewayDisplayToLogical(), AccessGatewayGet(), AccessGatewayGetStored(), AccessGatewayIsValid(), AccessGatewayLogicalToDisplay(), AccessGatewayLogicalToOdbc(), AccessGatewayNormalize(), AccessGatewaySet()
property EventID as %String) [ Required ];
Property methods: EventIDDisplayToLogical(), EventIDGet(), EventIDGetStored(), EventIDIsValid(), EventIDLogicalToDisplay(), EventIDLogicalToOdbc(), EventIDNormalize(), EventIDSet()
property InitiatingLogID as %String) [ Required ];
Property methods: InitiatingLogIDDisplayToLogical(), InitiatingLogIDGet(), InitiatingLogIDGetStored(), InitiatingLogIDIsValid(), InitiatingLogIDLogicalToDisplay(), InitiatingLogIDLogicalToOdbc(), InitiatingLogIDNormalize(), InitiatingLogIDSet()
property LogEnd as %TimeStamp;
Property methods: LogEndDisplayToLogical(), LogEndGet(), LogEndGetStored(), LogEndIsValid(), LogEndLogicalToDisplay(), LogEndLogicalToXSD(), LogEndNormalize(), LogEndOdbcToLogical(), LogEndSet(), LogEndXSDToLogical()
property LogID as %String) [ Required ];
Property methods: LogIDDisplayToLogical(), LogIDGet(), LogIDGetStored(), LogIDIsValid(), LogIDLogicalToDisplay(), LogIDLogicalToOdbc(), LogIDNormalize(), LogIDSet()
property LogStart as %TimeStamp;
Property methods: LogStartDisplayToLogical(), LogStartGet(), LogStartGetStored(), LogStartIsValid(), LogStartLogicalToDisplay(), LogStartLogicalToXSD(), LogStartNormalize(), LogStartOdbcToLogical(), LogStartSet(), LogStartXSDToLogical()
property OtherEvent as %String);
Property methods: OtherEventDisplayToLogical(), OtherEventGet(), OtherEventGetStored(), OtherEventIsValid(), OtherEventLogicalToDisplay(), OtherEventLogicalToOdbc(), OtherEventNormalize(), OtherEventSet()
relationship Participants as array of %ZHSLIB.Audit.LogParticipant [ InitialExpression = $listbuild("%ZHSLIB.Audit.LogParticipant","Log",+$this,"children",1,1) , Transient , Inverse = Log , Cardinality = children ];
Property methods: ParticipantsGet(), ParticipantsGetObject(), ParticipantsGetObjectId(), ParticipantsGetSwizzled(), ParticipantsIsEmpty(), ParticipantsIsValid(), ParticipantsNewObject(), ParticipantsRClose(), ParticipantsRExec(), ParticipantsRFetch(), ParticipantsRelate(), ParticipantsSQLCompute(), ParticipantsSet(), ParticipantsUnRelate()
property ProxyUserID as %String);
Property methods: ProxyUserIDDisplayToLogical(), ProxyUserIDGet(), ProxyUserIDGetStored(), ProxyUserIDIsValid(), ProxyUserIDLogicalToDisplay(), ProxyUserIDLogicalToOdbc(), ProxyUserIDNormalize(), ProxyUserIDSet()
property Roles as %String);
Property methods: RolesDisplayToLogical(), RolesGet(), RolesGetStored(), RolesIsValid(), RolesLogicalToDisplay(), RolesLogicalToOdbc(), RolesNormalize(), RolesSet()
property SDA as %Stream.GlobalCharacter;
Property methods: SDADelete(), SDAGet(), SDAGetObject(), SDAGetObjectId(), SDAGetStored(), SDAGetSwizzled(), SDAIsValid(), SDANewObject(), SDAOid(), SDAOpen(), SDASet(), SDASetObject(), SDASetObjectId(), SDAUnSwizzle()
property SourceID as %String);
Property methods: SourceIDDisplayToLogical(), SourceIDGet(), SourceIDGetStored(), SourceIDIsValid(), SourceIDLogicalToDisplay(), SourceIDLogicalToOdbc(), SourceIDNormalize(), SourceIDSet()
property UserID as %String);
Property methods: UserIDDisplayToLogical(), UserIDGet(), UserIDGetStored(), UserIDIsValid(), UserIDLogicalToDisplay(), UserIDLogicalToOdbc(), UserIDNormalize(), UserIDSet()
Methods
method AddParticipant(pType As %String = "", pOtherType As %String = "", pID As %String = "", pIDText As %String = "", pDetail As %String = "") as %Status
Arguments:
pType: (see %ZHSLIB.Audit.LogParticipant)
pOtherType: if type is O, this is required
pID: The identifier (i.e. the MRN, or patient ID, or doctor or facility identifier, etc.)
pIDText: Optional string name for pID - ex: patient or doctor name
pDetail: Optional string blob with details specific to each type of event & participant.
See audit trail design document on HealthShare Wiki for what should go here.
classmethod AddSDA(pLogID, pSDA) as %Status
This may be called to add SDA to an already saved log.
It will return an error if the SDA already has been logged
This class method can be called form the hub or any gateway to increment the log counter
and to assign a globally unique log ID. It can be called, for instance, on the access gateway
in order to get the initiating log ID that will be used to tie together a sequence of lookups, retrievals,
and viewing.
classmethod CreateLog(Output pLogRef As %ZHSLIB.Audit.Log, ByRef pInitiatingLogID As %String = "", pEventID As %String = "", pOtherEvent As %String = "", pLogStart As %TimeStamp = {$ZDT($ZTIMESTAMP, 3, 1, 3)}, pSourceID As %String = "", pUserID As %String = "", pRoles As %String = "", pAccessGateway As %String = "", pProxyUserID As %String = "") as %String
Arguments:
pLogRef: By reference, to return the OREF to the created log
pInitiaingLogID: This argument is used by reference to chain log events together. For the first event, pass in an empty string, and this will generate a log ID.
For subsequent events, pass in this generated log ID. The log ID is unique throughout the HealthShare installation.
It's generated by a combination that identifies the computer name, ensemble instance, namespace, and a sequential number.
pEventID: This identifies the type of event being logged. Choices are (so far): ConsentUpdate,
PatientSearch, SearchPatient, BreakGlass, RecordRequest, and Other
pOtherEvent:Required for event ID of Other
pLogStart: Optionally, pass in a timestamp. If missing, this will use the current time
pSourceID: Optionally, pass is an identifier of the unique "application" that was the source of
this audit event. If missing, this will use the same prefix as the generated log ID.
pUserID: Pass is an identifier of the user who was the "active participant" for this event.
The User might not be a person, for system generated events. UserID must uniquely identify
a person or system within the Source ID
pRoles: Pass in the Roles for this user
pAccessGateway: Pass in the name of the access gateway where it all started
pProxyUserID - if the user is acting as a proxy for someone else, this will be the proxied one
Returns: a status message - $$$OK, etc.
Returns: a status message - $$$OK, etc.
classmethod CreateSDALog(pInitiatingLogID As %String, pEventID As %String, pSDA As %Stream.Object, Output pLogId As %String) as %Status
New Method used as of SMB1026 to create a log to store the fetched SDA
method LogSDA(pSDA) as %Status
Argument: SDA document.
SDA is kept separate from the rest of the data in order to preserve privacy and confidentiality
It can be a string, a Stream, or an XML adapter
classmethod NewInitiatingLog() as %String
Utility Method to generate unique initiating log ID
classmethod NextSysAudit(ByRef pUTCTimeStamp As %String, ByRef pSystemID As %String, ByRef pAuditIndex As %BigInt, ByRef pProperties As %String) as %Integer
classmethod SaveIHE(pIHELog As %Persistent) as %Status
Utility Method used to save IHE logs, when stored in a secured tamperproof database
method SaveLog() as %Status
Queries
query AfterID(AfterID As %Integer)
SQL Query:
SELECT %ID,EventID,InitiatingLogID,LogEnd,LogID,LogStart,OtherEvent,SourceID,UserID,Roles,AccessGateway FROM Log WHERE %ID > :AfterID ORDER BY %ID
SELECT %ID,EventID,InitiatingLogID,LogEnd,LogID,LogStart,OtherEvent,SourceID,UserID,Roles,AccessGateway FROM Log WHERE %ID > :AfterID ORDER BY %ID
SQL Query:
SELECT %ID,EventID,InitiatingLogID,LogEnd,LogID,LogStart,OtherEvent,SourceID,UserID,Roles,AccessGateway FROM Log WHERE ( (EventID = :EventType) OR (:EventType='') ) AND (%ID > :AfterID) ORDER BY %ID
SELECT %ID,EventID,InitiatingLogID,LogEnd,LogID,LogStart,OtherEvent,SourceID,UserID,Roles,AccessGateway FROM Log WHERE ( (EventID = :EventType) OR (:EventType='') ) AND (%ID > :AfterID) ORDER BY %ID
Query used for Audit Actions. Two arguments:
EventType - the type of event desire.
AfterID - to retrieve all audit events whose %ID is after this argument (0 means all)
Indexes
index (IDKEY on ) [IdKey, Type = key];
Index methods: IDKEYCheck(), IDKEYDelete(), IDKEYExists(), IDKEYOpen(), IDKEYSQLCheckUnique(), IDKEYSQLExists(), IDKEYSQLFindPKeyByConstraint(), IDKEYSQLFindRowIDByConstraint()
index (InitiatingLogIDIndex on InitiatingLogID);
Index methods: InitiatingLogIDIndexExists()
index (LogIDIndex on LogID);
Index methods: LogIDIndexExists()
Inherited Members
Inherited Methods
- %%CLASSNAMELogicalToStorage()
- %%CLASSNAMEStorageToLogical()
- %AddToSaveSet()
- %AddToSyncSet()
- %BMEBuilt()
- %BuildIndicesAsync()
- %BuildIndicesAsyncResponse()
- %CheckConstraints()
- %CheckConstraintsForExtent()
- %ClassIsLatestVersion()
- %ClassName()
- %ComposeOid()
- %ConstructClone()
- %Delete()
- %DeleteExtent()
- %DeleteId()
- %DispatchClassMethod()
- %DispatchGetModified()
- %DispatchGetProperty()
- %DispatchMethod()
- %DispatchSetModified()
- %DispatchSetMultidimProperty()
- %DispatchSetProperty()
- %Exists()
- %ExistsId()
- %Extends()
- %GUID()
- %GUIDSet()
- %GetLock()
- %GetParameter()
- %GetSwizzleObject()
- %Id()
- %InsertBatch()
- %IsA()
- %IsModified()
- %IsNull()
- %KillExtent()
- %KillExtentData()
- %LoadFromMemory()
- %LockExtent()
- %LockId()
- %New()
- %NormalizeObject()
- %ObjectIsNull()
- %ObjectModified()
- %Oid()
- %OnBeforeAddToSync()
- %OnDeleteFinally()
- %OnDetermineClass()
- %OnOpenFinally()
- %OnSaveFinally()
- %Open()
- %OpenId()
- %OriginalNamespace()
- %PackageName()
- %PhysicalAddress()
- %PurgeIndices()
- %Reload()
- %RemoveFromSaveSet()
- %ResolveConcurrencyConflict()
- %RollBack()
- %Save()
- %SaveDirect()
- %SaveIndices()
- %SerializeObject()
- %SetModified()
- %SortBegin()
- %SortEnd()
- %SyncObjectIn()
- %SyncTransport()
- %UnlockExtent()
- %UnlockId()
- %ValidateIndices()
- %ValidateObject()
- %ValidateTable()
- XMLDTD()
- XMLExport()
- XMLExportToStream()
- XMLExportToString()
- XMLNew()
- XMLSchema()
- XMLSchemaNamespace()
- XMLSchemaType()
Storage
Storage Model: Storage (%ZHSLIB.Audit.Log)
^HS.Audit("LogD")(ID) |
= | %%CLASSNAME
LogID
InitiatingLogID
EventID
OtherEvent
LogStart
LogEnd
SourceID
UserID
Roles
AccessGateway
SDA
ProxyUserID
|