Catalog npm
Back to packageRELEASE DETAILS

0.1.0

npm

@0xsarwagya/clinical-receipt

Portable, independently verifiable receipts of how a clinical AI output came to exist.

auditclinical-aihealthcaremerkleprovenanceselective-disclosuretypescriptverificationfhir
Published7 Jul 2026
Direct dependencies4
Transitive dependenciesNot calculated

README

Current package documentation

clinical-receipt

Portable, independently verifiable receipts of how a clinical AI output came to exist.

A TypeScript library that records the inputs, evidence, prompts, models, tools, guardrails, and human decisions behind an AI-produced clinical output — then commits, signs, and lets anyone verify the record offline.

The package proves the committed record has not changed. It does not prove the original record was true. That distinction is deliberate; it appears in the docs, the reports, and the specification.

What it is not

Not a blockchain. Not a hosted service. Not a compliance product. Not an LLM observability dashboard. Not a substitute for clinical validation.

Install

npm install @0xsarwagya/clinical-receipt

Node ≥ 20 (Web Crypto with Ed25519).

Usage

import { createReceipt, createEd25519Signer } from "@0xsarwagya/clinical-receipt";

const run = await createReceipt({
  workflow: { id: "discharge-review", version: "2.1.0" },
});

await run.input.observed({ value: patientBundle });
await run.evidence.retrieved({
  value: { chunk: "guideline text", rank: 1 },
  mode: "reference",
  ref: { uri: "guidelines://hf/2026", version: "2026-06-14" },
});
await run.prompt.rendered({ value: renderedPrompt });
await run.model.responded({ value: modelOutput });
await run.guardrail.evaluated({ value: { policy, result: "passed" } });
await run.humanReview.completed({ value: reviewRecord });
await run.output.committed({ value: finalOutput });

const signer = await createEd25519Signer({ generate: true });
const receipt = await run.finalize({ signer });

Verify anywhere:

import { verifyReceipt, importVerificationKey } from "@0xsarwagya/clinical-receipt/verify";

const key = await importVerificationKey(publicJwk);
const report = await verifyReceipt(receipt, { keys: [key] });
// report.ok, report.integrity, report.signatures, report.warnings, ...

FHIR

Since v0.2, wrap your FHIR access to commit which exact resource versions the AI saw:

import { instrumentFHIRFetch, verifyFHIR } from "@0xsarwagya/clinical-receipt/fhir";

const fhirFetch = instrumentFHIRFetch(globalThis.fetch, {
  run,
  baseUrl: "https://hapi.fhir.org/baseR4",
});
const patient = await fhirFetch(`${BASE}/Patient/123`).then((r) => r.json());
// reads, searches, and writes are now part of the receipt.

The wire format for the org.hl7.fhir extension is pinned in spec/1.0/fhir.md; vectors sit under spec/1.0/vectors/fhir-*.json.

CLI

clinical-receipt verify receipt.json
clinical-receipt verify --disclosure package.json --key public.jwk
clinical-receipt inspect receipt.json
clinical-receipt disclose receipt.json --event output.* --out share.json

Exit codes: 0 ok, 1 verification failed, 2 usage or IO error.

Specification

The wire format is a versioned specification, not an implementation detail. Every byte-level rule lives in spec/1.0/. Test vectors in spec/1.0/vectors/ are byte-pinned for canonicalization, commitments, tree structure, header leaves, and full receipts; signatures are pinned in the verify direction only (WebKit hedges Ed25519).

Any implementation that speaks specification 1.0 — in any language — must verify these vectors.

License

Apache-2.0. This is infrastructure and the patent grant matters.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 4

Native requirements
4 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
tsup
Environment
{
  "local_name": "tsup",
  "alias": false,
  "peer_metadata": null
}
^8.3.5development
vitest
Environment
{
  "local_name": "vitest",
  "alias": false,
  "peer_metadata": null
}
^3.0.0development
typescript
Environment
{
  "local_name": "typescript",
  "alias": false,
  "peer_metadata": null
}
5.9.2development
@types/node
Environment
{
  "local_name": "@types/node",
  "alias": false,
  "peer_metadata": null
}
^22.15.3development

Distribution files

1 collected
Distribution 1

Source distribution

Source file
Checksums from source
{
  "shasum": "1b2b4c956546119123e43c1eb95326a62d2510ee",
  "tarball": "https://registry.npmjs.org/@0xsarwagya/clinical-receipt/-/clinical-receipt-0.1.0.tgz",
  "fileCount": 80,
  "integrity": "sha512-7TMCuT5zyEXB9wbttwwOzk5cygJlDCJQxZhrIImirUv6Uq/P41lXlOLKvWvBjn5f7Mbpw3bdh6JwcJfw8NOd4Q==",
  "signatures": [
    {
      "sig": "MEUCIQDaM8IweO7D7UAOu8dJGHK3xcKt2DHUfgeve5HQpUdTBgIgZVwX2/UvCrVNpT36aaJ4y8oEi5D8gaVsShmJWJKW+WY=",
      "keyid": "SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"
    }
  ],
  "unpackedSize": 363688
}

Repository

PENDING
0xsarwagya/clinical-receipt

Shared repository data · GitHub

License detected in repository
Not collected

Metadata history

Meaningful changes
Current collected state Current

Observed since 21 Oct, 09:38 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:0a6e9d41fb222ff1f1d466e469d714bc08059eb74feb817f1e36b9e3e5dcf5ed

Other collected versions

0.2.27 Jul0.2.17 Jul0.2.07 JulView all collected versions →