{"service":"Lab Report Processing API - MEDICAL GRADE","version":"1.0.0","features":["PDF and image text extraction using Vercel AI Vision","PII removal and protection","Lab name and test type extraction","Automatic tag generation based on severity","Vector embeddings for semantic search","Qdrant vector database storage with UPSERT mode","DUPLICATE PREVENTION: medical_record_id as unique identifier","UPDATE existing records instead of creating duplicates","Vercel AI integration","Rollbar exception logging for ALL errors including request status","No local OCR dependencies - uses cloud vision models","MEDICAL SAFETY: ALWAYS stores/updates data even if extraction fails","Automatic manual review flagging for failed extractions","Patient summary generation from historical reports","PROFESSIONAL DETAILED SUMMARY for each individual lab report"],"endpoints":{"POST /api/lab_reports":"Process a lab report (UPSERT using medical_record_id) - Returns DETAILED professional summary","GET /api/lab_reports":"⚠️ This endpoint is PROTECTED and requires API key","POST /api/lab_reports/search":"Search lab reports - REQUIRES API KEY","GET /api/lab_reports/health":"Health check - NO API KEY REQUIRED (public)","POST /api/lab_reports/summary":"Generate patient summary from last N reports - REQUIRES API KEY"},"authentication":{"required":true,"method":"X-API-Key header or Authorization: Bearer <key>","protected_endpoints":["GET /api/lab_reports","POST /api/lab_reports","POST /api/lab_reports/search","POST /api/lab_reports/summary"],"public_endpoints":["GET /","GET /api/lab_reports/health","GET /docs","GET /openapi.json","GET /redoc"],"status":"ENABLED"},"summary_formats":{"detailed":"Comprehensive clinical analysis with trends (AI-generated professional report)","clinical":"Concise summary for healthcare providers (AI-generated)","patient_friendly":"Simple language for patients (AI-generated)","brief":"Basic statistical summary without AI"},"required_fields":{"POST /api/lab_reports":["patient_id (string, required)","user_id (string, required)","medical_record_id (string, required - used as UNIQUE identifier)"]},"qdrant_schema":{"indexed_fields":["user_id (uuid)","patient_id (uuid)","medical_record_id (uuid - UNIQUE KEY)","document_type (keyword)","test_type (keyword)","created_at (datetime)","appointment_id (uuid)","member_id (keyword)"],"collection_name":"lab-reports","vector_name":"document","vector_size":1536,"distance":"Euclid","point_id_strategy":"medical_record_id_based (UUID auto-generated)","duplicate_prevention":"ENABLED - medical_record_id as unique key","update_mode":"UPSERT - updates existing or inserts new"},"text_extraction":{"method":"vercel_ai_vision","models":["anthropic/claude-3-haiku","anthropic/claude-3-sonnet"],"supports":["PDF","PNG","JPEG","GIF","TIFF","BMP","WEBP"]},"medical_safety":{"data_storage_guarantee":"ALWAYS_STORE_OR_UPDATE","duplicate_prevention":"ENABLED - medical_record_id based","manual_review_flagging":"AUTOMATIC","extraction_failure_handling":"GRACEFUL_DEGRADATION","update_tracking":"update_count field tracks number of updates"},"monitoring":{"rollbar_logging":true,"request_status_logging":"ENABLED - INFO level (non-blocking)","vercel_logs":"ENABLED","debug_level":"DETAILED"}}