Inspiration

We had an aunt that had the hospital mess up the medication meant for her with one she was allergic to, if the data between her primary hospital and the hospital she went to was shared and easily understandable, this mistake would not have happened.

How we built it

Backend: Python and FastAPI, reading made-up patient records in FHIR, the format hospitals use. Frontend: React, D3 for each patient's constellation, and three.js for a 3D view of every patient.

Matching: each field (name, birth date, phone, ZIP and so on) earns points when it agrees and loses points when it doesn't. Every pair starts at −10.

Above +4.2, the records are linked. Between 0 and +4.2, a clinician decides. Below 0, they're different people. Two different women named Maria Gonzalez share a name but not a birth date, phone or ZIP, so they score −6.9 and stay apart.

Scale: we only compare records that share something, like a birth date. For 100,000 records that's 7,283× fewer comparisons, and it finishes in 86 seconds.

Privacy: sign-in, roles, a tamper-evident log of who did what, and an option to match records on encrypted fingerprints instead of names.

Challenges we ran into

  • Two people, one name. Matching on names alone would merge the two Marias and put one woman's allergy in the other's chart.
  • Consistency. Our first scoring gave slightly different points for similar typos, so we switched to a fixed points table. Now the same evidence always gets the same score.
  • Safety vs. catching everything. Looser rules found a few more matches but also made more wrong ones. We chose to send uncertain cases to a person instead.
  • HIPAA. We misread one rule at first and had to correct our claims. We learned to cite exactly what the law requires.

What we learned

  • How hospitals match patient records, and why it's still hard.
  • How to turn evidence into a score you can explain line by line.
  • What HIPAA actually requires.
  • In healthcare, saying "I'm not sure" is safer than guessing.

What's next

Real drug databases, connecting to real hospital networks, and fixing a case we found: a father and son with the same name and phone number.

Share this project:

Updates

Submission history