Inspiration

  • Market access analysts spend hours manually researching drug coverage policies across different health plans
  • Medical benefit drug policies are fragmented, inconsistent, and constantly changing across payers
  • No centralized system exists to compare coverage criteria, track policy updates, or answer coverage questions quickly
  • The healthcare industry loses countless hours to manual PDF reading and policy comparison
  • Our vision: eliminate the workflow where an analyst has to visit 10+ payer websites, download different-format PDFs, and mentally normalize everything

What it does

  • Cross-Payer Comparison Engine: Instantly compare coverage for any drug across all major health plans (UHC, Cigna, BCBS NC, EmblemHealth, UPMC) with burden score (0-100) that quantifies access difficulty
  • Intelligent Policy Differ: Semantic diff engine that separates meaningful clinical changes (new step therapy requirement) from cosmetic edits (updated effective date, reformatted header) when policies update
  • Automated Alerts System: Real-time policy change detection that surfaces exactly what changed - not "something changed" but the specific lines that matter
  • RAG-Powered AI Assistant with Voice Chat: Ask questions in plain English like "Does Cigna cover Rituxan for lupus?" and get cited, traceable answers grounded in real policy data - powered by Claude Sonnet 4.6 with voice-driven chat via ElevenLabs for hands-free queries during calls
  • Coverage Strategy Planner: Input a drug, condition, budget, and preferences (avoid PA, avoid step therapy, prefer fast approval) to get payers ranked by access burden with scoring breakdown - model PA avoidance and step therapy scenarios
  • Coverage Search: Search by brand or generic name to get a normalized table across all payers instantly, with a burden score that puts a number on how hard a drug is to get covered

How we built it

  • Frontend: Next.js 14 App Router with React, TypeScript, and Tailwind CSS for modern, responsive UI
  • Backend: Python FastAPI for high-performance API serving with endpoints for search, comparison, and RAG chat
  • Database: PostgreSQL with Supabase for structured policy storage and normalized data across six tables (drugs, payers, policies, coverage_rules, drug_category_positions, policy_versions)
  • AI/NLP Layer: Claude Sonnet 4.6 (claude-sonnet-4-6) for RAG assistant with retrieval from * coverage_rules - can only answer from what's in the database (no hallucination, every answer cites source row)
  • PDF Extraction Pipeline: Apache PDFMiner for raw text extraction + Gemini 1.5 Flash for one-shot structured extraction (indications, coverage status, PA criteria, step therapy agents, ICD-10 codes, dosing limits, site-of-care restrictions in single API call)
  • Change Detection: Semantic differ integrated with GitHub Actions for automated policy monitoring - every ingest diffs against previous version to power alerts system
  • Voice Interface: ElevenLabs TTS + Scribe v2 for speech-to-text with Web Speech API handling mic input for hands-free queries
  • Search Optimization: Two-pass resolver (brand name first, generic fallback) backed by openFDA and cached in memory for instant results
  • Data Normalization: Standardized schema extracting 10+ critical fields per policy (drug names, HCPCS codes, PA criteria, step therapy, site-of-care restrictions, dosing limits, effective dates)
  • Burden Score Algorithm: Formula weights each restriction by clinical impact: (1/N) × Σ [40×denied + 20×PA_required + 15×step_therapy + 10×site_of_care_restriction]

Challenges we ran into

  • Gemini type validation issues returning empty strings instead of booleans, breaking Pydantic v2
  • Brand vs generic name search resolution requiring a two-pass resolver with openFDA caching
  • Schema design iteration (five versions of pa_criteria JSONB structure to handle wildly varying PA criteria)
  • RAG grounding as a product decision to prevent confident wrong answers in healthcare contexts
  • PDF parsing complexity across different payer formats (individual PDFs, consolidated documents, web portals)

Accomplishments that we're proud of

  • End-to-end workflow that uploads unknown PDFs and makes them queryable within seconds
  • Burden score algorithm that gives analysts a single trackable number instead of pile of PDFs
  • Semantic difference that correctly ignores formatting changes and flags clinical updates
  • RAG assistant that has never hallucinated because it structurally can't (retrieval-grounded only)
  • Voice querying that actually works during calls
  • Multi-payer normalization from 5 major payers with completely different formats

What we learned

  • The extraction problem is mostly solved with modern LLMs and good prompting
  • Schema design is where real complexity lives, not the extraction layer
  • LLM output validation is not optional (defensive parsing at every field required)
  • In high-stakes domains, constraining what the model can say is a feature
  • Getting the data model wrong early costs massive time later

What's next for Coverage360

  • Automated monitoring in production with scheduled re-ingestion of payer URLs
  • Part D formularies and commercial drug benefit tiers expansion
  • EHR integration to surface PA criteria inside prescriber workflow
  • Scale indexed payers to full commercial + Medicare Advantage coverage
  • Exportable gap reports formatted for payer contracting discussions
  • Mobile applications for on-the-go coverage lookups
  • API platform for integration with pharmacy benefit managers
  • Predictive analytics and policy change trend analysis

Built With

  • anthropic-claude
  • anthropic-claude-sonnet-4.6-(rag-chat)-voice:-elevenlabs-(text-to-speech
  • auth0
  • css
  • elevenlabs
  • fastapi
  • glassmorphism
  • google-gemini
  • httpx
  • javascript
  • next.js
  • openfda
  • openfda-api-(drug-name-resolution)-hosting:-vercel-(frontend)
  • postgresql
  • pydantic-v2-database:-supabase-(postgresql-+-row-level-security)-ai/ml:-google-gemini-1.5-flash-(pdf-extraction)
  • python
  • python-docx-http:-httpx-(async)
  • rag
  • railway-/-local-(backend)-design:-custom-glassmorphism-design-system
  • sound-effects)
  • speech-to-text-/-scribe-v2
  • sql
  • sql-frameworks:-next.js-14-(app-router)
  • supabase
  • vercel
  • web-speech-api
  • web-speech-api-auth:-auth0-pdf-parsing:-apache-pdfminer
Share this project:

Updates