Multimodal intake · Cited verdict · Byte-identical reply audit-defensible

Many inputs.
One verdict.

Fax, mail, web, email. One intake. Verdikt reads the case, cites the rules, issues a verdict of approve, deny, or missing_info. Two artifacts out: a byte-identical reply package (decision letter plus the guidelines and any pre-populated forms the case needs) and a JSON verdict for downstream ops.

No model in the reply path Rules human-authored Per-tenant scoped
Verdikt · adjudication no. asp-201
Caseasp-201-c4f8
Programcardiovita · v3
APPROVED
Citations 4 rules fired
  • §4.1LVEF documented below threshold
  • §4.2income within program bounds
  • §7.asigned within 90 days
  • §9prescriber NPI valid
byte-identical · rendered from frozen v3 sha256:9b4c…

Built solo. The pipeline isn't the point. The seam between AI and determinism is.

Inside Verdikt

An operator's console, not a chat window.

Templates, renders, publishes, and failures. Every row scoped to a tenant. The same admin surface a compliance officer would review during an audit.

The wedge for 2026

AI agents can generate documents.
They can't be trusted to author them.

AI reads the case. Human-authored rules decide the outcome. A frozen, human-approved template supplies the words. That's the shape of trustworthy agent output for the next five years, and the only shape a bank or a payer will sign off on.

Verdikt is the decision layer for that shape. Every stage's output is a structured artifact a reviewer can read: intake, retrieved rules with rerank scores, verdict with citations, rendered letter. Every reply is bound to a version_hash a human approved, on a tenant a human provisioned. Supervision path, not hot path.

AI supplies
Reading
Vision extraction, retrieval + rerank, structured reasoning.
Humans supply
Rules
Versioned rule packs authored in the admin UI and frozen reply templates.
Verdikt supplies
Verdict
Outcome with citations, tenant, provenance, byte-identical reply.
Hackathon submission

Built for the Nebius × NVIDIA Global AI Hackathon.

Three NVIDIA Nemotron models and two Apache-2.0 open models, every call served by Nebius Token Factory through one endpoint and one key. MIT-licensed source.

Extract
MiniCPM-V 4.5 + NVIDIA Nemotron-3.5-Super-VL
MiniCPM-V reads every page into the program's fields. Nemotron VL can read the same pages as a cross-check; any field the two disagree on goes to the reviewer.
Triage
NVIDIA Nemotron Nano
Classifies the case and picks its route. A rule-based classifier takes over if the model is unavailable.
Retrieve
Qwen3-Embedding-8B
Finds the program's human-authored rules that apply to this case. It finds; it never invents.
Reason
NVIDIA Nemotron Super
Turns plain-language rules into formulas code can check; reasons over any rule without one.
Deliver
No model
The reply is merged from a frozen, human-approved template and held until a reviewer approves it.
Hosted
Nebius Token Factory
All inference runs on Token Factory. The app itself is self-hosted at verdikt.aismith.ai.
Reviewers · try it live Open the engineering dashboard

Executive overview linking to the features, tests, code-review, and security-review dashboards. Every verdict at a glance, drill-down on each card.

MIT License Open source · public repo Deploys via docker compose
See it end-to-end

Three minutes. One case. Case in, verdict out.

An email arrives with an application. Verdikt extracts the case, retrieves the rules, issues a verdict with citations, and merges a byte-identical reply. Everything after the model is deterministic.

Decisions at the speed of intake

Case in. Verdict out. Same case, same reply, forever.

Anyone can render a template. What's harder is the pipeline that reads the case, retrieves the rules, and stays byte-identical at the seam where the letter leaves the building.

Following case asp-201 · cardiovita-pap-2026 · arrived via email
Fax Postal mail Web form Email REST MCP Intake bus normalize · tag · route
Fax pages, scanned mail, web-form submissions, email attachments, REST payloads, and MCP tool calls all become the same shape: an inbox event with a resolved tenant, program, and normalized attachments. Web forms are just a REST client, so their submissions land on the same /inbox endpoint that partners hit directly; MCP tool invocations are JSON by construction. Fax, postal mail, and email attachments arrive as bytes, so a vision model reads them into structured intake slots first. Extract, retrieve, and reason don't know which channel a case came from, so one code path adjudicates all six.
Same case asp-201 · extract → retrieve → reason · 3 rules fired
◄ AI zone
pipeline · human-authored rules & templates
Deterministic zone ►
reply time · no model, ever
Stage I
Ingest
  • Intake

    Every channel normalizes into one inbox and routes to tenant + program.

  • Extract
    VisionA VLM reads fax, postal mail, and email PDFs into intake slots.
