Decision database · For regulated industries

Compliance is a constraint, not a feature.

GDPR, HIPAA, NYDFS Part 500, SOX, NAIC, 21 CFR Part 11, NERC CIP, FedRAMP. This page maps questions that regulators and auditors commonly ask to the InvariantDB features and database calls that help answer them. Using InvariantDB does not make an organization compliant with any regulation: that is decided by your controls program and your auditor.

Bitemporal, engine-enforced Hash-chained audit Field-level ACLs Noised aggregates in private mode
What the engine records

Time and provenance, kept by the storage engine.

Regulated teams need a record of what was true, when the system learned it, and who made each change. InvariantDB keeps all three in the storage engine. Crypto-shred (per-subject encryption keys and key destruction) is in development.

01
Time · Bitemporal
Ask what the system knew when it acted. Add AT RECORDED '2026-03-05T10:00:00Z' to a MATCH clause and it reads the graph as it was recorded at that instant. No separate event store or ETL job is needed.
02
Truth · Provenance
Writes can carry provenance: who made the change, the source, the reason, and a confidence score. The engine also records the authenticated credential as principal: from 1.4.2 for every write of an authenticated request, on 1.4.1 and earlier when the write carries a provenance envelope. It is not recorded for import and other background jobs or for the legacy POST /write route, and after a host failure the principal of the last writes before it can be missing. db.propertyProvenance returns this for each version of a property, and db.derivedFrom follows DERIVED_FROM edges from a node back to its sources. Each committed node and relationship write is appended to the graph’s history log with the SHA-256 hash of the previous record. GET /graphs/{name}/audit/verify re-hashes the log and returns clean or the first broken record.
03
Erasure · Crypto-shred (in development)
Crypto-shred (per-subject encryption keys and key destruction) is in development. Contact us before relying on it for erasure requests.
Walkthrough

Walkthrough: a regulator’s incident-disclosure request.

A step-by-step walkthrough of an illustrative NYDFS Part 500 incident-disclosure request, with illustrative data. Walkthroughs for 13 other frameworks are linked below.

invariantdb / patient-chart-replay.cypher illustrative values
Question — what did the chart say on the day of treatment?
MATCH (p:Patient {mrn: 'M12345'})
  AT VALID    '2024-03-15'
  AT RECORDED '2024-03-15'
RETURN p
Provenance walk — where did this credit decision come from?
MATCH (a:Application {id: $appId})
CALL db.propertyProvenance(id(a), 'approved')
YIELD value, validFrom, version, txnAt,
      actor, source, reason, confidence, principal
RETURN value, actor, source, reason,
       confidence, principal, validFrom
ORDER BY version DESC
Receipt
APPROVED · 0.88c4d1…7f92
actoruw-2831 (piv)
sourcemodel-run 7a13
principalapikey:uw-desk
reasonmanual review
valid2024-03-15
recorded2024-03-15
History chain verified — GET /graphs/{name}/audit/verify returned clean
SUPERSEDED · rev 2bd41…0f73
reasonbureau correction
txnAt2024-04-02
actorbureau-ingest
confidence0.95
Original decision remains in the history

What “built for compliance” means here.

Each capability on this page that is not marked as in development is enforced by the engine rather than by application code, and can be checked from the database with an HTTP call or a Cypher procedure.

01 / ENGINE-ENFORCED

The engine enforces the rules.

Field-level ACLs, purpose binding, WORM, and bitemporal semantics are enforced by the engine. Field read ACLs and purpose binding apply to Cypher queries sent over HTTP, through the SDK, or through the MCP Cypher tool. Field write ACLs are checked only when a Cypher CREATE creates a node. From 1.4.2 a graph can also carry an access policy by label and relationship type, and a constraint can require that a node of a label has a relationship of a given type (for example a claim to a supporting passage); see Known limitations for what each covers on this release.

Field-level ACL & purpose binding →
02 / HASH-CHAINED

Committed node and relationship writes are hash-chained.

Each committed node and relationship write is appended to the graph’s history log with the SHA-256 hash of the previous record. GET /graphs/{name}/audit/verify re-hashes the log and returns clean or the first broken record. The history log is not signed or anchored outside the server, so the check does not detect a rewrite of the whole log, or removal of the most recent records, by someone with write access to the server.

SOX walk-through in six minutes →
03 / VERIFIABLE

The auditor runs the same procedure your engineer does.

Each available capability on this page maps to an HTTP endpoint or Cypher procedure that an auditor can call against the same deployment.

Compliance procedures →

Four verticals, mapped to primitives.

Each vertical below maps common regulator questions to the InvariantDB features and database calls that help answer them.

Healthcare · HIPAA / HITECH / 21st Century Cures

Field-level ACLs and a log of refused access.

Field-level read ACLs hide a restricted property from callers who may not read it. Field-level write ACLs are checked only when a Cypher CREATE creates a node. Denied reads in Cypher, refused searches and refused creates are appended to a hash-chained ACL event log that the DPO can replay with db.aclEvents and verify with db.verifyAclChain(); redactions on the direct node routes and allowed reads are not logged.

