SnapPDFSnapPDF
← back to showcase
EXAMPLE BUILD — illustrative architecture, not a published case study

SomaCare Clinic Network

Paperless patient intake across 25 clinic sites.

Healthcare · Regional clinic chain · 400 staff

The build

Digitized paper intake across 25 clinic sites. Chart-ready time dropped from 24-48h to <5min. One BAA replaced four.

Stack

  • · Django
  • · Postgres
  • · FHIR
  • · SnapPDF Business (with BAA)

Architecture

your app/fill-formSnapPDF/signSnapPDF/protectSnapPDF/ocrSnapPDFdelivery

Ops used: /fill-form → /sign → /protect → /ocr

How they use SnapPDF

SomaCare runs 25 primary-care clinics across the Midwest. Intake was paper: every new patient filled out forms on a clipboard; after the visit, a clerk scanned them and typed data into the EHR 24-48 hours later. 50,000 visits/year means ~50,000 paper forms/year and 0.5 FTE of transcription.

Digital intake had been blocked for two years by compliance: every vendor they'd evaluated required its own BAA, and the compliance officer capped vendor BAAs at "what we can review in a year" — which was three. One for the form-building SaaS, one for the e-signature tool, one for the OCR service. By the time they got to the PDF assembly vendor, the year was up.

SnapPDF consolidated form-fill + signature + OCR + protect into one BAA. The migration freed two other vendor BAAs for future work. New flow: patient fills form on tablet → SnapPDF fill-form injects the values into the official intake template → SnapPDF sign captures the patient's tablet-drawn signature → SnapPDF protect AES-256s the result → Django attaches it to the FHIR DocumentReference on the patient chart.

For outside records (referrals, imaging summaries from other providers) that arrive as scans, SnapPDF ocr makes them searchable before they hit the chart.

Measured: chart-ready time fell from 24-48h to <5min. 0.5 FTE of transcription work is now 0.05 FTE of exception handling. The "missing form" incident rate fell from ~250/year to zero (paper got lost; PDFs don't). One-time saving on legal review of redundant BAAs: $8,000. Recurring saving: $26k/year in transcription labor.

Outcomes

Chart-ready time
24-48h → <5 min
Transcription FTE
0.5 → 0.05
Lost forms/year
~250 → 0
BAAs required
4 → 1

Integration pattern

A simplified excerpt showing the core SnapPDF calls.

# somacare/intake/views.py
from snappdf import SnapPDF
from .fhir import attach_document

snap = SnapPDF(api_key=settings.SNAPPDF_KEY)

def finalize_intake(request, patient_id):
    patient = Patient.objects.get(id=patient_id)
    form_data = request.POST

    filled = snap.pdf.fill_form(
        file=INTAKE_TEMPLATE,
        values={
            "patient_name": patient.legal_name,
            "dob": patient.dob.isoformat(),
            "mrn": patient.mrn,
            "insurance_plan": patient.insurance.plan_name,
            "allergies": ", ".join(patient.allergies),
            "chief_complaint": form_data["chief_complaint"],
        },
        flatten=False,
    )

    signed = snap.pdf.sign(
        file=filled.pdf,
        mode="image",
        image_png=request.FILES["signature"].read(),
        field={"page": 3, "x": 100, "y": 120, "width": 200, "height": 50},
        timestamp=True,
    )

    locked = snap.pdf.protect(
        file=signed.pdf,
        owner_password=phi_vault.key_for(patient.mrn),
        encryption="aes-256",
    )

    attach_document(patient, locked.pdf, doc_type="intake")
    AuditEvent.objects.create(
        actor=request.user, action="intake.signed", subject_id=patient.id
    )

Start building like this

Free tier gives you 100 ops/month — enough to prototype any of the flows on this page. No card required.

Other builds