Inspiration

A midwife already writes each visit on a paper fiche de surveillance de la grossesse et du post-partum. Once it is on paper, the next visit cannot see it. She can photograph the page from the phone she already uses.

What it does

She sends one page on WhatsApp. DayOne stores the photo, reads the clinical lines, and asks her to confirm, correct, or attach the visit to a dossier. Her name, her spouse, her CIN, her phone number, and her address are dropped. If the read fails, the photo stays in Postgres and is tried again a minute later.

How we built it

The record is the fields on the fiche, each with a status. Claude receives the photo plus the line, the column, and the words that belong there, including RAS and NF. The code checks the guess. A date has to parse. A count has to be digits, RAS, or NF. Visible ink and a value that fits the column become KNOWN. The API only stores the photo. The worker does the read.

Challenges we ran into

A blood pressure in the second visit column has to stay in that column. OCR returns characters in the order it saw them, and there is no labeled training set for this form. WhatsApp will not take the photo while the phone has no network. After the photo is stored, a failed read leaves it in the queue. Meta also needs a public URL. A live read needs Anthropic credits.

Accomplishments that we're proud of

Two demo dossiers share the fiche code CM-1001: DOS-1A and DOS-1B. "Je ne sais pas" creates nothing. "Aucune créer" opens a new profile. A second photo of a stored page asks her to replace it or keep it. The tests run with a stand-in reader and never call Meta or Anthropic.

What we learned

The readable part of a bad scrawl is knowing the cell. The TA row is a blood pressure, so 11/7 is a reading. RAS means nothing to report. NF means not done. The model returns the text and whether it sees ink. The status is assigned afterward, in code.

What's next for DayOne

Delivery, postpartum, labs, temperature, and the newborn are still on paper. The field has no confidence score. SYNC_FAILED is a legal state and the current code never enters it. A live read sends the image to Anthropic, so it stays on the synthetic pages.

Built With

Share this project:

Updates

Submission history