Stage II
Triage
  • Classify

    Case type: new intake, refill, appeal, missing-info, or not-decidable.

  • Route

    Refills short-circuit to Pharmacy OMS; missing-info goes to CRM outreach; new intakes continue to Decide.

Stage III
Decide
  • Retrieve

    Rules matched by embedding + rerank against a versioned pack.

  • Reason

    Structured verdict: approve, deny, or missing_info. Citations attached.

Stage IV
Deliver
  • Merge

    Verdict + frozen template → deterministic bytes.

  • Deliver

    Two artifacts: byte-identical reply letter, plus JSON verdict for downstream systems.

Stage V
Remember
  • Audit

    Every stage preserved: intake, rules, decision, letter, downstream handoff.

  • Rollback

    Repin an earlier template version. No re-decision. No drift.

Same case asp-201 · verdict approve · version_hash 9b4c…f21e
Artifact 01 · for the applicant
Reply package
A bundle, not a single letter. The decision letter, the program guidelines the applicant needs on file, and any form we can pre-populate (e.g. a partially-filled Rx request on missing_info). Each doc is a byte-identical merge of a frozen, human-approved template with data from the verdict, content-addressed by version_hash. No model in the render path.
Artifact 02 · for downstream systems
Verdict JSON
{
  "case_id": "asp-201-…",
  "outcome": "approve",
  "citations": ["CV-INC-01", "CV-CLIN-01"],
  "letter": {
    "hash": "sha256:9b4c…",
    "pdf":  "s3://verdikt/replies/…pdf"
  },
  "handoff": {
    "crm":         "crm://case/00X…",
    "call_center": "queued",
    "case_mgmt":   "casemgr://work/A-4429"
  }
}
Same case ID as the letter. Consumed by call-center ops, CRM, and case-management systems that keep the case moving after the letter is sent.
Governance in the shape of a product

The decision ledger is the point.

Every case writes a row. Which program, which rules fired, which outcome, which letter, for which tenant, at which second, with which citations. Reproducible on demand. Discoverable in a subpoena. Boring in the good way.

  • ◆Row-level tenant_id scoping. CI-enforced. One code path, three transports (REST, MCP, admin UI).
  • ◆API-key auth per tenant. Keys are the trust boundary, not IP.
  • ◆Idempotent by fingerprint. Same case from the same caller returns the same decision. No duplicate letters in the wild.
  • ◆Draft → Freeze → Publish. No letter renders that a human didn't bless. No rule fires that a human didn't author.
Time
Program · case
Outcome
Version hash
Job
14:02:11
cardiovita · asp-201
approve
sha256:9b4c…f21e
01J8Y…
14:01:58
cardiovita · asp-198
deny
sha256:9b4c…f21e
01J8Y…
14:01:44
oncobridge · onc-115
missing_info
sha256:2a10…c88b
01J8Y…
14:01:31
cardiovita · asp-197
approve
sha256:9b4c…f21e
01J8Y…
14:00:07
cardiovita · asp-201 (v2 rolled back)
approve
sha256:71fd…9004
01J8X…
Tenants
Row-level
Rollback
1 click
Reply bytes
Reproducible
Where the market ends and Verdikt begins

A pipeline product on the outside.
A governance product on the inside.

