| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109 |
- 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
|