All use-cases

KYC review & verification

A claimant registers on the insurance / employee-claims portal and passes KYC document review — every upload magic-byte verified against its declared type, every gate fail-closed, every decision written to an immutable audit trail.

The KYC journey, end to end

Mail = email sent Bell = in-app alert Amber diamond = automatic check Teal diamond = a person decides
Invited claimant registers invite-only · account provisioned Upload KYC document passport · national ID · proof of address Magic-byte matches MIME? header vs declared type Submit Claim-holder Onboarding kyc_status → in_review · reviewer emailed Compliance reviews doc accept / resubmit / final Row still pending? concurrency predicate Matrix + disposition OK? all req doc-types accepted KYC verified decision notice: email + in-app yes accept yes verified Rejected — spoof detected polyglot / renamed file · 422 BLOCKED no re-upload Rejected — resubmit reviewer note · claimant re-uploads resubmit re-upload Rejected — final all docs terminal → kyc_status failed DEAD END final 409 concurrent review another admin claimed the row no

No document byte is trusted on its declared MIME — the magic-byte gate blocks spoofs before review. Reviewers decide each document type independently; a rejected type still open blocks verification, and a re-uploaded doc supersedes the old one. Every state transition is fail-closed audited.

What the portal guarantees

  • Every KYC decision is type-aware — a re-uploaded doc supersedes the old one; a rejected type still open blocks verification.
  • Concurrent reviewers cannot double-decide — a status-predicate UPDATE makes the loser a clean 409.
  • Every KYC transition is fail-closed: if the audit row cannot be written, the mutation is rejected.