Inspiration

It started with my own family's pharmacy bill and one simple question: was this bill right?

It wasn't simple. The prescription said Shelcal-XT; the counter had handed over Shelcal 500, a different product, and nothing on the bill said so. The bill printed the MRP per strip beside a per-tablet price. A hospital bill listed a saline bag at a price that looked wrong, until I found that India's price regulator (NPPA) publishes a second, higher legal ceiling for "special features" packs in a separate notification, and the bag matched it to the paisa. Every one of these checks was possible, but each needed gazette PDFs, a spreadsheet and patience that a family doesn't have at a discharge counter.

Then the news caught up. In October 2026 a Supreme Court bench asked why an IV drip line with an MRP of ₹11 was being sold at many times that. The government told the Court that patients have a "very low bargaining position" and "very limited" knowledge of prices. That sentence is the problem statement.

What it does

Photograph a pharmacy or hospital bill (and, optionally, the prescription). Dawa Buddy reads it, you confirm the numbers, and it checks every line against the NPPA legal ceiling prices, the MRP printed on the bill and Jan Aushadhi generic prices. It also checks the bill against the prescription (missing items, the wrong variant handed over) and whether the lines add up to the total. You get a short list of questions to ask, and a plain-language explanation of the prescription in English, Hindi or Kannada.

It never accuses anyone and gives no medical advice. If something can't be checked, it says so.

How I built it

The principle: models read and explain, rules decide, and the user confirms.

  • NVIDIA Nemotron on Nebius Token Factory: Super VL reads bill and prescription photos, Lightning handles everyday text calls, and Ultra writes the Hindi explanations. One OpenAI-compatible endpoint serves all of them.
  • A deterministic rules engine makes every price verdict and every safety note. A model can never invent an accusation.
  • Tavily finds pack sizes and ingredient evidence on pharmacy sites and NPPA orders. It's shown as evidence, needs two independent sites to agree, and you confirm from the strip.
  • Reading messy bills like a person would: the reader returns every number in a row, and code finds the quantity, price and value that multiply out and sum to the printed total, for example $$\text{qty} \times \text{rate} = \text{amount}, \qquad \sum_i \text{amount}_i - D = \text{total}$$ where D is a discount taken off the whole bill. A rate printed per strip with a quantity in tablets is divided by the pack size.
  • Data: 911 NPPA ceiling formulations, about 227,000 brand names, Jan Aushadhi prices. The parsers refuse to load a file unless it's complete.
  • Python and Streamlit, 304 tests, MIT-licensed.

Challenges

  • Real bills break assumptions. Synthetic tests passed long before real documents did: tax-inclusive columns, two values stacked in one cell, a whole-bill discount, rates per strip but quantities in tablets. Each exposed a bug, and each is now fixed and tested.
  • Fluent nonsense in Kannada. A model produced fluent-looking text, with valid script and no meaning, which no script check can catch. So Kannada AI text is off; instead a fixed, reviewable table covers 176 common ingredients, and anything outside it is never guessed.
  • A false accusation avoided. NPPA fixes prices company by company, so another company's price must never be shown as your brand's limit. It appears as context only.
  • A bug the tests couldn't see. The cloud installs newer pandas, where a missing cell is NaN (truthy), and units silently defaulted wrongly on the hosted app but not in local tests.
  • Keeping it honest. An MRP printed on a bill is the seller's own figure, so "within the MRP" proves only that the bill agrees with itself. The wording says exactly that.

What I learned

  • A model that is right most of the time still needs a gate: user confirmation and a rule underneath turn "usually right" into something safe to act on.
  • Measuring beats guessing. Running each Nemotron model on real tasks decided which one does what, and it's why Kannada has a table.
  • "No price list covers this" is not "fine". Saying what couldn't be checked is as important as the verdict.

What's next

NPPA device ceilings (stents, implants), new limits from the Supreme Court proceedings, a pre-filled complaint draft, more Indian languages after native-speaker review, and a real-user study with pharmacists.

Limits, stated plainly: the Hindi and Kannada text has had second-opinion review by language models only, not a native speaker or a clinician. The evaluation numbers on synthetic bills are stress tests I tuned against, not accuracy figures. Ceiling prices are those in force from 1 April 2026.

Built With

Share this project:

Updates

Submission history