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
Log in or sign up for Devpost to join the conversation.