CaSanté: your health history, from every clinic, in one place, with receipts
Inspiration
83% of patients have had to repeat their health history, and 42% spend more than six minutes recounting it at every appointment. Only 8–19% of family physicians say outside records are easy to bring into their system. The patient is the one person who has every document, but as a pile of PDFs and paper. CaSanté comes from carnet de santé, the French health record booklet.
What it does
Upload PDFs or phone photos from any clinic. Each file shows live status as it's read and extracted. See one merged record of medications, allergies, conditions, labs and procedures, with how many documents mention each item. Click any fact to open the page it came from, with the exact line highlighted. When documents disagree, CaSanté doesn't pick a side. It shows a question for your doctor, for example: "City hospital says metformin 500 mg, family clinic says 1000 mg. Ask which is current." Export the record as a FHIR R4 bundle.
How we built it
Next.js on Railway, with Supabase for login and storage, calls a FastAPI service that processes each document in four steps:
- Read the text: PyMuPDF for digital PDFs; OpenCV cleanup plus RapidOCR for photos and scans. Every line gets an id and a position on the page.
- Extract: Gemini Flash returns schema-checked JSON and must cite a line id for every fact. A fact citing a line that doesn't exist is dropped.
- Standardize: medication names go through NLM RxNav, and lab names are matched to LOINC codes.
- Merge: matching items are combined across documents, and conflicts are flagged.
Evaluation
We scored the pipeline against structured data for synthetic patients generated with Synthea. On 23 clean PDFs every field scored F1 1.00, and all 4 planted conflicts were found. The photo set finished only 3 documents because of our free-tier Gemini limit, so we don't draw conclusions from it. Our PDFs come from clean templates, and the README covers what that means.
Challenges
Turning phone photos into text with line positions accurate enough to highlight the source. Free-tier Gemini quotas during the evaluation. Deciding what counts as a conflict without making clinical judgments.
What's next
Share links and QR codes for intake, SNOMED coding, import from real EHRs over SMART on FHIR, and hosting fit for real patient data.
Log in or sign up for Devpost to join the conversation.