Team Bogosort β UM Hackathon 2026 Final Round
Access the full platform at: https://reclaimai.dev
- Employee Portal: Submit expense claims, track approvals, and manage reimbursements
- HR Portal: Review policies, triage claims, and make final decisions
All final round submission materials are centralized in:
π Google Drive β Reclaim Final Round Submission
Includes:
- π Pitch Deck β Product overview, market positioning, team vision
- π Business Proposal β Market analysis, financial projections, go-to-market strategy
- π Deployment Plan β Infrastructure setup, scaling strategy, DevOps procedures
- π§ͺ Quality Assurance Report β Testing strategy, edge cases, performance benchmarks
| Resource | Link |
|---|---|
| π₯ Demo & Pitch Video Pre-eliminary Round | Watch on YouTube |
| π Live Platform | reclaimai.dev |
| π All Submission Docs | Google Drive Folder |
| π GitHub Repository | zsh-sage/reclaim |
Enterprise expense reimbursement is broken. The industry standard is a 5β10 business day manual review cycle in which HR staff open receipts one by one, cross-reference a policy PDF on a shared drive, calculate any deductions or ineligible items, and draft a response β often days later. At scale, this creates a structural bottleneck: claim volume scales linearly with headcount, but the review process stays unchanged. HR teams are buried in low-complexity compliance checks, employees wait weeks for routine reimbursements, and no auditable decision trail is produced.
Reclaim is an AI-native expense reimbursement platform that places an intelligent compliance agent between receipt upload and HR review. It acts as a digital compliance officer β reading receipts, interpreting active HR policy, detecting fraud signals, and delivering a structured, deterministic recommendation before a human ever opens a claim.
The system is built around the Intelligent Automation + Human Oversight model: the AI pre-classifies the entire claim volume before HR opens a single case using a dual-condition auto-approval engine:
- AI Confidence Threshold β Claims with >70% confidence pass the first gate
- Policy Amount Constraint β Claims below the HR-defined auto-approval limit (e.g., RM100) pass the second gate
When both conditions are met, claims are automatically approved without HR review, eliminating processing delays for routine, low-risk expenses. All other claims β edge cases, violations, fraud signals, or high-confidence rejections β are isolated for mandatory HR attention. In practice, this means HR spends zero time re-verifying a clean RM50 travel claim and full attention on the receipt that was manually inflated by 10Γ.
Reclaim is not a black box. Every judgment is explainable β every policy rule applied, every deduction calculated, and every AI-extracted value verified against the original document. The system is designed to augment HR judgment, not replace it. While low-risk claims are auto-approved, HR retains full visibility, can override any decision, and maintains final authority over the reimbursement process.
Grounded in a real-world case study of a multinational insurance company in Indonesia, Reclaim was architected against actual reimbursement policy documents, expense categories, rank-based caps, and Business Travel Settlement forms β not synthetic requirements.
-
πΈ Multi-Modal OCR Submission Employees upload up to 10 receipt files (JPEG, PNG, PDF) per submission. Image receipts are routed to
qwen3.5-flash-02-23(via OpenRouter) using multimodal base64 prompting. PDF receipts are converted to markdown via PyMuPDF4LLM and routed togemini-3.1-flash-lite-previewin JSON mode. Both routes extract the same structured payload: merchant name, date, amount, currency, category, items summary, confidence score, and anomaly flags. Up to 4 receipts are processed in parallel viaThreadPoolExecutor, keeping processing time proportional to the slowest individual receipt rather than the sum. -
π Resilient LLM Architecture with Live Fallback GLM-5.1 (ILMU API) is the primary text engine. If GLM fails or returns an empty response on any call, the system transparently retries that call using
google/gemini-3.1-flash-lite-previewvia OpenRouter β no request is dropped. When the fallback is triggered, a system notification is pushed to all authenticated users for 5 minutes: "AI model degraded β using Gemini backup model." All three agent workflows (Policy, Document, Compliance) work seamlessly on either engine. -
π§ Living Policy Intelligence (Policy Studio) HR uploads company policy PDFs via the Policy Studio. The Policy Agent runs a 5-node LangGraph pipeline:
process_pdfs β extract_categories_and_summary β extract_conditions β save_to_db β embed_and_save_sections. Gemini is called twice β once to extract reimbursable categories and a 150-word overview summary, and once to extract per-category mandatory conditions as structured JSON. A fifth node batch-embeds all policy text chunks viatext-embedding-3-smalland writes them aspolicy_sectionsrows with 1536-dim pgvector embeddings, enabling RAG-based policy lookup by the Compliance Agent at evaluation time. -
π¨ The Fraud Trap β Immutable Human Edit Detection After OCR, employees review extracted data in a side-by-side verification UI: the left panel is an editable AI-pre-filled form; the right panel is the original document. If an employee modifies any AI-extracted field, the system fires silently β setting
human_edited = True, recording the original AI value vs. the employee-submitted value in achange_summaryJSONB field, and assigning a risk severity: HIGH (amount multiplied significantly), MEDIUM (amount increased), LOW (minor field edits), or NONE. This fraud signal is permanent, immutable, and surfaced to HR as a prominent audit trail entry before they open the claim. -
βοΈ Compliance Agent β Deterministic AI Judgment Upon submission, the Compliance Agent runs a 5-node LangGraph pipeline:
load_context β analyze_receipts β aggregate_totals β final_judgment β save_reimbursement. Per-receipt ReAct agents run in parallel (up to 4 concurrent workers, hard-capped at 5 tool calls each), evaluating category eligibility, late submission, rank-based amount caps, and mandatory conditions against the active policy. Anaggregate_totalsnode (pure Python, no LLM) calculates financial totals. A final ReAct agent synthesizes the overall verdict: APPROVE, PARTIAL_APPROVE, REJECT, or MANUAL REVIEW β with a confidence score (0.0β1.0) and a structured 2β3 sentence rationale. Any unrecoverable pipeline failure defaults toMANUAL REVIEW, ensuring no claim is ever silently dropped. -
π― Efficiency by Exception β Triage Dashboard The HR Portal triage dashboard organizes all submitted claims into three buckets: "Auto-Approved" (AI confidence >0.7 AND claim amount < policy auto-approval threshold β automatically approved without HR review), "Passed AI Review" (APPROVE recommendation with high confidence, no HIGH-risk fraud edits, still awaiting HR confirmation), and "Requires Attention" (REJECT, PARTIAL_APPROVE, MANUAL REVIEW, or HIGH-risk fraud signals). Every flagged claim surfaces the specific policy clause that was violated, the exact amounts involved, the human-edit deviation detail, and the AI confidence score β in a single evidence panel. HR reviews, exercises judgment, and issues the final decision for non-auto-approved claims: Force Full Approval, Approve Adjusted Amount, or Confirm Rejection.
-
π€ Dual-Condition Auto-Approval Engine When both conditions are met, the Compliance Agent automatically approves or rejects claims without requiring HR review:
- AI Confidence Threshold β The AI's compliance judgment confidence score must exceed 0.7 (70%)
- Policy Auto-Approval Constraint β The total reimbursement amount must be below a threshold defined in the active HR policy (e.g., RM100)
Claims meeting these criteria bypass HR triage and automatically transition to
APPROVEDorREJECTEDstatus. This enables fast-track processing of low-risk, policy-compliant claims. Future enhancement: autonomous direct payout to employee bank accounts for approved auto-approval claims. HR retains full visibility and can override any auto-approval decision.
-
π± Progressive Web App (PWA) with Push Notifications Reclaim is a fully capable PWA, installable on desktop and mobile devices. Employees and HR staff receive real-time push notifications for claim updates, policy changes, and payout confirmations. Push notifications work across iOS, Android, and desktop browsers (with Safari support on iOS via manifest). Safe-area insets are applied on notched devices (iPhone X+, modern Android phones) for immersive, edge-to-edge UI.
-
π² Mobile-First Responsive Design The entire Employee and HR Portal is optimized for mobile devices. Navigation is touch-friendly, form inputs are sized for thumb interaction, and the UI adapts seamlessly from small phones (320px) to tablets and desktops. PWA fullscreen mode hides browser chrome for an app-like experience.
-
β¨ Polished UI/UX with Animations Landing page features accessibility-first design with smooth Framer Motion animations, deep-link demo login flows, and tight, information-dense sections. Employee and HR portals use a clean, modern design system with intuitive navigation.
| Technology | Version | Role |
|---|---|---|
| Next.js | 16.2.4 |
React framework, App Router, Server Actions, SSR |
| React | 19.2.4 |
UI component model |
| Tailwind CSS | 4 |
Utility-first styling, mobile-first responsive layout |
| React Hook Form | 7.72.1 |
Form state management |
| Zod | 4.3.6 |
Schema-level form validation |
| TypeScript | 5 |
End-to-end type safety |
| Lucide React | 1.8.0 |
Icon library |
| Framer Motion | latest |
Smooth animations and transitions |
PWA & Notifications:
- Web Push API β Real-time push notifications across all browsers
- Service Worker β Background sync, offline support, push event handling
- Manifest.json β Installable on mobile and desktop
| Technology | Version | Role |
|---|---|---|
| Python FastAPI | 0.129.1 |
Async REST API, auto-generated OpenAPI docs at /docs |
| LangGraph | 1.1.5 |
Stateful agent graph orchestration (Policy & Compliance agents) |
| LangChain | 1.2.15 |
LLM abstraction layer, ChatOpenAI-compatible client |
| LangSmith | 0.1.99 |
LLM observability and distributed tracing (project: um_hackathon) |
| PyMuPDF4LLM | 0.27.2.2 |
PDF-to-markdown conversion for document ingestion |
| Pillow | 12.2.0 |
Image preprocessing (resize, compression) before vision LLM calls |
| xhtml2pdf + Jinja2 | 0.2.16 |
Settlement form PDF rendering from HTML template |
| python-jose | 3.3.0 |
JWT authentication |
| passlib | 1.7.4 |
Password hashing |
| Uvicorn | 0.30.1 |
ASGI production server |
| UV | latest |
Python dependency and virtual environment management |
LangGraph Agentic Pipelines:
Policy Agent (5 nodes):
process_pdfs β extract_categories_and_summary β extract_conditions
β save_to_db β embed_and_save_sections
Document Agent (parallel workers):
[Image] β qwen3.5-flash-02-23 (OpenRouter, multimodal)
[PDF] β PyMuPDF4LLM β Gemini 3.1 Flash Lite (OpenRouter, JSON mode)
Up to 4 concurrent ThreadPoolExecutor workers
Compliance Agent (5 nodes):
load_context β analyze_receipts (parallel ReAct, β€4 workers, β€5 tool calls each)
β aggregate_totals (pure Python) β final_judgment (ReAct, β€3 tool calls)
β save_reimbursement
| Technology | Version | Role |
|---|---|---|
| PostgreSQL | 16 |
Primary relational database (containerized via Docker) |
| SQLModel ORM | 0.0.22 |
Type-safe models combining SQLAlchemy 2.0 + Pydantic 2 |
| pgvector | 0.3.6 |
1536-dim vector storage on policy_sections β cosine-similarity RAG queries by Compliance Agent |
| Alembic | 1.13.1 |
Schema migrations with automatic column conflict prevention |
Schema (11 tables, 3NF): employees Β· policies Β· policy_sections Β· travel_settlements Β· reimbursements Β· supporting_documents Β· push_subscriptions Β· notifications Β· and more.
| Model | Provider | Route | Role |
|---|---|---|---|
ilmu-glm-5.1 |
ILMU API | Primary text | Policy extraction, PDF receipt OCR (JSON mode), per-receipt & final compliance ReAct agents |
google/gemini-3.1-flash-lite-preview |
OpenRouter | Text fallback | Automatic per-call fallback when GLM fails or returns empty. Triggers a 5-minute push notification to all users. |
qwen/qwen3.5-flash-02-23 |
OpenRouter | Vision | Image receipt OCR (JPEG/PNG) β multimodal base64 prompting |
text-embedding-3-small |
OpenRouter | Embedding | Policy section chunk embeddings (1536-dim, pgvector, batch at policy upload) + RAG query embeddings at evaluation time |
| Technology | Role |
|---|---|
| Docker Compose | Containerized PostgreSQL (pgvector) + FastAPI backend + Next.js frontend with persistent volumes and .env injection |
| LangSmith | Per-call LLM tracing, token counts, node-level debugging β project: um_hackathon |
| Web Push API | Real-time notifications to all authenticated clients |
Production Deployment (reclaimai.dev):
- Docker Compose orchestration on cloud VM
- PostgreSQL 16 with pgvector
- Next.js frontend with static/dynamic rendering
- FastAPI backend with 4+ uvicorn workers
- HTTPS/SSL via reverse proxy
- Database backups and replication
- LangSmith tracing for all LLM calls
- Python 3.12+
- Node.js 20+
- UV (Python package manager)
- Docker & Docker Compose
git clone https://github.com/zsh-sage/reclaim.git
cd reclaimCopy the root .env.example file:
cp .env.example .env# Database
POSTGRES_USER=admin
POSTGRES_PASSWORD=password
POSTGRES_DB=smart_reimburse
DATABASE_URL=postgresql://admin:password@localhost:5432/smart_reimburse
# Auth
SECRET_KEY=your_secret_key_here
# CORS
FRONTEND_URLS="https://reclaimai.dev,http://localhost:3000"
# Primary text LLM (GLM-5.1 via ILMU)
LLM_API_KEY=your_ilmu_api_key
LLM_BASE_URL=https://api.ilmu.ai/v1
CHAT_MODEL=ilmu-glm-5.1
# Vision + embedding + Gemini fallback (OpenRouter)
OPENROUTER_API_KEY=your_openrouter_key
OPENROUTER_BASE_URL=https://openrouter.ai/api/v1
VISION_MODEL=qwen/qwen3.5-flash-02-23
EMBEDDING_MODEL=openai/text-embedding-3-small
# Observability (optional β tracing disabled if unset)
LANGCHAIN_TRACING_V2=true
LANGCHAIN_ENDPOINT=https://api.smith.langchain.com
LANGCHAIN_API_KEY=your_langsmith_api_key
LANGCHAIN_PROJECT=um_hackathon
# Frontend + Backend (Docker Compose)
NODE_ENV=production
NEXT_PUBLIC_API_URL=https://reclaimai.dev
INTERNAL_API_URL=http://backend:8000Both the frontend and backend are run via Docker Compose for maximum stability and to ensure a consistent environment.
# Build and start the database, backend API, and frontend client
docker compose up --build -dNote: Resilience is enforced per-call via the
_GLMWithGeminiFallbackwrapper: if GLM returns an error or an empty body, the same request is retried transparently on Gemini and all authenticated users receive a temporary push notification.
The services will be available at:
- Frontend App:
http://localhost:3000 - Backend API (auto-generated docs):
http://localhost:8000/docs - Production (live):
https://reclaimai.dev
Reclaim operates as a two-portal system with JWT-based, role-isolated access control.
-
Submit a Claim β Select an expense category (populated from the active HR policy), upload up to 10 receipt files (JPEG, PNG, or PDF). The Document Agent processes all files in parallel, extracting structured data within seconds.
-
Verify Extraction (The Fraud Trap) β Review the AI-extracted fields in the side-by-side verification UI. Confirm or correct the data. Any modifications to AI-extracted amounts are silently logged as fraud signals and risk-scored before the claim enters the compliance pipeline.
-
Track Status β Monitor claim status (
PENDING REVIEW,APPROVED,PARTIALLY APPROVED,REJECTED) with per-receipt AI verdicts and the final HR decision visible from the claims dashboard. -
Receive Notifications β Get push notifications when your claim is reviewed, approved, or decision is made.
-
Policy Studio β Upload the company reimbursement policy PDF. The Policy Agent extracts all categories, mandatory conditions, amount caps, and the auto-approval threshold into structured data. Review the AI-generated summary and conditions checklist β confirm accuracy before activating. The activated policy becomes the enforcement baseline for all subsequent claims, including the auto-approval constraint amount (e.g., RM100) used by the Compliance Agent to auto-process low-risk claims.
-
Triage Dashboard β Review the pre-bucketed claim queue. "Passed AI Review" claims are ready for fast-track approval. "Requires Attention" claims surface the full evidence panel: AI reasoning, specific policy clause violated, human-edit deviation detail, confidence score, and financial summary.
-
Decision Engine β Issue the final decision per claim: Force Full Approval, Approve Adjusted Amount (edit per-receipt amounts before finalizing), or Confirm Rejection. Add an HR note to communicate the decision rationale to the employee. No claim is approved or rejected without this explicit HR action.
-
Push Notifications β Receive alerts on new claim submissions, policy updates, and system events.
Built for UM Hackathon 2026 Final Round by Team Bogosort.
| Name | Role |
|---|---|
| Filbert Ng | Backend architecture; all three LangGraph agent workflows (Policy, Document, Compliance); LLM integration (ILMU GLM-5.1, OpenRouter); FastAPI API layer; LangSmith observability; Docker & deployment |
| Chingiz Iskakov | Database design & schema (SQLModel, Alembic migrations); backend endpoint implementation; frontendβbackend API integration; PostgreSQL Docker setup; compliance agent deduction calculation |
| Darrell Benedict Setiawan | Frontend development (Employee & HR portals, responsive UI/UX); PWA implementation & push notifications; product documentation (PRD, SAD, QATD, Business Proposal, Deployment Plan); Pitch Deck; product testing & QA |
| Michael | Frontend development; UI/UX design & refinement; PWA mobile optimization; product documentation & QA |
| Christian Rafael Santoso | Frontend development; UI/UX design & refinement; landing page animations; product documentation & QA |
π UM Hackathon 2026 Final Round
Built with intent. Deployed to production. Ready for scale.
π Visit reclaimai.dev Β· π Submission Documents Β· π GitHub