Spaces:
Sleeping
Sleeping
| import logging | |
| from fastapi import FastAPI | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from contextlib import asynccontextmanager | |
| from backend.database.database import engine, Base, SessionLocal | |
| from backend.api.claims_router import router as claims_router | |
| from backend.api.claims_router import seed_members | |
| # Configure logging | |
| logging.basicConfig( | |
| level=logging.INFO, | |
| format="%(asctime)s - %(name)s - %(levelname)s - %(message)s" | |
| ) | |
| logger = logging.getLogger(__name__) | |
| async def lifespan(app: FastAPI): | |
| # Startup actions | |
| logger.info("Initializing database schema...") | |
| Base.metadata.create_all(bind=engine) | |
| # Auto-seed members | |
| logger.info("Auto-seeding members...") | |
| db = SessionLocal() | |
| try: | |
| seed_members(db) | |
| except Exception as e: | |
| logger.error(f"Failed to auto-seed members: {str(e)}") | |
| finally: | |
| db.close() | |
| yield | |
| # Shutdown actions | |
| logger.info("Shutting down application...") | |
| app = FastAPI( | |
| title="Plum OPD Claim Adjudication Engine", | |
| description="Automated claim reviews, structured document extraction, and medical necessity reasoning using Gemini 2.5 Flash.", | |
| version="1.0.0", | |
| lifespan=lifespan | |
| ) | |
| # Enable CORS for frontend integration | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], # For production, specify Streamlit origin | |
| allow_credentials=True, | |
| allow_headers=["*"], | |
| allow_methods=["*"] | |
| ) | |
| # Register API router | |
| app.include_router(claims_router) | |
| def health_check(): | |
| return {"status": "healthy", "service": "opd-adjudication-backend"} | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run("backend.main:app", host="127.0.0.1", port=8000, reload=True) | |