Inspiration

In India, health insurance claims are often cut or sent back for small, avoidable reasons: a bill outside the covered dates, a room above the limit, a missing document, or an illness that wasn't declared. Families usually find out only after the insurer decides. We wanted a tool that checks the claim against your own policy before you submit it.

What it does

Upload the policy and the claim documents (claim form, bills, discharge summary, prescriptions, lab and scan reports, ambulance bill, pre-authorisation form). ClaimCheck shows, in plain language:

  • The expected payout, and exactly where each rupee is deducted, with the policy quote and page
  • Bills outside the pre- and post-hospitalisation windows, room rent and ambulance limits, and the remaining sum insured
  • Mistakes across documents: patient name, policy number, dates, bill totals, claimed vs billed, duplicate charges
  • Illnesses in the medical records that weren't declared, and unclear policy wording
  • A downloadable report with every check and the model log

It handles reimbursement claims and cashless pre-approval requests.

How we built it

  • NVIDIA Nemotron 3 Super (120B-A12B) on Nebius Token Factory reads the policy PDF into 11 types of structured rules, each with a verbatim quote and page number, and flags ambiguous clauses.
  • NVIDIA Nemotron 3 Nano (30B-A3B) on Token Factory reads every claim document and extracts dates, amounts, bill lines, diagnoses and declared conditions.
  • A citation check keeps a rule or fact only if its quote is found word for word on the cited PDF page.
  • A deterministic rule engine in Python (Decimal arithmetic) calculates every amount. The model never does the maths.
  • PyMuPDF and Tesseract OCR read digital and scanned PDFs; Streamlit powers the six-step dashboard, deployed on Streamlit Community Cloud.
  • 270 automated tests, plus 9 synthetic demo cases with expected answers.

Challenges we ran into

  • Reasoning tokens: Nemotron's reasoning counts against max_tokens, so some early replies came back empty. We added a retry with a larger budget, and turned reasoning off for Nano's extraction step, which made a live check about a minute.
  • Malformed JSON: Nano occasionally dropped a comma, so we added a JSON repair step and a deterministic retry.
  • Trusting AI with money: we kept the AI to reading only. Every number is computed by code, and every claim is tied to a quote you can check on the page.
  • OCR noise: "Iyer" read as "lyer" made name checks fail, so we built OCR-tolerant name matching.

Accomplishments that we're proud of

  • One full live check takes about a minute: policy reading 28 s and document reading 33 s, for roughly US$0.02.
  • After prompt tuning, Nemotron got 17 of 18 rule parameters right, and it found a genuinely unclear clause in our test policy.

What we learned

Split work by model size: a large reasoning model for hard, one-time reading, and a small fast model for the high-volume step. Grounding every AI answer in a verifiable quote is what makes AI output usable where money is involved.

What's next

Hindi and regional-language documents, more policy wordings, and a version for hospital insurance desks that handle many claims a day.

Built With

  • altair
  • nebius-token-factory
  • nvidia-nemotron-3-nano
  • nvidia-nemotron-3-super
  • openai
  • pydantic
  • pymupdf
  • python
  • reportlab
  • streamlit
  • streamlit-community-cloud
  • tesseract
Share this project:

Updates

Submission history