Security

Controls that are exercised, not asserted.

This page describes what the system does. Where something is not yet in place, it says so on this page rather than in a footnote somewhere else.

Tenant isolation

Isolation is enforced by row level security in the database, not by a filter in application code. Every table carries a tenant and every policy is deny by default, so a query that forgets its scope returns nothing rather than returning somebody else's patients.

The policies are tested against a real Postgres cluster as an unprivileged role carrying a session token, which is the same shape a signed in request has. A control that is asserted rather than exercised is a claim, not a guarantee.

Audit log

Every read and write of patient data is recorded to an append only log. There is no update policy and no delete policy on that table, the grants that would permit either are revoked, and a trigger blocks the attempt. The log cannot be rewritten by the application, by an administrator, or by us.

Protected health information in logs

No PHI reaches an application log. A redaction layer sits between the app and every logger, and it works from an allowlist of permitted keys plus a pattern scrubber for anything that resembles an identifier, a date of birth or a name. Anything not on the allowlist does not get logged, which is the safe direction for that decision to fail.

Encryption

In transit, TLS 1.2 or better on every connection, with HSTS. At rest, encrypted storage for both the database and the document objects. Original documents are held in private object storage and are never publicly addressable.

Retention

Retention is configurable per tenant and per artifact class, because a supplier under a state record retention rule and a supplier under a payor contract do not have the same obligation. Deletion is real deletion of the object, with the audit record of its existence and its removal retained.

Model use

Customer documents are not used to train models. Model calls are made through Anthropic's API under a business associate agreement with zero retention enabled, so document content is not retained by the provider after the response.

Every model call records its token counts, latency and stop reason against the case, so cost and behaviour are measurable rather than estimated.

Access

Roles are tenant scoped and least privilege. The only component that operates outside row level security is the pipeline worker, because a background job has no session, and it is reachable only with a shared secret that is never exposed to a browser.

Business associate agreements

IntakeLinx executes a BAA with each customer. We hold BAAs with our subprocessors for hosting, database and storage, and model inference. No protected health information is processed for a customer before those are in place, and the platform is used with synthetic documents until they are.

What is not done yet

SOC 2 Type II is not complete. Penetration testing by an outside firm has not been performed. Both are on the roadmap ahead of general availability, and we would rather you learn that here than in a questionnaire response.