POSTDATED
The insurance rejection letter, three weeks early
Created on 8th August 2026
•
POSTDATED
The insurance rejection letter, three weeks early
What is the problem your project solves?
A family pays the hospital bill, goes home, and three weeks later finds out the insurer will not pay a large part of it. By then nothing can be changed.
The shape of it
Ravi's father has his gallbladder removed at a private hospital in Bengaluru. Four nights. The final bill is ₹2,40,000. The insurance covers up to ₹5,00,000, so Ravi assumes he is fine. He pays, takes his father home, and files the claim.
Three weeks later a message arrives. ₹1,73,000 will not be paid. The insurer will pay ₹67,000.
By then the file is closed, the surgeon is on leave, and the ward records have been archived.
Now split that ₹1,73,000 by why it was refused, because the two halves are completely different problems:
| Amount | Why it was refused | Could it have been saved? |
|---|---|---|
| ₹48,000 | A nicer room than the policy allowed, plus items no insurer ever pays for | No. The room was chosen four days ago. This money was gone before anyone could act. |
| ₹1,25,000 | Two documents were never handed over, and one sentence was never written down | Yes — but only in the forty minutes while the family is still at the counter |
Nobody in that story did anything wrong. The hospital treated the patient. The insurer applied the contract it wrote. Ravi paid his premiums. And ₹1,25,000 evaporated because a piece of paper was thin and nobody mentioned it while it could still be fixed.
Three parties stand at that table, and only one of them has never read the rules — and that one carries all the loss.
Why the timing is the whole problem
Everyone who works on this today works on it after the refusal arrives. Claim consultants, complaint tribunals, appeal services, grievance portals. All of them sit downstream of a door that has already closed. Nobody is standing at the discharge counter during the forty minutes when the document can still be obtained and the doctor is still reachable.
Moving the help to that moment is the entire idea.
Why this is bigger than it looks
The famous version of this problem is the claim rejected outright. Those are comparatively rare, and they are already fought over for years in tribunals.
The common version is the quiet slice shaved off claims that do get paid. It happens on ordinary claims to ordinary families, and almost nobody disputes it, because eighteen months of complaint procedure is not worth ₹1,25,000. It never shows up in a statistic. That is the pool this addresses, and it is invisible precisely because it is never contested.
India has more than 70,000 private hospitals, and a discharge counter in every one of them.
How you are solving it?
What it does
At the discharge counter, you photograph the discharge summary and the bill with your phone. About thirteen seconds later, the refusal letter appears — dated three weeks in the future, itemised, in rupees, written to read like the letter the insurer will actually send.
Tap any red line and it tells you what to physically do about it, in English, Kannada or Hindi, in type large enough to hold the phone up to a ward clerk. There are only ever two kinds of instruction:
- Go and ask for a document. "Ask the nursing station for the ward's day-by-day record."
- Ask the doctor a question. "Ask the treating doctor to write down why admission was necessary, and sign it."
The doctor writes the line in and signs it. You photograph the paperwork again. The letter shrinks, the fixed lines are struck through, and the total falls — in our test case from ₹1,73,000 down to ₹88,000.
You are not being given advice. You are being handed the other side's letter, and then allowed to edit the past until the letter changes.
The lines that cannot be fixed are shown anyway, marked plainly as "this money is gone." That honesty is doing real work — it is the reason anyone believes the lines that can be fixed.
How it is put together
1 — On the phone. Photograph the paperwork. The image is shrunk before it is sent; hospital wifi is no place to upload a 12-megapixel photo.
2 — On the server. Claude looks at the photograph and reports only what it can see: each bill line and its amount, exact quotes from the page, which documents are missing, and which questions the summary never answers. The API key never leaves the server.
3 — Ordinary code. No AI anywhere in this step. Ignore the bill's own TOTAL row, or the claim gets counted twice. Apply the policy: what is cut, by how much, under which sentence of the contract. Separate money already lost from money still recoverable. Then check every medical word against the photograph.
4 — Back on the phone, with forty minutes left. The letter appears. Tap a line, get one instruction, get it signed, re-photograph.
The two decisions that carry everything
The money is calculated by ordinary code, and we say so out loud.
Claude never touches a rupee. Every subtraction, every ratio, every total is a plain function you can read in five minutes, sitting next to the sentence of the insurance contract it implements. If the arithmetic came out of a model, no number on that letter could be defended — not to a family, not to a hospital, not to an insurer. 24 tests cover it.
The system never writes a medical fact. Not a symptom, not a diagnosis, not a reason for treatment.
An earlier version of this idea had the app improve the wording of the medical record — turning "patient advised admission" into "oral treatment failed, intravenous antibiotics required." That is coaching people to inflate medical records for money. It would deserve to be shut down, and one sentence from anyone in the room would have ended it.
So the system does two things and no others: it asks for documents, and it asks the doctor questions. The doctor answers. The doctor signs. Nobody else writes anything.
A single file enforces this mechanically. Every medical word in anything the system produces must appear on the photographed page, or on a list the doctor has personally confirmed. Anything else is refused and turned into a red ASK THE DOCTOR note. It handles "no" correctly: the test page says "No history of fever or jaundice." A naive check would find the word "fever" and cheerfully let the system claim the patient had one. This one reads the negative, refuses, and shows you that exact sentence as the reason. 14 tests cover it.
The refusal is not an error page. It is a thing we demonstrate on purpose.
What was built during the hackathon
All of it. The repository was started at the event, empty. One person, one sitting: camera capture and image shrinking, the Claude call, the policy arithmetic, the letter, the re-photograph loop that makes the total fall, the medical-word guard, the printable test paperwork, 38 tests, and the deploy. No prior code and no previous hackathon.
What we deliberately did not build
The business is selling this to hospital insurance desks, not to families — the desk already pays someone to guess at this by hand and keeps their guesses in a private Word document. That side is described in the pitch and was cut on purpose so the consumer half would work properly in the time available. BUILD-TODAY.md in the repo is the honest cut list.
What we are honest about
- The figures come from one real policy, read by hand: Niva Bupa ReAssure 2.0. It was chosen because its wording lists exactly four charges affected by a room upgrade and then stops — no "and so on" — so every line of a bill sorts cleanly with no guesswork. Two competing policies were read and rejected: one is wider, and one says "etc.", which would mean deciding what "etc." covers — and that decision would secretly be the arithmetic.
- That policy has no room limit at all by default. The limit exists only because the test customer bought an optional add-on. Remove that one line and the ₹48,000 half of the example correctly disappears — there is a test that checks it does.
- We do not claim accuracy. We claim coverage. We hand-read 40 published complaint rulings and counted 24 distinct reasons insurers refuse claims. We can see 4 of them fully, 12 partly, and 8 not at all. The three most common are among the 8 we cannot see, because they need a form signed years before the hospital visit.
- The published rulings run 2004 to 2014. Nothing after about 2016 is available to read.
- We do not know how often it wrongly says a claim is fine. That number is unmeasured, and we say so before anyone asks.
- The letter is watermarked PREDICTED — NOT ISSUED BY NIVA BUPA, across the page and again at the bottom, so it stays honest even in a photograph of it.
- No medical documents are stored. A photographed discharge summary can reveal things a patient never consented to share, about a patient who is often sedated. Nothing is kept after the page is closed.
Try it in one minute
The test case is a fictional patient, so there is nothing sensitive in these files.
- Open https://postdated.vercel.app — on a phone if you have one.
- Save the sample photo: https://postdated.vercel.app/samples/discharge-summary-photo.jpg — a photograph of the printed page, taken at an angle in poor light, which is what the real input looks like.
- Tap Photograph the discharge summary and pick that file.
- Wait about fifteen seconds. You should see ₹2,40,000 claimed, ₹67,000 approved, ₹1,73,000 disallowed across five red lines.
- Tap the ₹85,000 line. Switch to ಕನ್ನಡ. That is the sheet you hold up to a ward clerk.
- Tap Ward handed it over. The total falls to ₹88,000 and that line turns green.
- Scroll to Fabrication guard and tap "Patient had a fever on admission." It refuses, and shows you the sentence on the page that made it refuse.
How Did You Use Claude?
Take Claude out and there is no product left — not a worse one, none.
Where Claude sits
One place, and it is the entry point: app/api/extract/route.ts, running Claude Opus 5 with vision. The photograph of the discharge summary and bill goes in, and Claude reports back only what is on the page:
- every line on the bill, with its amount, exactly as printed;
- exact quotes copied off the page, never paraphrased;
- which supporting documents a claims reviewer will demand and this page does not contain;
- which questions the summary never answers — phrased as things the record fails to establish, so each becomes a question for the doctor rather than a sentence the app writes;
- and the phrases an insurer will later quote back against the family, lifted word for word.
It is asked to be selective, not exhaustive. A discharge summary can be queried twenty ways; a family standing at a counter with forty minutes can act on two or three. So it returns at most three missing documents and at most three unanswered questions, most consequential first.
Everything after that is ordinary code. Claude reads. It never calculates.
Why nothing else could do this job
- A discharge summary is a piece of paper. There is no data feed for it, and there never will be. It is nine-point type, three pages, handwriting in the margins, abbreviations, photographed at an angle under bad light. Reading that is the entry point and there is no alternative to it.
- Insurance policies are forty-page documents written in prose. Different per insurer, different per year. There is no table to look up.
- The core judgement is not a lookup. "Would the person who reviews claims at this company accept this as written?" is not recorded anywhere. No rules engine produces it.
- Sounding like the insurer is the product. A letter that reads like a real refusal letter changes behaviour. A friendly warning does not.
The two limits we deliberately put on Claude
It is not allowed to touch money. Every rupee on the letter comes from a plain function sitting beside the sentence of the insurance contract it implements. If a model produced the numbers, none of them could be defended.
It is not allowed to write a medical fact. Everything it returns is checked word by word against the photograph before anything is shown — including negatives, so "No history of fever" can never become a fever. Anything that fails the check is refused and converted into a question for the treating doctor.
Both limits are load-bearing. They are what make it safe to hand a family a letter that looks like it came from their insurer.
Measured, not hoped for
The live path was run end to end against a photograph of the printed page — rotated, dimmed and softened to approximate a phone shot at an angle under bad light:
letter rendered in 16.9s (12.8s server-side, rest is upload + render)
claimed ₹2,40,000 · approved ₹67,000 · disallowed ₹1,73,000
five lines, all correct
Run at low reasoning effort on purpose — reading a page is not the hard part, and the demo has a latency budget measured in a family's patience at a counter.
If the network or the key fails, the app falls back to a saved example and says so on screen with an amber dot instead of a green one. Seeding is honest; faking is not.
Claude in the building of it
The whole project was built in one sitting with Claude Code: two research passes against original sources (three insurers' policy wordings, and 40 published Insurance Ombudsman rulings hand-read into a taxonomy of 24 refusal grounds), then the code, the 38 tests, the sample paperwork, and the documentation.
What is the deployed URL for this project?
https://postdated.vercel.app
Technologies used