Capability
Adjudication stacks today
Verdikt
Multi-channel intake (fax, mail, web, email)
Multi-vendor, glue code per channel
✓ One inbox, one pipeline
Multimodal case extraction from inbound docs
OCR + regex, manual QA
✓ Vision + slot schema per program
Rules retrieval with citations
Rules buried in a workflow engine, engineer-owned, no citations on the outcome
✓ Versioned rule packs authored and edited in the admin UI across financial, insurance, residency, clinical, and enrollment-history categories; embed + rerank
MDM lookup for prior enrollments & case history
Analyst re-keys from CRM, siloed member records
✓ Pluggable connector, per-tenant config; history slots feed the reason stage; snapshot hash on the ledger
Structured verdict (approve / deny / missing_info)
Rules engine output, if wired
✓ Per case, auditable, cited
Onboard a new program as data, not code
Development project
✓ Programs table + rules pack + slot-alias fanout
Byte-identical reply package (per-reply version_hash)
Doc-gen + manual template QA, single letter
✓ Ordered bundle (decision letter + guidelines + pre-populated forms), content-addressed
Structured JSON verdict for downstream ops
ETL to a warehouse
✓ First-class output: call center, CRM, case-mgmt
Decision ledger tying case → rules → verdict → letter
Rows across disparate systems
✓ Every case, per tenant
One-click rollback with no drift
Change-management ticket
✓ Repoint version, no re-decision
Row-level multi-tenancy, CI-audited
Often per-tenant deployments
✓ Enforced in pre-commit
MCP endpoint for agent callers
n/a
✓ Agents submit cases and drive the reviewer workflow: list pending, fetch reply, approve, reject
No LLM in the reply path
N/A (no LLM anywhere)
✓ Enforced by boundary test
Connected validation APIs (address, eBV, income)
Point-to-point vendors, manual re-key from portals
◷ Roadmap: pluggable connectors, clean data to LLM + downstream
Rules authoring UI for business analysts
Engineer edits config, or vendor SOW
◷ Roadmap: AI-assisted design-time authoring
Roadmap items. Rows marked ◷ aren't shipped in this hackathon submission. The pipeline architecture and programs-as-data model leave clean seams for them, and they'd be built next in an actual product. The core loop (intake → extract → retrieve → reason → merge → deliver → audit → rollback) works today.
Architecture note. In production, template authoring and rendering live in a separate product (Quire) called from the pipeline over an API. Templates are a governed asset owned by comms and legal, not by the decision engine. For this hackathon submission we consolidated both into a single deployable so reviewers can see the full loop without spinning up two services. The seam is preserved: the merge step is a thin adapter that can be swapped for an HTTP call to Quire without touching the verdict path.
Who this is for

Healthcare. Banking. Any workflow where the letter that leaves the building is the audit artifact.

If a compliance officer has to defend how a document came out the door (to a payer, an auditor, a regulator, or a patient), the reply path can't include an LLM. Verdikt is built for buyers who already knew that and couldn't find a vendor who agreed.

Healthcare
Patient assistance, prior auth, enrollment, denial letters
Rules a human authored. Cases an AI read. A ledger that maps both to a decision.
Banking
Disclosures, KYC packets, custodial notices
Versioned wording. Reproducible bytes. Auditable per tenant.
Agent teams
Trustworthy output for LLM workflows
Your agent hands off the case. Verdikt runs the pipeline and produces the reply.
Platform teams
One code path. Three transports.
REST, MCP, admin UI. Same domain layer, same guarantees.
Questions a compliance officer actually asks

Straight answers.

Is a model called at reply time?+

No. The reply path is a deterministic template merge. No model, ever. Given the same frozen template and the same verdict, the output bytes are identical, forever. The boundary is enforced by a build-failing test, not a comment.

Where does the AI actually run?+

Three stages, all in front of the reply: extract (vision reads the inbound case into structured intake slots), retrieve (rules matched by embedding + rerank against a versioned pack), and reason (structured verdict over the retrieved rules). Every stage's output is a structured artifact a reviewer can inspect.

How do I onboard a new program?+

As data, not code. A row in the programs table carries the extraction schema, the rules pack, and the reply template. The OncoBridge cameo proves it: same code, opposite verdict, no new deployment.

Can an agent bypass the freeze step?+

No. Replies require a frozen template and a versioned rules pack. An agent can hand off a case over MCP; it can't publish a template or edit a rule. Publish and freeze are admin-scoped.

How is multi-tenancy enforced?+

Row-level tenant_id on every business table, API-key auth per tenant, subject-tag routing on inbound email, and a CI-enforced tenant-scope audit script that fails the build on any query that could cross a tenant boundary.

What does rollback actually do?+

Repoints the "current" version to a prior frozen template. Nothing is re-decided, no drift is introduced, and prior version_hash values remain valid for reproducibility.

Ready when your auditor is

Bring the AI to the case.
Keep it out of the reply.

Watch the 3-min demo Sign in
No model in the reply path Rules human-authored Per-tenant MCP-native