import json from sqlalchemy.orm import Session from . import models, schemas import uuid from datetime import datetime def get_user(db: Session, user_id: str): return db.query(models.User).filter(models.User.id == user_id).first() def get_users(db: Session): return db.query(models.User).all() def create_user(db: Session, user: schemas.UserAccount): db_user = models.User( id=user.id, name=user.name, department=user.department, medical_allowance=user.medical_allowance ) db.add(db_user) db.commit() db.refresh(db_user) return db_user def get_claims(db: Session): return db.query(models.Claim).all() def create_claim(db: Session, claim: schemas.ClaimSubmission, user_id: str): # Calculate amount claimed (payout) user = get_user(db, user_id) if not user: return None spent_amount = claim.amount_spent remaining = user.medical_allowance amount_claimed = min(spent_amount, remaining) # Update User Balance user.medical_allowance -= amount_claimed # Create DB model db_claim = models.Claim( id=str(uuid.uuid4()), timestamp=datetime.now().isoformat(), user_id=user_id, amount_spent=spent_amount, amount_claimed=amount_claimed, provider_name=claim.provider_name, visit_date=claim.visit_date, treatment_type=claim.treatment_type, cost_center=claim.cost_center, declaration_signed=claim.declaration_signed, extraction_data=json.dumps(claim.extraction_data.model_dump()) if claim.extraction_data else None ) db.add(db_claim) db.commit() db.refresh(db_claim) return db_claim def delete_claim(db: Session, claim_id: str): db_claim = db.query(models.Claim).filter(models.Claim.id == claim_id).first() if db_claim: # Refund user allowance user = get_user(db, db_claim.user_id) if user: user.medical_allowance += db_claim.amount_claimed db.delete(db_claim) db.commit() return True return False def to_pydantic_claim(db_claim: models.Claim) -> schemas.ClaimRecord: ext_data = None if db_claim.extraction_data: try: ext_data = schemas.ExtractionResponse(**json.loads(db_claim.extraction_data)) except: pass return schemas.ClaimRecord( id=db_claim.id, timestamp=db_claim.timestamp, submitted_by=db_claim.owner.name if db_claim.owner else "Unknown", department=db_claim.owner.department if db_claim.owner else "Unknown", amount_spent=db_claim.amount_spent, amount_claimed=db_claim.amount_claimed, provider_name=db_claim.provider_name, visit_date=db_claim.visit_date, treatment_type=db_claim.treatment_type, cost_center=db_claim.cost_center, declaration_signed=db_claim.declaration_signed, extraction_data=ext_data ) def seed_demo_user(db: Session): user_id = "demo-user-123" db_user = get_user(db, user_id) if not db_user: db_user = models.User( id=user_id, name="Demo User", department="Operations", medical_allowance=5000.0 ) db.add(db_user) db.commit() db.refresh(db_user) return db_user