Le problème
Dans les centres de santé ruraux, le suivi de grossesse vit dans des registres papier : rien n'est consultable, agrégeable ni partagé d'une visite à l'autre. Une solution numérique doit fonctionner sans réseau, ne rien changer au travail des sages-femmes, et ne jamais exposer l'identité des
## Ce que fait DayOne La sage-femme continue de remplir son registre. Elle le photographie dans WhatsApp, même hors ligne :
- sur le téléphone : contrôle de la qualité de la photo, reconnaissance de la page, nom, CIN, téléphone et adresse noircis avant tout stockage, chiffrement AES-256 ;
- au retour du réseau : des modèles d'IA locaux (aucune API cloud) lisent les 601 champs du registre, chacun avec un statut (connu, à réviser, illisible, non fourni, non applicable, inconnu) et une confiance calibrée ;
- l'agent dit quand il doute : « Je lis CSy Ernanda, mais je ne suis pas sûre (confiance 11 %). Pourquoi : deux lectures différentes. » Elle confirme, choisit l'autre lecture, corrige ou voit l'image du champ ; les champs sûrs sont confirmés en bloc ;
- liaison patiente : le code du registre est toujours confirmé, puis l'agent propose [Patiente 1] [Aucune, créer] [Je ne sais pas] — jamais de création automatique ; si la même page est rephotographiée, il montre les différences champ par champ ;
- dossier longitudinal de chaque patiente, synchronisation sans doublon, tableau de bord anonymisé pour l'épidémiologie (cellules < 5 masquées).
## Comment c'est construit
- Vision classique sur le téléphone : recalage en deux étapes sur des gabarits (contour de la page, SIFT contraint, ECC, vérification), lecture des cases à cocher et des champs vides directement sur les pixels.
- Lecture : qwen3.5:9b (guidé par le libellé et le format du champ) + glm-ocr comme second lecteur indépendant, via Ollama ; normalisation FR/EN/AR ; règles de cohérence (DPA = DDR + 280 j…) qui signalent sans jamais corriger.
- Confiance : régression logistique sur 11 signaux, seuil choisi par une règle pré-enregistrée.
- Hors ligne d'abord : SQLite chiffré, file d'attente persistante et idempotente, reprise après crash, cycle de vie explicite en 12 états — testé par injection de pannes.
- Agent conversationnel déterministe (aucun LLM dans le dialogue : il ne peut pas halluciner), branché sur la vraie WhatsApp Cloud API.
## Résultats (patientes jamais vues, protocole pré-enregistré)
- 93,4 % des champs manuscrits bien lus avant toute révision (IC 95 % 91,5–95,6) ;
- 1,9 % de valeurs fausses parmi celles acceptées sans question (IC 95 % 1,3–2,6) ;
- cases à cocher : 99,8 % ; 85 tests automatisés.
Nous publions aussi nos limites : l'arabe manuscrit reste le point faible (69 %), et l'objectif de 2 % d'erreurs silencieuses n'est pas démontré statistiquement.
## Difficultés Des photos dégradées d'un tableau répétitif (recalage en deux étapes), des recadrages qui attrapaient la ligne voisine (localisation par l'encre), et la tension entre « conserver l'image d'origine » et « ne jamais stocker d'identifiants » (masquage sur le téléphone, avant chiffrement).
## Et après Un lecteur dédié pour l'écriture arabe et les chiffres arabes orientaux, d'autres modèles de livret (un gabarit + des coordonnées), et un pilote sur de vraies photos de terrain.
Built With
- aes-gcm
- cloudflare
- fastapi
- glm-ocr
- javascript
- ollama
- opencv
- pymupdf
- pytest
- python
- qwen
- scikit-learn
- sqlite
- whatsapp-cloud-api
Log in or sign up for Devpost to join the conversation.