Q1 · Field-level ACL + ACL event log

“Which patient fields was a user refused, and when?”

Patient.ssn declared with acl: { read: ["compliance_officer"] } returns Null for an analyst’s MATCH (p:Patient) RETURN p.ssn. The engine enforces this, not the application. Each read denied in Cypher is appended to the graph’s ACL event log. db.aclEvents replays it; db.verifyAclChain() reports whether any event was altered.

Q2 · Crypto-shredding (in development)

“Patient asks us to erase their data.”

Crypto-shred (per-subject encryption keys and key destruction) is in development. Contact us before relying on it for erasure requests.

Q3 · Bitemporal AT VALID + AT RECORDED

“What did the patient’s chart say on the day of treatment?”

MATCH (p:Patient {mrn: 'M12345'})
  AT VALID    '2024-03-15'
  AT RECORDED '2024-03-15'
RETURN p

AT VALID asks “what was clinically true that day?” AT RECORDED asks “what was in the chart that day?” The two differ when a result was entered later with an earlier effective date.

Bonus · Private mode: noised aggregates

Research data sharing with noised aggregates.

Issue a research collaborator an API key with privacyMode: {epsilon_budget: 1.0, period: "Daily", max_per_query: 0.1}. With that key, only expressions built on count, sum or avg may be returned; noise is added and each aggregate spends from the key’s ε budget. A hash-chained private-mode event log (db.dpEvents, verified with db.dpVerifyChain()) gives the IRB a record of each aggregate and its ε spend. This release does not give a differential-privacy guarantee; do not rely on private mode alone to protect individual records.

“Show me the exact chart the treating physician saw.”
Financial services · SEC 17a-4 / FINRA / SR 11-7 / GLBA

Read the graph as it was recorded.

Orders, positions, hedges and exposures are nodes, and each change is kept as a version. An AT RECORDED read returns the graph as the database held it at that time.

Q1 · Bitemporal reads

“Reconstruct the trader’s view at 14:32:17.4”

AT RECORDED '2024-10-15T14:32:17.4Z' on a MATCH clause reads the graph as the database held it at that instant. The same query with the same AT RECORDED timestamp reads the same recorded history each time it is run, as long as that history is retained.

Q2 · WORM mode + hash-chained audit log

“Show that these trade records were not modified after submission.”

No API turns WORM mode off once it is engaged. Updates and deletes sent through Cypher, MCP tools, /execute and import are refused; creates are accepted. It does not cover the legacy POST /write route on the default graph, schema or index changes, or an administrator dropping the whole graph. Engaging it requires an Enterprise license. InvariantDB does not claim that WORM mode by itself meets SEC 17a-4(f); that is an assessment of your whole record-keeping system. Each node and relationship write committed through Cypher, /execute or import is appended to the graph’s history log with the SHA-256 hash of the previous record. Schema, index and constraint changes and writes sent to the legacy POST /write route are not recorded. GET /graphs/{name}/audit/verify re-hashes the log and returns clean or the first broken record. The history log is not signed or anchored outside the server, so the check does not detect a rewrite of the whole log, or removal of the most recent records, by someone with write access to the server.

Q3 · Per-property provenance

“Where did this credit decision come from?”

MATCH (a:Application {id: $appId})
CALL db.propertyProvenance(id(a), 'approved')
YIELD value, validFrom, version, txnAt,
      actor, source, reason, confidence, principal
RETURN value, actor, source, reason,
       confidence, principal, validFrom
ORDER BY version DESC

Each property version written with a provenance envelope records who made the change, the source, the reason, and the confidence; the engine adds the authenticated credential as principal. Versions written without an envelope return null in the columns the caller supplies; from 1.4.2 principal is recorded for them too when the request was authenticated. The same walk supports adverse-action explanations and model-risk reviews.

Q4 · Private mode on aggregate queries

“Quants want to compute portfolio statistics on real data.”

A research API key in private mode may return only expressions built on count, sum or avg; noise is added and each aggregate spends from the key’s ε budget. This release does not give a differential-privacy guarantee. Do not rely on private mode alone to protect individual records.

“The same Cypher, with the same recorded timestamp, reads the same recorded history.”
Insurance · NAIC Model Audit Rule / state DOI rate filings

Read the filing’s data from the live database.

Submission → Quote → Policy → Coverage → Claim → Reserve → Payment. Each change is kept as a version; AT VALID reads the graph as it was valid on that effective date.

Q1 · Bitemporal live graph

“Show the policy + coverage + claim graph as of the loss date.”

For a rate-filing review, MATCH (p:Policy)-[:HAS_COVERAGE]->(c) AT VALID '<filing-effective-date>' AT RECORDED '<filing-date>' RETURN … reads the policy and coverage graph as it was valid on the effective date and as it was recorded when the filing was prepared, weeks or years later. No ETL pipeline or separate archive is needed.

