Every fall I face the same open-enrollment question. My employer offers the usual PPO and a couple of high-deductible plans that come with a health savings account (HSA). The HSA plans have much lower premiums, and the employer puts money into the account, but the deductible is several thousand dollars. So which one costs less?
The comparison charts in the benefits guide don’t answer that. They compare a “typical” employee who visits the doctor twice and fills a generic prescription. My family isn’t that person, and yours probably isn’t either.
Why I built this
What you actually pay depends on details the charts skip: when in the year your bills land, what your insurer negotiated for each visit, which services get a flat copay and which go toward the deductible, and whether your family hits the out-of-pocket maximum. You already have that information. It’s in your insurer’s claims history and in years of Explanation of Benefits (EOB) statements.
I wanted to use mine, but going through three years of claims by hand was tedious and easy to get wrong. I also didn’t want to upload my family’s medical records to a chatbot to do it for me. So I built a small set of tools that do the work on my own computer, and then an AI assistant “skill” that walks anyone else through the same process.
What it does
You give it your claims history and a description of each plan you can choose. It then:
- Strips out everything personal (names, member IDs, doctors, drug names, exact dates) and keeps only the dollar amounts, the month and a broad category.
- Replays every claim, in order, under each plan’s rules: copays, deductible, coinsurance, family limits and the out-of-pocket maximum.
- Adds the things people often forget: premiums, the money your employer puts in the HSA, and the taxes you save by contributing to it.
- Checks itself by replaying your current plan and comparing the result with what you actually paid. If the two don’t line up, it tells you before showing any recommendation.
The result is an Excel workbook with your net yearly cost under each plan, plus a few “what if” views. These show a light year, a heavy year, the worst case where you hit the out-of-pocket maximum, the point where the cheaper plan would stop being cheaper, month-by-month HSA cash flow, and a five-year projection if you invest the HSA balance. You can change your contribution, tax rate or premiums in the workbook and watch the numbers update.
For my family, the gap between the PPO and the HSA plans came to several thousand dollars a year. The choice between the two HSA plans was closer, and which one came out ahead depended on whether we had a light year or a heavy one. That’s the kind of thing you only see when you run your own numbers.
Your data stays yours
Keeping medical records private was a design goal from the start, so it’s built into every step:
- Everything runs offline on your computer. The tools make no network calls and send nothing anywhere.
- The output files are built from a short list of allowed fields, so your name and your doctor’s name never get written there.
- A leak scan double-checks the finished files against your original records (and against any private words you add, like your street name) before you share anything.
- A guard in the code repository blocks anyone from accidentally committing real medical files.
- If you use the AI assistant, it never opens your claims. It runs the local tools, which only print counts and totals, and it reads you the results.
How to use it
The easiest way is to let an AI coding assistant guide you. Open the project in an assistant that supports agent skills, such as GitHub Copilot in VS Code, and ask something like:
Should I switch to an HSA plan? Walk me through it.
The assistant asks a few questions at a time: who’s on your plan, which plans you can choose, your rough tax bracket. Then it tells you exactly what to download and where to find it. You don’t need to know any of this in advance, or have every file. It works with:
- claim downloads from your insurer’s website (Cigna’s exports work out of the box, and the assistant can convert other insurers’ spreadsheets),
- EOB statements, or claims you type into a simple template,
- nothing at all, in which case it builds an estimate from a short chat about how often your family sees a doctor.
It also handles the usual gaps, like adult children whose claims you can’t see, or a surgery you’re planning next year.
If you’d rather do it yourself, the project README lists the five commands to run.
What the result looks like
Here’s a made-up example. The Rivera family is two parents and two kids. They’re on a PPO and can switch to one of two HSA plans next year. After the assistant gathered their last two years of claims and the plan details, it came back with this:
| Net yearly cost | Current PPO | HSA Plus | HSA Basic |
|---|---|---|---|
| A year like last year | $8,400 | $4,900 | $3,700 |
| A heavier year (like the year before) | $9,300 | $6,500 | $6,900 |
| Worst case (out-of-pocket max reached) | $10,900 | $9,600 | $8,800 |
Net cost = premiums + what you pay for care − the employer’s HSA deposit − tax savings.
And the recommendation, in plain words:
Switch to HSA Basic and contribute through payroll. It would have saved you about $4,700 last year compared with your PPO, and it’s still cheaper than the PPO in a heavy year and in the worst case. HSA Plus only pulls ahead in years when several of you need a lot of care, and even then by about $400.
Before you enroll, check three things:
- Keep about $3,000 in savings for early-year bills. Your HSA builds up with each paycheck, but January is when the deductible hits.
- Make sure your kids’ doctors are in the new plan’s network.
- You can only spend HSA money tax-free on yourself, your spouse and your tax dependents.
How confident is this? Replaying your current PPO matched what you actually paid within 3% for both years, so the model understands your bills well. The one estimate in here is your teenager’s prescriptions, which you couldn’t see online.
A few honest caveats
This is a decision aid, not financial, tax or insurance advice, and every number it produces is an estimate. It assumes your doctors and negotiated prices stay the same on every plan. The automatic PDF reading only understands Cigna’s EOB format today; other insurers work through spreadsheet downloads, manual entry or estimates. Health care is also unpredictable, which is why the workbook shows you the bad years as well as the typical one.
The project is free and open source under the MIT license. You can find it on GitHub at ashtewari/hsa-vs-ppo. If it helps you make your choice this open enrollment, I’d love to hear about it.
