Inspiration

What it does

How we built itTagline

Turn prescription faxes into structured, auditable pharmacy orders while automatically routing uncertainty and rejecting unsupported documents. Short Description Fax to Fill uses vision models, independent verification, OCR evidence, and a deterministic release policy to convert prescription images into structured order-entry records. Clear, supported orders can move forward automatically, while ambiguous fields, conflicting readings, non-prescriptions, and unsupported documents are blocked with explicit reasons. Inspiration Pharmacies still receive prescriptions through fax, where blurry scans and handwriting make manual data entry slow and error-prone. Most OCR systems return text without explaining what they could not read. We wanted to build a workflow that reduces routine entry work without silently guessing when the source is unclear. What It Does A user uploads a JPEG or PNG prescription image. Fax to Fill:

  1. Validates and hashes the original document.
  2. Sends it to two vision-model calls through Nicrron.
  3. Keeps the second reading blind from the first.
  4. Extracts ten required prescription fields with source evidence.
  5. Compares the readings and applies deterministic validation rules.
  6. Returns one of three outcomes:
    • Automatically released: every configured check passes.
    • Exception: a value is missing, ambiguous, conflicting, or unsupported.
    • Rejected: the document is not a prescription or contains an unsupported order structure.
  7. Displays the source, extracted fields, evidence, reason codes, model versions, and decision history in a React interface. Release means accepting the extraction for downstream order entry. It does not replace legally required dispensing or clinical review. How We Built It
  8. Frontend: React, TypeScript, and Vite
  9. Backend: Python, Pydantic, and a loopback HTTP API
  10. Vision extraction: GPT-4.1 Mini and GPT-4.1 through Nicrron
  11. OCR and preprocessing: PaddleOCR and OpenCV
  12. Decision layer: Versioned deterministic release policy
  13. Observability: PHI-redacted PRISM traces containing operational metadata and decision outcomes
  14. Evaluation: ClinOCR document regression and a separate RxHandBD handwriting benchmark The backend owns every release decision. Model agreement and self-reported confidence are treated as signals, never proof that a prescription is correct. Challenges The hardest part was separating a convincing model answer from an order that is safe to accept. Two models can agree and still be wrong. We therefore bound every reading to the original image, preserve evidence, reject incomplete responses, and require every independent check to pass. Evaluation was another challenge. Our available document dataset contains synthetic non-prescriptions rather than labeled positive prescriptions. We kept those limitations visible instead of presenting OCR accuracy as prescription-release accuracy. Accomplishments
  15. Built a working image-upload-to-decision pipeline.
  16. Implemented blind independent verification.
  17. Added fail-closed handling for incomplete, conflicting, stale, and malformed responses.
  18. Built an idempotent local API with private receipts and bounded processing.
  19. Created clear, exception, and rejection workflows in one interface.
  20. Added PHI-redacted PRISM tracing without sending images, extracted values, or patient identifiers.
  21. Completed 78 Python tests, six frontend adapter tests, production build, and lint checks.
  22. Ran a ten-document regression that produced eight rejections, two exceptions, and zero inappropriate automatic releases. What We Learned Accuracy alone is the wrong metric for straight-through prescription entry. The important question is how many orders can be released at an acceptable observed error rate. That requires independently labeled prescriptions, calibration data, a locked test set, and reporting coverage alongside critical false accepts. We also found that image enhancement is not automatically beneficial. On our initial document set, OpenCV enhancement worsened aggregate PaddleOCR performance, so the original image remains the default evidence source. What’s Next
  23. Generate real, image-bound OCR, image-quality, document-support, and distribution checks.
  24. Add backend exception correction, revisions, and immutable audit events.
  25. Evaluate on independently labeled positive prescriptions.
  26. Calibrate automatic-release thresholds and report whole-order accuracy, critical false accepts, straight-through coverage, exception recall, and selective risk.
  27. Complete PRISM guardrail, evaluator, and grounded knowledge-base demonstrations.

Challenges we ran into

Accomplishments that we're proud of

What we learned

What's next for Get your fax checked

Built With

Share this project:

Updates

Submission history