Q2 · db.propertyHistory

“Adjuster changed a reserve estimate. What was it before?”

MATCH (r:Reserve {id: $reserveId})
CALL db.propertyHistory(id(r), 'amount')
YIELD value, validFrom, validTo, version, txnAt
RETURN version, txnAt, validFrom, validTo, value
ORDER BY version
Q3 · Provenance + capability tokens + audit chain

“Underwriting bound a risk. Who approved? What was the basis?”

A binding write can carry actor, source (model run id, or underwriter login), reason and confidence in its provenance envelope; the engine records the authenticated credential (for a capability token, capability:<principal>) as principal. Capability tokens give each underwriter their own time-limited credential. NAIC Model Audit Rule § 6 requires controls testing; the provenance log and the hash-chained history are evidence you can hand to the tester.

Q4 · Private mode

“Carrier sharing claim statistics with a state DOI.”

Issue the state’s data partner an API key with privacyMode configured. With that key, only expressions built on count, sum or avg may be returned; noise is added and each aggregate spends from the key’s ε budget. This release does not give a differential-privacy guarantee; do not rely on private mode alone to protect individual claimant records.

“Reproduce the exhibit dataset from the live database, weeks or years after the filing.”
Government / public sector · FedRAMP / FISMA / CJIS

Capability tokens, field-level ACLs, and a hash-chained record.

The controls program is the customer’s; InvariantDB supplies data-layer evidence. Reads denied in Cypher are logged with the credential that attempted them.

Q1 · Data residency

“Where is this graph stored?”

A graph is stored in the region of the deployment that hosts it. The hosted service stores graphs in the United States. Residency choices are not available.

Q2 · Capability tokens + ACL event log

“Which credential was refused access to which property?”

Mint a capability token for the agent’s principal with a read or write scope and a short expiry (up to 5 minutes by default). Cypher reads that a field ACL denies and node creates it refuses under that token are appended to the ACL event log with the principal, label, property and reason; db.verifyAclChain() reports the first event whose hash no longer matches.

Q3 · Crypto-shred at end of retention (in development)

“Suspect-data crypto-shred at end of authorized retention.”

Crypto-shred (per-subject encryption keys and key destruction) is in development. Contact us before relying on it for erasure requests.

Q4 · Private mode for statistical queries

Compute noised statistics over sensitive registries under an ε budget.

As in the healthcare and finance sections: with a private-mode key, only expressions built on count, sum or avg may be returned; noise is added and each aggregate spends from the key’s ε budget. This release does not give a differential-privacy guarantee; do not rely on private mode alone to protect individual records.

“Short-lived credentials. Refused access on a hash-chained log.”
The honest section

What we don’t claim.

Except where marked as in development, the capabilities on this page are available in the current release. Compliance is a controls program, not a feature checklist; InvariantDB supplies evidence from the database. We do not:

  • Replace your DPA / BAA. You still need contracts with your cloud provider, sub-processors, and customers.
  • Make your engineers HIPAA-trained. The database enforces ACLs; the engineer designs the schema with the right ACLs declared.
  • Certify against SOC 2 / HIPAA / FedRAMP for you. InvariantDB is not SOC 2, HIPAA or FedRAMP certified. Those are audits of an organization and its controls. InvariantDB supplies evidence from the database; certification is your auditor’s decision.
  • Sign or externally anchor the history log. The history log and the ACL and privacy event logs are hash-chained. They are not digitally signed and are not anchored outside the server.
  • Give a differential-privacy guarantee. Private mode limits a key to expressions built on count, sum or avg and adds noise. Do not rely on private mode alone to protect individual records.
  • Log allowed reads. Denied reads in Cypher, refused searches and refused node creates are logged; allowed reads and redactions on the direct node routes are not.
  • Cover every regulation by name. GLBA, CCPA, PIPL, LGPD, NYDFS Part 500 — most reduce to the same primitives, but we’re explicit about which we’ve designed for vs. which a customer would derive.

What we do claim: committed node and relationship writes are hash-chained, property versions carry valid and recorded time, and a private-mode key returns noised aggregates that spend from an ε budget.

What to do next

Pick a path.

See the primitives end-to-end
Wire field-level ACL + purpose binding
Issue a private-mode API key
Run the demos — insurance, AML, clinical-trial
Talk under NDA
BitemporalAT VALID + AT RECORDED as first-class Cypher semantics.
Hash chainEach committed node and relationship write links to the SHA-256 hash of the one before it.
ProvenanceActor, source, reason and confidence per write, plus the authenticated credential.
Private mode + ACLNoised aggregates under an ε budget (no differential-privacy guarantee in this release); field-level read ACLs enforced by the server for authenticated callers.
Start with one control

Answer the auditor with the record itself.

Declare a field ACL, issue a capability token, and replay a decision as it was recorded. Each available capability on this page maps to a call an auditor can run.