QueueStorm Investigator is an AI/API support copilot for digital finance. It reads a customer complaint and their recent transactions, decides what actually happened, routes the case to the right team, and drafts a safe reply — never asking for a PIN/OTP, never promising a refund it can't authorize.
Two endpoints, called directly by the judge harness. The service reconciles the complaint against
the evidence and says so explicitly via relevant_transaction_id and evidence_verdict.
When the evidence is unclear it returns insufficient_data — it never guesses.
Returns exactly {"status":"ok"}. Proves readiness before hidden tests run.
One ticket in → one structured JSON verdict out: classify, match the transaction, route, and reply. Responds in well under the 30 s limit.
Every reply passes a deterministic safety guard — no credential requests, no unauthorized refund promises, no third-party redirects.
Every graded decision is made by deterministic rules — fast, reproducible, and immune to prompt injection. An optional LLM only polishes wording, and its output is re-checked by the safety guard. The default configuration uses no model and no secrets, so it runs anywhere.
Exact 400 / 422 / 500 codes; null & malformed entries dropped, never a crash.
→Case type from evidence-rule cues (English · Bangla · Banglish).
→By amount + type hint + recipient → relevant_transaction_id.
consistent · inconsistent · insufficient_data — never guess on ambiguity.
→severity · department · human_review_required.
→Template (or LLM) → safety guard → EN/BN customer reply.
Internet · HTTPS (Caddy + Let's Encrypt)
│
▼
┌────────────── QueueStorm.Api ──────────────┐
│ controllers · status codes · this UI page │
└───────────────────────┬───────────────────────┘
│ (DI)
┌────────────── QueueStorm.Core ─────────────┐
│ InvestigatorService · SafetyGuard │
│ models · enums · repository interfaces │
└───────────────────────┬───────────────────────┘
│
┌──────── QueueStorm.Infrastructure ─────────┐
│ CaseRuleRepository · ReplyTemplateRepository │
│ TicketRepository · LLM providers (pluggable) │
└───────────────────────────────────────────────┘
Clean layering · repository pattern · in-memory store
inconsistent.relevant_transaction_id: null + ask, don't dispute.critical/fraud_risk; disputes, duplicates, high-value → human review.No database, no secrets by default. The LLM layer is config-only and falls back to deterministic templates.
One stateless container behind a shared Caddy; auto-HTTPS. Reproducible via docker build / docker run.
Pick a sample case (or edit the JSON) and hit Analyze. Calls go to the live service.