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
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
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.