JetPatient · Trust & Methods Home · Accreditation · Trust hub
The verification ledger

Don't trust us.
Recompute it yourself.

Every verification we record, every correction we make, and every claim we refuse to make is appended to a hash chain that cannot be edited without breaking. Your browser is checking the whole thing right now — with our server having no say in the result.

Verifying the chain in your browser…
Recomputing every entry with SHA-256 via WebCrypto. Nothing is being asked of our server.
Entries
Head
Declared
Algorithm
sha256(canonical JSON · sorted keys · no whitespace · UTF-8)

Don't take our word for it — break it yourself

Pick any record we have published, change it, and watch this page catch you. The check that runs is the same one that ran a moment ago on the real chain; the only difference is that you are the one doing the tampering. Nothing you do here leaves your browser.

Why this matters: a hash chain only proves anything if the reader can recompute it without our help. Every clinic verification, every correction and every claim we withhold is an entry in this chain — so if we ever quietly revised one, this page would say so on our own website.

Look anything up

What does the ledger say about…

A clinic, a claim we make, a file we changed. If it isn't here, we didn't record it — and that is itself an answer.

What's on the record

Including the parts that don't flatter us

A ledger that only holds good news is marketing. This one records our corrections, the claims we withhold because we can't stand behind them, and the size of our own verification backlog.

For the sceptical

How to check this without us

Each entry's hash covers its own contents and the hash before it. Change one character anywhere and every subsequent hash changes, so the chain stops matching its published head. Remove an entry and the sequence gaps. There is nowhere to hide an edit.

Download /fixtures/ledger.json and run this — no JetPatient code involved:

node -e '
const c=require("crypto"),d=require("./ledger.json");
const K=v=>v===null||typeof v!=="object"?JSON.stringify(v)
  :Array.isArray(v)?"["+v.map(K).join(",")+"]"
  :"{"+Object.keys(v).sort().map(k=>JSON.stringify(k)+":"+K(v[k])).join(",")+"}";
let p="0".repeat(64),bad=0;
for(const[i,e]of d.entries.entries()){
  const h=c.createHash("sha256").update(K({seq:e.seq,ts:e.ts,kind:e.kind,
    subject:e.subject,payload:e.payload,prev:e.prev})).digest("hex");
  if(e.seq!==i||e.prev!==p||e.hash!==h)bad++;p=e.hash;}
console.log(bad?"BROKEN":"intact",d.entries.length,"entries; head",p);'

If that prints anything other than intact and a head matching the one above, we have altered the record and you should tell us — and everyone else.