Supply Chain Traceability and Chain-of-Custody Proofs

Combine profile-driven metadata, chainId timelines, connector events, and exportable trace reports across logistics, QA, customs, and supplier workflows.

Solution

Profile-driven metadata validation

Use `supply-chain-v1` or custom strict profiles so required fields (batch, lot, handoff metadata) are validated before upload.

Searchable + sensitive metadata split

Operational fields stay queryable in tags (`Biz-*`, trace tags). Sensitive fields are wrapped inside encrypted payload envelopes.

Trace context across every document event

Attach `Trace-Chain-Id`, `Trace-Event-Type`, `Trace-Step`, and `Trace-Actor` so each TX joins a deterministic chain timeline.

Realtime connector delivery

Broadcast chain events via Webhooks + PubSub + stream endpoint so downstream ERP/WMS systems receive updates without polling.

Trace tags + immutable TX IDs create a verifiable chain timeline.

Instead of trusting one internal database, each event is externally referencable and cryptographically anchored.

  • Profile contracts: Strict field rules enforce consistent metadata before each upload/version event.
  • Trace tags: Chain ID, event type, step, and actor are queryable across documents and versions.
  • Sensitive envelope: Confidential metadata remains encrypted while operational fields stay discoverable.
  • Provider choice: Bind each tenant to a PostgreSQL provider (shared or dedicated) without changing API contracts.

Can we run different storage providers by tenant?

Yes. Storage binding is per tenant (`1 provider per tenant`) with PostgreSQL providers. Encore-managed PostgreSQL remains primary and tenant-bound providers mirror writes.

How do we query a complete chain timeline?

Use `GET /trace/chains/:chainId` or `/trace/chains/:chainId/events` and correlate with `Parent-TX` for version history where needed.

Do we need the console to integrate?

No. You can integrate directly with the TypeScript SDK (`@evercore/sdk-ts`) using API keys and profile-aware helpers.