Inspiration

India has roughly 12 million gig and platform workers, and the workforce is projected to reach 23.5 million by 2029–30. Their pay is calculated by opaque algorithms. A payout statement arrives full of order IDs, incentive lines, and cryptic deduction codes. When the number is lower than expected, the worker has no practical way to reconstruct the math, find the error, or appeal. Support chat is a black box; the platform controls the data and the process.

Saboot started from a simple question: what if a worker could upload the statement and get a claim-by-claim, policy-cited case for the money they are owed — with evidence a human can check?

What it does

Saboot ingests a payout statement (CSV bundle or line-oriented text PDF), reconciles expected pay against recorded earnings, and detects five contestable claim types:

  • duplicate deduction
  • deduction above the policy cap
  • late-delivery penalty caused by restaurant delay
  • incentive shortfall
  • missing earning for a delivered order

Each claim carries a rupee amount, a source quote, order and deduction IDs, timestamps, arithmetic, a policy citation with source URL and effective dates, a confidence score, and a ready / needs_review state. A deterministic verifier rejects unsupported amounts, unknown IDs, fabricated timestamps, inapplicable citations, legal advice, outcome promises, and real platform brand names.

The local web UI shows the audit report, a review-priority score, claim cards, evidence, and citations. A human reviews the evidence and approves selected claims. Nothing is auto-sent. Saboot then drafts an English request for review from the approved claims only, verifies it, and exports an appeal + evidence PDF.

How we built it

The core is deliberately deterministic: Python 3.12 standard library, a canonical schema, CSV/text-PDF ingestion, a policy clause book, a reconciliation engine, five detectors, a per-deduction allocation ledger, an evidence builder, and a verifier. The local UI is one HTML page, one stylesheet, and one JavaScript file served by a Python http.server. The appeal is template-first; an optional LLM provider sits behind saboot.llm.DraftProvider and is verifier-gated. The PDF writer is dependency-free. The E2E proof uses Playwright with Chrome.

Challenges we ran into

  • Making the money math auditable instead of asking an LLM to guess.
  • Preventing double-counting when one deduction is partly duplicate, partly over-cap, and partly protected by a restaurant-delay clause. The allocation ledger solves this.
  • Designing a verifier strict enough to reject unsupported claims but useful enough to keep.
  • Keeping the app runtime reliable with zero budget: template appeal, local server, no paid API calls.
  • Building a polished UI without a frontend framework or a build step.
  • PDF export with Indian currency glyphs; the exporter normalizes to PDF-safe text.

Accomplishments that we're proud of

  • 57 Python tests, all passing.
  • 20 hand-authored golden fixtures: 17/17 expected claims matched, 0 false positives, 0 false negatives, verifier 20/20.
  • Playwright E2E: upload PDF → ₹75 duplicate claim → evidence quote → QD-DED-001 → approve → appeal → Verifier PASS → PDF.
  • Mobile 390×844 check: upload and report, zero horizontal overflow.
  • A 2:31 narrated demo with burned-in captions. The product runs locally; the demo voiceover was generated with ElevenLabs.

What we learned

Trust is the product. A claim is only useful if a worker — or a judge — can inspect the order, the deduction, the timestamp, the arithmetic, and the exact policy clause. The deterministic core had to come before any language layer. The optional LLM can make the writing better, but it must never decide the claim.

What's next for Saboot

Hindi and regional-language templates; OCR adapters for scanned statements; real platform policy packs; a larger hand-audited benchmark; worker-organization partnerships; and a deployed version with explicit consent and data retention controls. The current build is intentionally local-only.

Responsible AI No auto-send. Human approval is required. Every claim is evidence-bound and cites a policy clause. Confidence and needs_review are visible. The app runs locally and does not call an external service by default. It does not name real platforms, does not give legal advice, and does not promise an outcome. The demo uses synthetic data and a fictional platform.

Data and limitations QuickDrop is a fictional platform. The policy pack is synthetic and labeled; all statements are synthetic. No real worker data is included. The 20-fixture evaluation is a regression baseline, not a 200-case benchmark. The default demo uses the template appeal path with no API key; the optional Gemini provider is implemented but not exercised in the video. No OCR, Hindi, deployment, or case tracker yet.

Built With

Share this project:

Updates

Submission history