ProductsScheduling
ProductsClinical
ProductsPatients & billing
PlatformBuild on it
PlatformRun the clinic
PlatformTrust
Who it’s forBy practice
Who it’s forBy province
CompanyQlynic
Nothing matches that. Try a shorter word.
Audit log
Every critical action funnels through one writer, so the log has one shape rather than fifteen. And the write is wrapped, so a failure in the log can never stop the thing it was logging — nobody gets an error at the desk because an audit table was busy. That is a trade, and it was made with eyes open.
What one row actually contains
One row, taken apart
CreatedAt
Written by the database in UTC, not by the machine that did the thing. A workstation with a wrong clock cannot move an audit row, which is the only reason a timestamp in a log is worth anything.
Action · Detail
Two fields, deliberately. Action is a dot-namespaced machine code, 64 characters, stable enough to still filter on in three years. Detail is up to 2,000 characters of the same event written as a sentence a person can read. A log with only codes cannot be understood; a log with only prose cannot be queried.
UserId · ActorEmail
Taken from the signed-in request at the moment of the action, not looked up afterwards. When nobody is signed in — a failed login, an invite being accepted — the actor is passed in explicitly instead, so the row still knows who it was about.
ActorRole
The role is captured on the row, but the feed shows the person’s current role from your member list and falls back to the captured one only if they have left. So somebody promoted last month shows as their new role against an old action. Worth knowing before you read one in anger.
Not shown above Every row also carries Ip and UserAgent — the first X-Forwarded-For hop with the port stripped, IPv6-safe, so addresses group instead of scattering. The tail does not display them. The row has them.
The boundary
WHERE l.ClinicId = @C
The live rail
Log / LogAs
Your rail One card, one second later
LogAs(con, tran)
Your rail Nothing. It never happened.
What is not claimed
Four questions worth asking anyone, including us
An audit log is not a feature you buy once and stop thinking about. It is a promise that somebody wrote something down, kept it out of the way of the work, and will still be able to show it to you in three years. Everything on this page is either in the code or is not claimed.