Quotengine

Panoramica
Un motore di preventivi per studi dentistici. Il paziente descrive il trattamento di cui ha bisogno, se vuole con una radiografia panoramica, e riceve un preventivo indicativo.
Stack
TypeScript, Hono, Cloudflare Workers, D1, R2, Claude (visione e tool use), zod, Vitest
Cosa ho realizzato
- Acquisizione multimodale protetta: Claude legge il messaggio del paziente e una panoramica facoltativa, e può rispondere solo tramite uno schema di tool forzato che sceglie voci dal listino dello studio.
- Un motore di prezzi deterministico in TypeScript: listini per studio, regole, modificatori, tasse e ricarichi, tutti validati con zod prima di essere caricati.
- Un'API Hono su Cloudflare Workers con i lead in D1 (migrazioni SQL versionate), le radiografie in uno storage R2 privato e un contratto OpenAPI.
- Privacy dei dati sanitari: il consenso viene registrato con lo SHA-256 del testo esatto accettato, e una radiografia viene salvata solo con un consenso separato, altrimenti è elaborata in memoria.
- 333 test in 44 file eseguiti in CI, più un harness di valutazione su radiografie open access.
- Documentazione che un revisore può seguire: quattro architecture decision record, un threat model, una model card e una checklist privacy per il go-live.
Scelte chiave
- Il modello non fa mai calcoli. Restituisce ID del listino tramite uno schema di tool forzato, e ogni prezzo lo calcola il codice.
- Un input incerto fallisce in modo sicuro: una radiografia scadente o una lettura poco affidabile restituisce una richiesta di visita invece di un prezzo tirato a indovinare.
- Nessuna dichiarazione di accuratezza senza prove: la model card dice cosa non è ancora stato misurato su un dataset etichettato da dentisti.
- Ogni preventivo è indicativo e richiede una conferma clinica in presenza.