Inspiration
Most health-insurance denials are never appealed, although a large share of appeals succeed. The letters are written for lawyers, the deadline is buried in one sentence, and people either miss the date or appeal without the evidence the insurer asked for.
What it does
- Reads a denial letter (claim, prior authorisation or benefit) and explains the stated reason in plain language, next to the exact sentence from the letter.
- Computes the appeal-by date in code from what the letter states (an explicit date, or N days from the letter date or receipt), and shows the basis.
- Lists the evidence that rebuts the stated reason and the questions to ask the insurer or doctor.
- Drafts an appeal letter from the extracted facts and the person's own words; flags when the letter offers an independent external review.
How we built it
Standard-library Python. An OpenAI-compatible chat client with an origin allowlist (runs on a local open model via Ollama; also Groq, Nebius Token Factory, the Hugging Face router or OpenAI). A strict validator rejects wrong types, unknown fields, bad enums and invalid dates; a quote guard rejects any quoted field not found verbatim in the letter; deadlines are computed in code, never taken from the model. One-page UI, fake model server, 7 offline tests. Real-model results, including weaknesses, are in docs/evaluation.md.
Challenges
Keeping a language model from inventing a deadline or a reason. The answer was to make the model quote rather than summarise, verify every quote against the letter, and do the date arithmetic in code with the basis visible to the person.
Accomplishments
An assistant a person can trust with a letter that matters, because everything it shows can be checked against the letter in seconds, and the appeal stays in the person's own words.
What we learned
Small open models quote accurately; their evidence suggestions are thin, so the checklist is anchored to the stated reason rather than left to the model.
What's next
Insurer-specific appeal forms, upload of PDF letters with OCR, and the same pattern for benefit and visa denials.
Try it hosted
Live demo on Render's free tier: https://appealpal.onrender.com (demo mode: canned model responses for the four sample letters, since the free tier carries no model key; the README explains how to run it locally against a real model to analyze your own letter). First request after idle can take about a minute while the instance wakes.
Built With
- ollama
- openai-api
- pytest
- python
Log in or sign up for Devpost to join the conversation.